CMSampleBufferRef到位图?

时间:2013-10-14 00:53:21

标签: objective-c xcode macos avfoundation

我正在使用Apple网站(Xcode项目)中的AVScreenShack示例,该示例捕获桌面并在准实时窗口中显示捕获。

我稍微修改了项目并插入了这行代码:

-(void)captureOutput:(AVCaptureOutput*) captureOutput didOutputSampleBuffer:(CMSampleBufferRef) sampleBuffer fromConnection:(AVCaptureConnection*) connection
{
 ...
}

我的问题是:如何将CMSampleBufferRef实例转换为CGImageRef?

谢谢。

1 个答案:

答案 0 :(得分:2)

以下是如何从CMSampleBufferRef创建UIImage。在captureStillImageAsynchronouslyFromConnection:completionHandler:上回复AVCaptureStillImageOutput时,这对我有用。

// CMSampleBufferRef imageDataSampleBuffer;
CMBlockBufferRef buff = CMSampleBufferGetDataBuffer(imageDataSampleBuffer);
size_t len = CMBlockBufferGetDataLength(buff);
char * data = NULL;
CMBlockBufferGetDataPointer(buff, 0, NULL, &len, &data);
NSData * d = [[NSData alloc] initWithBytes:data length:len];
UIImage * img = [[UIImage alloc] initWithData:d];

看起来CMBlockBufferGetDataPointer的数据是JPEG数据。

更新:要完全回答您的问题,您可以从我的代码中致电CGImage img以实际获得CGImageRef