[cvs] / xvidcore / src / image / colorspace.c Repository:
ViewVC logotype

Diff of /xvidcore/src/image/colorspace.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8.2.4, Wed Oct 1 23:23:01 2003 UTC revision 1.13, Mon Oct 30 10:52:00 2006 UTC
# Line 37  Line 37 
37  packedFuncPtr bgra_to_yv12;  packedFuncPtr bgra_to_yv12;
38  packedFuncPtr abgr_to_yv12;  packedFuncPtr abgr_to_yv12;
39  packedFuncPtr rgba_to_yv12;  packedFuncPtr rgba_to_yv12;
40  packedFuncPtr yuv_to_yv12;  packedFuncPtr argb_to_yv12;
41  packedFuncPtr yuyv_to_yv12;  packedFuncPtr yuyv_to_yv12;
42  packedFuncPtr uyvy_to_yv12;  packedFuncPtr uyvy_to_yv12;
43    
# Line 47  Line 47 
47  packedFuncPtr bgrai_to_yv12;  packedFuncPtr bgrai_to_yv12;
48  packedFuncPtr abgri_to_yv12;  packedFuncPtr abgri_to_yv12;
49  packedFuncPtr rgbai_to_yv12;  packedFuncPtr rgbai_to_yv12;
50    packedFuncPtr argbi_to_yv12;
51  packedFuncPtr yuyvi_to_yv12;  packedFuncPtr yuyvi_to_yv12;
52  packedFuncPtr uyvyi_to_yv12;  packedFuncPtr uyvyi_to_yv12;
53    
# Line 57  Line 58 
58  packedFuncPtr yv12_to_bgra;  packedFuncPtr yv12_to_bgra;
59  packedFuncPtr yv12_to_abgr;  packedFuncPtr yv12_to_abgr;
60  packedFuncPtr yv12_to_rgba;  packedFuncPtr yv12_to_rgba;
61  packedFuncPtr yv12_to_yuv;  packedFuncPtr yv12_to_argb;
62  packedFuncPtr yv12_to_yuyv;  packedFuncPtr yv12_to_yuyv;
63  packedFuncPtr yv12_to_uyvy;  packedFuncPtr yv12_to_uyvy;
64    
# Line 67  Line 68 
68  packedFuncPtr yv12_to_bgrai;  packedFuncPtr yv12_to_bgrai;
69  packedFuncPtr yv12_to_abgri;  packedFuncPtr yv12_to_abgri;
70  packedFuncPtr yv12_to_rgbai;  packedFuncPtr yv12_to_rgbai;
71    packedFuncPtr yv12_to_argbi;
72  packedFuncPtr yv12_to_yuyvi;  packedFuncPtr yv12_to_yuyvi;
73  packedFuncPtr yv12_to_uyvyi;  packedFuncPtr yv12_to_uyvyi;
74    
75  planarFuncPtr yv12_to_yv12;  planarFuncPtr yv12_to_yv12;
76    
77    
78  int32_t RGB_Y_tab[256];  static int32_t RGB_Y_tab[256];
79  int32_t B_U_tab[256];  static int32_t B_U_tab[256];
80  int32_t G_U_tab[256];  static int32_t G_U_tab[256];
81  int32_t G_V_tab[256];  static int32_t G_V_tab[256];
82  int32_t R_V_tab[256];  static int32_t R_V_tab[256];
83    
84    
85    
# Line 288  Line 290 
290  MAKE_COLORSPACE(bgra_to_yv12_c,    4,2,2, RGB_TO_YV12,    2,1,0, 0)  MAKE_COLORSPACE(bgra_to_yv12_c,    4,2,2, RGB_TO_YV12,    2,1,0, 0)
291  MAKE_COLORSPACE(abgr_to_yv12_c,    4,2,2, RGB_TO_YV12,    3,2,1, 0)  MAKE_COLORSPACE(abgr_to_yv12_c,    4,2,2, RGB_TO_YV12,    3,2,1, 0)
292  MAKE_COLORSPACE(rgba_to_yv12_c,    4,2,2, RGB_TO_YV12,    0,1,2, 0)  MAKE_COLORSPACE(rgba_to_yv12_c,    4,2,2, RGB_TO_YV12,    0,1,2, 0)
293    MAKE_COLORSPACE(argb_to_yv12_c,    4,2,2, RGB_TO_YV12,    1,2,3, 0)
294  MAKE_COLORSPACE(yuyv_to_yv12_c,    2,2,2, YUYV_TO_YV12,   0,1,2,3)  MAKE_COLORSPACE(yuyv_to_yv12_c,    2,2,2, YUYV_TO_YV12,   0,1,2,3)
295  MAKE_COLORSPACE(uyvy_to_yv12_c,    2,2,2, YUYV_TO_YV12,   1,0,3,2)  MAKE_COLORSPACE(uyvy_to_yv12_c,    2,2,2, YUYV_TO_YV12,   1,0,3,2)
296    
# Line 297  Line 300 
300  MAKE_COLORSPACE(bgrai_to_yv12_c,   4,2,4, RGBI_TO_YV12,   2,1,0, 0)  MAKE_COLORSPACE(bgrai_to_yv12_c,   4,2,4, RGBI_TO_YV12,   2,1,0, 0)
301  MAKE_COLORSPACE(abgri_to_yv12_c,   4,2,4, RGBI_TO_YV12,   3,2,1, 0)  MAKE_COLORSPACE(abgri_to_yv12_c,   4,2,4, RGBI_TO_YV12,   3,2,1, 0)
302  MAKE_COLORSPACE(rgbai_to_yv12_c,   4,2,4, RGBI_TO_YV12,   0,1,2, 0)  MAKE_COLORSPACE(rgbai_to_yv12_c,   4,2,4, RGBI_TO_YV12,   0,1,2, 0)
303    MAKE_COLORSPACE(argbi_to_yv12_c,   4,2,4, RGBI_TO_YV12,   1,2,3, 0)
304  MAKE_COLORSPACE(yuyvi_to_yv12_c,   2,2,4, YUYVI_TO_YV12,  0,1,2,3)  MAKE_COLORSPACE(yuyvi_to_yv12_c,   2,2,4, YUYVI_TO_YV12,  0,1,2,3)
305  MAKE_COLORSPACE(uyvyi_to_yv12_c,   2,2,4, YUYVI_TO_YV12,  1,0,3,2)  MAKE_COLORSPACE(uyvyi_to_yv12_c,   2,2,4, YUYVI_TO_YV12,  1,0,3,2)
306    
# Line 333  Line 337 
337          ((MAX(0,MIN(255, B)) >> 3) & 0x001f)          ((MAX(0,MIN(255, B)) >> 3) & 0x001f)
338    
339  #define WRITE_RGB16(ROW,UV_ROW,C1)      \  #define WRITE_RGB16(ROW,UV_ROW,C1)      \
340          rgb_y = RGB_Y_tab[ y_ptr[y_stride + 0] ];                       \          rgb_y = RGB_Y_tab[ y_ptr[y_stride*(ROW) + 0] ];                                         \
341          b[ROW] = (b[ROW] & 0x7) + ((rgb_y + b_u##UV_ROW) >> SCALEBITS_OUT);     \          b[ROW] = (b[ROW] & 0x7) + ((rgb_y + b_u##UV_ROW) >> SCALEBITS_OUT);     \
342          g[ROW] = (g[ROW] & 0x7) + ((rgb_y - g_uv##UV_ROW) >> SCALEBITS_OUT);    \          g[ROW] = (g[ROW] & 0x7) + ((rgb_y - g_uv##UV_ROW) >> SCALEBITS_OUT);    \
343          r[ROW] = (r[ROW] & 0x7) + ((rgb_y + r_v##UV_ROW) >> SCALEBITS_OUT);             \          r[ROW] = (r[ROW] & 0x7) + ((rgb_y + r_v##UV_ROW) >> SCALEBITS_OUT);             \
344          *(uint16_t *) (x_ptr+((ROW)*x_stride)+0) = C1(r[ROW], g[ROW], b[ROW]);  \          *(uint16_t *) (x_ptr+((ROW)*x_stride)+0) = C1(r[ROW], g[ROW], b[ROW]);  \
345          rgb_y = RGB_Y_tab[ y_ptr[y_stride + 1] ];                               \          rgb_y = RGB_Y_tab[ y_ptr[y_stride*(ROW) + 1] ];                         \
346          b[ROW] = (b[ROW] & 0x7) + ((rgb_y + b_u##UV_ROW) >> SCALEBITS_OUT);             \          b[ROW] = (b[ROW] & 0x7) + ((rgb_y + b_u##UV_ROW) >> SCALEBITS_OUT);             \
347          g[ROW] = (g[ROW] & 0x7) + ((rgb_y - g_uv##UV_ROW) >> SCALEBITS_OUT);    \          g[ROW] = (g[ROW] & 0x7) + ((rgb_y - g_uv##UV_ROW) >> SCALEBITS_OUT);    \
348          r[ROW] = (r[ROW] & 0x7) + ((rgb_y + r_v##UV_ROW) >> SCALEBITS_OUT);             \          r[ROW] = (r[ROW] & 0x7) + ((rgb_y + r_v##UV_ROW) >> SCALEBITS_OUT);             \
# Line 440  Line 444 
444  MAKE_COLORSPACE(yv12_to_bgra_c,    4,2,2, YV12_TO_RGB,    2,1,0,3)  MAKE_COLORSPACE(yv12_to_bgra_c,    4,2,2, YV12_TO_RGB,    2,1,0,3)
445  MAKE_COLORSPACE(yv12_to_abgr_c,    4,2,2, YV12_TO_RGB,    3,2,1,0)  MAKE_COLORSPACE(yv12_to_abgr_c,    4,2,2, YV12_TO_RGB,    3,2,1,0)
446  MAKE_COLORSPACE(yv12_to_rgba_c,    4,2,2, YV12_TO_RGB,    0,1,2,3)  MAKE_COLORSPACE(yv12_to_rgba_c,    4,2,2, YV12_TO_RGB,    0,1,2,3)
447    MAKE_COLORSPACE(yv12_to_argb_c,    4,2,2, YV12_TO_RGB,    1,2,3,0)
448  MAKE_COLORSPACE(yv12_to_yuyv_c,    2,2,2, YV12_TO_YUYV,   0,1,2,3)  MAKE_COLORSPACE(yv12_to_yuyv_c,    2,2,2, YV12_TO_YUYV,   0,1,2,3)
449  MAKE_COLORSPACE(yv12_to_uyvy_c,    2,2,2, YV12_TO_YUYV,   1,0,3,2)  MAKE_COLORSPACE(yv12_to_uyvy_c,    2,2,2, YV12_TO_YUYV,   1,0,3,2)
450    
# Line 449  Line 454 
454  MAKE_COLORSPACE(yv12_to_bgrai_c,   4,2,4, YV12_TO_RGBI,   2,1,0,3)  MAKE_COLORSPACE(yv12_to_bgrai_c,   4,2,4, YV12_TO_RGBI,   2,1,0,3)
455  MAKE_COLORSPACE(yv12_to_abgri_c,   4,2,4, YV12_TO_RGBI,   3,2,1,0)  MAKE_COLORSPACE(yv12_to_abgri_c,   4,2,4, YV12_TO_RGBI,   3,2,1,0)
456  MAKE_COLORSPACE(yv12_to_rgbai_c,   4,2,4, YV12_TO_RGBI,   0,1,2,3)  MAKE_COLORSPACE(yv12_to_rgbai_c,   4,2,4, YV12_TO_RGBI,   0,1,2,3)
457    MAKE_COLORSPACE(yv12_to_argbi_c,   4,2,4, YV12_TO_RGBI,   1,2,3,0)
458  MAKE_COLORSPACE(yv12_to_yuyvi_c,   2,2,4, YV12_TO_YUYVI,  0,1,2,3)  MAKE_COLORSPACE(yv12_to_yuyvi_c,   2,2,4, YV12_TO_YUYVI,  0,1,2,3)
459  MAKE_COLORSPACE(yv12_to_uyvyi_c,   2,2,4, YV12_TO_YUYVI,  1,0,3,2)  MAKE_COLORSPACE(yv12_to_uyvyi_c,   2,2,4, YV12_TO_YUYVI,  1,0,3,2)
460    
# Line 466  Line 472 
472          int width2 = width / 2;          int width2 = width / 2;
473          int height2 = height / 2;          int height2 = height / 2;
474          int y;          int y;
475            const int with_uv = (u_src!=0 && v_src!=0);
476    
477          if (vflip) {          if (vflip) {
478                  y_src += (height - 1) * y_src_stride;                  y_src += (height - 1) * y_src_stride;
479                    if (with_uv) {
480                  u_src += (height2 - 1) * uv_src_stride;                  u_src += (height2 - 1) * uv_src_stride;
481                  v_src += (height2 - 1) * uv_src_stride;                  v_src += (height2 - 1) * uv_src_stride;
482                    }
483                  y_src_stride = -y_src_stride;                  y_src_stride = -y_src_stride;
484                  uv_src_stride = -uv_src_stride;                  uv_src_stride = -uv_src_stride;
485          }          }
# Line 481  Line 490 
490                  y_dst += y_dst_stride;                  y_dst += y_dst_stride;
491          }          }
492    
493            if (with_uv) {
494          for (y = height2; y; y--) {          for (y = height2; y; y--) {
495                  memcpy(u_dst, u_src, width2);                  memcpy(u_dst, u_src, width2);
496                            memcpy(v_dst, v_src, width2);
497                  u_src += uv_src_stride;                  u_src += uv_src_stride;
498                  u_dst += uv_dst_stride;                  u_dst += uv_dst_stride;
499                            v_src += uv_src_stride;
500                            v_dst += uv_dst_stride;
501          }          }
502            }
503            else {
504          for (y = height2; y; y--) {          for (y = height2; y; y--) {
505                  memcpy(v_dst, v_src, width2);                          memset(u_dst, 0x80, width2);
506                  v_src += uv_src_stride;                          memset(v_dst, 0x80, width2);
507                            u_dst += uv_dst_stride;
508                  v_dst += uv_dst_stride;                  v_dst += uv_dst_stride;
509          }          }
510  }  }
511    }
512    
513    
514    

Legend:
Removed from v.1.8.2.4  
changed lines
  Added in v.1.13

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4