Глубокая копия CMImageBuffer или CVImageBuffer
Привет, я в настоящее время работаю над приложением, которое должно захватывать видео и в то же время должно иметь возможность снимать кадры, чтобы смешать их. У меня проблема в том, что мои кадры приходят из:
func captureOutput (captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, От подключения: 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
,
Я искал решение в течение нескольких дней. Если вам нужно больше контекста, пожалуйста, не стесняйтесь спрашивать. Я надеюсь, что Сомоне может помочь.