3

我们的应用程序与显示从另一端接收的实时视频数据有关,我们需要以 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 ms + 将 YUV 转换为 RGB (20-30)ms,这是在 JNI 代码中完成的,

我的理解是,如果可以直接显示 YUV 数据,那么我们可以从这里节省一些时间,

请说说你的看法

4

0 回答 0