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.