ビデオキャプチャパイプラインで4:3フレームから16:9フレームに変換しようとしています。変換されたフレームは、さらに処理が必要です。したがって、私は覆われたフレームをCVImageBufferRef
としておく必要があります。 私は、このスタックオーバーフローのスレッドを見て、ここから iOS - Scale and crop CMSampleBufferRef/CVImageBufferRefCVPixelBufferRefサンプルを4:3から16:9に変換する
をいくつかのアイデアを借りて、私がやったことです:
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;
}
しかし、この方法の後に。 XcodeからcropPixelBufferを検査する場合。それは壊れた画像のように見えます。
のように見える私はそれが理由カラーフォーマットであることができると思い、あなたの画像データがある場合は、あなたの助け
の形式は、kCVPixelFormatType_420YpCbCr8BiPlanarVideoRangeです。私は別にUVを渡す必要があると思う。 – user454083
はい、それは作物に2つのビットマップがあることを意味する –