1) 在JAVA層刷新:
如果要在thread裏刷新, 要使用postInvalidate, 如果在timer裏刷新, 可以通過Handler Message來刷新。 具體刷新要重寫onDraw函數。
2) 在JNI裏刷新:
將SurfaceHolder指針傳遞給NDK(JNI層用VideoDriver_register註冊)。 具體刷新用以下方法:
void * pbits;
VideoDriver_getPixels(width, height, &pbits);
memcpy(pbits, rgbBuffer, width*height*2);//rgbBuffer是rgb565格式的數據
VideoDriver_updateSurface();
具體採用哪種刷新方法, 可根據速度的要求, 以及程序架構複雜性的角度來考慮。 如果對播放速度要求不高,可在java層刷新,平臺移植性會好一些。