我们的应用程序与显示从另一端接收的实时视频数据有关,我们需要以 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 数据,那么我们可以从这里节省一些时间,
请说说你的看法