使用kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange格式中创建的像素缓冲区压缩视频

时间:2011-10-17 05:47:55

标签: ios video video-encoding

我有一个YCbCr格式的双平面原始视频缓冲数据,我用它作为源码在iPhone和iPad上压缩H.264格式的一个新的mp4 / mov视频。因此,我使用CVPixelBufferRef创建一个新的像素缓冲区,然后使用AVAssetWriterInputPixelBufferAdaptor附加到视频编写器。

但是,当我使用其中包含YCbCr数据的新像素缓冲区调用appendPixelBuffer时,appendPixelBuffer仅为附加的第一帧返回YES。作者拒绝所有其他帧(通过返回NO)。问题是,如果我使用BGRA32格式的原始视频数据,它工作得很好,所以我想知道我是否有一个错误创建的YCbCr格式的像素缓冲区。

我有两种创建像素缓冲区的方法:

1)使用CVPixelBufferCreateWithBytes

cvErr = CVPixelBufferCreateWithBytes(kCFAllocatorDefault,
                                     videoWidth_,
                                     videoHeight_,
                                 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
                                     [videoFrame getBaseAddressOfPlane:0],
                                     [videoFrame getBytesPerRowOfPlane:0],
                                     NULL,
                                     NULL,
                                     NULL,
                                     &pixelBuffer);

2)使用CVPixelBufferCreateWithPlanarBytes

cvErr = CVPixelBufferCreateWithPlanarBytes(kCFAllocatorDefault,
                                           videoWidth_,
                                           videoHeight_,
                                 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
                                           NULL,
                                           0,
                                           videoFrame.planeCount,
                                           planeBaseAddress,
                                           planeWidth,
                                           planeHeight,
                                           planeStride,
                                           NULL,
                                           NULL,
                                           NULL,
                                           &pixelBuffer);

planeBaseAddressplaneWidthplaneHeightplaneStride是包含Y平面和CbCr平面的基地址,宽度,高度和步幅的2D数组。

那么你能告诉我我在哪里做错了,或者我是否可以参考一些示例代码,或者这是否是iPhone SDK的问题?

0 个答案:

没有答案