mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-04 01:36:07 +00:00
avutil/hwcontext_videotoolbox: Set CVBuffer CGColorSpace
In addition to the other properties, try to obtain the right CGColorSpace and set it as well, else it could lead to a CVBuffer tagged as BT.2020 but with a CGColorSpace indicating BT.709. Therefore it is essential for consistency to set a colorspace according to the other values, or if none can be obtained (for example because the other values are all unspecified) unset it as well. Fix #10884 Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
This commit is contained in:
parent
b4f9fcc63c
commit
cd9ceaef22
@ -535,6 +535,7 @@ CFStringRef av_map_videotoolbox_color_trc_from_av(enum AVColorTransferCharacteri
|
||||
static int vt_pixbuf_set_colorspace(void *log_ctx,
|
||||
CVPixelBufferRef pixbuf, const AVFrame *src)
|
||||
{
|
||||
CGColorSpaceRef colorspace = NULL;
|
||||
CFStringRef colormatrix = NULL, colorpri = NULL, colortrc = NULL;
|
||||
Float32 gamma = 0;
|
||||
|
||||
@ -587,6 +588,21 @@ static int vt_pixbuf_set_colorspace(void *log_ctx,
|
||||
} else
|
||||
CVBufferRemoveAttachment(pixbuf, kCVImageBufferGammaLevelKey);
|
||||
|
||||
if (__builtin_available(macOS 10.8, iOS 10, *)) {
|
||||
CFDictionaryRef attachments = CVBufferCopyAttachments(pixbuf, kCVAttachmentMode_ShouldPropagate);
|
||||
if (attachments) {
|
||||
colorspace = CVImageBufferCreateColorSpaceFromAttachments(attachments);
|
||||
CFRelease(attachments);
|
||||
}
|
||||
}
|
||||
|
||||
if (colorspace) {
|
||||
CVBufferSetAttachment(pixbuf, kCVImageBufferCGColorSpaceKey,
|
||||
colorspace, kCVAttachmentMode_ShouldPropagate);
|
||||
CFRelease(colorspace);
|
||||
} else
|
||||
CVBufferRemoveAttachment(pixbuf, kCVImageBufferCGColorSpaceKey);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user