[Matroska-devel] [Cellar] Colour Format proposal

Frank Galligan via Matroska-devel matroska-devel at lists.matroska.org
Thu Feb 4 21:51:51 CET 2016


On Wed, Feb 3, 2016 at 1:30 AM, Steve Lhomme <slhomme at matroska.org> wrote:

> 2016-02-03 7:25 GMT+01:00 Dave Rice <dave at dericed.com>:
> >
> > On Jan 22, 2016, at 5:54 PM, Frank Galligan via Matroska-devel
> > <matroska-devel at lists.matroska.org> wrote:
> >
> > On Thu, Jan 14, 2016 at 4:04 AM, Steve Lhomme <slhomme at matroska.org>
> wrote:
> >>
> >> 2016-01-06 23:30 GMT+01:00 Frank Galligan <frankgalligan at gmail.com>:
> >> >
> >> >
> >> > On Tue, Jan 5, 2016 at 1:58 PM, Jerome Martinez <jerome at mediaarea.net
> >
> >> > wrote:
> >> >>
> >> >> Thanks for your detailed proposal.
> >> >> It is a lot of items, I am not expert in all domains but I have some
> >> >> comments:
> >> >
> >> > Neither am I, but I figured we might as well start from a proposal and
> >> > iterate from there.
> >> >
> >> >>
> >> >> Name: MatrixCoefficients (or Matrix. You don't use "Colour" with
> >> >> "Primaries" element, so I would not use it here too)
> >> >
> >> >  Sounds good to me.
> >> >
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> Element Name: BitsPerChannel
> >> >> Level:        5
> >> >> ID:           [55][A2]
> >> >> Mandatory:    ma
> >> >> Multiple:     -
> >> >> Default:      8
> >> >> Type:         u
> >> >> Description:  Number of bits per channel. This number may be less for
> >> >> specific
> >> >>               channels depending on the ColourFormat and
> >> >> ChromaSubsampling.
> >> >>
> >> >>
> >> >>
> >> >> BitsPerChannel is misleading, used to be the technical count of bits.
> >> >> I propose QuantizationBits or ValidBitsPerChannel
> >> >> Not mandatory, not default (this value is often unknown)
> >> >
> >> > When authoring the video, I'm not sure why the software would not know
> >> > the
> >> > bits per channel. Can you describe a use case where the this is
> unknown?
> >>
> >> When remuxing an older file. Either from Matroska source or AVI or
> other.
> >>
> >> Now if elements are mandatory with a default value to "unknown" it's
> fine.
> >>
> >> > I really think we should make this mandatory and have authoring
> software
> >> > populate the element (or default) vs software thinking this was
> >> > non-mandatory and not populating this element because the developer
> >> > didn't
> >> > think it was needed.
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> Element Name: ChromaSubsampling
> >> >> Level:        5
> >> >> ID:           [55][A3]
> >> >> Mandatory:    ma
> >> >> Multiple:     -
> >> >> Default:      0
> >> >> Type:         u
> >> >> Description:  (0: 4:2:0, 2: 4:2:2, 4: 4:4:4)
> >> >>
> >> >>
> >> >> FFV1, for example, permits "weird" chroma values, more possibilities.
> >> >> And the following chroma values were seen at least once in some
> specs:
> >> >> 4:4:4
> >> >> 4:2:2
> >> >> 4:2:1
> >> >> 4:1:1
> >> >> 4:2:0
> >> >> 4:1:0
> >> >> 3:1:1
> >> >>
> >> >> So having a list is maybe not the solution.
> >> >> I like the way it is done in FFV1, except the power of 2 (so 3 can
> not
> >> >> be
> >> >> expressed).
> >> >> I propose to find a way for describing Chroma subsampling (e.g.
> >> >> h_chroma_subsample and v_chroma_subsample; a ratio per plane with any
> >> >> number
> >> >> of plane, think to alpha channel with a subsampling).
> >> >
> >> > I'm fine with coming up with a more extensible solution (Micheal asked
> >> > for
> >> > that as well).
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> Element Name: ColourRange
> >> >> Level:        5
> >> >> ID:           [55][A4]
> >> >> Mandatory:    ma
> >> >> Multiple:     -
> >> >> Default:      1
> >> >> Type:         u
> >> >> Description:  (0: Unspecified, 1: Defined by
> >> >> ColourMatrix/TransferFunction,
> >> >>               2: Full range)
> >> >>
> >> >>
> >> >> I don't understand the 1 value.
> >> >> in at least AVC and HEVC, range is orthogonal to
> >> >> ColourMatrix/TransferFunction.
> >> >> I propose 0: unspecified 1: Broadcast range 1: Full range
> >> >> and Default:0
> >> >
> >> > I thought someone mentioned to me before that the range could change
> >> > based
> >> > on the matrix and transfer function. I'm fine with your proposal.
> >> >
> >> >>
> >> >>
> >> >>
> >> >> I got requests for having information about "Capture Gamma Equation"
> >> >> (or
> >> >> "Tone Curve"), e.g. "same as transfer characteristic", Scene Linear,
> >> >> S-Log,
> >> >> Cine-Log, Log-C...
> >> >> I am not an expert of this domain, but looks like it is sometimes
> >> >> important.
> >> >
> >> > Someone who knows more about  this should propose something to this
> list
> >> > to
> >> > be included.
> >> >
> >> >>
> >> >> there are also other colour ideas with e.g. EBU Tech 3349.
> >> >
> >> > If this is important to people, then we could add this as well.
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> I can post a link to a formatted document if that would be easier.
> For
> >> >> Matrix, Range, and Primaries, I'm pretty much using values that map
> >> >> directly
> >> >> to values defined in FFmpeg.
> >> >>
> >> >>
> >> >> I don't like the idea to use the source code of a piece of software
> for
> >> >> lists. Too much subjective, may have historical flaws.
> >> >> Lists from FFmpeg are nearly same as the ones in H.26x, I think I
> >> >> prefer
> >> >> we base our list on their list (I don't think there are copyright
> >> >> issues
> >> >> with such list) directly.
> >> >
> >> > I don't know the H.26x list. I started with my own, but then switched
> to
> >> > FFmpeg as they already had an extensive list and assumed they have
> seen
> >> > a
> >> > lot of the video already.
> >> >
> >> > If deciding between H.26x and FFmpeg, my guess is that FFmpeg would be
> >> > better as it handles a lot more video than H.26x.
> >> >
> >> >>
> >> >> Or that we have a prefix with the origin of the list (e.g. ARIB
> >> >> STD-B67,
> >> >> from Japan, is not in ITU/ISO list, a 18 will be used in the future
> for
> >> >> something in ITU/ISO)
> >> >
> >> > Yeah HLG is relatively new, but has been requested by a few people.
> >> >
> >> >
> >> >
> >> > _______________________________________________
> >> > Cellar mailing list
> >> > Cellar at ietf.org
> >> > https://www.ietf.org/mailman/listinfo/cellar
> >> >
> >>
> >>
> >>
> >> --
> >> Steve Lhomme
> >> Matroska association Chairman
> >
> >
> > So I updated my original proposal based on comments from this list.
> >
> > Changes:
> > - Added more common ChromaSubsampling values
> > - ColourMatrix renamed to Matrix
> > - Added a default value of 0 to BitsPerChannel to signify "unspecified".
> > - Added "decoded" to BitsPerChannel note.
> > - Added ChromaSittingHorz and ChromaSittingVert elements.
> >
> >
> > In this case, I think the intended term is ‘siting’ rather than
> ‘sitting’.
> >
> > - Added Broadcast range to Range element.
> > - Removed mandatory flag for elements with unspecified defaults.
> > - Updated element IDs.
> >
> >
> > - I kept "Defined by Matrix/TransferFunction" in Range element because
> there
> > are ranges that fall outside of Broadcast and Full depending on the TF.
> E.g.
> > xvYCC (61966-2-4)
> > - Does someone want to propose something better for ChromaSubsampling?
> > - I know some people expressed that they don't think starting from FFmpeg
> > for the TransferFunction is a good idea as they might have got something
> > wrong or too subjective. But I just used it as a starting point for a
> list.
> > I can reorder the list however we want. I also don't think following
> another
> > list, so we will be compatible with future additions, will give us what
> we
> > want as that list most likely will be incomplete with something that is
> > defined only in a different list. So should we just start with a list,
> > re-order it (so we are not explicitly following it), then add what is
> > currently missing? Then in the future if someone needs to add something
> to
> > the list it can be brought up here?
> >
> >
> > I think Jerome’s main point was that FFmpeg’s list themselves were based
> on
> > something else, so we should follow the source for a vocabulary
> authority.
> > For instance, see ITU Recommendation H.264 at
> > https://www.itu.int/rec/T-REC-H.264-201402-I/en, article E 39577. Pages
> 387
> > (pdf page 409) gives a table of color primaries, page 388 has transfer
> > characteristics, and 392 has Matrix coefficients. The information in the
> ITU
> > docs provides a lot more context than FFmpeg source code.
> >
> > This is what I currently have:
> >
> > The parent element would be Video [E0].
> >
> >
> > Element Name: Colour
> > Level:        4
> > ID:           [55][A0]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         m
> > Description:  Settings describing the colour format.
> >
> >
> > Element Name: Matrix
> > Level:        5
> > ID:           [55][A1]
> > Mandatory:    -
> > Multiple:     -
> > Default:      2
> > Type:         u
> > Description:  Colour Matrix of the video. (0: IEC 61966-2-1 (sRGB), 1:
> > BT709,
> >              2: Unspecified, 3: Reserved, 4: FCC, 5: BT470BG, 6: SMPTE
> 170M,
> >              7: SMPTE 240M, 8: YCOCG, 9: BT2020 Non-constant Luminance,
> >              10: BT2020 Constant Luminance)
> >
> >
> > I suggest referencing a specific ITU document for these values and their
> > meaning.
> >
> > Element Name: BitsPerChannel
> > Level:        5
> > ID:           [55][A2]
> > Mandatory:    -
> > Multiple:     -
> > Default:      0
> > Type:         u
> > Description:  Number of decoded bits per channel. This number may be less
> > for
> >              specific channels depending on the Matrix and
> > ChromaSubsampling. A
> >              value of 0 is unspecified.
> >
> >
> > Element Name: ChromaSubsampling
> > Level:        5
> > ID:           [55][A3]
> > Mandatory:    -
> > Multiple:     -
> > Default:      0
> > Type:         u
> > Description:  (0: Unspecified, 1: 4:4:4, 2: 4:4:0, 3: 4:2:2, 4: 4:2:1, 5:
> > 4:2:0,
> >              6: 4:1:1, 7: 4:1:0, 8: 3:1:1)
> >
> > Element Name: ChromaSittingHorz
> >
> >
> > Siting
> >
> > Level:        5
> > ID:           [55][A4]
> > Mandatory:    -
> > Multiple:     -
> > Default:      0
> > Type:         u
> > Description:  How Chroma is subsampled horizontally. (0: Unspecified, 1:
> > Left
> >              collocated , 2: Half)
> >
> > Element Name: ChromaSittingVert
> >
> >
> > Siting
> >
> > Level:        5
> > ID:           [55][A5]
> > Mandatory:    -
> > Multiple:     -
> > Default:      0
> > Type:         u
> > Description:  How Chroma is subsampled vertically. (0: Unspecified, 1:
> Top
> >              collocated , 2: Half)
> >
> >
> > Element Name: Range
> > Level:        5
> > ID:           [55][A6]
> > Mandatory:    -
> > Multiple:     -
> > Default:      0
> > Type:         u
> > Description:  (0: Unspecified, 1: Broadcast range, 2: Full range, 3:
> Defined
> > by
> >              Matrix/TransferFunction)
> >
> >
> > I think a description (beyond the list) is needed.
> >
> > Element Name: TransferFunction
> > Level:        5
> > ID:           [55][A7]
> > Mandatory:    -
> > Multiple:     -
> > Default:      2
> > Type:         u
> > Description:  Transfer Function. (0: Reserved, 1: ITU-R BT.709, 2:
> > Unspecified,
> >              4: Gamma 2.2 curve, 5: Gamma 2.8 curve, 6: SMPTE 170M,
> >              7: SMPTE 240M, 8: Linear, 9: Log, 10: Log Sqrt,
> >              11: IEC 61966-2-4, 12: ITU-R BT.1361 Extended Colour Gamut,
> >              13: IEC 61966-2-1, 14: ITU-R BT.2020 10 bit,
> >              15: ITU-R BT.2020 12 bit, 16: SMPTE ST 2084,
> >              17: SMPTE ST 428-1 18: ARIB STD-B67 (HLG))
> >
> >
> > Consider referencing ITU document as an external authority for the
> > vocabulary.
> >
> > Element Name: Primaries
> > Level:        5
> > Mandatory:    -
> > Multiple:     -
> > ID:           [55][A8]
> > Default:      2
> > Description:  (0: Reserved, 1: ITU-R BT.709, 2: Unspecified, 4: ITU-R
> > BT.470M,
> >               5: ITU-R BT.470BG, 6: SMPTE 170M, 7: SMPTE 240M, 8: FILM,
> >               9: ITU-R BT.2020, 10: SMPTE ST 428-1)
> >
> >
> > Consider reference to ITU document. Needs a description besides list.
> >
> > Element Name: MaxCLL
> > Level:        5
> > ID:           [55][A9]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         u
> > Description:  Maximum brightness of a single pixel in candelas per square
> >              meter (cd/m²).
> >
> >
> > Element Name: MaxFALL
> > Level:        5
> > ID:           [55][AA]
> >
> >
> > [55][AA] is already in use as FlagForced.
> >
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         u
> > Description:  Maximum brightness of a single full frame in candelas per
> > square
> >              meter (cd/m²).
> >
> >
> > Element Name: MasteringMetadata
> > Level:        5
> > ID:           [55][D0]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         m
> > Description:  SMPTE 2086 mastering data.
> >
> >
> > I’m not well experienced in MasteringMetadata but wouldn’t this data
> need to
> > change from scene to scene rather than be stored within the Tracks
> element
> > where the same values would apply to all scenes?
> >
> > Element Name: PrimaryRChromaticityX
> > Level:        6
> > ID:           [55][D1]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         f
> > Description:  Valid value is in the range 0 <= f <= 1.
> >
> >
> > The description is actually a range. When we initially drafted
> information
> > on expressing ranges in EBML definitions, I ignored float, see
> >
> https://github.com/Matroska-Org/ebml-specification/blob/master/specification.markdown#expression-of-range
> .
> > I can update this definition to include floats and greater-than-or-equal
> > values. But the description for this and the following elements should be
> > moved to range (suggested formatting as "0-1”). Then these elements need
> > actual descriptions.
>
> Rather "0.0-1.0" then.
>
> > Element Name: PrimaryRChromaticityY
> > Level:        6
> > ID:           [55][D2]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         f
> > Description:  Valid value is in the range 0 <= f <= 1.
> >
> >
> > Element Name: PrimaryGChromaticityX
> > Level:        6
> > ID:           [55][D3]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > f
> > Description:  Valid value is in the range 0 <= f <= 1.
> >
> >
> > Element Name: PrimaryGChromaticityY
> > Level:        6
> > ID:           [55][D4]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         f
> > Description:  Valid value is in the range 0 <= f <= 1.
> >
> >
> > Element Name: PrimaryBChromaticityX
> > Level:        6
> > ID:           [55][D5]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > f
> > Description:  Valid value is in the range 0 <= f <= 1.
> >
> >
> > Element Name: PrimaryBChromaticityY
> > Level:        6
> > ID:           [55][D6]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         f
> > Description:  Valid value is in the range 0 <= f <= 1.
> >
> >
> > Element Name: WhitePointChromaticityX
> > Level:        6
> > ID:           [55][D7]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         f
> > Description:  Valid value is in the range 0 <= f <= 1.
> >
> >
> > Element Name: WhitePointChromaticityY
> > Level:        6
> > ID:           [55][D8]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         f
> > Description:  Valid value is in the range 0 <= f <= 1.
> >
> >
> > Element Name: LuminanceMax
> > Level:        6
> > ID:           [55][D9]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         f
> > Description:  Maximum luminance. Shall be represented in candelas per
> square
> >              meter (cd/m²). Valid value is in the range 0 <= f <= 9999.99
> >
> >
> > Add a Range value and split the Description and Range.
> >
> > Element Name: LuminanceMin
> > Level:        6
> > ID:           [55][DA]
> > Mandatory:    -
> > Multiple:     -
> > Default:      -
> > Type:         f
> > Description:  Minimum luminance. Shall be represented in candelas per
> square
> >              meter (cd/m²). Valid value is in the range 0 <= f <=
> 999.9999
> >
> >
> > Add a Range value and split the Description and Range.
> >
> > Best Regards,
> > Dave Rice
> >
> >
> > _______________________________________________
> > Cellar mailing list
> > Cellar at ietf.org
> > https://www.ietf.org/mailman/listinfo/cellar
> >
>
>
>
> --
> Steve Lhomme
> Matroska association Chairman
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.matroska.org/pipermail/matroska-devel/attachments/20160204/990845e6/attachment-0001.html>


More information about the Matroska-devel mailing list