| Index: content/renderer/media/render_media_client.cc
|
| diff --git a/content/renderer/media/render_media_client.cc b/content/renderer/media/render_media_client.cc
|
| index 4681d2cfc9054f3bfff857f1c1fccbb82a662cd8..97fd5ba3ba04cfda7e10d66f59578be16fb6a712 100644
|
| --- a/content/renderer/media/render_media_client.cc
|
| +++ b/content/renderer/media/render_media_client.cc
|
| @@ -4,10 +4,14 @@
|
|
|
| #include "content/renderer/media/render_media_client.h"
|
|
|
| +#include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "base/time/default_tick_clock.h"
|
| #include "content/public/common/content_client.h"
|
| #include "content/public/renderer/content_renderer_client.h"
|
| +#include "media/base/media_switches.h"
|
| +#include "media/base/video_color_space.h"
|
| +#include "ui/base/ui_base_switches.h"
|
|
|
| namespace content {
|
|
|
| @@ -89,20 +93,96 @@ void RenderMediaClient::RecordRapporURL(const std::string& metric,
|
| GetContentClient()->renderer()->RecordRapporURL(metric, url);
|
| }
|
|
|
| -bool IsTransferFunctionSupported(gfx::ColorSpace::TransferID eotf) {
|
| - switch (eotf) {
|
| +bool IsColorSpaceSupported(const media::VideoColorSpace& color_space) {
|
| + bool color_management =
|
| + base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kEnableHDROutput) ||
|
| + base::FeatureList::IsEnabled(media::kVideoColorManagement);
|
| + switch (color_space.primaries) {
|
| + case media::VideoColorSpace::PrimaryID::EBU_3213_E:
|
| + case media::VideoColorSpace::PrimaryID::INVALID:
|
| + return false;
|
| +
|
| // Transfers supported without color management.
|
| - case gfx::ColorSpace::TransferID::GAMMA22:
|
| - case gfx::ColorSpace::TransferID::BT709:
|
| - case gfx::ColorSpace::TransferID::SMPTE170M:
|
| - case gfx::ColorSpace::TransferID::BT2020_10:
|
| - case gfx::ColorSpace::TransferID::BT2020_12:
|
| - case gfx::ColorSpace::TransferID::IEC61966_2_1:
|
| - return true;
|
| - default:
|
| - // TODO(hubbe): wire up support for HDR transfers.
|
| + case media::VideoColorSpace::PrimaryID::BT709:
|
| + case media::VideoColorSpace::PrimaryID::UNSPECIFIED:
|
| + case media::VideoColorSpace::PrimaryID::BT470M:
|
| + case media::VideoColorSpace::PrimaryID::BT470BG:
|
| + case media::VideoColorSpace::PrimaryID::SMPTE170M:
|
| + break;
|
| +
|
| + // Supported with color management.
|
| + case media::VideoColorSpace::PrimaryID::SMPTE240M:
|
| + case media::VideoColorSpace::PrimaryID::FILM:
|
| + case media::VideoColorSpace::PrimaryID::BT2020:
|
| + case media::VideoColorSpace::PrimaryID::SMPTEST428_1:
|
| + case media::VideoColorSpace::PrimaryID::SMPTEST431_2:
|
| + case media::VideoColorSpace::PrimaryID::SMPTEST432_1:
|
| + if (!color_management)
|
| + return false;
|
| + break;
|
| + }
|
| +
|
| + switch (color_space.transfer) {
|
| + // Transfers supported without color management.
|
| + case media::VideoColorSpace::TransferID::UNSPECIFIED:
|
| + case media::VideoColorSpace::TransferID::GAMMA22:
|
| + case media::VideoColorSpace::TransferID::BT709:
|
| + case media::VideoColorSpace::TransferID::SMPTE170M:
|
| + case media::VideoColorSpace::TransferID::BT2020_10:
|
| + case media::VideoColorSpace::TransferID::BT2020_12:
|
| + case media::VideoColorSpace::TransferID::IEC61966_2_1:
|
| + break;
|
| +
|
| + // Supported with color management.
|
| + case media::VideoColorSpace::TransferID::GAMMA28:
|
| + case media::VideoColorSpace::TransferID::SMPTE240M:
|
| + case media::VideoColorSpace::TransferID::LINEAR:
|
| + case media::VideoColorSpace::TransferID::LOG:
|
| + case media::VideoColorSpace::TransferID::LOG_SQRT:
|
| + case media::VideoColorSpace::TransferID::BT1361_ECG:
|
| + case media::VideoColorSpace::TransferID::SMPTEST2084:
|
| + case media::VideoColorSpace::TransferID::IEC61966_2_4:
|
| + case media::VideoColorSpace::TransferID::SMPTEST428_1:
|
| + case media::VideoColorSpace::TransferID::ARIB_STD_B67:
|
| + if (!color_management)
|
| + return false;
|
| + break;
|
| +
|
| + // Never supported.
|
| + case media::VideoColorSpace::TransferID::INVALID:
|
| return false;
|
| }
|
| +
|
| + switch (color_space.matrix) {
|
| + // Supported without color management.
|
| + case media::VideoColorSpace::MatrixID::BT709:
|
| + case media::VideoColorSpace::MatrixID::UNSPECIFIED:
|
| + case media::VideoColorSpace::MatrixID::BT470BG:
|
| + case media::VideoColorSpace::MatrixID::SMPTE170M:
|
| + case media::VideoColorSpace::MatrixID::BT2020_NCL:
|
| + break;
|
| +
|
| + // Supported with color management.
|
| + case media::VideoColorSpace::MatrixID::RGB:
|
| + case media::VideoColorSpace::MatrixID::FCC:
|
| + case media::VideoColorSpace::MatrixID::SMPTE240M:
|
| + case media::VideoColorSpace::MatrixID::YCOCG:
|
| + case media::VideoColorSpace::MatrixID::YDZDX:
|
| + case media::VideoColorSpace::MatrixID::BT2020_CL:
|
| + if (!color_management)
|
| + return false;
|
| + break;
|
| +
|
| + // Never supported.
|
| + case media::VideoColorSpace::MatrixID::INVALID:
|
| + return false;
|
| + }
|
| +
|
| + if (color_space.range == gfx::ColorSpace::RangeID::INVALID)
|
| + return false;
|
| +
|
| + return true;
|
| }
|
|
|
| bool RenderMediaClient::IsSupportedVideoConfig(
|
| @@ -111,7 +191,7 @@ bool RenderMediaClient::IsSupportedVideoConfig(
|
| switch (config.codec) {
|
| case media::kCodecVP9:
|
| // Color management required for HDR to not look terrible.
|
| - return IsTransferFunctionSupported(config.eotf);
|
| + return IsColorSpaceSupported(config.color_space);
|
|
|
| case media::kCodecH264:
|
| case media::kCodecVP8:
|
|
|