[Matroska-devel] [Cellar] Colour Format proposal

Frank Galligan via Matroska-devel matroska-devel at lists.matroska.org
Thu Feb 4 22:00:30 CET 2016


On Thu, Feb 4, 2016 at 12:51 PM, Frank Galligan <frankgalligan at gmail.com>
wrote:

>
>
> 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
>>
>
>

I'll look into referencing an ITU document.

siting. Yes :)

[55][AA], Yes I know I currently changed all the [55][Ax] to [55][Bx].

Range Description: How about:

Clipping of the color ranges. (0: Unspecified, 1: Broadcast range,

             2: Full range (no clipping), 3: Defined by
             Matrix/TransferFunction)

2086 Mastering metadata refers to the display the content was mastered on.
So these values should not change scene to scene.


How about these for the values with ranges. I didn't add a .0 for values
which should be close to the integer value.

Element Name: PrimaryRChromaticityX

Level:        6

ID:           [55][D1]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 1

Default:      -

Type:         f

Description:  Red X chromaticity coordinate as defined by CIE 1931.


Element Name: PrimaryRChromaticityY

Level:        6

ID:           [55][D2]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 1

Default:      -

Type:         f

Description:  Red Y chromaticity coordinate as defined by CIE 1931.


Element Name: PrimaryGChromaticityX

Level:        6

ID:           [55][D3]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 1

Default:      -

f

Description:  Green X chromaticity coordinate as defined by CIE 1931.


Element Name: PrimaryGChromaticityY

Level:        6

ID:           [55][D4]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 1

Default:      -

Type:         f

Description:  Green Y chromaticity coordinate as defined by CIE 1931.


Element Name: PrimaryBChromaticityX

Level:        6

ID:           [55][D5]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 1

Default:      -

f

Description:  Blue X chromaticity coordinate as defined by CIE 1931.


Element Name: PrimaryBChromaticityY

Level:        6

ID:           [55][D6]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 1

Default:      -

Type:         f

Description:  Blue Y chromaticity coordinate as defined by CIE 1931.


Element Name: WhitePointChromaticityX

Level:        6

ID:           [55][D7]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 1

Default:      -

Type:         f

Description:  White point X chromaticity coordinate as defined by CIE 1931.


Element Name: WhitePointChromaticityY

Level:        6

ID:           [55][D8]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 1

Default:      -

Type:         f

Description:  White point Y chromaticity coordinate as defined by CIE 1931.


Element Name: LuminanceMax

Level:        6

ID:           [55][D9]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 9999.99

Default:      -

Type:         f

Description:  Maximum luminance. Shall be represented in candelas per square

             meter (cd/m²).


Element Name: LuminanceMin

Level:        6

ID:           [55][DA]

Mandatory:    -

Multiple:     -

Range:        0 <= f <= 999.9999

Default:      -

Type:         f

Description:  Minimum luminance. Shall be represented in candelas per square

             meter (cd/m²).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.matroska.org/pipermail/matroska-devel/attachments/20160204/c9685b7a/attachment-0001.html>


More information about the Matroska-devel mailing list