我使用三个类在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字节的用途是什么?
答案 0 :(得分:2)
来自CVPixelBufferGetDataSize
:
返回PixelBuffer的连续平面的数据大小。
也许它指的是当您使用“矮胖”缓冲区调用CVPixelBufferGetBaseAddress
时所得到的内容:
对于chunky缓冲区,这将返回指向缓冲区中0,0处像素的指针。对于平面缓冲区,这将返回指向PlanarComponentInfo结构的指针
所以它可能是CVPlanarPixelBufferInfo
结构,其中每个通道有4个8字节CVPlanarComponentInfo
字段。