YUV420P的格式以及转换为RGB565的代码(Android摄像头的输出一般为YUV420P)
static void cvt_420p_to_rgb565(int width,int height,constunsignedchar*src,unsignedshort*dst)
{
int line, col, linewidth;
int y, u, v, yy, vr, ug, vg, ub;
int r, g, b;
const unsigned char *py,*pu,*pv;
linewidth = width >> 1;
py = src;
pu = py + (width * height);
pv = pu + (width * height)/ 4;
y = *py++;
yy = y << 8;
u = *pu - 128;
ug = 88 * u;
ub = 454 * u;
v = *pv - 128;
vg = 183 * v;
vr = 359 * v;
for (line = 0;line< height;line++){
for (col = 0; col < width; col++){
r = (yy + vr) >> 8;
g = (yy - ug - vg)>> 8;
b = (yy + ub ) >> 8;
if (r < 0) r = 0;
if (r > 255) r = 255;
if (g < 0) g = 0;
if (g > 255) g = 255;
if (b < 0) b = 0;
if (b > 255) b = 255;
*dst++ = (((unsignedshort)r>>3)<<11)|(((unsignedshort)g>>2)<<5)|(((unsignedshort)b>>3)<<0);
y = *py++;
yy = y << 8;
if (col & 1) {
pu++;
pv++;
u = *pu - 128;
ug = 88 * u;
ub = 454 * u;
v = *pv - 128;
vg = 183 * v;
vr = 359 * v;
}
}
if ((line & 1)== 0){
pu -= linewidth;
pv -= linewidth;
}
}
}
http://www.elautoctrl.info/wordpress/archives/921
http://blog.csdn.net/dotphoenix/article/details/6431351
extra:
Android手机你应该用little endian:
pSwsContext = sws_getContext(nWidth, nHeight, PIX_FMT_YUV420P, nWidth, nHeight
, PIX_FMT_RGB565LE, SWS_BICUBIC, NULL, NULL, NULL);
刚好手头有一个例子,就顺便给你一个例子吧:
SwsContext *img_convert_ctx = sws_getContext(codecContext->width, codecContext->height,
PIX_FMT_YUV420P,
mReqWidth,mReqHeight,
PIX_FMT_RGB565LE,
SWS_BICUBIC, NULL, NULL, NULL);
LOGD("sws_getContext return =%d",img_convert_ctx);
if(img_convert_ctx){
AVFrame *picture;
avcodec_get_frame_defaults(picture);
picture->data[0] = (uint8_t*)mRGB565Data;
picture->data[1] = 0;
picture->data[2] = 0;
picture->linesize[0] = mReqWidth;
picture->linesize[1] = 0;
picture->linesize[2] = 0;
sws_scale(img_convert_ctx, frame.data, frame.linesize,
0, codecContext->height, picture->data,
picture->linesize);
result = 0;
}
更多相关文章
- Android手机应用开发(三) | Intent、Bundle的使用以及RecyclerView
- Android(安卓)手机设置CMWAP 接入点
- Android(安卓)---模拟手机发送短信
- 解决小米手机Android(安卓)Studio安装app 报错的问题It is possi
- 【转】Android开发=》打开系统设置(信息)界面
- android开发 打开系统设置信息页面
- Android(安卓)Studio真机调试无法找到设备
- DroidInfo v0.2.1 手机信息查询应用
- Android获取SD卡上图片和视频缩略图的几个例子