我理解 CVBufferSetAttachment 只是将元数据附件附加到字典中的样本缓冲区。但是我发现附加本质上矛盾的元数据没有错误。例如,对于在 HDR 模式下从相机接收到的 YUV422 10 位双平面格式的样本缓冲区,以下两项均成功:
CVBufferSetAttachment(testPixelBuffer!, kCVImageBufferColorPrimariesKey, kCVImageBufferColorPrimaries_ITU_R_2020, .shouldPropagate)
CVBufferSetAttachment(testPixelBuffer!, kCVImageBufferTransferFunctionKey, kCVImageBufferTransferFunction_ITU_R_2100_HLG, .shouldPropagate)
CVBufferSetAttachment(testPixelBuffer!, kCVImageBufferYCbCrMatrixKey, kCVImageBufferYCbCrMatrix_ITU_R_2020, .shouldPropagate)
或
CVBufferSetAttachment(testPixelBuffer!, kCVImageBufferColorPrimariesKey, kCVImageBufferColorPrimaries_ITU_R_709_2, .shouldPropagate)
CVBufferSetAttachment(testPixelBuffer!, kCVImageBufferTransferFunctionKey, kCVImageBufferTransferFunction_ITU_R_709_2, .shouldPropagate)
CVBufferSetAttachment(testPixelBuffer!, kCVImageBufferYCbCrMatrixKey, kCVImageBufferYCbCrMatrix_ITU_R_709_2, .shouldPropagate)
因此可以将颜色原色和传递函数设置为 BT.709 格式,用于 10 位 HDR 中的样本缓冲区。当任一示例缓冲区附加到 AVAssetWriter 时,我没有看到任何错误。我想知道附件实际上是如何工作的以及 AVFoundation 如何解决矛盾?