Deep Copy von CMImageBuffer oder CVImageBuffer

Hi Ich arbeite derzeit an einer App, die ein Video aufnehmen muss und gleichzeitig Frames aufnehmen kann, um sie zu mischen. Das Problem, das ich habe, ist, dass meine Frames kommen von:

func captureOutput(
     captureOutput: AVCaptureOutput!,
     didOutputSampleBuffer sampleBuffer:
     CMSampleBuffer!,
     fromConnection connection: AVCaptureConnection!
)

wird nach dem Mischen etwa 10-12 Frames fallen. Ich habe versucht, jedes 10. Bild zu überblenden, aber es wird immer noch nach 10-12 überblendeten Bildern abfallen.

Ich weiß, dass ich den CVImageBuffer kopieren sollte, um den imageBuffer freizugeben, den ich mit folgendem Befehl erhalten habe:let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)

Ich weiß auch, dass

func CMSampleBufferCreateCopy(
     _ allocator: CFAllocator?,
     _ sbuf: CMSampleBuffer,
     _ sbufCopyOut: UnsafeMutablePointer
) -> OSStatus

nur erstellt flache Kopien und hilft nicht dabei, den ursprünglichen imageBuffer @ freizugebe

So ist meine Frage: Wie kann ich eine vollständige tiefe Kopie eines @ erstellCMSmapleBuffer oderCVImageBuffer? Ich würde gerne benutzen:

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

Aber die Funktion ist etwas überwältigend und ich weiß nicht, woher ich alle Attribute nehmen soll. Ich bin sicher, ich kann viel von dem gegebenen @ nehmCMSmapleBuffer.

Ich habe jetzt seit ein paar Tagen nach einer Lösung gesucht. Wenn Sie mehr Kontext benötigen, können Sie sich gerne an uns wenden. Ich hoffe jemand kann helfen.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage