Отображение YUV изображения в Android

В моем приложении нам нужно отобразить видеокадр, получаемый с сервера на наше приложение для Android,
Сервер отправляет видеоданные со скоростью 50 кадров в секунду, закодировав их в WebM, т.е. используя libvpx для кодирования и декодирования изображений,

Теперь после декодирования из libvpx он получает данные YUV, которые мы можем отобразить поверх макета изображения,

текущая реализация примерно такая,

В коде JNI / Native C ++ мы конвертируем данные YUV в данные RGB В платформе Android, вызывая

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;
}  

Чтобы создать растровое изображение,

чтобы отобразить изображение поверх imageView, используя следующий код,

               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");
                }

Мой запрос, в целом, эта функция занимает около 40 мс, есть ли способ ее оптимизировать,
1 - Есть ли способ отобразить данные YUV в imageView?

2 - Есть ли другой способ создать изображение (растровое изображение) из данных RGB,

3 - Я считаю, что я всегда создаю изображение, но я полагаю, что я должен создать растровое изображение только один раз и делать / предоставлять новый буфер всегда, как и когда мы получили.
Пожалуйста, поделитесь своими взглядами.

Ответы на вопрос(2)

Ваш ответ на вопрос