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,
|
static int vt_pixbuf_set_colorspace(void *log_ctx,
|
||||||
CVPixelBufferRef pixbuf, const AVFrame *src)
|
CVPixelBufferRef pixbuf, const AVFrame *src)
|
||||||
{
|
{
|
||||||
|
CGColorSpaceRef colorspace = NULL;
|
||||||
CFStringRef colormatrix = NULL, colorpri = NULL, colortrc = NULL;
|
CFStringRef colormatrix = NULL, colorpri = NULL, colortrc = NULL;
|
||||||
Float32 gamma = 0;
|
Float32 gamma = 0;
|
||||||
|
|
||||||
@ -587,6 +588,21 @@ static int vt_pixbuf_set_colorspace(void *log_ctx,
|
|||||||
} else
|
} else
|
||||||
CVBufferRemoveAttachment(pixbuf, kCVImageBufferGammaLevelKey);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user