如何获取原始YUV420p相机数据

时间:2014-06-09 03:44:24

标签: ios camera ffmpeg rtmp yuv

我不知道用于获取原始YUV420p数据的值。首先是以下代码:

AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
output.alwaysDiscardsLateVideoFrames = YES;
output.videoSettings = @{(id)kCVPixelBufferPixelFormatTypeKey: [NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarFullRange]};
//output.videoSettings = @{(id)kCVPixelBufferPixelFormatTypeKey: [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]};

dispatch_queue_t queue;
queue = dispatch_queue_create("CameraQueue", NULL);
[output setSampleBufferDelegate:self queue:queue];

[session addOutput:output];

我注意到kCVPixelFormatType有一些值,有人知道哪个值对于获取原始YUV420p数据是正确的吗?

kCVPixelFormatType_420YpCbCr8Planar
kCVPixelFormatType_420YpCbCr8PlanarFullRange
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange

可以是其中之一吗?

1 个答案:

答案 0 :(得分:4)

这取决于您想要获得的YUV420: Planar / Biplanar指的是内存中亮度和色度分量的排列,Planar表示每个组件都在缓冲区中,连续或不连续,Biplanar指向两个缓冲区,一个用于亮度,另一个用于色度,通常是交错的。 Planar格式为YUV420Biplanar的示例为NV21NV12

VideoRangeFullRange是指亮度组件的值,Video是指[16,235]接受的级别和FullRange到[0,255]。这个令人困惑的协议来自MPEG标准(see here)......