Android: рендеринг изображения YUV/буфера поверх экрана

Наше приложение связано с отображением данных видео в реальном времени, полученных с другого конца, нам нужно отображать живые каналы с интервалом 40 мс,

Данные будут получены в формате YUV, и кажется, что Android не имеет встроенной поддержки для отображения данных YUV,

Ниже приведен код для управления и отображения данных на экране.

                        // convert the data to RGB 
                            feedProcess.decode(yuvBuffer,
                                    yuvBuffer.length, imgInfo, imgRaw, ref,
                                    webMIndex);


                            currentTime=new Date().getTime();
                            System.out
                            .println("took "+(currentTime-lastTime) +" ms to decode the buffer " );
                            imgQ.add(imgRaw);


In Another thread i will receiving data and converting it into the Bitmap 

            public void run() {
                // TODO Auto-generated method stub
                while(myThreadRun){
                    if(!imgQ.isEmpty()){
                        try{
                        byte[] arry=imgQ.poll();
                        Bitmap b=createImgae(arry, imgInfo[0], imgInfo[1], 1,width,height);
                        myThreadSurfaceView.setBitmap(b);

                        try {
// draw the image 
                            c = myThreadSurfaceHolder.lockCanvas(null);
                            synchronized (myThreadSurfaceHolder) {
                                                                myThreadSurfaceView.onDraw(c);

                            }
                        } finally {
                            if (c != null) {
                                myThreadSurfaceHolder
                                        .unlockCanvasAndPost(c);
                            }
                        }
                        }catch(NoSuchElementException ex){
                        }
                    }
                }
            }

Вся эта логика занимает около 100 мс, чтобы обновить экран с новым изображением, есть ли другие подходы, которые я могу попробовать,

Функция декодирования uncompress, которая занимает 10-15 мс + преобразование YUV в RGB (20-30) мс, и это делается в коде JNI,

Насколько я понимаю, если данные YUV могут отображаться напрямую, мы можем сэкономить некоторое время здесь,

Расскажите, пожалуйста, ваши взгляды


person Amitg2k12    schedule 06.06.2012    source источник
comment
См. этот @Rohan stackoverflow.com/questions/9192982/   -  person Strider    schedule 06.06.2012