Глубокая копия 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,

Я искал решение в течение нескольких дней. Если вам нужно больше контекста, пожалуйста, не стесняйтесь спрашивать. Я надеюсь, что Сомоне может помочь.

0 ответов

Другие вопросы по тегам