CVPixelBufferPool Fehler (kCVReturnInvalidArgument / -6661)

8

Ich habe frühere Vorschläge mit Swift implementiert ( Wie CVPixelBufferPool zu verwenden in Verbindung mit AVAssetWriterInputPixelBufferAdaptor in iPhone? ), aber blieb mit einem "kCVReturnInvalidArgument" (Fehlerwert: -6661) hängen, wenn CVPixelBufferPoolCreatePixelBuffer als geführt verwendet wurde.

Ich versuche grundsätzlich, einen Film aus Bildern zu erstellen, aber da der Pufferpool nicht erfolgreich erstellt wurde, kann ich keine Pixelpuffer anhängen - hier ist mein Code dafür.

Irgendwelche Vorschläge werden sehr geschätzt!

%Vor%     
Yoon Bai 01.09.2014, 18:11
quelle

2 Antworten

6

Ich kann deine Frage nicht frustrierend beantworten, aber ich arbeite an einem Code, der im Wesentlichen dasselbe tut. Und meiner kommt weiter als der Fehler, den Sie bekommen haben; Es kommt bis zu dem Punkt, wo es versucht, die Bilder zum Film hinzuzufügen und dann scheitert einfach, indem nie ein erfolgreiches Ergebnis von appendPixelBuffer () - und ich bin mir nicht sicher, wie man herausfinden, warum. Ich poste dies in der Hoffnung, dass es dir hilft, weiter zu kommen.

(Mein Code wurde aus AVFoundation + AssetWriter: Film mit erstellen erstellt Bilder und Audio , und ich habe deinen Post benutzt, um dir bei der Navigation zwischen den Zeiger-Interop-Shenanigans zu helfen ...)

%Vor%

Wo pixelBufferFromCGImage wie folgt definiert ist:

%Vor%     
Eric O'Connell 09.09.2014 06:45
quelle
4

Pro Dokumente für pixelBufferPool :

  

Diese Eigenschaft ist NULL vor dem ersten Aufruf von startSessionAtTime: auf dem verknüpften AVAssetWriter-Objekt.

Das Verschieben des Aufrufs in CVPixelBufferPoolCreatePixelBuffer an das Ende von init sollte das unmittelbare Problem beheben.

Einige andere Beobachtungen:

  • Sie haben Ihre AVAssetWriterInputPixelBufferAdaptor für BGRA konfiguriert, aber in createPixelBufferFromCGImage verwenden Sie RGB. Deine endgültigen Videos werden seltsam aussehen, wenn die Pixelformate nicht übereinstimmen.
  • Sie müssen CVPixelBufferCreate nicht in Ihrer createPixelBufferFromCGImage -Methode aufrufen. Dies verhindert den Zweck der Verwendung des Pufferpools.
  • Wenn Sie dies in einer engen Schleife ausführen, wird der Speicherverbrauch zu einem Problem. Verwenden Sie autoreleasepool und vorsichtig mit takeUnretainedValue vs takeRetainedValue wird helfen.

Ich habe Referenzimplementierungen für Swift 1.2, 2.0 und 3.0 gepostet, die Pufferpools verwenden.

    
acj 15.05.2015 02:26
quelle

Tags und Links