Questa è una variazione su una domanda spesso posta qui, ma non vedo questa situazione esatta, quindi la lancerò lì.Come modificare l'orientamento del buffer di richiamata dell'anteprima della videocamera?
Ho impostato un callback suPreviewFrame. Questo ottiene un byte [] con i dati NV21 al suo interno. H.264 lo codifichiamo e lo inviamo come flusso video. Dall'altro lato, vediamo il video inclinato, a 90 o 270 gradi, a seconda del telefono.
Quindi la domanda è, come ruotare i dati , non solo l'immagine di anteprima? Camera.Parameters.setRotation riguarda solo scattare la foto, non il video. Camera.setDisplayOrientation specificamente dice che influenza solo l'anteprima la visualizzazione, non i byte del telaio:
Ciò non pregiudica l'ordine dei byte passato in onPreviewFrame (byte [], Camera), immagini JPEG o video registrati.
Quindi esiste un modo, a qualsiasi livello API, per modificare l'orientamento della matrice di byte? In caso contrario, è possibile ruotare anche il formato NV21 (YVU) in cui è presente, oppure è necessario prima eseguire l'RGB?
Forse mi manca qualcosa, ma non è un compito relativamente semplice in avanti di corsa i dati attraverso una matrice per ruotarlo come preferisci? Presumibilmente, conoscete la larghezza e l'altezza dell'anteprima, quindi dovreste essere in grado di copiare semplicemente i byte in un nuovo array di byte che li ha ordinati nell'orientamento desiderato, no? Non l'ho fatto, quindi, forse sono tristemente fuori base. –
No, lo farebbe, ma farlo per ogni fotogramma, anche a dire 5ps, sembra un sacco di elaborazione. Ma penso che potrebbe essere l'unico modo. – Hieronymus