Validate Colour element values.
webm:1284 Change-Id: Idc9fc2eee41e7ab445d90366c5ee3e8ca2509c81
This commit is contained in:
parent
8036925b43
commit
93e9fb35f9
@ -26,6 +26,11 @@
|
|||||||
|
|
||||||
namespace mkvmuxer {
|
namespace mkvmuxer {
|
||||||
|
|
||||||
|
const float PrimaryChromaticity::kChromaticityMin = 0.0f;
|
||||||
|
const float PrimaryChromaticity::kChromaticityMax = 1.0f;
|
||||||
|
const float MasteringMetadata::kMinLuminance = 0.0f;
|
||||||
|
const float MasteringMetadata::kMinLuminanceMax = 999.99f;
|
||||||
|
const float MasteringMetadata::kMaxLuminanceMax = 9999.99f;
|
||||||
const float MasteringMetadata::kValueNotPresent = FLT_MAX;
|
const float MasteringMetadata::kValueNotPresent = FLT_MAX;
|
||||||
const uint64_t Colour::kValueNotPresent = UINT64_MAX;
|
const uint64_t Colour::kValueNotPresent = UINT64_MAX;
|
||||||
|
|
||||||
@ -957,10 +962,18 @@ uint64_t PrimaryChromaticity::PrimaryChromaticitySize(
|
|||||||
|
|
||||||
bool PrimaryChromaticity::Write(IMkvWriter* writer, libwebm::MkvId x_id,
|
bool PrimaryChromaticity::Write(IMkvWriter* writer, libwebm::MkvId x_id,
|
||||||
libwebm::MkvId y_id) const {
|
libwebm::MkvId y_id) const {
|
||||||
|
if (!Valid()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return WriteEbmlElement(writer, x_id, x_) &&
|
return WriteEbmlElement(writer, x_id, x_) &&
|
||||||
WriteEbmlElement(writer, y_id, y_);
|
WriteEbmlElement(writer, y_id, y_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PrimaryChromaticity::Valid() const {
|
||||||
|
return (x_ >= kChromaticityMin && x_ <= kChromaticityMax &&
|
||||||
|
y_ >= kChromaticityMin && y_ <= kChromaticityMax);
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t MasteringMetadata::MasteringMetadataSize() const {
|
uint64_t MasteringMetadata::MasteringMetadataSize() const {
|
||||||
uint64_t size = PayloadSize();
|
uint64_t size = PayloadSize();
|
||||||
|
|
||||||
@ -970,6 +983,31 @@ uint64_t MasteringMetadata::MasteringMetadataSize() const {
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MasteringMetadata::Valid() const {
|
||||||
|
if (luminance_min_ != kValueNotPresent) {
|
||||||
|
if (luminance_min_ < kMinLuminance || luminance_min_ > kMinLuminanceMax ||
|
||||||
|
luminance_min_ > luminance_max_) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (luminance_max_ != kValueNotPresent) {
|
||||||
|
if (luminance_max_ < kMinLuminance || luminance_max_ > kMaxLuminanceMax ||
|
||||||
|
luminance_max_ < luminance_min_) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (r_ && !r_->Valid())
|
||||||
|
return false;
|
||||||
|
if (g_ && !g_->Valid())
|
||||||
|
return false;
|
||||||
|
if (b_ && !b_->Valid())
|
||||||
|
return false;
|
||||||
|
if (white_point_ && !white_point_->Valid())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool MasteringMetadata::Write(IMkvWriter* writer) const {
|
bool MasteringMetadata::Write(IMkvWriter* writer) const {
|
||||||
const uint64_t size = PayloadSize();
|
const uint64_t size = PayloadSize();
|
||||||
|
|
||||||
@ -1080,6 +1118,25 @@ uint64_t Colour::ColourSize() const {
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Colour::Valid() const {
|
||||||
|
if (mastering_metadata_ && !mastering_metadata_->Valid())
|
||||||
|
return false;
|
||||||
|
if (!IsMatrixCoefficientsValueValid(matrix_coefficients_))
|
||||||
|
return false;
|
||||||
|
if (!IsChromaSitingHorzValueValid(chroma_siting_horz_))
|
||||||
|
return false;
|
||||||
|
if (!IsChromaSitingVertValueValid(chroma_siting_vert_))
|
||||||
|
return false;
|
||||||
|
if (!IsColourRangeValueValid(range_))
|
||||||
|
return false;
|
||||||
|
if (!IsTransferCharacteristicsValueValid(transfer_characteristics_))
|
||||||
|
return false;
|
||||||
|
if (!IsPrimariesValueValid(primaries_))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool Colour::Write(IMkvWriter* writer) const {
|
bool Colour::Write(IMkvWriter* writer) const {
|
||||||
const uint64_t size = PayloadSize();
|
const uint64_t size = PayloadSize();
|
||||||
|
|
||||||
@ -1087,6 +1144,10 @@ bool Colour::Write(IMkvWriter* writer) const {
|
|||||||
if (size == 0)
|
if (size == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
// Don't write an invalid element.
|
||||||
|
if (!Valid())
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!WriteEbmlMasterElement(writer, libwebm::kMkvColour, size))
|
if (!WriteEbmlMasterElement(writer, libwebm::kMkvColour, size))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -356,6 +356,9 @@ class ContentEncoding {
|
|||||||
// Colour element.
|
// Colour element.
|
||||||
class PrimaryChromaticity {
|
class PrimaryChromaticity {
|
||||||
public:
|
public:
|
||||||
|
static const float kChromaticityMin;
|
||||||
|
static const float kChromaticityMax;
|
||||||
|
|
||||||
PrimaryChromaticity(float x_val, float y_val) : x_(x_val), y_(y_val) {}
|
PrimaryChromaticity(float x_val, float y_val) : x_(x_val), y_(y_val) {}
|
||||||
PrimaryChromaticity() : x_(0), y_(0) {}
|
PrimaryChromaticity() : x_(0), y_(0) {}
|
||||||
~PrimaryChromaticity() {}
|
~PrimaryChromaticity() {}
|
||||||
@ -363,7 +366,7 @@ class PrimaryChromaticity {
|
|||||||
// Returns sum of |x_id| and |y_id| element id sizes and payload sizes.
|
// Returns sum of |x_id| and |y_id| element id sizes and payload sizes.
|
||||||
uint64_t PrimaryChromaticitySize(libwebm::MkvId x_id,
|
uint64_t PrimaryChromaticitySize(libwebm::MkvId x_id,
|
||||||
libwebm::MkvId y_id) const;
|
libwebm::MkvId y_id) const;
|
||||||
|
bool Valid() const;
|
||||||
bool Write(IMkvWriter* writer, libwebm::MkvId x_id,
|
bool Write(IMkvWriter* writer, libwebm::MkvId x_id,
|
||||||
libwebm::MkvId y_id) const;
|
libwebm::MkvId y_id) const;
|
||||||
|
|
||||||
@ -380,6 +383,9 @@ class PrimaryChromaticity {
|
|||||||
class MasteringMetadata {
|
class MasteringMetadata {
|
||||||
public:
|
public:
|
||||||
static const float kValueNotPresent;
|
static const float kValueNotPresent;
|
||||||
|
static const float kMinLuminance;
|
||||||
|
static const float kMinLuminanceMax;
|
||||||
|
static const float kMaxLuminanceMax;
|
||||||
|
|
||||||
MasteringMetadata()
|
MasteringMetadata()
|
||||||
: luminance_max_(kValueNotPresent),
|
: luminance_max_(kValueNotPresent),
|
||||||
@ -397,6 +403,7 @@ class MasteringMetadata {
|
|||||||
|
|
||||||
// Returns total size of the MasteringMetadata element.
|
// Returns total size of the MasteringMetadata element.
|
||||||
uint64_t MasteringMetadataSize() const;
|
uint64_t MasteringMetadataSize() const;
|
||||||
|
bool Valid() const;
|
||||||
bool Write(IMkvWriter* writer) const;
|
bool Write(IMkvWriter* writer) const;
|
||||||
|
|
||||||
// Copies non-null chromaticity.
|
// Copies non-null chromaticity.
|
||||||
@ -432,6 +439,69 @@ class MasteringMetadata {
|
|||||||
|
|
||||||
class Colour {
|
class Colour {
|
||||||
public:
|
public:
|
||||||
|
enum MatrixCoefficients {
|
||||||
|
kGbr = 0,
|
||||||
|
kBt709 = 1,
|
||||||
|
kUnspecifiedMc = 2,
|
||||||
|
kReserved = 3,
|
||||||
|
kFcc = 4,
|
||||||
|
kBt470bg = 5,
|
||||||
|
kSmpte170MMc = 6,
|
||||||
|
kSmpte240MMc = 7,
|
||||||
|
kYcocg = 8,
|
||||||
|
kBt2020NonConstantLuminance = 9,
|
||||||
|
kBt2020ConstantLuminance = 10,
|
||||||
|
};
|
||||||
|
enum ChromaSitingHorz {
|
||||||
|
kUnspecifiedCsh = 0,
|
||||||
|
kLeftCollocated = 1,
|
||||||
|
kHalfCsh = 2,
|
||||||
|
};
|
||||||
|
enum ChromaSitingVert {
|
||||||
|
kUnspecifiedCsv = 0,
|
||||||
|
kTopCollocated = 1,
|
||||||
|
kHalfCsv = 2,
|
||||||
|
};
|
||||||
|
enum Range {
|
||||||
|
kUnspecifiedCr = 0,
|
||||||
|
kBroadcastRange = 1,
|
||||||
|
kFullRange = 2,
|
||||||
|
kMcTcDefined = 3, // Defined by MatrixCoefficients/TransferCharacteristics.
|
||||||
|
};
|
||||||
|
enum TransferCharacteristics {
|
||||||
|
kIturBt709Tc = 1,
|
||||||
|
kUnspecifiedTc = 2,
|
||||||
|
kReservedTc = 3,
|
||||||
|
kGamma22Curve = 4,
|
||||||
|
kGamma28Curve = 5,
|
||||||
|
kSmpte170MTc = 6,
|
||||||
|
kSmpte240MTc = 7,
|
||||||
|
kLinear = 8,
|
||||||
|
kLog = 9,
|
||||||
|
kLogSqrt = 10,
|
||||||
|
kIec6196624 = 11,
|
||||||
|
kIturBt1361ExtendedColourGamut = 12,
|
||||||
|
kIec6196621 = 13,
|
||||||
|
kIturBt202010bit = 14,
|
||||||
|
kIturBt202012bit = 15,
|
||||||
|
kSmpteSt2084 = 16,
|
||||||
|
kSmpteSt4281Tc = 17,
|
||||||
|
kAribStdB67Hlg = 18,
|
||||||
|
};
|
||||||
|
enum Primaries {
|
||||||
|
kReservedP0 = 0,
|
||||||
|
kIturBt709P = 1,
|
||||||
|
kUnspecifiedP = 2,
|
||||||
|
kReservedP3 = 3,
|
||||||
|
kIturBt470M = 4,
|
||||||
|
kIturBt470Bg = 5,
|
||||||
|
kSmpte170MP = 6,
|
||||||
|
kSmpte240MP = 7,
|
||||||
|
kFilm = 8,
|
||||||
|
kIturBt2020 = 9,
|
||||||
|
kSmpteSt4281P = 10,
|
||||||
|
kJedecP22Phosphors = 22,
|
||||||
|
};
|
||||||
static const uint64_t kValueNotPresent;
|
static const uint64_t kValueNotPresent;
|
||||||
Colour()
|
Colour()
|
||||||
: matrix_coefficients_(kValueNotPresent),
|
: matrix_coefficients_(kValueNotPresent),
|
||||||
@ -452,6 +522,7 @@ class Colour {
|
|||||||
|
|
||||||
// Returns total size of the Colour element.
|
// Returns total size of the Colour element.
|
||||||
uint64_t ColourSize() const;
|
uint64_t ColourSize() const;
|
||||||
|
bool Valid() const;
|
||||||
bool Write(IMkvWriter* writer) const;
|
bool Write(IMkvWriter* writer) const;
|
||||||
|
|
||||||
// Deep copies |mastering_metadata|.
|
// Deep copies |mastering_metadata|.
|
||||||
|
@ -646,4 +646,97 @@ uint64 MakeUID(unsigned int* seed) {
|
|||||||
return uid;
|
return uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsMatrixCoefficientsValueValid(uint64_t value) {
|
||||||
|
switch (value) {
|
||||||
|
case mkvmuxer::Colour::kGbr:
|
||||||
|
case mkvmuxer::Colour::kBt709:
|
||||||
|
case mkvmuxer::Colour::kUnspecifiedMc:
|
||||||
|
case mkvmuxer::Colour::kReserved:
|
||||||
|
case mkvmuxer::Colour::kFcc:
|
||||||
|
case mkvmuxer::Colour::kBt470bg:
|
||||||
|
case mkvmuxer::Colour::kSmpte170MMc:
|
||||||
|
case mkvmuxer::Colour::kSmpte240MMc:
|
||||||
|
case mkvmuxer::Colour::kYcocg:
|
||||||
|
case mkvmuxer::Colour::kBt2020NonConstantLuminance:
|
||||||
|
case mkvmuxer::Colour::kBt2020ConstantLuminance:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsChromaSitingHorzValueValid(uint64_t value) {
|
||||||
|
switch (value) {
|
||||||
|
case mkvmuxer::Colour::kUnspecifiedCsh:
|
||||||
|
case mkvmuxer::Colour::kLeftCollocated:
|
||||||
|
case mkvmuxer::Colour::kHalfCsh:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsChromaSitingVertValueValid(uint64_t value) {
|
||||||
|
switch (value) {
|
||||||
|
case mkvmuxer::Colour::kUnspecifiedCsv:
|
||||||
|
case mkvmuxer::Colour::kTopCollocated:
|
||||||
|
case mkvmuxer::Colour::kHalfCsv:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsColourRangeValueValid(uint64_t value) {
|
||||||
|
switch (value) {
|
||||||
|
case mkvmuxer::Colour::kUnspecifiedCr:
|
||||||
|
case mkvmuxer::Colour::kBroadcastRange:
|
||||||
|
case mkvmuxer::Colour::kFullRange:
|
||||||
|
case mkvmuxer::Colour::kMcTcDefined:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsTransferCharacteristicsValueValid(uint64_t value) {
|
||||||
|
switch (value) {
|
||||||
|
case mkvmuxer::Colour::kIturBt709Tc:
|
||||||
|
case mkvmuxer::Colour::kUnspecifiedTc:
|
||||||
|
case mkvmuxer::Colour::kReservedTc:
|
||||||
|
case mkvmuxer::Colour::kGamma22Curve:
|
||||||
|
case mkvmuxer::Colour::kGamma28Curve:
|
||||||
|
case mkvmuxer::Colour::kSmpte170MTc:
|
||||||
|
case mkvmuxer::Colour::kSmpte240MTc:
|
||||||
|
case mkvmuxer::Colour::kLinear:
|
||||||
|
case mkvmuxer::Colour::kLog:
|
||||||
|
case mkvmuxer::Colour::kLogSqrt:
|
||||||
|
case mkvmuxer::Colour::kIec6196624:
|
||||||
|
case mkvmuxer::Colour::kIturBt1361ExtendedColourGamut:
|
||||||
|
case mkvmuxer::Colour::kIec6196621:
|
||||||
|
case mkvmuxer::Colour::kIturBt202010bit:
|
||||||
|
case mkvmuxer::Colour::kIturBt202012bit:
|
||||||
|
case mkvmuxer::Colour::kSmpteSt2084:
|
||||||
|
case mkvmuxer::Colour::kSmpteSt4281Tc:
|
||||||
|
case mkvmuxer::Colour::kAribStdB67Hlg:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsPrimariesValueValid(uint64_t value) {
|
||||||
|
switch (value) {
|
||||||
|
case mkvmuxer::Colour::kReservedP0:
|
||||||
|
case mkvmuxer::Colour::kIturBt709P:
|
||||||
|
case mkvmuxer::Colour::kUnspecifiedP:
|
||||||
|
case mkvmuxer::Colour::kReservedP3:
|
||||||
|
case mkvmuxer::Colour::kIturBt470M:
|
||||||
|
case mkvmuxer::Colour::kIturBt470Bg:
|
||||||
|
case mkvmuxer::Colour::kSmpte170MP:
|
||||||
|
case mkvmuxer::Colour::kSmpte240MP:
|
||||||
|
case mkvmuxer::Colour::kFilm:
|
||||||
|
case mkvmuxer::Colour::kIturBt2020:
|
||||||
|
case mkvmuxer::Colour::kSmpteSt4281P:
|
||||||
|
case mkvmuxer::Colour::kJedecP22Phosphors:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace mkvmuxer
|
} // namespace mkvmuxer
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
#include "mkvmuxertypes.h"
|
#include "mkvmuxertypes.h"
|
||||||
|
|
||||||
|
#include "stdint.h"
|
||||||
|
|
||||||
namespace mkvmuxer {
|
namespace mkvmuxer {
|
||||||
class Cluster;
|
class Cluster;
|
||||||
class Frame;
|
class Frame;
|
||||||
@ -97,6 +99,14 @@ void GetVersion(int32* major, int32* minor, int32* build, int32* revision);
|
|||||||
// the random-number generator (see POSIX rand_r() for semantics).
|
// the random-number generator (see POSIX rand_r() for semantics).
|
||||||
uint64 MakeUID(unsigned int* seed);
|
uint64 MakeUID(unsigned int* seed);
|
||||||
|
|
||||||
|
// Colour field validation helpers. All return true when |value| is valid.
|
||||||
|
bool IsMatrixCoefficientsValueValid(uint64_t value);
|
||||||
|
bool IsChromaSitingHorzValueValid(uint64_t value);
|
||||||
|
bool IsChromaSitingVertValueValid(uint64_t value);
|
||||||
|
bool IsColourRangeValueValid(uint64_t value);
|
||||||
|
bool IsTransferCharacteristicsValueValid(uint64_t value);
|
||||||
|
bool IsPrimariesValueValid(uint64_t value);
|
||||||
|
|
||||||
} // namespace mkvmuxer
|
} // namespace mkvmuxer
|
||||||
|
|
||||||
#endif // MKVMUXER_MKVMUXERUTIL_H_
|
#endif // MKVMUXER_MKVMUXERUTIL_H_
|
||||||
|
@ -773,17 +773,17 @@ TEST_F(MuxerTest, Colour) {
|
|||||||
muxer_mm.SetChromaticity(&muxer_pc, &muxer_pc, &muxer_pc, &muxer_pc));
|
muxer_mm.SetChromaticity(&muxer_pc, &muxer_pc, &muxer_pc, &muxer_pc));
|
||||||
|
|
||||||
mkvmuxer::Colour muxer_colour;
|
mkvmuxer::Colour muxer_colour;
|
||||||
muxer_colour.set_matrix_coefficients(0);
|
muxer_colour.set_matrix_coefficients(mkvmuxer::Colour::kGbr);
|
||||||
muxer_colour.set_bits_per_channel(1);
|
muxer_colour.set_bits_per_channel(1);
|
||||||
muxer_colour.set_chroma_subsampling_horz(2);
|
muxer_colour.set_chroma_subsampling_horz(2);
|
||||||
muxer_colour.set_chroma_subsampling_vert(3);
|
muxer_colour.set_chroma_subsampling_vert(3);
|
||||||
muxer_colour.set_cb_subsampling_horz(4);
|
muxer_colour.set_cb_subsampling_horz(4);
|
||||||
muxer_colour.set_cb_subsampling_vert(5);
|
muxer_colour.set_cb_subsampling_vert(5);
|
||||||
muxer_colour.set_chroma_siting_horz(6);
|
muxer_colour.set_chroma_siting_horz(mkvmuxer::Colour::kLeftCollocated);
|
||||||
muxer_colour.set_chroma_siting_vert(7);
|
muxer_colour.set_chroma_siting_vert(mkvmuxer::Colour::kTopCollocated);
|
||||||
muxer_colour.set_range(8);
|
muxer_colour.set_range(mkvmuxer::Colour::kFullRange);
|
||||||
muxer_colour.set_transfer_characteristics(9);
|
muxer_colour.set_transfer_characteristics(mkvmuxer::Colour::kLog);
|
||||||
muxer_colour.set_primaries(10);
|
muxer_colour.set_primaries(mkvmuxer::Colour::kSmpteSt4281P);
|
||||||
muxer_colour.set_max_cll(11);
|
muxer_colour.set_max_cll(11);
|
||||||
muxer_colour.set_max_fall(12);
|
muxer_colour.set_max_fall(12);
|
||||||
ASSERT_TRUE(muxer_colour.SetMasteringMetadata(muxer_mm));
|
ASSERT_TRUE(muxer_colour.SetMasteringMetadata(muxer_mm));
|
||||||
|
@ -621,9 +621,9 @@ TEST_F(ParserTest, CanParseColour) {
|
|||||||
EXPECT_EQ(3u, colour->chroma_subsampling_vert);
|
EXPECT_EQ(3u, colour->chroma_subsampling_vert);
|
||||||
EXPECT_EQ(4u, colour->cb_subsampling_horz);
|
EXPECT_EQ(4u, colour->cb_subsampling_horz);
|
||||||
EXPECT_EQ(5u, colour->cb_subsampling_vert);
|
EXPECT_EQ(5u, colour->cb_subsampling_vert);
|
||||||
EXPECT_EQ(6u, colour->chroma_siting_horz);
|
EXPECT_EQ(1u, colour->chroma_siting_horz);
|
||||||
EXPECT_EQ(7u, colour->chroma_siting_vert);
|
EXPECT_EQ(1u, colour->chroma_siting_vert);
|
||||||
EXPECT_EQ(8u, colour->range);
|
EXPECT_EQ(2u, colour->range);
|
||||||
EXPECT_EQ(9u, colour->transfer_characteristics);
|
EXPECT_EQ(9u, colour->transfer_characteristics);
|
||||||
EXPECT_EQ(10u, colour->primaries);
|
EXPECT_EQ(10u, colour->primaries);
|
||||||
EXPECT_EQ(11u, colour->max_cll);
|
EXPECT_EQ(11u, colour->max_cll);
|
||||||
@ -652,8 +652,8 @@ TEST_F(ParserTest, CanParseProjection) {
|
|||||||
ASSERT_TRUE(CreateAndLoadSegment("projection.webm"));
|
ASSERT_TRUE(CreateAndLoadSegment("projection.webm"));
|
||||||
const unsigned int kTracksCount = 1;
|
const unsigned int kTracksCount = 1;
|
||||||
EXPECT_EQ(kTracksCount, segment_->GetTracks()->GetTracksCount());
|
EXPECT_EQ(kTracksCount, segment_->GetTracks()->GetTracksCount());
|
||||||
const VideoTrack* const video_track = static_cast<const VideoTrack*>(
|
const VideoTrack* const video_track =
|
||||||
segment_->GetTracks()->GetTrackByIndex(0));
|
static_cast<const VideoTrack*>(segment_->GetTracks()->GetTrackByIndex(0));
|
||||||
|
|
||||||
const mkvparser::Projection* const projection = video_track->GetProjection();
|
const mkvparser::Projection* const projection = video_track->GetProjection();
|
||||||
ASSERT_TRUE(projection != nullptr);
|
ASSERT_TRUE(projection != nullptr);
|
||||||
|
BIN
testing/testdata/colour.webm
vendored
BIN
testing/testdata/colour.webm
vendored
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user