У меня есть двухплоскостные необработанные данные видеобуфера в формате YCbCr, которые я использую в качестве источника для сжатия одного нового видео mp4 / mov в формате H.264 на iPhone и iPad. Поэтому я использую CVPixelBufferRef
для создания нового пиксельного буфера, а затем AVAssetWriterInputPixelBufferAdaptor
для добавления в программу записи видео.
Однако, когда я вызываю appendPixelBuffer
с новым пиксельным буфером с данными YCbCr, 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);
planeBaseAddress
, planeWidth
, planeHeight
, planeStride
- это двумерные массивы, содержащие базовый адрес, ширину, высоту и шаг плоскости Y и плоскости CbCr.
Так вы можете показать мне, где я делаю что-то не так, или есть какой-то пример кода, на который я могу сослаться, или это проблема iPhone SDK?