2011-10-06 61 views
3

我尝试将样本缓冲区而不是UIImage保存到数组,以便稍后进行转换。这可以加快图像捕获速度,并且可能不会获得内存警告。我只是不知道如何将其保存到数组,然后再次使用它来调用[self imageFromSampleBuffer:sampleBuffer]。我尝试过这样的事情,但是如何将数据转换回CMSampleBufferRef对象?将sampleBuffer保存在数组中(AVFoundation)

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
    didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
    fromConnection:(AVCaptureConnection *)connection { 
// Create a UIImage from the sample buffer data 
//  UIImage *image = [self imageFromSampleBuffer:sampleBuffer]; 
//  [arrCaptures addObject:image]; 

[arrImageBuffer addObject:[NSData dataWithBytes:sampleBuffer length:sizeof(sampleBuffer)] ];} 

回答

5

为什么不直接使用CFArray并直接放置CMSampleBufferRef对象呢?

+0

谢谢,以及我真的不知道如何做到这一点。我试图把它放在一个NSValue对象中,并且几乎让它工作。我想我有些功课要做。 – Snilleblixten

+0

尝试制作CFMutableArray,然后执行CFArrayAppendValue(arr,sampleBuffer)。 http://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFMutableArrayRef/Reference/reference.html#//apple_ref/c/func/CFArrayAppendValue – Icydog

+0

它似乎工作与\t \t存储CFArrayAppendValue(arrCFImageBuffer ,sampleBuffer); 但是,我没有找到方法让它回来。这是行不通的:\t \t CMSampleBufferRef imageBuffer = CFArrayGetValueAtIndex(arrCFImageBuffer,currImageIdx); – Snilleblixten

4

您可以使用CFArray,但您应该记住CMSampleBufferRef未保留,并且“captureOutput:didOutputSampleBuffer:fromConnection:”使用内存池 - 并且当您不释放内存时,它将停止发送新样本(这就是为什么你只能得到13个样本),因为你可以阅读:captureOutput:didOutputSampleBuffer:fromConnection: