Наше приложение связано с отображением данных видео в реальном времени, полученных с другого конца, нам нужно отображать живые каналы с интервалом 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 могут отображаться напрямую, мы можем сэкономить некоторое время здесь,
Расскажите, пожалуйста, ваши взгляды