[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.3.2.3, Sat Jan 4 06:14:33 2003 UTC revision 1.15, Wed May 13 09:39:20 2009 UTC
# Line 1  Line 1 
1  /**************************************************************************  /*****************************************************************************
2   *   *
3   *      XVID MPEG-4 VIDEO CODEC   *      XVID MPEG-4 VIDEO CODEC
4   *      colorspace conversions   *  - Colorspace conversion functions -
5     *
6     *  Copyright(C) 2001-2003 Peter Ross <pross@xvid.org>
7   *   *
8   *      This program is free software; you can redistribute it and/or modify   *      This program is free software; you can redistribute it and/or modify
9   *      it under the terms of the GNU General Public License as published by   *      it under the terms of the GNU General Public License as published by
# Line 15  Line 17 
17   *   *
18   *      You should have received a copy of the GNU General Public License   *      You should have received a copy of the GNU General Public License
19   *      along with this program; if not, write to the Free Software   *      along with this program; if not, write to the Free Software
20   *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  *  
  *************************************************************************/  
   
 /**************************************************************************  
  *  
  *      History:  
21   *   *
22   *      14.04.2002      added user_to_yuv_c()   * $Id$
  *      30.02.2002      out_yuv dst_stride2 fix  
  *      26.02.2002      rgb555, rgb565  
  *      24.11.2001      accuracy improvement to yuyv/vyuy conversion  
  *      28.10.2001      total rewrite <pross@cs.rmit.edu.au>  
23   *   *
24   **************************************************************************/   ****************************************************************************/
25    
26  #include <string.h>                             // memcpy  #include <string.h>                             /* memcpy */
27    
28  #include "../global.h"  #include "../global.h"
 #include "../divx4.h"                   // DEC_PICTURE  
29  #include "colorspace.h"  #include "colorspace.h"
30    
31  // function pointers  /* function pointers */
32    
33  /* input */  /* input */
34  packedFuncPtr rgb555_to_yv12;  packedFuncPtr rgb555_to_yv12;
35  packedFuncPtr rgb565_to_yv12;  packedFuncPtr rgb565_to_yv12;
36    packedFuncPtr rgb_to_yv12;
37  packedFuncPtr bgr_to_yv12;  packedFuncPtr bgr_to_yv12;
38  packedFuncPtr bgra_to_yv12;  packedFuncPtr bgra_to_yv12;
39  packedFuncPtr abgr_to_yv12;  packedFuncPtr abgr_to_yv12;
40  packedFuncPtr rgba_to_yv12;  packedFuncPtr rgba_to_yv12;
41  packedFuncPtr yuv_to_yv12;  packedFuncPtr argb_to_yv12;
42  packedFuncPtr yuyv_to_yv12;  packedFuncPtr yuyv_to_yv12;
43  packedFuncPtr uyvy_to_yv12;  packedFuncPtr uyvy_to_yv12;
44    
45  packedFuncPtr rgb555i_to_yv12;  packedFuncPtr rgb555i_to_yv12;
46  packedFuncPtr rgb565i_to_yv12;  packedFuncPtr rgb565i_to_yv12;
47    packedFuncPtr rgbi_to_yv12;
48  packedFuncPtr bgri_to_yv12;  packedFuncPtr bgri_to_yv12;
49  packedFuncPtr bgrai_to_yv12;  packedFuncPtr bgrai_to_yv12;
50  packedFuncPtr abgri_to_yv12;  packedFuncPtr abgri_to_yv12;
51  packedFuncPtr rgbai_to_yv12;  packedFuncPtr rgbai_to_yv12;
52    packedFuncPtr argbi_to_yv12;
53  packedFuncPtr yuyvi_to_yv12;  packedFuncPtr yuyvi_to_yv12;
54  packedFuncPtr uyvyi_to_yv12;  packedFuncPtr uyvyi_to_yv12;
55    
# Line 65  Line 59 
59  packedFuncPtr yv12_to_bgr;  packedFuncPtr yv12_to_bgr;
60  packedFuncPtr yv12_to_bgra;  packedFuncPtr yv12_to_bgra;
61  packedFuncPtr yv12_to_abgr;  packedFuncPtr yv12_to_abgr;
62    packedFuncPtr yv12_to_rgb;
63  packedFuncPtr yv12_to_rgba;  packedFuncPtr yv12_to_rgba;
64  packedFuncPtr yv12_to_yuv;  packedFuncPtr yv12_to_argb;
65  packedFuncPtr yv12_to_yuyv;  packedFuncPtr yv12_to_yuyv;
66  packedFuncPtr yv12_to_uyvy;  packedFuncPtr yv12_to_uyvy;
67    
# Line 75  Line 70 
70  packedFuncPtr yv12_to_bgri;  packedFuncPtr yv12_to_bgri;
71  packedFuncPtr yv12_to_bgrai;  packedFuncPtr yv12_to_bgrai;
72  packedFuncPtr yv12_to_abgri;  packedFuncPtr yv12_to_abgri;
73    packedFuncPtr yv12_to_rgbi;
74  packedFuncPtr yv12_to_rgbai;  packedFuncPtr yv12_to_rgbai;
75    packedFuncPtr yv12_to_argbi;
76  packedFuncPtr yv12_to_yuyvi;  packedFuncPtr yv12_to_yuyvi;
77  packedFuncPtr yv12_to_uyvyi;  packedFuncPtr yv12_to_uyvyi;
78    
79  planarFuncPtr yv12_to_yv12;  planarFuncPtr yv12_to_yv12;
80    
81    
82  int32_t RGB_Y_tab[256];  static int32_t RGB_Y_tab[256];
83  int32_t B_U_tab[256];  static int32_t B_U_tab[256];
84  int32_t G_U_tab[256];  static int32_t G_U_tab[256];
85  int32_t G_V_tab[256];  static int32_t G_V_tab[256];
86  int32_t R_V_tab[256];  static int32_t R_V_tab[256];
87    
88    
89    
# Line 155  Line 152 
152  #define V_B_IN                  0.071  #define V_B_IN                  0.071
153  #define V_ADD_IN                128  #define V_ADD_IN                128
154    
155  #define SCALEBITS_IN    8  #define SCALEBITS_IN            13
156  #define FIX_IN(x)               ((uint16_t) ((x) * (1L<<SCALEBITS_IN) + 0.5))  #define FIX_IN(x)               ((uint16_t) ((x) * (1L<<SCALEBITS_IN) + 0.5))
157    #define FIX_ROUND               (1L<<(SCALEBITS_IN-1))
158    
159  /* rgb16/rgb16i input */  /* rgb16/rgb16i input */
160    
# Line 177  Line 174 
174          r##UVID += r = C1##_R(rgb);                             \          r##UVID += r = C1##_R(rgb);                             \
175          y_ptr[(ROW)*y_stride+0] =                               \          y_ptr[(ROW)*y_stride+0] =                               \
176                  (uint8_t) ((FIX_IN(Y_R_IN) * r + FIX_IN(Y_G_IN) * g +   \                  (uint8_t) ((FIX_IN(Y_R_IN) * r + FIX_IN(Y_G_IN) * g +   \
177                                          FIX_IN(Y_B_IN) * b) >> SCALEBITS_IN) + Y_ADD_IN;        \                                          FIX_IN(Y_B_IN) * b + FIX_ROUND) >> SCALEBITS_IN) + Y_ADD_IN;    \
178          rgb = *(uint16_t *) (x_ptr + ((ROW)*x_stride) + 2);     \          rgb = *(uint16_t *) (x_ptr + ((ROW)*x_stride) + 2);     \
179          b##UVID += b = C1##_B(rgb);                             \          b##UVID += b = C1##_B(rgb);                             \
180          g##UVID += g = C1##_G(rgb);                             \          g##UVID += g = C1##_G(rgb);                             \
181          r##UVID += r = C1##_R(rgb);                             \          r##UVID += r = C1##_R(rgb);                             \
182          y_ptr[(ROW)*y_stride+1] =                               \          y_ptr[(ROW)*y_stride+1] =                               \
183                  (uint8_t) ((FIX_IN(Y_R_IN) * r + FIX_IN(Y_G_IN) * g +                   \                  (uint8_t) ((FIX_IN(Y_R_IN) * r + FIX_IN(Y_G_IN) * g +                   \
184                                          FIX_IN(Y_B_IN) * b) >> SCALEBITS_IN) + Y_ADD_IN;                                          FIX_IN(Y_B_IN) * b + FIX_ROUND) >> SCALEBITS_IN) + Y_ADD_IN;
185    
186  #define READ_RGB16_UV(UV_ROW,UVID)      \  #define READ_RGB16_UV(UV_ROW,UVID)      \
187          u_ptr[(UV_ROW)*uv_stride] =                                                                                                             \          u_ptr[(UV_ROW)*uv_stride] =                                                                                                             \
188                  (uint8_t) ((-FIX_IN(U_R_IN) * r##UVID - FIX_IN(U_G_IN) * g##UVID +                      \                  (uint8_t) ((-FIX_IN(U_R_IN) * r##UVID - FIX_IN(U_G_IN) * g##UVID +                      \
189                                          FIX_IN(U_B_IN) * b##UVID) >> (SCALEBITS_IN + 2)) + U_ADD_IN;    \                                          FIX_IN(U_B_IN) * b##UVID + 4*FIX_ROUND) >> (SCALEBITS_IN + 2)) + U_ADD_IN;      \
190          v_ptr[(UV_ROW)*uv_stride] =                                                                                                             \          v_ptr[(UV_ROW)*uv_stride] =                                                                                                             \
191                  (uint8_t) ((FIX_IN(V_R_IN) * r##UVID - FIX_IN(V_G_IN) * g##UVID -                       \                  (uint8_t) ((FIX_IN(V_R_IN) * r##UVID - FIX_IN(V_G_IN) * g##UVID -                       \
192                                          FIX_IN(V_B_IN) * b##UVID) >> (SCALEBITS_IN + 2)) + V_ADD_IN;                                          FIX_IN(V_B_IN) * b##UVID + 4*FIX_ROUND) >> (SCALEBITS_IN + 2)) + V_ADD_IN;
193    
194  #define RGB16_TO_YV12_ROW(SIZE,C1,C2,C3,C4) \  #define RGB16_TO_YV12_ROW(SIZE,C1,C2,C3,C4) \
195          /* nothing */          /* nothing */
# Line 225  Line 222 
222          b##UVID += b = x_ptr[(ROW)*x_stride+(C3)];                                              \          b##UVID += b = x_ptr[(ROW)*x_stride+(C3)];                                              \
223          y_ptr[(ROW)*y_stride+0] =                                                                       \          y_ptr[(ROW)*y_stride+0] =                                                                       \
224                  (uint8_t) ((FIX_IN(Y_R_IN) * r + FIX_IN(Y_G_IN) * g +   \                  (uint8_t) ((FIX_IN(Y_R_IN) * r + FIX_IN(Y_G_IN) * g +   \
225                                          FIX_IN(Y_B_IN) * b) >> SCALEBITS_IN) + Y_ADD_IN;        \                                          FIX_IN(Y_B_IN) * b + FIX_ROUND) >> SCALEBITS_IN) + Y_ADD_IN;    \
226          r##UVID += r = x_ptr[(ROW)*x_stride+(SIZE)+(C1)];                               \          r##UVID += r = x_ptr[(ROW)*x_stride+(SIZE)+(C1)];                               \
227          g##UVID += g = x_ptr[(ROW)*x_stride+(SIZE)+(C2)];                               \          g##UVID += g = x_ptr[(ROW)*x_stride+(SIZE)+(C2)];                               \
228          b##UVID += b = x_ptr[(ROW)*x_stride+(SIZE)+(C3)];                               \          b##UVID += b = x_ptr[(ROW)*x_stride+(SIZE)+(C3)];                               \
229          y_ptr[(ROW)*y_stride+1] =                                                                       \          y_ptr[(ROW)*y_stride+1] =                                                                       \
230                  (uint8_t) ((FIX_IN(Y_R_IN) * r + FIX_IN(Y_G_IN) * g +   \                  (uint8_t) ((FIX_IN(Y_R_IN) * r + FIX_IN(Y_G_IN) * g +   \
231                                          FIX_IN(Y_B_IN) * b) >> SCALEBITS_IN) + Y_ADD_IN;                                          FIX_IN(Y_B_IN) * b + FIX_ROUND) >> SCALEBITS_IN) + Y_ADD_IN;
232    
233  #define READ_RGB_UV(UV_ROW,UVID)        \  #define READ_RGB_UV(UV_ROW,UVID)        \
234          u_ptr[(UV_ROW)*uv_stride] =                                                                                                             \          u_ptr[(UV_ROW)*uv_stride] =                                                                                                             \
235                  (uint8_t) ((-FIX_IN(U_R_IN) * r##UVID - FIX_IN(U_G_IN) * g##UVID +                      \                  (uint8_t) ((-FIX_IN(U_R_IN) * r##UVID - FIX_IN(U_G_IN) * g##UVID +                      \
236                                          FIX_IN(U_B_IN) * b##UVID) >> (SCALEBITS_IN + 2)) + U_ADD_IN;    \                                          FIX_IN(U_B_IN) * b##UVID + 4*FIX_ROUND) >> (SCALEBITS_IN + 2)) + U_ADD_IN;      \
237          v_ptr[(UV_ROW)*uv_stride] =                                                                                                             \          v_ptr[(UV_ROW)*uv_stride] =                                                                                                             \
238                  (uint8_t) ((FIX_IN(V_R_IN) * r##UVID - FIX_IN(V_G_IN) * g##UVID -                       \                  (uint8_t) ((FIX_IN(V_R_IN) * r##UVID - FIX_IN(V_G_IN) * g##UVID -                       \
239                                          FIX_IN(V_B_IN) * b##UVID) >> (SCALEBITS_IN + 2)) + V_ADD_IN;                                          FIX_IN(V_B_IN) * b##UVID + 4*FIX_ROUND) >> (SCALEBITS_IN + 2)) + V_ADD_IN;
240    
241    
242  #define RGB_TO_YV12_ROW(SIZE,C1,C2,C3,C4) \  #define RGB_TO_YV12_ROW(SIZE,C1,C2,C3,C4) \
# Line 295  Line 292 
292  MAKE_COLORSPACE(rgb565_to_yv12_c,  2,2,2, RGB16_TO_YV12,  MK_RGB565, 0,0,0)  MAKE_COLORSPACE(rgb565_to_yv12_c,  2,2,2, RGB16_TO_YV12,  MK_RGB565, 0,0,0)
293  MAKE_COLORSPACE(bgr_to_yv12_c,     3,2,2, RGB_TO_YV12,    2,1,0, 0)  MAKE_COLORSPACE(bgr_to_yv12_c,     3,2,2, RGB_TO_YV12,    2,1,0, 0)
294  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)
295    MAKE_COLORSPACE(rgb_to_yv12_c,     3,2,2, RGB_TO_YV12,    0,1,2, 0)
296  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)
297  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)
298    MAKE_COLORSPACE(argb_to_yv12_c,    4,2,2, RGB_TO_YV12,    1,2,3, 0)
299  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)
300  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)
301    
# Line 305  Line 304 
304  MAKE_COLORSPACE(bgri_to_yv12_c,    3,2,4, RGBI_TO_YV12,   2,1,0, 0)  MAKE_COLORSPACE(bgri_to_yv12_c,    3,2,4, RGBI_TO_YV12,   2,1,0, 0)
305  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)
306  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)
307    MAKE_COLORSPACE(rgbi_to_yv12_c,    3,2,4, RGBI_TO_YV12,   0,1,2, 0)
308  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)
309    MAKE_COLORSPACE(argbi_to_yv12_c,   4,2,4, RGBI_TO_YV12,   1,2,3, 0)
310  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)
311  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)
312    
# Line 342  Line 343 
343          ((MAX(0,MIN(255, B)) >> 3) & 0x001f)          ((MAX(0,MIN(255, B)) >> 3) & 0x001f)
344    
345  #define WRITE_RGB16(ROW,UV_ROW,C1)      \  #define WRITE_RGB16(ROW,UV_ROW,C1)      \
346          rgb_y = RGB_Y_tab[ y_ptr[y_stride + 0] ];                       \          rgb_y = RGB_Y_tab[ y_ptr[y_stride*(ROW) + 0] ];                                         \
347          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);     \
348          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);    \
349          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);             \
350          *(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]);  \
351          rgb_y = RGB_Y_tab[ y_ptr[y_stride + 1] ];                               \          rgb_y = RGB_Y_tab[ y_ptr[y_stride*(ROW) + 1] ];                         \
352          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);             \
353          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);    \
354          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 448  Line 449 
449  MAKE_COLORSPACE(yv12_to_bgr_c,     3,2,2, YV12_TO_RGB,    2,1,0, 0)  MAKE_COLORSPACE(yv12_to_bgr_c,     3,2,2, YV12_TO_RGB,    2,1,0, 0)
450  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)
451  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)
452    MAKE_COLORSPACE(yv12_to_rgb_c,     3,2,2, YV12_TO_RGB,    0,1,2,0)
453  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)
454    MAKE_COLORSPACE(yv12_to_argb_c,    4,2,2, YV12_TO_RGB,    1,2,3,0)
455  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)
456  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)
457    
# Line 457  Line 460 
460  MAKE_COLORSPACE(yv12_to_bgri_c,    3,2,4, YV12_TO_RGBI,   2,1,0, 0)  MAKE_COLORSPACE(yv12_to_bgri_c,    3,2,4, YV12_TO_RGBI,   2,1,0, 0)
461  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)
462  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)
463    MAKE_COLORSPACE(yv12_to_rgbi_c,    3,2,4, YV12_TO_RGBI,   0,1,2,0)
464  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)
465    MAKE_COLORSPACE(yv12_to_argbi_c,   4,2,4, YV12_TO_RGBI,   1,2,3,0)
466  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)
467  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)
468    
# Line 475  Line 480 
480          int width2 = width / 2;          int width2 = width / 2;
481          int height2 = height / 2;          int height2 = height / 2;
482          int y;          int y;
483            const int with_uv = (u_src!=0 && v_src!=0);
484    
485          if (vflip) {          if (vflip) {
486                  y_src += (height - 1) * y_src_stride;                  y_src += (height - 1) * y_src_stride;
487                    if (with_uv) {
488                  u_src += (height2 - 1) * uv_src_stride;                  u_src += (height2 - 1) * uv_src_stride;
489                  v_src += (height2 - 1) * uv_src_stride;                  v_src += (height2 - 1) * uv_src_stride;
490                    }
491                  y_src_stride = -y_src_stride;                  y_src_stride = -y_src_stride;
492                  uv_src_stride = -uv_src_stride;                  uv_src_stride = -uv_src_stride;
493          }          }
# Line 490  Line 498 
498                  y_dst += y_dst_stride;                  y_dst += y_dst_stride;
499          }          }
500    
501            if (with_uv) {
502          for (y = height2; y; y--) {          for (y = height2; y; y--) {
503                  memcpy(u_dst, u_src, width2);                  memcpy(u_dst, u_src, width2);
504                            memcpy(v_dst, v_src, width2);
505                  u_src += uv_src_stride;                  u_src += uv_src_stride;
506                  u_dst += uv_dst_stride;                  u_dst += uv_dst_stride;
507                            v_src += uv_src_stride;
508                            v_dst += uv_dst_stride;
509          }          }
510            }
511            else {
512          for (y = height2; y; y--) {          for (y = height2; y; y--) {
513                  memcpy(v_dst, v_src, width2);                          memset(u_dst, 0x80, width2);
514                  v_src += uv_src_stride;                          memset(v_dst, 0x80, width2);
515                            u_dst += uv_dst_stride;
516                  v_dst += uv_dst_stride;                  v_dst += uv_dst_stride;
517          }          }
518  }  }
519    }
520    
521    
522    

Legend:
Removed from v.1.3.2.3  
changed lines
  Added in v.1.15

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