Track updates to the proposed Matroska Colour spec.
https://mailarchive.ietf.org/arch/msg/cellar/cCjxCohD-2xM93ijoFVaYYMLFas Changes: - ChromaSubsampling replaced by ChromaSubsamplingHorz, and ChromaSubsamplingVert. - CbSubsamplingHorz and CbSubsamplingVert added. Change-Id: I0848f9f41b3162afb5485b82704620d9e03f9b5e
This commit is contained in:
34
mkvmuxer.cpp
34
mkvmuxer.cpp
@@ -1011,8 +1011,23 @@ bool Colour::Write(IMkvWriter* writer) const {
|
|||||||
!WriteEbmlElement(writer, kMkvBitsPerChannel, bits_per_channel)) {
|
!WriteEbmlElement(writer, kMkvBitsPerChannel, bits_per_channel)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (chroma_subsampling != kUnspecifiedColourValue &&
|
if (chroma_subsampling_horz != kUnspecifiedColourValue &&
|
||||||
!WriteEbmlElement(writer, kMkvChromaSubsampling, chroma_subsampling)) {
|
!WriteEbmlElement(writer, kMkvChromaSubsamplingHorz,
|
||||||
|
chroma_subsampling_horz)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (chroma_subsampling_vert != kUnspecifiedColourValue &&
|
||||||
|
!WriteEbmlElement(writer, kMkvChromaSubsamplingVert,
|
||||||
|
chroma_subsampling_vert)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cb_subsampling_horz != kUnspecifiedColourValue &&
|
||||||
|
!WriteEbmlElement(writer, kMkvCbSubsamplingHorz, cb_subsampling_horz)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (cb_subsampling_vert != kUnspecifiedColourValue &&
|
||||||
|
!WriteEbmlElement(writer, kMkvCbSubsamplingVert, cb_subsampling_vert)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (chroma_siting_horz != kUnspecifiedColourValue &&
|
if (chroma_siting_horz != kUnspecifiedColourValue &&
|
||||||
@@ -1076,8 +1091,14 @@ uint64 Colour::PayloadSize() const {
|
|||||||
size += EbmlElementSize(kMkvMatrix, matrix);
|
size += EbmlElementSize(kMkvMatrix, matrix);
|
||||||
if (bits_per_channel != kUnspecifiedColourValue)
|
if (bits_per_channel != kUnspecifiedColourValue)
|
||||||
size += EbmlElementSize(kMkvBitsPerChannel, bits_per_channel);
|
size += EbmlElementSize(kMkvBitsPerChannel, bits_per_channel);
|
||||||
if (chroma_subsampling != kUnspecifiedColourValue)
|
if (chroma_subsampling_horz != kUnspecifiedColourValue)
|
||||||
size += EbmlElementSize(kMkvChromaSubsampling, chroma_subsampling);
|
size += EbmlElementSize(kMkvChromaSubsamplingHorz, chroma_subsampling_horz);
|
||||||
|
if (chroma_subsampling_vert != kUnspecifiedColourValue)
|
||||||
|
size += EbmlElementSize(kMkvChromaSubsamplingVert, chroma_subsampling_vert);
|
||||||
|
if (cb_subsampling_horz != kUnspecifiedColourValue)
|
||||||
|
size += EbmlElementSize(kMkvCbSubsamplingHorz, cb_subsampling_horz);
|
||||||
|
if (cb_subsampling_vert != kUnspecifiedColourValue)
|
||||||
|
size += EbmlElementSize(kMkvCbSubsamplingVert, cb_subsampling_vert);
|
||||||
if (chroma_siting_horz != kUnspecifiedColourValue)
|
if (chroma_siting_horz != kUnspecifiedColourValue)
|
||||||
size += EbmlElementSize(kMkvChromaSitingHorz, chroma_siting_horz);
|
size += EbmlElementSize(kMkvChromaSitingHorz, chroma_siting_horz);
|
||||||
if (chroma_siting_vert != kUnspecifiedColourValue)
|
if (chroma_siting_vert != kUnspecifiedColourValue)
|
||||||
@@ -1229,7 +1250,10 @@ bool VideoTrack::SetColour(const Colour& colour) {
|
|||||||
|
|
||||||
colour_ptr->matrix = colour.matrix;
|
colour_ptr->matrix = colour.matrix;
|
||||||
colour_ptr->bits_per_channel = colour.bits_per_channel;
|
colour_ptr->bits_per_channel = colour.bits_per_channel;
|
||||||
colour_ptr->chroma_subsampling = colour.chroma_subsampling;
|
colour_ptr->chroma_subsampling_horz = colour.chroma_subsampling_horz;
|
||||||
|
colour_ptr->chroma_subsampling_vert = colour.chroma_subsampling_vert;
|
||||||
|
colour_ptr->cb_subsampling_horz = colour.cb_subsampling_horz;
|
||||||
|
colour_ptr->cb_subsampling_vert = colour.cb_subsampling_vert;
|
||||||
colour_ptr->chroma_siting_horz = colour.chroma_siting_horz;
|
colour_ptr->chroma_siting_horz = colour.chroma_siting_horz;
|
||||||
colour_ptr->chroma_siting_vert = colour.chroma_siting_vert;
|
colour_ptr->chroma_siting_vert = colour.chroma_siting_vert;
|
||||||
colour_ptr->range = colour.range;
|
colour_ptr->range = colour.range;
|
||||||
|
10
mkvmuxer.hpp
10
mkvmuxer.hpp
@@ -396,7 +396,10 @@ class Colour {
|
|||||||
Colour()
|
Colour()
|
||||||
: matrix(kUnspecifiedColourValue),
|
: matrix(kUnspecifiedColourValue),
|
||||||
bits_per_channel(kUnspecifiedColourValue),
|
bits_per_channel(kUnspecifiedColourValue),
|
||||||
chroma_subsampling(kUnspecifiedColourValue),
|
chroma_subsampling_horz(kUnspecifiedColourValue),
|
||||||
|
chroma_subsampling_vert(kUnspecifiedColourValue),
|
||||||
|
cb_subsampling_horz(kUnspecifiedColourValue),
|
||||||
|
cb_subsampling_vert(kUnspecifiedColourValue),
|
||||||
chroma_siting_horz(kUnspecifiedColourValue),
|
chroma_siting_horz(kUnspecifiedColourValue),
|
||||||
chroma_siting_vert(kUnspecifiedColourValue),
|
chroma_siting_vert(kUnspecifiedColourValue),
|
||||||
range(kUnspecifiedColourValue),
|
range(kUnspecifiedColourValue),
|
||||||
@@ -420,7 +423,10 @@ class Colour {
|
|||||||
|
|
||||||
uint64 matrix;
|
uint64 matrix;
|
||||||
uint64 bits_per_channel;
|
uint64 bits_per_channel;
|
||||||
uint64 chroma_subsampling;
|
uint64 chroma_subsampling_horz;
|
||||||
|
uint64 chroma_subsampling_vert;
|
||||||
|
uint64 cb_subsampling_horz;
|
||||||
|
uint64 cb_subsampling_vert;
|
||||||
uint64 chroma_siting_horz;
|
uint64 chroma_siting_horz;
|
||||||
uint64 chroma_siting_vert;
|
uint64 chroma_siting_vert;
|
||||||
uint64 range;
|
uint64 range;
|
||||||
|
@@ -5120,10 +5120,25 @@ bool Colour::Parse(IMkvReader* reader, long long colour_start,
|
|||||||
UnserializeUInt(reader, read_pos, child_size);
|
UnserializeUInt(reader, read_pos, child_size);
|
||||||
if (colour_ptr->bits_per_channel < 0)
|
if (colour_ptr->bits_per_channel < 0)
|
||||||
return false;
|
return false;
|
||||||
} else if (child_id == mkvmuxer::kMkvChromaSubsampling) {
|
} else if (child_id == mkvmuxer::kMkvChromaSubsamplingHorz) {
|
||||||
colour_ptr->chroma_subsampling =
|
colour_ptr->chroma_subsampling_horz =
|
||||||
UnserializeUInt(reader, read_pos, child_size);
|
UnserializeUInt(reader, read_pos, child_size);
|
||||||
if (colour_ptr->chroma_subsampling < 0)
|
if (colour_ptr->chroma_subsampling_horz < 0)
|
||||||
|
return false;
|
||||||
|
} else if (child_id == mkvmuxer::kMkvChromaSubsamplingVert) {
|
||||||
|
colour_ptr->chroma_subsampling_vert =
|
||||||
|
UnserializeUInt(reader, read_pos, child_size);
|
||||||
|
if (colour_ptr->chroma_subsampling_vert < 0)
|
||||||
|
return false;
|
||||||
|
} else if (child_id == mkvmuxer::kMkvCbSubsamplingHorz) {
|
||||||
|
colour_ptr->cb_subsampling_horz =
|
||||||
|
UnserializeUInt(reader, read_pos, child_size);
|
||||||
|
if (colour_ptr->cb_subsampling_horz < 0)
|
||||||
|
return false;
|
||||||
|
} else if (child_id == mkvmuxer::kMkvCbSubsamplingVert) {
|
||||||
|
colour_ptr->cb_subsampling_vert =
|
||||||
|
UnserializeUInt(reader, read_pos, child_size);
|
||||||
|
if (colour_ptr->cb_subsampling_vert < 0)
|
||||||
return false;
|
return false;
|
||||||
} else if (child_id == mkvmuxer::kMkvChromaSitingHorz) {
|
} else if (child_id == mkvmuxer::kMkvChromaSitingHorz) {
|
||||||
colour_ptr->chroma_siting_horz =
|
colour_ptr->chroma_siting_horz =
|
||||||
|
@@ -439,7 +439,10 @@ struct Colour {
|
|||||||
Colour()
|
Colour()
|
||||||
: matrix(kValueNotPresent),
|
: matrix(kValueNotPresent),
|
||||||
bits_per_channel(kValueNotPresent),
|
bits_per_channel(kValueNotPresent),
|
||||||
chroma_subsampling(kValueNotPresent),
|
chroma_subsampling_horz(kValueNotPresent),
|
||||||
|
chroma_subsampling_vert(kValueNotPresent),
|
||||||
|
cb_subsampling_horz(kValueNotPresent),
|
||||||
|
cb_subsampling_vert(kValueNotPresent),
|
||||||
chroma_siting_horz(kValueNotPresent),
|
chroma_siting_horz(kValueNotPresent),
|
||||||
chroma_siting_vert(kValueNotPresent),
|
chroma_siting_vert(kValueNotPresent),
|
||||||
range(kValueNotPresent),
|
range(kValueNotPresent),
|
||||||
@@ -458,7 +461,10 @@ struct Colour {
|
|||||||
|
|
||||||
long long matrix;
|
long long matrix;
|
||||||
long long bits_per_channel;
|
long long bits_per_channel;
|
||||||
long long chroma_subsampling;
|
long long chroma_subsampling_horz;
|
||||||
|
long long chroma_subsampling_vert;
|
||||||
|
long long cb_subsampling_horz;
|
||||||
|
long long cb_subsampling_vert;
|
||||||
long long chroma_siting_horz;
|
long long chroma_siting_horz;
|
||||||
long long chroma_siting_vert;
|
long long chroma_siting_vert;
|
||||||
long long range;
|
long long range;
|
||||||
|
14
sample.cpp
14
sample.cpp
@@ -242,8 +242,18 @@ int main(int argc, char* argv[]) {
|
|||||||
printf("\t\t\tMatrix: %lld\n", colour->matrix);
|
printf("\t\t\tMatrix: %lld\n", colour->matrix);
|
||||||
if (ColourValuePresent(colour->bits_per_channel))
|
if (ColourValuePresent(colour->bits_per_channel))
|
||||||
printf("\t\t\tBitsPerChannel: %lld\n", colour->bits_per_channel);
|
printf("\t\t\tBitsPerChannel: %lld\n", colour->bits_per_channel);
|
||||||
if (ColourValuePresent(colour->chroma_subsampling))
|
if (ColourValuePresent(colour->chroma_subsampling_horz))
|
||||||
printf("\t\t\tChromaSubsampling: %lld\n", colour->chroma_subsampling);
|
printf("\t\t\tChromaSubsamplingHorz: %lld\n",
|
||||||
|
colour->chroma_subsampling_horz);
|
||||||
|
if (ColourValuePresent(colour->chroma_subsampling_vert))
|
||||||
|
printf("\t\t\tChromaSubsamplingVert: %lld\n",
|
||||||
|
colour->chroma_subsampling_vert);
|
||||||
|
if (ColourValuePresent(colour->cb_subsampling_horz))
|
||||||
|
printf("\t\t\tCbSubsamplingHorz: %lld\n",
|
||||||
|
colour->cb_subsampling_horz);
|
||||||
|
if (ColourValuePresent(colour->cb_subsampling_vert))
|
||||||
|
printf("\t\t\tCbSubsamplingVert: %lld\n",
|
||||||
|
colour->cb_subsampling_vert);
|
||||||
if (ColourValuePresent(colour->chroma_siting_horz))
|
if (ColourValuePresent(colour->chroma_siting_horz))
|
||||||
printf("\t\t\tChromaSitingHorz: %lld\n", colour->chroma_siting_horz);
|
printf("\t\t\tChromaSitingHorz: %lld\n", colour->chroma_siting_horz);
|
||||||
if (ColourValuePresent(colour->chroma_siting_vert))
|
if (ColourValuePresent(colour->chroma_siting_vert))
|
||||||
|
@@ -205,8 +205,16 @@ bool CopyColour(const mkvparser::Colour& parser_colour,
|
|||||||
muxer_colour->matrix = parser_colour.matrix;
|
muxer_colour->matrix = parser_colour.matrix;
|
||||||
if (ColourValuePresent(parser_colour.bits_per_channel))
|
if (ColourValuePresent(parser_colour.bits_per_channel))
|
||||||
muxer_colour->bits_per_channel = parser_colour.bits_per_channel;
|
muxer_colour->bits_per_channel = parser_colour.bits_per_channel;
|
||||||
if (ColourValuePresent(parser_colour.chroma_subsampling))
|
if (ColourValuePresent(parser_colour.chroma_subsampling_horz))
|
||||||
muxer_colour->chroma_subsampling = parser_colour.chroma_subsampling;
|
muxer_colour->chroma_subsampling_horz =
|
||||||
|
parser_colour.chroma_subsampling_horz;
|
||||||
|
if (ColourValuePresent(parser_colour.chroma_subsampling_vert))
|
||||||
|
muxer_colour->chroma_subsampling_vert =
|
||||||
|
parser_colour.chroma_subsampling_vert;
|
||||||
|
if (ColourValuePresent(parser_colour.cb_subsampling_horz))
|
||||||
|
muxer_colour->cb_subsampling_horz = parser_colour.cb_subsampling_horz;
|
||||||
|
if (ColourValuePresent(parser_colour.cb_subsampling_vert))
|
||||||
|
muxer_colour->cb_subsampling_vert = parser_colour.cb_subsampling_vert;
|
||||||
if (ColourValuePresent(parser_colour.chroma_siting_horz))
|
if (ColourValuePresent(parser_colour.chroma_siting_horz))
|
||||||
muxer_colour->chroma_siting_horz = parser_colour.chroma_siting_horz;
|
muxer_colour->chroma_siting_horz = parser_colour.chroma_siting_horz;
|
||||||
if (ColourValuePresent(parser_colour.chroma_siting_vert))
|
if (ColourValuePresent(parser_colour.chroma_siting_vert))
|
||||||
|
19
webmids.hpp
19
webmids.hpp
@@ -99,14 +99,17 @@ enum MkvId {
|
|||||||
kMkvColour = 0x55B0,
|
kMkvColour = 0x55B0,
|
||||||
kMkvMatrix = 0x55B1,
|
kMkvMatrix = 0x55B1,
|
||||||
kMkvBitsPerChannel = 0x55B2,
|
kMkvBitsPerChannel = 0x55B2,
|
||||||
kMkvChromaSubsampling = 0x55B3,
|
kMkvChromaSubsamplingHorz = 0x55B3,
|
||||||
kMkvChromaSitingHorz = 0x55B4,
|
kMkvChromaSubsamplingVert = 0x55B4,
|
||||||
kMkvChromaSitingVert = 0x55B5,
|
kMkvCbSubsamplingHorz = 0x55B5,
|
||||||
kMkvRange = 0x55B6,
|
kMkvCbSubsamplingVert = 0x55B6,
|
||||||
kMkvTransferFunction = 0x55B7,
|
kMkvChromaSitingHorz = 0x55B7,
|
||||||
kMkvPrimaries = 0x55B8,
|
kMkvChromaSitingVert = 0x55B8,
|
||||||
kMkvMaxCLL = 0x55B9,
|
kMkvRange = 0x55B9,
|
||||||
kMkvMaxFALL = 0x55BA,
|
kMkvTransferFunction = 0x55BA,
|
||||||
|
kMkvPrimaries = 0x55BB,
|
||||||
|
kMkvMaxCLL = 0x55BC,
|
||||||
|
kMkvMaxFALL = 0x55BD,
|
||||||
// mastering metadata
|
// mastering metadata
|
||||||
kMkvMasteringMetadata = 0x55D0,
|
kMkvMasteringMetadata = 0x55D0,
|
||||||
kMkvPrimaryRChromaticityX = 0x55D1,
|
kMkvPrimaryRChromaticityX = 0x55D1,
|
||||||
|
Reference in New Issue
Block a user