Я пытаюсь преобразовать кадр 4:3 в кадр 16:9 в конвейере захвата видео. А преобразованный кадр потребует дальнейшей обработки. Поэтому мне нужно сохранить закрытый кадр как CVImageBufferRef
. Я просмотрел этот поток переполнения стека и позаимствовал из него некоторые идеи /CVImageBufferRef
вот что я сделал:
int cropX0 = 0, cropY0 = 60, cropHeight = 360, cropWidth = 640, outWidth = 640, outHeight = 360;
//get CVPixel buffer from CMSampleBuffer
CVPixelBufferRef imageBuffer = CMSampleBufferGetImageBuffer(cmSampleBuffer);
CVPixelBufferLockBaseAddress(imageBuffer,0);
void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t startpos = cropY0 * bytesPerRow;
void* cropStartAddr = ((char*)baseAddress) + startpos;
CVPixelBufferRef cropPixelBuffer = NULL;
int status = CVPixelBufferCreateWithBytes(kCFAllocatorDefault,
outWidth,
outHeight,
CVPixelBufferGetPixelFormatType(imageBuffer),
cropStartAddr,
bytesPerRow,
NULL,
0,
NULL,
&cropPixelBuffer);
if(status == 0){
OSStatus result = 0;
}
Но после этого метода. если мы проверим cropPixelBuffer из Xcode. это похоже на поврежденный образ.
Исходное изображение выглядит так
Я думаю, это может быть из-за того, что цветовой формат - формат пикселей NV12 yuv. Спасибо за вашу помощь.