Esta es una variación de una pregunta que se hace a menudo por los alrededores, pero no veo esta situación exacta, así que la arrojaré allí.¿Cómo cambiar la orientación del buffer de devolución de llamada de la cámara?
Tengo una configuración de devolución de llamada onPreviewFrame. Esto obtiene un byte [] con datos NV21 en él. Nosotros h.264 lo codificamos y lo enviamos como una transmisión de video. Por otro lado, vemos el video sesgado, ya sea 90 o 270 grados, dependiendo del teléfono.
Entonces la pregunta es, ¿cómo rotar los datos de , no solo la imagen de vista previa? Camera.Parameters.setRotation solo afecta la toma de la imagen, no el video. Camera.setDisplayOrientation específicamente dice que sólo afecta a la vista previa que muestra, no los bytes de la trama:
Esto no afecta el orden de la matriz de bytes aprobada en onPreviewFrame (byte [], la cámara), las imágenes JPEG o vídeos grabados.
¿Hay alguna manera, en cualquier nivel de API, de cambiar la orientación de la matriz de bytes? En su defecto, ¿puede incluso rotar el formato NV21 (YVU) que viene, o necesito RGB primero?
Tal vez me falta algo, pero ¿no es una tarea relativamente sencillo de correr los datos a través de una matriz para rotarlo de la forma que desee? Presumiblemente, usted conoce el ancho y el alto de su vista previa, por lo tanto, debería poder simplemente copiar los bytes en una nueva matriz de bytes que los ordena en la orientación deseada, ¿no? No he hecho esto, entonces, quizás estoy lamentablemente fuera de la base. –
No, eso lo haría, pero hacer esto para cada fotograma, incluso decir 5ps, parece mucho procesamiento. Pero creo que puede ser la única forma. – Hieronymus