0

我发现不同的Iphone硬件编码器有不同的矩阵用于将输入RGB转换为YUV。即在函数​​OSStatus VTCompressionSessionEncodeFrame(VTCompressionSessionRef session, CVImageBufferRef imageBuffer, CMTimepresentationTimeStamp, CMTime duration, CFDictionaryRef frameProperties, void *sourceFrameRefcon, VTEncodeInfoFlags *infoFlagsOut); imageBuffer格式是RGB。在编码之前,VideoToolBox会将RGB转换为YUV并发送给编码器。我想知道VideoToolBox用什么样的矩阵来进行RGB到YUV的转换,以及如何控制转换矩阵的选择。硬件编码器VideoToolbox的输入参数中,只有kVTCompressionPropertyKey_YCbCrMatrix与颜色转换有关。但该参数不控制输入RGB到YUV矩阵。因为我尝试输入不同的值,结果没有改变。这导致解码时无法匹配矩阵,导致色差。我在网上搜索了很长时间。但是没有用。请帮助或尝试提供一些想法如何实现这一目标。

4

2 回答 2

0

这个问题已经解决。在VideoToolBox中设置kVTCompressionPropertyKey_PixelTransferProperties来控制RGB到YUV矩阵的转换

于 2020-10-21T09:17:18.273 回答
0
    CFMutableDictionaryRef attrs = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
    CFDictionarySetValue(attrs, kVTPixelTransferPropertyKey_DestinationYCbCrMatrix, kCVImageBufferYCbCrMatrix_ITU_R_601_4);//kCVImageBufferYCbCrMatrix_ITU_R_709_2
    status = VTSessionSetProperty(_encoderSession, kVTCompressionPropertyKey_PixelTransferProperties, attrs);
于 2020-10-22T01:24:30.720 回答