将sampleBuffer保存在数组中(AVFoundation)

Sni*_*ten 3 iphone objective-c avfoundation

我尝试将样本缓冲区而不是UIImage保存到数组中,以便稍后进行转换.这样可以加快图像捕获速度,也可能无法获得内存警告.我只是无法弄清楚如何将它保存到数组然后再次使用它来调用[self imageFromSampleBuffer:sampleBuffer].我试过这样的东西,但是如何将数据转换回CMSampleBufferRef对象呢?

- (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)] ];}
Run Code Online (Sandbox Code Playgroud)

小智 5

为什么不直接使用CFArray并将CMSampleBufferRef对象放在那里?

  • @Snilleblixten-这是因为AVFoundation使用了13个(在您的情况下)预分配的CMSampleBuffer实例池并对其进行回收。由于您将它们添加到阵列中,因此它们将保留并且不会释放回池中。您必须创建CMSampleBuffer的副本(CMSampleBufferCopy创建浅表副本,因此它将不起作用),然后将缓冲区释放回池中。 (2认同)