Chromium Code Reviews| Index: media/filters/vpx_video_decoder.cc |
| diff --git a/media/filters/vpx_video_decoder.cc b/media/filters/vpx_video_decoder.cc |
| index 4f6e412381ad439158168687838ea7eb97439714..ca567b1165ccb4c89de9fc56d31820c0ef2ec5b2 100644 |
| --- a/media/filters/vpx_video_decoder.cc |
| +++ b/media/filters/vpx_video_decoder.cc |
| @@ -585,6 +585,59 @@ bool VpxVideoDecoder::VpxDecode(const scoped_refptr<DecoderBuffer>& buffer, |
| (*video_frame) |
| ->metadata() |
| ->SetInteger(VideoFrameMetadata::COLOR_SPACE, color_space); |
| + |
| + gfx::ColorSpace::PrimaryID primaries = |
| + gfx::ColorSpace::PrimaryID::UNSPECIFIED; |
| + gfx::ColorSpace::TransferID transfer = |
| + gfx::ColorSpace::TransferID::UNSPECIFIED; |
| + gfx::ColorSpace::MatrixID matrix = gfx::ColorSpace::MatrixID::UNSPECIFIED; |
| + gfx::ColorSpace::RangeID range = vpx_image->range == VPX_CR_FULL_RANGE |
| + ? gfx::ColorSpace::RangeID::FULL |
| + : gfx::ColorSpace::RangeID::LIMITED; |
| + |
| + switch (vpx_image->cs) { |
|
DaleCurtis
2016/08/16 18:58:03
Worth caching?
hubbe
2016/08/16 19:24:57
No, gfx::ColorSpace is super-lightweight unless yo
|
| + case VPX_CS_BT_601: |
| + case VPX_CS_SMPTE_170: |
| + primaries = gfx::ColorSpace::PrimaryID::SMPTE170M; |
| + transfer = gfx::ColorSpace::TransferID::SMPTE170M; |
| + matrix = gfx::ColorSpace::MatrixID::SMPTE170M; |
| + break; |
| + case VPX_CS_SMPTE_240: |
| + primaries = gfx::ColorSpace::PrimaryID::SMPTE240M; |
| + transfer = gfx::ColorSpace::TransferID::SMPTE240M; |
| + matrix = gfx::ColorSpace::MatrixID::SMPTE240M; |
| + break; |
| + case VPX_CS_BT_709: |
| + primaries = gfx::ColorSpace::PrimaryID::BT709; |
| + transfer = gfx::ColorSpace::TransferID::BT709; |
| + matrix = gfx::ColorSpace::MatrixID::BT709; |
| + break; |
| + case VPX_CS_BT_2020: |
| + primaries = gfx::ColorSpace::PrimaryID::BT2020; |
| + if (vpx_image->bit_depth >= 12) { |
| + transfer = gfx::ColorSpace::TransferID::BT2020_12; |
| + } else if (vpx_image->bit_depth >= 10) { |
| + transfer = gfx::ColorSpace::TransferID::BT2020_10; |
| + } else { |
| + transfer = gfx::ColorSpace::TransferID::BT709; |
| + } |
| + matrix = gfx::ColorSpace::MatrixID::BT2020_NCL; // is this right? |
| + break; |
| + case VPX_CS_SRGB: |
| + primaries = gfx::ColorSpace::PrimaryID::BT709; |
| + transfer = gfx::ColorSpace::TransferID::IEC61966_2_1; |
| + matrix = gfx::ColorSpace::MatrixID::BT709; |
| + break; |
| + |
| + default: |
| + break; |
| + } |
| + |
| + if (primaries != gfx::ColorSpace::PrimaryID::UNSPECIFIED) { |
| + (*video_frame) |
| + ->set_color_space(gfx::ColorSpace(primaries, transfer, matrix, range)); |
| + } |
| + |
| return true; |
| } |