Cópia profunda de CMImageBuffer ou CVImageBuffer
Olá, Atualmente, estou trabalhando em um aplicativo que precisa capturar um vídeo e, ao mesmo tempo, deve conseguir quadros para combiná-los. O problema que estou tendo é que meus quadros são provenientes de:
func captureOutput( captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection! )
cairá após a mistura de 10 a 12 quadros. Tentei misturar todos os quadros 10, mas ele ainda cairá após 10 a 12 quadros misturados.
Eu sei que devo copiar o CVImageBuffer para liberar o imageBuffer que obtive usando o seguinte:let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
Eu também sei que
func CMSampleBufferCreateCopy( _ allocator: CFAllocator?, _ sbuf: CMSampleBuffer, _ sbufCopyOut: UnsafeMutablePointer ) -> OSStatus
cria apenas cópias rasas e não ajuda a liberar a imagem original
Portanto, minha pergunta é: como posso criar uma cópia completa e profunda de umCMSmapleBuffer
ouCVImageBuffer
? Eu gostaria de 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
Mas a função é um pouco esmagadora e não sei de onde obter todos os atributos. Tenho certeza de que posso tirar muito proveito doCMSmapleBuffer
.
Estou procurando uma solução há alguns dias. Se você precisar de mais contexto, não hesite em perguntar. Espero que alguém possa ajudar.