| Index: ui/gfx/color_space_win.cc
|
| diff --git a/ui/gfx/color_space_win.cc b/ui/gfx/color_space_win.cc
|
| index e1a814b00e63930b6ddf798f82a1e8b48b7b1969..acfb8205bd4a31b33e178450c77548de9ea3472a 100644
|
| --- a/ui/gfx/color_space_win.cc
|
| +++ b/ui/gfx/color_space_win.cc
|
| @@ -126,4 +126,95 @@ 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;
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +D3D11_VIDEO_PROCESSOR_COLOR_SPACE ColorSpaceWin::GetD3D11ColorSpace(
|
| + const ColorSpace& color_space) {
|
| + D3D11_VIDEO_PROCESSOR_COLOR_SPACE ret = {0};
|
| + if (color_space.range_ != gfx::ColorSpace::RangeID::FULL) {
|
| + ret.RGB_Range = 1;
|
| + ret.Nominal_Range = D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_0_255;
|
| + } else {
|
| + ret.Nominal_Range = D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_16_235;
|
| + }
|
| + switch (color_space.transfer_) {
|
| + case gfx::ColorSpace::TransferID::BT709:
|
| + case gfx::ColorSpace::TransferID::SMPTE170M:
|
| + ret.YCbCr_Matrix = 1;
|
| +
|
| + default:
|
| + break;
|
| + }
|
| + return ret;
|
| +}
|
| +
|
| } // namespace gfx
|
|
|