我正在开展一个项目,用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?
答案 0 :(得分:1)
为什么不使用AVSampleBufferDisplayLayer
来显示您的BGRA样本缓冲区和沟渠webRTC(至少是为了显示目的)?
如果您不想这样做,您当然可以将您的BGRA缓冲区转换为YUV,甚至可以在GPU上高效地进行转换,但最好的转换不是转换,除了谁想要输入那么多在iPad屏幕键盘上?