Autore Topic: Rotazione schermo e fotocamera  (Letto 1869 volte)

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Rotazione schermo e fotocamera
« il: 09 Luglio 2013, 18:59:55 CEST »
0
Salve!
Devo mostrare a schermo l'immagine ripresa dalla fotocamera, il problema è che la fotocamera viene ruotata un pò come le pare a lei...
Nel senso che se il cell è in landscape, lei ruota di 90 gradi e così via.
Quindi ho pensato di intercettare la rotazione del display e quindi ruotare la fotocamera di n*90 gradi.
Dalla documentazione ufficiale, landscape ha valore 0, mentre portrait ha valore 1
Mentre nel mio dispositivo ho la seguente configurazione:
Portrait 3 (invertito)
Landscape 0 (corretto)
Landscape_inverse 2 (corretto)
Portrait_inverse 1 (invertito)

Per il momento ho sistemato, semplicemente scambiando questi due valori. Ma penso che ci sia questa configurazione perchè testo l'applicazione in un tablet, in un display diverso potrei vedere il video sottosopra..
Idee su come rilevare un orientamento assoluto?

Grazie, e mi scuso se è la sezione sbagliata

So che il codice non serve, comunque ecco il metodo che gestisce la rotazione

Codice (Java): [Seleziona]
  public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
               
             
                System.out.println("Surface changed");
               
                int rotazione = getWindowManager().getDefaultDisplay().getRotation();
               
                if (rotazione == 1 ){
                        rotazione = 3;
                }else if(rotazione == 3){
                        rotazione = 1;
                }
               
                if(mPreviewRunning)
                        mCamera.stopPreview();
                       
                       
                        try{
                                        mCamera.setDisplayOrientation(90*rotazione);
                                mCamera.setPreviewDisplay(holder);
                                mCamera.startPreview();
                                mPreviewRunning= true;
                                } catch (IOException e) {
                                         e.printStackTrace();
                                }
                         
                         
                       
           
        }

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Rotazione schermo e fotocamera
« Risposta #1 il: 09 Luglio 2013, 21:07:56 CEST »
+1
La posizione della preview della camera era rigida fino al API 8 di Android, poi hanno aggiunto la funzione per impostare la rotazione:

Camera | Android Developers

come descritto nella documentazione ufficiale:

Camera | Android Developers
adb logcat | tee /tmp/logcat | grep TAG

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Rotazione schermo e fotocamera
« Risposta #2 il: 11 Luglio 2013, 10:44:35 CEST »
0
Ok, funziona.
Volevo solo segnalare che non funziona in caso di flip (intendo rotazione di 180 gradi in un solo colpo) in quel caso non ruota lo schermo

Post unito: 11 Luglio 2013, 18:39:53 CEST
Edit:
l'anteprima viene correttamente ruotata, ma quello che salvo nel file no... ha sempre lo stesso orientamento.
C'è un modo per ruotarlo?

« Ultima modifica: 11 Luglio 2013, 18:39:53 CEST da gabric, Reason: Merged DoublePost »

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Rotazione schermo e fotocamera
« Risposta #3 il: 11 Luglio 2013, 22:11:54 CEST »
0
Nella documentazione di " setDisplayOrientation" è chiaramente scritto:

Citazione
...
This does not affect the order of byte array passed in onPreviewFrame(byte[], Camera), JPEG pictures, or recorded videos. ...

Se vuoi salvare un'immagine ruotata la devi ruotare prima di salvarla.
adb logcat | tee /tmp/logcat | grep TAG

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Rotazione schermo e fotocamera
« Risposta #4 il: 11 Luglio 2013, 22:18:40 CEST »
0
si, ma io devo salvare il video

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Rotazione schermo e fotocamera
« Risposta #5 il: 12 Luglio 2013, 00:51:20 CEST »
0
Allora devi ruotare ogni singolo frame del video (in tempo reale :-) ).
adb logcat | tee /tmp/logcat | grep TAG

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Rotazione schermo e fotocamera
« Risposta #6 il: 12 Luglio 2013, 09:39:44 CEST »
0
uhm non si può fare a video completo? già l'activity fa troppe cose in realtime (oltre che non saprei come fare)

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Rotazione schermo e fotocamera
« Risposta #7 il: 12 Luglio 2013, 10:31:46 CEST »
0
Da purista della qualità video quello che vuoi fare è peggiore il risultato finale. Utilizzo praticamente obbligatorio di una compressione a perdita tipo MPEG4 (disattivare la compressione è inapplicabile in un telefonino o tablet) con la seconda ricodifica per ruotare i frame perdi di qualità, dipende molto dal bitrate utilizzato.

Se sei in grado di farlo in off line farlo pure, ti serve più spazio per contenere il nuovo video prima di cancellare il vecchio e il telefono sarà molto occupato durante la ricodifica.
adb logcat | tee /tmp/logcat | grep TAG

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Rotazione schermo e fotocamera
« Risposta #8 il: 12 Luglio 2013, 10:34:36 CEST »
0
eh lo so che la codifica è un processo lento e dispendioso.
Considera che io sto facendo registrare il video in mp4, e viene subito caricato su facebook.
Essendo che l'anteprima viene ruotata correttamente, l'utente può rendersi conto se  il video è girato, solo al momento dell'upload