-#include "opj_convert.h"
-/*
- * The yuv code is based on cinelerra-VERSION/quicktime/rtjpeg_core.c
-*/
-#define KcrR 76284
-#define KcrG 53281
-#define KcbG 25625
-#define KcbB 132252
-#define Ky 76284
-
-static void opj_convert_yuv444(opj_image_t *img)
-{
- int *d0, *d1, *d2, *red, *green, *blue;
- const int *sY, *sCb, *sCr;
- int maxw, maxh, max, i;
- int R, G, B, C, D, E;
- int shiftR, shiftG, shiftB;
- int addR, addG, addB;
-
- maxw = img->comps[0].w; maxh = img->comps[0].h;
- max = maxw * maxh;
-
- sY = img->comps[0].data;
- sCb = img->comps[1].data;
- sCr = img->comps[2].data;
-
- if(img->comps[0].prec > 8)
- shiftR = img->comps[0].prec - 8;
- else
- shiftR = 0;
-
- if(img->comps[1].prec > 8)
- shiftG = img->comps[1].prec - 8;
- else
- shiftG = 0;
-
- if(img->comps[2].prec > 8)
- shiftB = img->comps[2].prec - 8;
- else
- shiftB = 0;
-
- addR = (img->comps[0].sgnd ? 1 << (img->comps[0].prec - 1) : 0);
- addG = (img->comps[1].sgnd ? 1 << (img->comps[1].prec - 1) : 0);
- addB = (img->comps[2].sgnd ? 1 << (img->comps[2].prec - 1) : 0);
-
- d0 = red = (int*)opj_malloc(sizeof(int) * max);
- d1 = green = (int*)opj_malloc(sizeof(int) * max);
- d2 = blue = (int*)opj_malloc(sizeof(int) * max);
-
- for(i = 0; i < max; ++i)
- {
- C = ((*sY++ + addR) >> shiftR) - 16;
- D = ((*sCb++ + addG) >> shiftG) - 128;
- E = ((*sCr++ + addB) >> shiftB) - 128;
-
-
- R = (298 * C + 409 * E + 128)>>8;
- if(R < 0) R = 0; else if(R > 255) R = 255;
-
- G = (298 * C - 100 * D - 208 * E + 128)>>8;
- if(G < 0) G = 0; else if(G > 255) G = 255;
-
- B = (298 * C + 516 * D + 128)>>8;
- if(B < 0) B = 0; else if(B > 255) B = 255;
-
- *d0++ = R; *d1++ = G; *d2++ = B;
-
- }
- opj_free(img->comps[0].data); img->comps[0].data = red;
- opj_free(img->comps[1].data); img->comps[1].data = green;
- opj_free(img->comps[2].data); img->comps[2].data = blue;
-
- img->comps[0].prec = 8; img->comps[1].prec = 8; img->comps[2].prec = 8;
-}/* opj_convert_yuv444() */
-
-static void yuv422rgb(int *src_y, int *src_cb, int *src_cr, int *red,
- int *green, int *blue, int width, int height)
-{
- int i, j, tmp;
- int y, crR, crG, cbG, cbB;
-
- for(i=0; i<height; i++)
- {
- for(j=0; j<width; j+=2)
- {
- crR=(*src_cr - 128)*KcrR;
- crG=(*src_cr - 128)*KcrG; ++src_cr;
- cbG=(*src_cb - 128)*KcbG;
- cbB=(*src_cb - 128)*KcbB; ++src_cb;