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;

    }

更多相关文章

  1. Android手机应用开发(三) | Intent、Bundle的使用以及RecyclerView
  2. Android(安卓)手机设置CMWAP 接入点
  3. Android(安卓)---模拟手机发送短信
  4. 解决小米手机Android(安卓)Studio安装app 报错的问题It is possi
  5. 【转】Android开发=》打开系统设置(信息)界面
  6. android开发 打开系统设置信息页面
  7. Android(安卓)Studio真机调试无法找到设备
  8. DroidInfo v0.2.1 手机信息查询应用
  9. Android获取SD卡上图片和视频缩略图的几个例子

随机推荐

  1. BDLocationListener doesn't work
  2. android简单一级购物车
  3. Method not found using DigestUtils in
  4. android——01
  5. Android的手势
  6. Android(安卓)SurfaceView vs TextureVie
  7. Android(安卓)圆角位图
  8. StickyScrollView解说
  9. Android(安卓)WebView选择本地文件上传
  10. android 圆角编辑框