Глубокая копия CMImageBuffer или CVImageBuffer
Привет, я в настоящее время работаю над приложением, которое должно захватывать видео и в то же время должно иметь возможность снимать кадры, чтобы смешать их. У меня проблема в том, что мои кадры приходят из:
func captureOutput( captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection! )
будет падать после смешивания около 10-12 кадров. Я пробовал смешивать каждый 10-й кадр, но он все равно будет падать после 10-12 смешанных кадров.
Я знаю, что я должен скопировать CVImageBuffer, чтобы выпустить imageBuffer, который я получил, используя следующее:let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
Я тоже знаю что
func CMSampleBufferCreateCopy( _ allocator: CFAllocator?, _ sbuf: CMSampleBuffer, _ sbufCopyOut: UnsafeMutablePointer ) -> OSStatus
создает только мелкие копии и не поможет выпустить исходный imageBuffer
Итак, мой вопрос: как я могу создать полную глубокую копиюCMSmapleBuffer
или жеCVImageBuffer
? Я хотел бы использовать:
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
Но функция немного перегружена, и я не знаю, откуда взять все атрибуты. Я уверен, что могу многое почерпнуть из данногоCMSmapleBuffer
.
Я искал решение в течение нескольких дней. Если вам нужно больше контекста, пожалуйста, не стесняйтесь спрашивать. Я надеюсь, что Сомоне может помочь.