为什么CVPixelBufferGetDataSize总是返回32字节的更多数据?

时间:2016-11-26 04:55:11

标签: avfoundation

我使用三个类在OSX上进行屏幕捕获

AVCaptureSession  *m_captureSession;   // AVCaptureSession
AVCaptureScreenInput  *m_screenInput;      //AVCaptureScreenInput
AVCaptureVideoDataOutput  *m_videoOutput;      // AVCaptureVideoDataOutput

当新帧可用时,AVCaptureVideoDataOutputSampleBufferDelegate作为回调。

但是当我调用CVPixelBufferGetDataSize来获取缓冲区中的帧大小时,它总是返回32个字节。

例如,屏幕尺寸为2880 * 1800,每个像素包含4字节数据(ARGB模式)。 因此帧大小应为2880 * 1800 * 4字节作为图像。但CVPixelBufferGetDataSize始终返回2880 * 1800 * 4 + 32字节。

有谁知道这个32字节的用途是什么?

1 个答案:

答案 0 :(得分:2)

来自CVPixelBufferGetDataSize

  

返回PixelBuffer的连续平面的数据大小。

也许它指的是当您使用“矮胖”缓冲区调用CVPixelBufferGetBaseAddress时所得到的内容:

  

对于chunky缓冲区,这将返回指向缓冲区中0,0处像素的指针。对于平面缓冲区,这将返回指向PlanarComponentInfo结构的指针

所以它可能是CVPlanarPixelBufferInfo结构,其中每个通道有4个8字节CVPlanarComponentInfo字段。