mkvmuxer_tests: Add Colour element test.
Change-Id: I5348930fb74d43f3fc4e1815d13a525bda70f4a0
diff --git a/testing/mkvmuxer_tests.cc b/testing/mkvmuxer_tests.cc
index 1c6ec2e..585dafe 100644
--- a/testing/mkvmuxer_tests.cc
+++ b/testing/mkvmuxer_tests.cc
@@ -761,6 +761,90 @@
EXPECT_TRUE(CompareFiles(GetTestFilePath("matroska_doctype.mkv"), filename_));
}
+TEST_F(MuxerTest, Colour) {
+ EXPECT_TRUE(SegmentInit(false, false, false));
+ AddVideoTrack();
+
+ mkvmuxer::PrimaryChromaticity muxer_pc(.1, .2);
+ mkvmuxer::MasteringMetadata muxer_mm;
+ muxer_mm.set_luminance_min(30.0);
+ muxer_mm.set_luminance_max(40.0);
+ ASSERT_TRUE(
+ muxer_mm.SetChromaticity(&muxer_pc, &muxer_pc, &muxer_pc, &muxer_pc));
+
+ mkvmuxer::Colour muxer_colour;
+ muxer_colour.set_matrix_coefficients(0);
+ muxer_colour.set_bits_per_channel(1);
+ muxer_colour.set_chroma_subsampling_horz(2);
+ muxer_colour.set_chroma_subsampling_vert(3);
+ muxer_colour.set_cb_subsampling_horz(4);
+ muxer_colour.set_cb_subsampling_vert(5);
+ muxer_colour.set_chroma_siting_horz(6);
+ muxer_colour.set_chroma_siting_vert(7);
+ muxer_colour.set_range(8);
+ muxer_colour.set_transfer_characteristics(9);
+ muxer_colour.set_primaries(10);
+ muxer_colour.set_max_cll(11);
+ muxer_colour.set_max_fall(12);
+ ASSERT_TRUE(muxer_colour.SetMasteringMetadata(muxer_mm));
+
+ VideoTrack* const video_track =
+ dynamic_cast<VideoTrack*>(segment_.GetTrackByNumber(kVideoTrackNumber));
+ ASSERT_TRUE(video_track != nullptr);
+ ASSERT_TRUE(video_track->SetColour(muxer_colour));
+ ASSERT_NO_FATAL_FAILURE(AddDummyFrameAndFinalize(kVideoTrackNumber));
+
+ mkvparser::Segment* segment = nullptr;
+ ASSERT_TRUE(ParseMkvFileReleaseSegment(filename_, &segment));
+ std::unique_ptr<mkvparser::Segment> segment_ptr(segment);
+
+ const mkvparser::VideoTrack* const parser_track =
+ static_cast<const mkvparser::VideoTrack*>(
+ segment_ptr->GetTracks()->GetTrackByIndex(0));
+ const mkvparser::Colour* parser_colour = parser_track->GetColour();
+ ASSERT_TRUE(parser_colour != nullptr);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.matrix_coefficients()),
+ parser_colour->matrix_coefficients);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.bits_per_channel()),
+ parser_colour->bits_per_channel);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.chroma_subsampling_horz()),
+ parser_colour->chroma_subsampling_horz);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.chroma_subsampling_vert()),
+ parser_colour->chroma_subsampling_vert);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.cb_subsampling_horz()),
+ parser_colour->cb_subsampling_horz);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.cb_subsampling_vert()),
+ parser_colour->cb_subsampling_vert);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.chroma_siting_horz()),
+ parser_colour->chroma_siting_horz);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.chroma_siting_vert()),
+ parser_colour->chroma_siting_vert);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.range()), parser_colour->range);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.transfer_characteristics()),
+ parser_colour->transfer_characteristics);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.primaries()),
+ parser_colour->primaries);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.max_cll()),
+ parser_colour->max_cll);
+ EXPECT_EQ(static_cast<long long>(muxer_colour.max_fall()),
+ parser_colour->max_fall);
+
+ const mkvparser::MasteringMetadata* const parser_mm =
+ parser_colour->mastering_metadata;
+ ASSERT_TRUE(parser_mm != nullptr);
+ EXPECT_FLOAT_EQ(muxer_mm.luminance_min(), parser_mm->luminance_min);
+ EXPECT_FLOAT_EQ(muxer_mm.luminance_max(), parser_mm->luminance_max);
+ EXPECT_FLOAT_EQ(muxer_mm.r()->x(), parser_mm->r->x);
+ EXPECT_FLOAT_EQ(muxer_mm.r()->y(), parser_mm->r->y);
+ EXPECT_FLOAT_EQ(muxer_mm.g()->x(), parser_mm->g->x);
+ EXPECT_FLOAT_EQ(muxer_mm.g()->y(), parser_mm->g->y);
+ EXPECT_FLOAT_EQ(muxer_mm.b()->x(), parser_mm->b->x);
+ EXPECT_FLOAT_EQ(muxer_mm.b()->y(), parser_mm->b->y);
+ EXPECT_FLOAT_EQ(muxer_mm.white_point()->x(), parser_mm->white_point->x);
+ EXPECT_FLOAT_EQ(muxer_mm.white_point()->y(), parser_mm->white_point->y);
+ EXPECT_TRUE(CompareFiles(GetTestFilePath("colour.webm"), filename_));
+}
+
} // namespace test
int main(int argc, char* argv[]) {
diff --git a/testing/testdata/colour.webm b/testing/testdata/colour.webm
new file mode 100644
index 0000000..ddd1c53
--- /dev/null
+++ b/testing/testdata/colour.webm
Binary files differ