Pass through ColorSpace and HDR Metadata in MCVD

Bug: b/112748586
Test: none

Change-Id: If42ab10a110e563c88cd24551a76d7806d5603c1
Reviewed-on: https://chromium-review.googlesource.com/1232956
Reviewed-by: Frank Liberato <liberato@chromium.org>
Reviewed-by: Sergey Volk <servolk@chromium.org>
Commit-Queue: Sandeep Vijayasekar <sandv@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593594}
diff --git a/media/gpu/android/media_codec_video_decoder.cc b/media/gpu/android/media_codec_video_decoder.cc
index 7b27a50a..544a808 100644
--- a/media/gpu/android/media_codec_video_decoder.cc
+++ b/media/gpu/android/media_codec_video_decoder.cc
@@ -439,6 +439,8 @@
           media_crypto_);
   config->initial_expected_coded_size = decoder_config_.coded_size();
   config->surface_bundle = target_surface_bundle_;
+  config->container_color_space = decoder_config_.color_space_info();
+  config->hdr_metadata = decoder_config_.hdr_metadata();
 
   // Use the asynchronous API if we can.
   if (device_info_->IsAsyncApiSupported()) {
diff --git a/media/gpu/android/media_codec_video_decoder_unittest.cc b/media/gpu/android/media_codec_video_decoder_unittest.cc
index 503cf06..48ffee8 100644
--- a/media/gpu/android/media_codec_video_decoder_unittest.cc
+++ b/media/gpu/android/media_codec_video_decoder_unittest.cc
@@ -279,6 +279,7 @@
 // Tests which only work for a single codec.
 class MediaCodecVideoDecoderH264Test : public MediaCodecVideoDecoderTest {};
 class MediaCodecVideoDecoderVp8Test : public MediaCodecVideoDecoderTest {};
+class MediaCodecVideoDecoderVp9Test : public MediaCodecVideoDecoderTest {};
 
 TEST_P(MediaCodecVideoDecoderTest, UnknownCodecIsRejected) {
   ASSERT_FALSE(Initialize(TestVideoConfig::Invalid()));
@@ -904,6 +905,43 @@
   EXPECT_EQ(csd1, codec_allocator_->most_recent_config->csd1);
 }
 
+TEST_P(MediaCodecVideoDecoderVp9Test, ColorSpaceIsIncludedInCodecConfig) {
+  VideoDecoderConfig config = TestVideoConfig::Normal(kCodecVP9);
+  VideoColorSpace color_space_info(VideoColorSpace::PrimaryID::BT2020,
+                                   VideoColorSpace::TransferID::SMPTEST2084,
+                                   VideoColorSpace::MatrixID::BT2020_CL,
+                                   gfx::ColorSpace::RangeID::LIMITED);
+
+  config.set_color_space_info(color_space_info);
+  EXPECT_TRUE(InitializeFully_OneDecodePending(config));
+
+  EXPECT_EQ(color_space_info,
+            codec_allocator_->most_recent_config->container_color_space);
+}
+
+TEST_P(MediaCodecVideoDecoderVp9Test, HdrMetadataIsIncludedInCodecConfig) {
+  VideoDecoderConfig config = TestVideoConfig::Normal(kCodecVP9);
+  HDRMetadata hdr_metadata;
+  hdr_metadata.max_frame_average_light_level = 123;
+  hdr_metadata.max_content_light_level = 456;
+  hdr_metadata.mastering_metadata.primary_r.set_x(0.1f);
+  hdr_metadata.mastering_metadata.primary_r.set_y(0.2f);
+  hdr_metadata.mastering_metadata.primary_g.set_x(0.3f);
+  hdr_metadata.mastering_metadata.primary_g.set_y(0.4f);
+  hdr_metadata.mastering_metadata.primary_b.set_x(0.5f);
+  hdr_metadata.mastering_metadata.primary_b.set_y(0.6f);
+  hdr_metadata.mastering_metadata.white_point.set_x(0.7f);
+  hdr_metadata.mastering_metadata.white_point.set_y(0.8f);
+  hdr_metadata.mastering_metadata.luminance_max = 1000;
+  hdr_metadata.mastering_metadata.luminance_min = 0;
+
+  config.set_hdr_metadata(hdr_metadata);
+
+  EXPECT_TRUE(InitializeFully_OneDecodePending(config));
+
+  EXPECT_EQ(hdr_metadata, codec_allocator_->most_recent_config->hdr_metadata);
+}
+
 static std::vector<VideoCodec> GetTestList() {
   std::vector<VideoCodec> test_codecs;