En mi aplicación, tenemos que mostrar el marco de video recibe desde el servidor a nuestra aplicación Android,
El servidor está enviando datos de video a 50 fotogramas por segundo, codificado en WebM es decir usando libvpx para codificar y decodificar las imágenes,Visualización de la imagen YUV en Android
Ahora después de la decodificación de libvpx sus datos YUV conseguir, que podamos mostrado sobre el diseño de la imagen,
la implementación actual es algo como esto,
En/código JNI nativo C++, estamos convirtiendo los datos de YUV en datos RGB En el marco de Android, llamando
public Bitmap createImgae(byte[] bits, int width, int height, int scan) {
Bitmap bitmap=null;
System.out.println("video: creating bitmap");
//try{
bitmap = Bitmap.createBitmap(width, height,
Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bits));
//}catch(OutOfMemoryError ex){
//}
System.out.println("video: bitmap created");
return bitmap;
}
Para crear la imagen de mapa de bits,
para mostrar la imagen sobre imageView usando siguiente código,
img = createImgae(imgRaw, imgInfo[0], imgInfo[1], 1);
if(img!=null && !img.isRecycled()){
iv.setImageBitmap(img);
//img.recycle();
img=null;
System.out.println("video: image displayed");
}
Mi consulta es, en general esta función está tomando aprox 40 ms, ¿hay alguna forma de optimizarlo?
1 - ¿Hay alguna forma de mostrar los datos YUV a imageView?
2 - ¿Hay alguna otra manera de crear la imagen (imagen de mapa de bits) a partir de los datos RGB,
3 - Creo que siempre estoy creando la imagen, pero supongo que debería crear mapa de bits sólo una vez y hacer/Suministrar siempre nuevo buffer, como y cuando lo recibamos.
por favor comparta sus puntos de vista.
'bitmap.copyPixelsFromBuffer (ByteBuffer.wrap (bits));' qué la conversión de YUV a RGB? ¿O estás diciendo que eso es lo que estás haciendo en tu lengua materna? – weston
Aquí hay una manera de hacerlo. Consulte http://stackoverflow.com/questions/9192982/displaying-yuv-image-in-android – bob