C/C++ code
int lock_surface(unsigned char **ppbuf, int *width, int *height, int *bpp){
unsigned short *surfaceBuffer;
Surface::SurfaceInfo info;
Region dirtyRegion;
// invalid the whole surface
dirtyRegion.set(Rect(0x3FFF, 0x3FFF));
if(g_surface == NULL){
LOGD("Error! surface not initialized!\n");
return -1;
}
switch(info.format){
case PIXEL_FORMAT_RGBA_8888:
case PIXEL_FORMAT_RGBX_8888:
case PIXEL_FORMAT_BGRA_8888:
*bpp = 4;
break;
case PIXEL_FORMAT_RGB_888:
*bpp = 3;
break;
case PIXEL_FORMAT_RGB_565:
case PIXEL_FORMAT_RGBA_5551:
case PIXEL_FORMAT_RGBA_4444:
*bpp = 2;
break;
default:
return -1;
}
return 0;
}
C/C++ code
int unlock_and_post_surface(void){
if(g_surface == NULL){
LOGD("Error! surface not initialized!\n");
return -1;
}
int lock_surface(unsigned char **ppbuf, int *width, int *height, int *bpp)
这个函数中ppbuf传回是绘图的首地址
你只需要把解码处理的图片数据copy到这个地址里
然后调用unlock_and_post_surface让surfaceflinger去显示就OK了