CMSampleBuffer 将 BGRA 转换为 YUV 420f
CMSampleBuffer convert BGRA to YUV 420f
我正在做一个项目,我用 AVCaptureSession
捕获用户的视频输入。问题是我需要 BGRA 格式的输出以使用 OpenCV 渲染它,但随后我需要将其更改回默认的 420f 格式以将其显示给用户。所以,我将videoSettings
中的PixelFormatType
设置为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
}
有办法吗?或者,也许有一个函数 returns 给定输入的指定格式的样本缓冲区?
为什么不使用 AVSampleBufferDisplayLayer
来显示 BGRA 示例缓冲区并放弃 webRTC(至少为了显示目的)?
如果你不想那样做,你当然可以将你的 BGRA 缓冲区转换为 YUV,你甚至可以在 GPU 上非常有效地完成它,但最好的转换是不转换,而且谁想输入iPad 屏幕键盘有那么多?
我正在做一个项目,我用 AVCaptureSession
捕获用户的视频输入。问题是我需要 BGRA 格式的输出以使用 OpenCV 渲染它,但随后我需要将其更改回默认的 420f 格式以将其显示给用户。所以,我将videoSettings
中的PixelFormatType
设置为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
}
有办法吗?或者,也许有一个函数 returns 给定输入的指定格式的样本缓冲区?
为什么不使用 AVSampleBufferDisplayLayer
来显示 BGRA 示例缓冲区并放弃 webRTC(至少为了显示目的)?
如果你不想那样做,你当然可以将你的 BGRA 缓冲区转换为 YUV,你甚至可以在 GPU 上非常有效地完成它,但最好的转换是不转换,而且谁想输入iPad 屏幕键盘有那么多?