Muestra de la imagen YUV en Android

En mi aplicación, necesitamos mostrar el marco de video que recibe del servidor a nuestra aplicación de Android,
Server está enviando datos de video a 50 cuadros por segundo, habiendo codificado en WebM, es decir, usando libvpx para codificar y decodificar las imágenes,

Ahora, después de decodificar desde libvpx, obtiene datos YUV, que podemos mostrar sobre el diseño de la imagen,

la implementación actual es algo como esto,

En código JNI / Native C ++, estamos convirtiendo datos YUV a datos RGB en el marco de Android, llamando a

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 el 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 tarda aproximadamente 40 ms, ¿hay alguna forma de optimizarla?
1 - ¿Hay alguna forma de mostrar datos YUV en imageView?

2: ¿hay alguna otra forma de crear una imagen (imagen de mapa de bits) a partir de datos RGB,

3 - Creo que siempre estoy creando una imagen, pero supongo que debería crear un mapa de bits solo una vez y hacer / suministrar nuevo búfer siempre, cuando y cuando lo recibamos.
por favor comparte tus puntos de vista.

Respuestas a la pregunta(4)

Su respuesta a la pregunta