From 9b7fa136e8949fed466608e623995b5038d60f8a Mon Sep 17 00:00:00 2001 From: Brad Werth Date: Fri, 22 Apr 2022 22:10:19 +0000 Subject: [PATCH] Bug 1764618 Part 3: Make macOS hardware decode respect transfer functions. r=media-playback-reviewers,alwu Differential Revision: https://phabricator.services.mozilla.com/D143839 --- dom/media/platforms/apple/AppleVTDecoder.cpp | 13 ++++++++++--- dom/media/platforms/apple/AppleVTDecoder.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/dom/media/platforms/apple/AppleVTDecoder.cpp b/dom/media/platforms/apple/AppleVTDecoder.cpp index ef1fe9ee6803..11de03b3230e 100644 --- a/dom/media/platforms/apple/AppleVTDecoder.cpp +++ b/dom/media/platforms/apple/AppleVTDecoder.cpp @@ -44,6 +44,8 @@ AppleVTDecoder::AppleVTDecoder(const VideoInfo& aConfig, mColorSpace(aConfig.mColorSpace ? *aConfig.mColorSpace : DefaultColorSpace({mPictureWidth, mPictureHeight})), + mTransferFunction(aConfig.mTransferFunction ? *aConfig.mTransferFunction + : gfx::TransferFunction::PQ), mColorRange(aConfig.mColorRange), mColorDepth(aConfig.mColorDepth), mStreamType(MP4Decoder::IsH264(aConfig.mMimeType) ? StreamType::H264 @@ -430,6 +432,8 @@ void AppleVTDecoder::OutputFrame(CVPixelBufferRef aImage, } else { #if !defined(MAC_OS_VERSION_10_13) || \ MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_VERSION_10_13 + CFStringRef kCVImageBufferTransferFunction_ITU_R_2100_HLG = + CFSTR("ITU_R_2100_HLG"); CFStringRef kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ = CFSTR("SMPTE_ST_2084_PQ"); #endif @@ -459,9 +463,12 @@ void AppleVTDecoder::OutputFrame(CVPixelBufferRef aImage, CVBufferSetAttachment(aImage, kCVImageBufferColorPrimariesKey, kCVImageBufferColorPrimaries_ITU_R_2020, kCVAttachmentMode_ShouldPropagate); - CVBufferSetAttachment(aImage, kCVImageBufferTransferFunctionKey, - kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ, - kCVAttachmentMode_ShouldPropagate); + CVBufferSetAttachment( + aImage, kCVImageBufferTransferFunctionKey, + (mTransferFunction == gfx::TransferFunction::HLG) + ? kCVImageBufferTransferFunction_ITU_R_2100_HLG + : kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ, + kCVAttachmentMode_ShouldPropagate); } CFTypeRefPtr surface = diff --git a/dom/media/platforms/apple/AppleVTDecoder.h b/dom/media/platforms/apple/AppleVTDecoder.h index 167d28c6ff8a..1bfc0e9300d1 100644 --- a/dom/media/platforms/apple/AppleVTDecoder.h +++ b/dom/media/platforms/apple/AppleVTDecoder.h @@ -91,6 +91,7 @@ class AppleVTDecoder : public MediaDataDecoder, const uint32_t mDisplayWidth; const uint32_t mDisplayHeight; const gfx::YUVColorSpace mColorSpace; + const gfx::TransferFunction mTransferFunction; const gfx::ColorRange mColorRange; const gfx::ColorDepth mColorDepth; -- 2.11.4.GIT