Exibindo imagem YUV no Android
No meu aplicativo, precisamos exibir o quadro de vídeo recebido do servidor para o nosso aplicativo Android,
@Server está enviando dados de vídeo a 50 quadros por segundo, tendo codificado no WebM, ou seja, usando libvpx para codificar e decodificar as imagens,
gora, após decodificar da libvpx, obtém dados YUV, que podemos exibir no layout da image
a implementação atual é algo como isto,
No código JNI / Native C ++, estamos convertendo dados YUV em dados RGB Na estrutura Android, chamando
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 criar a imagem bitmap,
para exibir a imagem sobre a imageView usando o código a seguir,
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");
}
Minha consulta é: no geral, essa função está levando aproximadamente 40 ms; existe alguma maneira de otimizá-la,
1 - Existe alguma maneira de exibir dados YUV no imageVie
2 - Existe outra maneira de criar Imagem (imagem Bitmap) a partir de dados RGB,
3 - Acredito que estou sempre criando imagem, mas acho que devo criar bitmap apenas uma vez e fornecer / fornecer sempre um novo buffer sempre, como e quando recebemo
compartilhe suas opiniões.