Red de conocimientos turísticos - Información de alquiler - Héroes que implementan la decodificación de hardware en la plataforma Android, ¿cómo se logra una decodificación estricta?

Héroes que implementan la decodificación de hardware en la plataforma Android, ¿cómo se logra una decodificación estricta?

1. Tamaño del vídeo

Generalmente, puede admitir el tamaño de 176X144/352X288, pero muchas máquinas no pueden funcionar con el tamaño más grande de 640X480. En cuanto a por qué, no lo sé. Por supuesto, este tamaño debe ser coherente con el tamaño de la vista previa de la cámara, y el tamaño de la vista previa se puede enumerar.

2. Espacio de color

De acuerdo con la documentación del SDK de ANdroid, asegúrese de que los colores admitidos por todas las plataformas de hardware sean YUV12 en la salida de vista previa de la cámara y COLOR_FormatYUV420Planar en la entrada del codificador, que es delante establecido en el código. Sin embargo, los documentos son documentos después de todo; de lo contrario, Android no sería Android.

En algunas plataformas, los dos formatos de color son idénticos y la salida de la cámara se puede utilizar directamente como entrada al codificador. Algunas plataformas son diferentes. La primera es YUV12 y la segunda es igual a I420, por lo que es necesario invertir el componente UV de la primera.

byte[]i420 bytes = null;

byte privado[]swapyv 12 toi 420(byte[]yv 12 bytes, int ancho, int alto) {

if (i420bytes == null)

i420bytes = nuevos bytes [yv 12 bytes de longitud]

for (int I = 0; i< ancho * alto; i++)

i420 bytes[I]= yv 12 bytes[I];

for(int I = ancho * alto; i<width*height+(ancho/2* alto/2); i++)

i420 bytes[I]= yv 12 bytes[I+(ancho/2*alto/2)];

for (int i =ancho* alto+(ancho/2*alto /2);i<width*height+2*(ancho/2*alto/2);i++)

i420 bytes[I]= yv 12 bytes[ I-(ancho/2*alto/2) ];

Devuelve i420 bytes;

}

3. Formato del buffer de entrada y salida

p>

El formato no está especificado en el SDK, pero en este caso el formato H264 es básicamente el Apéndice B. Sin embargo, existen algunas características distintivas. Simplemente no tome el StartCode, es decir, 0x000001, y deje que el codificador compile el material y lo envíe al decodificador.

búfer de salida de bytes = búferes de salida[índice de búfer de salida];

byte[]datos de salida = nuevo byte[tamaño de búfer+3];

outputBuffer.get(outData, 3, buffer info . size);

if (frameListener!= null) {

if((out data[3]= = 0 & amp ;& datos de salida[4]= = 0 & amp;& datos de salida[5]==1)

|(datos de salida[3]= = 0 & amp;& datos de salida[4]= = 0 & &out data[5]= = 0 &&outData[6]==1))

{

frameListener.onFrame(outData, 3, outData.length- 3, información del búfer);

}

Otros

{

datos de salida[0]= 0;

datos de salida[1]= 0;

datos de salida[2]= 1;

frameListener.onFrame(outData, 0, outData.length, información del búfer. banderas );

}

}