CMSampleBuffer将BGRA转换为YUV 420f

时间:2018-03-26 10:05:33

标签: ios objective-c opencv avfoundation avcapturesession

我正在开展一个项目,用AVCaptureSession捕获用户的视频输入。问题是我需要BGRA格式的输出来使用OpenCV渲染它,但是我需要将其更改回默认的420f格式以将其显示给用户。因此,我将PixelFormatType中的videoSettings设置为kCVPixelFormatType_32BGRA

[videoOutput setVideoSettings:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey]];

我想在captureOutput:

中将样本缓冲区转换为420f
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
    [self doSomeOpenCV:sampleBuffer]; // the OpenCV part

    //convert sampleBuffer to kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange

}

有没有办法这样做?或者,有一个函数在给定输入的情况下返回指定格式的samplebuffer?

1 个答案:

答案 0 :(得分:1)

为什么不使用AVSampleBufferDisplayLayer来显示您的BGRA样本缓冲区和沟渠webRTC(至少是为了显示目的)?

如果您不想这样做,您当然可以将您的BGRA缓冲区转换为YUV,甚至可以在GPU上高效地进行转换,但最好的转换不是转换,除了谁想要输入那么多在iPad屏幕键盘上?