gpt4 book ai didi

ios - 使用哪个 YCbCr 矩阵? BT.709 或 BT.601

转载 作者:可可西里 更新时间:2023-11-01 06:02:19 33 4
gpt4 key购买 nike

我正在 iOS 上开发一个视频播放器项目。

它使用 AVFoundation提取 CVPixelBuffer从视频文件中提取,然后将该缓冲区作为纹理发送到 OpenGL。

概念验证代码的灵感来自 Apple's sample code .AVFoundation 提供 YCbCr 颜色空间中的每一帧,需要将其转换为 RGB 才能在 OpenGL 中渲染。此转换似乎有多个转换矩阵选项,具体取决于不同的 YCbCr 标准(例如 ITU-R BT.709, ITU-R BT.601 )。示例代码通过以下代码确定使用哪一个:

CFTypeRef colorAttachments = CVBufferGetAttachment(pixelBuffer, kCVImageBufferYCbCrMatrixKey, NULL);
if (colorAttachments == kCVImageBufferYCbCrMatrix_ITU_R_601_4) {
_preferredConversion = kColorConversion601;
}
else {
_preferredConversion = kColorConversion709;
}

但是,我使用的是 swift 和返回值 colorAttachment类型为 Unmanaged<CFTypeRef>而常量 kCVImageBufferYCbCrMatrix_ITU_R_601_4类型为 CFString所以他们不能直接相等。我做了一些研究,结果是:

CFEqual(colorAttachments, kCVImageBufferYCbCrMatrix_ITU_R_601_4) // returns false
CFEqual(colorAttachments, kCVImageBufferYCbCrMatrix_ITU_R_709_2) // returns false too!!
//-----------------------------------------
CFGetType(colorAttachments) // returns 1
CFStringGetType() // returns 7, note kCVImageBufferYCbCrMatrix_ITU_R_601_4 is of type CFString
// so I still can't check their equality
// because the retrieved colorAttachments is not of type CFString at all

我通过对矩阵进行硬编码来逐一尝试两个变换,结果(渲染的场景)对人眼来说似乎没有区别,这是可以预见的,因为两个变换矩阵没有太大区别。

我的问题:

  1. 如何确定要使用的转换?
  2. 如果无法解决 [1.],我可以对其中任何一个进行硬编码吗?这样做的后果是什么?

最佳答案

使用 takeUnretainedValue()会给你一个CFTypeRef。这需要是 downcastCFString。例如,您的代码可能如下所示:

if let colorAttachment = CVBufferGetAttachment(image, kCVImageBufferYCbCrMatrixKey, nil)?.takeUnretainedValue(),
CFGetTypeID(colorAttachment) == CFStringGetTypeID() {
let colorAttachmentString = colorAttachment as! CFString
print(colorAttachmentString)
print(colorAttachmentString == kCVImageBufferYCbCrMatrix_ITU_R_601_4)
print(colorAttachmentString == kCVImageBufferYCbCrMatrix_ITU_R_709_2)
}

打印:

ITU_R_601_4
true
false

关于ios - 使用哪个 YCbCr 矩阵? BT.709 或 BT.601,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41217608/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com