⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tinyjpeg.c

📁 trident tm5600的linux驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       y  = (*Y++) << SCALEBITS;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);    }    p += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/** *  YCrCb -> RGB24 (2x1) *  .-------. *  | 1 | 2 | *  `-------' */static void YCrCB_to_RGB24_2x1(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = priv->width*3 - 16*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       y  = (*Y++) << SCALEBITS;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       y  = (*Y++) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);    }    p += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/* *  YCrCb -> BGR24 (2x1) *  .-------. *  | 1 | 2 | *  `-------' */static void YCrCB_to_BGR24_2x1(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = priv->width*3 - 16*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       y  = (*Y++) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       y  = (*Y++) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);    }    p += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/** *  YCrCb -> RGB24 (1x2) *  .---. *  | 1 | *  |---| *  | 2 | *  `---' */static void YCrCB_to_RGB24_1x2(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p, *p2;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  p2 = priv->plane[0] + priv->width*3;  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = 2*priv->width*3 - 8*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       y  = (*Y++) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       y  = (Y[8-1]) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p2++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p2++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p2++ = clamp(b);    }    Y += 8;    p += offset_to_next_row;    p2 += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/* *  YCrCb -> BGR24 (1x2) *  .---. *  | 1 | *  |---| *  | 2 | *  `---' */static void YCrCB_to_BGR24_1x2(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p, *p2;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  p2 = priv->plane[0] + priv->width*3;  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = 2*priv->width*3 - 8*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       y  = (*Y++) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       y  = (Y[8-1]) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p2++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p2++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p2++ = clamp(r);    }    Y += 8;    p += offset_to_next_row;    p2 += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/** *  YCrCb -> RGB24 (2x2) *  .-------. *  | 1 | 2 | *  |---+---| *  | 3 | 4 | *  `-------' */static void YCrCB_to_RGB24_2x2(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p, *p2;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  p2 = priv->plane[0] + priv->width*3;  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = (priv->width*3*2) - 16*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       y  = (*Y++) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       y  = (*Y++) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       y  = (Y[16-2]) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p2++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p2++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p2++ = clamp(b);       y  = (Y[16-1]) << SCALEBITS;       r = (y + add_r) >> SCALEBITS;       *p2++ = clamp(r);       g = (y + add_g) >> SCALEBITS;       *p2++ = clamp(g);       b = (y + add_b) >> SCALEBITS;       *p2++ = clamp(b);    }    Y  += 16;    p  += offset_to_next_row;    p2 += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/* *  YCrCb -> BGR24 (2x2) *  .-------. *  | 1 | 2 | *  |---+---| *  | 3 | 4 | *  `-------' */static void YCrCB_to_BGR24_2x2(struct jdec_private *priv){  const unsigned char *Y, *Cb, *Cr;  unsigned char *p, *p2;  int i,j;  int offset_to_next_row;#define SCALEBITS       10#define ONE_HALF        (1UL << (SCALEBITS-1))#define FIX(x)          ((int)((x) * (1UL<<SCALEBITS) + 0.5))  p = priv->plane[0];  p2 = priv->plane[0] + priv->width*3;  Y = priv->Y;  Cb = priv->Cb;  Cr = priv->Cr;  offset_to_next_row = (priv->width*3*2) - 16*3;  for (i=0; i<8; i++) {    for (j=0; j<8; j++) {       int y, cb, cr;       int add_r, add_g, add_b;       int r, g , b;       cb = *Cb++ - 128;       cr = *Cr++ - 128;       add_r = FIX(1.40200) * cr + ONE_HALF;       add_g = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;       add_b = FIX(1.77200) * cb + ONE_HALF;       y  = (*Y++) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       y  = (*Y++) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p++ = clamp(r);       y  = (Y[16-2]) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p2++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p2++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p2++ = clamp(r);       y  = (Y[16-1]) << SCALEBITS;       b = (y + add_b) >> SCALEBITS;       *p2++ = clamp(b);       g = (y + add_g) >> SCALEBITS;       *p2++ = clamp(g);       r = (y + add_r) >> SCALEBITS;       *p2++ = clamp(r);    }    Y  += 16;    p  += offset_to_next_row;    p2 += offset_to_next_row;  }#undef SCALEBITS#undef ONE_HALF#undef FIX}/** *  YCrCb -> Grey (1x1) *  .---. *  | 1 | *  `---' */static void YCrCB_to_Grey_1x1(struct jdec_private *priv){  const unsigned char *y;  unsigned char *p;  unsigned int i;  int offset_to_next_row;  p = priv->plane[0];  y = priv->Y;  offset_to_next_row = priv->width;  for (i=0; i<8; i++) {     memcpy(p, y, 8);     y+=8;     p += offset_to_next_row;  }}/** *  YCrCb -> Grey (2x1) *  .-------. *  | 1 | 2 | *  `-------' */static void YCrCB_to_Grey_2x1(struct jdec_private *priv)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -