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.

questionAnswers(4)

yourAnswerToTheQuestion