Retención de CMSampleBufferRef desde la alimentación de la camera

Estoy escribiendo una aplicación AR que utiliza la alimentación de la camera para tomar fotografías colocadas en ciertos lugares del mundo. Ahora encontré un problema que no estoy seguro de qué hacer.

Estoy usando CVOpenGLESTextureCacheRef para crear texturas desde CMSampleBufferRef. La alimentación de la camera se muestra y funciona perfectamente. El problema ocurre cuando capturo 12 fotos y crea texturas de ellas. La forma en que funciona es que una vez que detecto una coincidencia con el objective, creo una textura como esta:

CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBufferCopy); size_t frameWidth = CVPixelBufferGetWidth(pixelBuffer); size_t frameHeight = CVPixelBufferGetHeight(pixelBuffer); CVOpenGLESTextureRef texture = NULL; CVReturn err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, cache, pixelBuffer, NULL, GL_TEXTURE_2D, GL_RGBA, (GLsizei)frameWidth, (GLsizei)frameHeight, GL_BGRA, GL_UNSIGNED_BYTE, 0, &texture); if (!texture || err) { NSLog(@"CVOpenGLESTextureCacheCreateTextureFromImage failed (error: %d)", err); return; } CVOpenGLESTextureCacheFlush(cache, 0); 

La textura se asigna a la location de la foto en el mundo y se representa. No estoy liberando textura aquí porque lo necesito en el futuro. La textura utilizada como alimentación de la camera obviamente se está liberando.

El problema aparece cuando se toma la 12ª foto. The captureOutput:didOutputSampleBuffer:fromConnection: callback no se llama más. Entiendo que sucede porque el grupo está lleno, como se señala en la documentation:

Si su aplicación hace que las muestras se eliminen al retener los objects CMSampleBufferRef proporcionados por mucho time, pero necesita acceso a los datos de muestra durante un período prolongado, considere copyr los datos en un nuevo búfer y luego liberar el búfer de muestra (si se retuvo previamente) para que la memory a la que hace reference pueda reutilizarse.

Sin embargo, no estoy seguro de qué hacer. Intenté usar CMSampleBufferCreateCopy para crear una copy del búfer pero no funcionó porque como dice la documentation, crea una copy superficial.

¿Cómo manejo esto de la manera más eficiente?