iOS&MAC摄像头采集格式

  kCVPixelFormatType_420YpCbCr8Planar = 'y420',  
 /* Planar Component Y'CbCr 8-bit 4:2:0.  baseAddr points to a big-endian CVPlanarPixelBufferInfo_YCbCrPlanar struct */

  kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v', 
/* Bi-Planar Component Y'CbCr 8-bit 4:2:0, video-range (luma=[16,235] chroma=[16,240]).  baseAddr points to a big-endian CVPlanarPixelBufferInfo_YCbCrBiPlanar struct */

  kCVPixelFormatType_420YpCbCr8BiPlanarFullRange  = '420f', 
/* Bi-Planar Component Y'CbCr 8-bit 4:2:0, full-range (luma=[0,255] chroma=[1,255]).  baseAddr points to a big-endian CVPlanarPixelBufferInfo_YCbCrBiPlanar struct */ 

YpCbCr

Y分量:Y,U分量:Cb,V分量:Cr。即YUV格式的数据。
#######8-bit
并且每个点采用8bit来保存一个Y的亮度。

4:2:0

YUV的详细格式为:4:2:0。

baseAddr points to a big-endian CVPlanarPixelBufferInfo_YCbCrPlanar struct

YUV数据的地址在CVPlanarPixelBufferInfo_YCbCrPlanar中以大端的形式存储。

Planar & Bi-Planar

第一个是Planar模式,第二个是BiPlanar模式。
Planar格式就是单平面模式,在这个模式下,一个buf存储所有的数据。将Y、U、V分量分别打包,依次存储。即YYYY...U...V...即I420.
BiPlanar格式就是双平面模式,在这个模式下,亮度和色度被分成两个buf来存储。将Y和UV分别打包,一次存储。即YYYY...UV...即NV12.

VideoRange & FullRange

亮度和色度的取值为8位,即2^8 = 256即可取值为【0-255】
VideoRange能取的值宽度为【16-235】
FullRange能取得值宽度为【0-255】

采集信息查看

查看采集到的信息。

CMSampleBufferGetFormatDescription(sampleBuffer);

#######如何从采集的CMSampleBufferRef中取得YUV数据
转化为CVImageBufferRef:

CVImageBufferRef buffer = CMSampleBufferGetImageBuffer(sampleBuffer);

获取宽高:

CVPixelBufferGetWidth(pixelBuffer);
CVPixelBufferGetHeight(pixelBuffer);

取得YUV数据地址:

CVPixelBufferGetBaseAddressOfPlane(pixelBuffer,Plane_index);
//这里的Plane_index与上文的Plane模式相关
如果是Plane模式则直接取到所有数据
如果是BiPlane则需要分两次,即Plane_index=0取得Y分量地址与Plane_index=1取得UV分量的地址
注意事项

在操作pixelBuffer的时候记得加上锁

    CVPixelBufferLockBaseAddress(pixelBuffer, lockFlag);
    //在这里操作
    CVPixelBufferUnlockBaseAddress(pixelBuffer, lockFlag);

你可能感兴趣的:(iOS&MAC摄像头采集格式)