Applicazione dell'effetto all'anteprima della fotocamera dell'iPhone "Video" utilizzando OpenGL
-
28-10-2019 - |
Domanda
Il mio obiettivo è scrivere un controller personalizzato per la visualizzazione della videocamera che:
- Può scattare foto in tutti e quattro gli orientamenti dell'interfaccia con la fotocamera posteriore e, se disponibile, anteriore.
- Ruota e ridimensiona correttamente l'anteprima del "video" e la foto a piena risoluzione.
- Consente di applicare un (semplice) effetto SIA al "video" di anteprima e alla foto a piena risoluzione.
Il mio impegno precedente è documentato in questa domanda . Il mio ultimo tentativo è stato quello di modificare il GLVideoFrame di esempio di Apple (da WWDC 2010). Tuttavia, non sono riuscito a far sì che l'iPhone 4 visualizzi correttamente il "video" di anteprima quando il preset della sessione è AVCaptureSessionPresetPhoto.
Qualcuno l'ha provato o sa perché l'esempio non funziona con questo preset?
L'esempio di Apple utilizza un preset con dimensioni video di 640 x 480 e una dimensione della trama predefinita di 1280 x 720. La fotocamera posteriore dell'iPhone 4 offre solo 852x640 quando il preset è AVCaptureSessionPresetPhoto.
Dimensioni video / foto della fotocamera del dispositivo iOS quando l'impostazione predefinita è AVCaptureSessionPresetPhoto:
- Parte posteriore di iPhone 4: il video è 852 x 640 e le foto sono 2592 x 1936
- Parte anteriore di iPhone 4: video e foto sono 640 x 480
- Parte posteriore dell'iPod Touch 4G: video e foto sono 960 x 720
- iPod Touch 4G anteriore: video e foto sono 640 x 480
- iPhone 3GS: il video è 512 x 384 e le foto sono 2048 x 1536
<”Aggiorna
Ho ottenuto lo stesso video incomprensibile quando ho cambiato l'esempio ColorTracking di Brad Larson (< a href="http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios" rel="nofollow noreferrer"> post del blog ) da utilizzare AVCaptureSessionPresetPhoto.
Soluzione
Il problema è che AVCaptureSessionPresetPhoto
ora è sensibile al contesto e funziona con risoluzioni diverse a seconda che si stiano visualizzando video o acquisizioni di immagini fisse.
L'anteprima dal vivo è diversa per questa modalità perché riempie le righe con byte extra.Immagino che questa sia una sorta di ottimizzazione hardware.
In ogni caso, puoi vedere come ho risolto il problema qui:
iOS CVImageBuffer distorto da AVCaptureSessionDataOuttureSessionPhotosession
Altri suggerimenti
AVCaptureSessionPresetPhoto serve per scattare foto, non per acquisire feed dal vivo. Puoi leggere informazioni qui: http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_MediaCapture.html
(La mia convinzione è che si tratti in realtà di due fotocamere o sensori diversi, poiché si comportano in modo molto diverso e ci sono un paio di secondi di ritardo solo per passare dalla foto a 640 x 480, diciamo).
Non puoi nemmeno usare entrambi i preset contemporaneamente e anche il passaggio da uno all'altro è un mal di testa - Come ottenere sia l'uscita video che l'immagine a piena risoluzione fotografica in AVFoundation Framework
HTH, anche se non quello che volevi sentire ...
Oded.