是否可以在VideoToolBox中控制RGB到YUV矩阵的转换



我发现不同的Iphone硬件编码器有不同的矩阵来将输入RGB转换为YUV。也就是说,在函数OSStatus VTCompressionSessionEncodeFrame中(VTCompressionsSessionRef session,CVImageBufferRef imageBuffer,CMTime presentationTimeStamp,CMTime duration,CFDictionaryRef-frameProperties,void*sourceFrameRefcon,VTEncodeInfoFlags*infoFlagsOut(;imageBuffer格式为RGB。在编码之前,VideoToolBox会将RGB转换为YUV并发送给编码器。我想知道VideoToolBox使用什么样的矩阵将RGB转换为YUV,以及如何控制转换矩阵的选择。在硬件编码器VideoToolbox的输入参数中,只有kVTCompression PropertyKey_YCbCr矩阵与颜色转换有关。但该参数并不控制输入RGB到YUV矩阵。因为我试图输入一个不同的值,所以它没有改变。这导致在解码过程中无法匹配矩阵,从而导致色差。我在网上搜索了很长时间。但没有用。请帮助或尝试给出一些如何实现这一目标的想法。

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

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);

最新更新