Copia profunda de CMImageBuffer o CVImageBuffer
Hola, actualmente estoy trabajando en una aplicación que necesita capturar un video y, al mismo tiempo, debería poder tomar fotogramas para combinarlos. El problema que tengo es que mis cuadros provienen de:
func captureOutput( captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection! )
caerá después de mezclar unos 10-12 cuadros. Traté de mezclar cada décimo cuadro, pero seguirá bajando después de 10-12 cuadros mezclados.
Sé que debo copiar el CVImageBuffer para liberar el imageBuffer que obtuve usando lo siguiente:let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
Yo tambien se que
func CMSampleBufferCreateCopy( _ allocator: CFAllocator?, _ sbuf: CMSampleBuffer, _ sbufCopyOut: UnsafeMutablePointer ) -> OSStatus
solo crea copias superficiales y no ayudará a liberar la imagen original
Entonces mi pregunta es: ¿Cómo puedo crear una copia profunda completa de unCMSmapleBuffer
oCVImageBuffer
? Me gustaría usar:
func CMSampleBufferCreate( _ allocator: CFAllocator?, _ dataBuffer: CMBlockBuffer?, _ dataReady: Bool, _ makeDataReadyCallback: CMSampleBufferMakeDataReadyCallback?, _ makeDataReadyRefcon: UnsafeMutablePointer, _ formatDescription: CMFormatDescription?, _ numSamples: CMItemCount, _ numSampleTimingEntries: CMItemCount, _ sampleTimingArray: UnsafePointer, _ numSampleSizeEntries: CMItemCount, _ sampleSizeArray: UnsafePointer, _ sBufOut: UnsafeMutablePointer ) -> OSStatus
Pero la función es un poco abrumadora y no sé de dónde obtener todos los atributos. Estoy seguro de que puedo tomar mucho de lo dadoCMSmapleBuffer
.
He estado buscando una solución durante un par de días. Si necesita más contexto, no dude en preguntar. Espero que alguien pueda ayudar.