Umschalten der AVCaptureSession-Voreinstellung beim Aufnehmen eines Fotos

8

Mein derzeitiges Setup ist wie folgt (basierend auf dem ColorTrackingCamera Projekt von Brad Larson ) ):

Ich verwende AVCaptureSession auf AVCaptureSessionPreset640x480 , für die ich die Ausgabe als Textur durch eine OpenGL-Szene laufen lasse. Diese Textur wird dann von einem Fragment-Shader manipuliert.

Ich benötige diese Preset "niedrigere Qualität", weil ich eine hohe Framerate beibehalten möchte, wenn der Benutzer eine Vorschau anzeigt. Ich möchte dann zu einer höheren Ausgabequalität wechseln, wenn der Benutzer ein Foto aufnimmt.

Zuerst dachte ich, ich könnte sessionPreset auf AVCaptureSession ändern, aber das zwingt die Kamera dazu, die Verwendbarkeit der Pause neu zu fokussieren.

%Vor%

Momentan versuche ich ein zweites AVCaptureStillImageOutput zu AVCaptureSession hinzuzufügen, aber ich bekomme einen leeren Pixelpuffer, also denke ich, dass ich irgendwie feststecke.

Hier ist mein Sitzungs-Setup-Code:

%Vor%

Und hier ist meine Capture-Methode:

%Vor%

( width und height ergeben 0)

Ich habe die Dokumente der AVFoundation-Dokumentation gelesen, aber anscheinend bekomme ich nichts Wesentliches.

    
polyclick 21.08.2012, 12:57
quelle

1 Antwort

3

Ich habe die Lösung für mein spezifisches Problem gefunden. Ich hoffe, es kann als Leitfaden dienen, wenn jemand auf das gleiche Problem stößt.

Der Grund, warum die Framerate signifikant abnahm, hatte mit einer internen Konvertierung zwischen Pixelformaten zu tun. Nach dem Setzen des Pixelformats wurde explizit die Framerate erhöht.

In meiner Situation habe ich eine BGRA-Textur mit der folgenden Methode erstellt:

%Vor%

Als ich die AVCaptureStillImageOutput Instanz eingerichtet habe, habe ich meinen Code folgendermaßen geändert:

%Vor%

Ich hoffe, das hilft jemandem irgendwann;)

    
polyclick 21.08.2012, 16:13
quelle

Tags und Links