Index: ui/gfx/color_space_win.cc |
diff --git a/ui/gfx/color_space_win.cc b/ui/gfx/color_space_win.cc |
index d3ab700939a53301a461f7a1d54a891b20fab156..9d2fafa1d92ea9aa1ef182f8c018fbc87af47ff5 100644 |
--- a/ui/gfx/color_space_win.cc |
+++ b/ui/gfx/color_space_win.cc |
@@ -134,4 +134,75 @@ DXVA2_ExtendedFormat ColorSpaceWin::GetExtendedFormat( |
return format; |
} |
+DXGI_COLOR_SPACE_TYPE ColorSpaceWin::GetDXGIColorSpace( |
+ const ColorSpace& color_space) { |
+ if (color_space.matrix_ == gfx::ColorSpace::MatrixID::RGB) { |
+ // For RGB, we default to FULL |
+ if (color_space.range_ == gfx::ColorSpace::RangeID::LIMITED) { |
+ if (color_space.primaries_ == gfx::ColorSpace::PrimaryID::BT2020) { |
+ if (color_space.transfer_ == gfx::ColorSpace::TransferID::SMPTEST2084) { |
+ return DXGI_COLOR_SPACE_RGB_STUDIO_G2084_NONE_P2020; |
+ } else { |
+ return DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P2020; |
+ } |
+ } else { |
+ return DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P709; |
+ } |
+ } else { |
+ if (color_space.primaries_ == gfx::ColorSpace::PrimaryID::BT2020) { |
+ if (color_space.transfer_ == gfx::ColorSpace::TransferID::SMPTEST2084) { |
+ return DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020; |
+ } else { |
+ return DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P2020; |
+ } |
+ } else { |
+ if (color_space.transfer_ == gfx::ColorSpace::TransferID::LINEAR) { |
+ return DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709; |
+ } else { |
+ return DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709; |
+ } |
+ } |
+ } |
+ } else { |
+ if (color_space.primaries_ == gfx::ColorSpace::PrimaryID::BT2020) { |
+ if (color_space.transfer_ == gfx::ColorSpace::TransferID::SMPTEST2084) { |
+ return DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_LEFT_P2020; |
+ // Could also be: |
+ // DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_TOPLEFT_P2020 |
+ } else { |
+ // For YUV, we default to LIMITED |
+ if (color_space.range_ == gfx::ColorSpace::RangeID::FULL) { |
+ return DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020; |
+ |
+ } else { |
+ return DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020; |
+ // Could also be: |
+ // DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_TOPLEFT_P2020 |
+ } |
+ } |
+ } else if (color_space.primaries_ == gfx::ColorSpace::PrimaryID::BT470BG || |
+ color_space.primaries_ == |
+ gfx::ColorSpace::PrimaryID::SMPTE170M) { |
+ // For YUV, we default to LIMITED |
+ if (color_space.range_ == gfx::ColorSpace::RangeID::FULL) { |
+ return DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601; |
+ } else { |
+ return DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601; |
+ } |
+ } else { |
+ // For YUV, we default to LIMITED |
+ if (color_space.range_ == gfx::ColorSpace::RangeID::FULL) { |
+ // TODO(hubbe): Check if this is correct. |
+ if (color_space.transfer_ == gfx::ColorSpace::TransferID::SMPTE170M) { |
+ return DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601; |
+ } else { |
+ return DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709; |
+ } |
+ } else { |
+ return DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709; |
+ } |
+ } |
+ } |
+} |
+ |
} // namespace gfx |