首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用哪个YCbCr矩阵?BT.709或BT.601

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

Stack Overflow用户
提问于 2016-12-19 07:20:59
回答 1查看 2.7K关注 0票数 6

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

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

概念证明代码是受苹果的示例代码启发的.AVFoundation在YCbCr颜色空间中提供每个帧,需要将其转换为RGB以在OpenGL中呈现。根据不同的YCbCr标准(例如国际电联-R BT.709、ITU BT.601),这种转换似乎有多个转换矩阵选项。示例代码通过以下代码确定要使用的代码:

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

但是,我使用的是colorAttachment,返回的Unmanaged<CFTypeRef>是类型的,而常数的kCVImageBufferYCbCrMatrix_ITU_R_601_4CFString类型的,所以它们不能直接相等。我做了一些研究,结果是:

代码语言:javascript
运行
复制
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,我可以硬编码任何一个吗?这样做的后果是什么?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-31 14:44:33

使用takeUnretainedValue()将为您提供一个CFTypeRef。然后,这需要从下浇CFString。例如,代码可能如下所示:

代码语言:javascript
运行
复制
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)
}

其中的指纹:

代码语言:javascript
运行
复制
ITU_R_601_4
true
false
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41217608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档