annotate libswscale/yuv2rgb.c @ 28883:c3f295ceae51

Do not call waveOutReset in uninit if you should wait till playing finishes, and retry waveOutClose if it fails due to still playing.
author reimar
date Mon, 09 Mar 2009 19:15:20 +0000
parents 730912eb74d3
children cf087cb82252
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
1 /*
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
2 * software YUV to RGB converter
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
3 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
4 * Copyright (C) 2009 Konstantin Shishkov
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
5 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
6 * MMX/MMX2 template stuff (needed for fast movntq support),
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
7 * 1,4,8bpp support and context / deglobalize stuff
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
8 * by Michael Niedermayer (michaelni@gmx.at)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
9 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
10 * This file is part of FFmpeg.
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
11 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
12 * FFmpeg is free software; you can redistribute it and/or
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
13 * modify it under the terms of the GNU Lesser General Public
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
14 * License as published by the Free Software Foundation; either
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
15 * version 2.1 of the License, or (at your option) any later version.
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
16 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
17 * FFmpeg is distributed in the hope that it will be useful,
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
20 * Lesser General Public License for more details.
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
21 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
22 * You should have received a copy of the GNU Lesser General Public
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
23 * License along with FFmpeg; if not, write to the Free Software
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
25 */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
26
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
27 #include <stdio.h>
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
28 #include <stdlib.h>
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
29 #include <inttypes.h>
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
30 #include <assert.h>
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
31
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
32 #include "config.h"
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
33 #include "rgb2rgb.h"
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
34 #include "swscale.h"
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
35 #include "swscale_internal.h"
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
36
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
37 #define DITHER1XBPP // only for MMX
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
38
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
39 extern const uint8_t dither_8x8_32[8][8];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
40 extern const uint8_t dither_8x8_73[8][8];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
41 extern const uint8_t dither_8x8_220[8][8];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
42
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
43 #if HAVE_MMX && CONFIG_GPL
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
44
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
45 /* hope these constant values are cache line aligned */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
46 DECLARE_ASM_CONST(8, uint64_t, mmx_00ffw) = 0x00ff00ff00ff00ffULL;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
47 DECLARE_ASM_CONST(8, uint64_t, mmx_redmask) = 0xf8f8f8f8f8f8f8f8ULL;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
48 DECLARE_ASM_CONST(8, uint64_t, mmx_grnmask) = 0xfcfcfcfcfcfcfcfcULL;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
49
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
50 //MMX versions
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
51 #undef RENAME
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
52 #undef HAVE_MMX2
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
53 #undef HAVE_AMD3DNOW
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
54 #define HAVE_MMX2 0
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
55 #define HAVE_AMD3DNOW 0
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
56 #define RENAME(a) a ## _MMX
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
57 #include "yuv2rgb_template.c"
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
58
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
59 //MMX2 versions
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
60 #undef RENAME
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
61 #undef HAVE_MMX2
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
62 #define HAVE_MMX2 1
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
63 #define RENAME(a) a ## _MMX2
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
64 #include "yuv2rgb_template.c"
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
65
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
66 #endif /* HAVE_MMX && CONFIG_GPL */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
67
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
68 const int32_t ff_yuv2rgb_coeffs[8][4] = {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
69 {117504, 138453, 13954, 34903}, /* no sequence_display_extension */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
70 {117504, 138453, 13954, 34903}, /* ITU-R Rec. 709 (1990) */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
71 {104597, 132201, 25675, 53279}, /* unspecified */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
72 {104597, 132201, 25675, 53279}, /* reserved */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
73 {104448, 132798, 24759, 53109}, /* FCC */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
74 {104597, 132201, 25675, 53279}, /* ITU-R Rec. 624-4 System B, G */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
75 {104597, 132201, 25675, 53279}, /* SMPTE 170M */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
76 {117579, 136230, 16907, 35559} /* SMPTE 240M (1987) */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
77 };
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
78
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
79 #define LOADCHROMA(i) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
80 U = pu[i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
81 V = pv[i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
82 r = (void *)c->table_rV[V]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
83 g = (void *)(c->table_gU[U] + c->table_gV[V]); \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
84 b = (void *)c->table_bU[U];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
85
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
86 #define PUTRGB(dst,src,i,o) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
87 Y = src[2*i+o]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
88 dst[2*i ] = r[Y] + g[Y] + b[Y]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
89 Y = src[2*i+1-o]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
90 dst[2*i+1] = r[Y] + g[Y] + b[Y];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
91
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
92 #define PUTRGB24(dst,src,i) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
93 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
94 dst[6*i+0] = r[Y]; dst[6*i+1] = g[Y]; dst[6*i+2] = b[Y]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
95 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
96 dst[6*i+3] = r[Y]; dst[6*i+4] = g[Y]; dst[6*i+5] = b[Y];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
97
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
98 #define PUTBGR24(dst,src,i) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
99 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
100 dst[6*i+0] = b[Y]; dst[6*i+1] = g[Y]; dst[6*i+2] = r[Y]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
101 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
102 dst[6*i+3] = b[Y]; dst[6*i+4] = g[Y]; dst[6*i+5] = r[Y];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
103
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
104 #define YUV2RGBFUNC(func_name, dst_type) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
105 static int func_name(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
106 int srcSliceH, uint8_t* dst[], int dstStride[]){\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
107 int y;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
108 \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
109 if (c->srcFormat == PIX_FMT_YUV422P) {\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
110 srcStride[1] *= 2;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
111 srcStride[2] *= 2;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
112 }\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
113 for (y=0; y<srcSliceH; y+=2) {\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
114 dst_type *dst_1 = (dst_type*)(dst[0] + (y+srcSliceY )*dstStride[0]);\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
115 dst_type *dst_2 = (dst_type*)(dst[0] + (y+srcSliceY+1)*dstStride[0]);\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
116 dst_type av_unused *r, *b;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
117 dst_type *g;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
118 uint8_t *py_1 = src[0] + y*srcStride[0];\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
119 uint8_t *py_2 = py_1 + srcStride[0];\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
120 uint8_t *pu = src[1] + (y>>1)*srcStride[1];\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
121 uint8_t *pv = src[2] + (y>>1)*srcStride[2];\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
122 unsigned int h_size = c->dstW>>3;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
123 while (h_size--) {\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
124 int av_unused U, V;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
125 int Y;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
126
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
127 #define ENDYUV2RGBLINE(dst_delta)\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
128 pu += 4;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
129 pv += 4;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
130 py_1 += 8;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
131 py_2 += 8;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
132 dst_1 += dst_delta;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
133 dst_2 += dst_delta;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
134 }\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
135 if (c->dstW & 4) {\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
136 int av_unused Y, U, V;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
137
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
138 #define ENDYUV2RGBFUNC()\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
139 }\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
140 }\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
141 return srcSliceH;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
142 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
143
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
144 #define CLOSEYUV2RGBFUNC(dst_delta)\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
145 ENDYUV2RGBLINE(dst_delta)\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
146 ENDYUV2RGBFUNC()
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
147
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
148 YUV2RGBFUNC(yuv2rgb_c_32, uint32_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
149 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
150 PUTRGB(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
151 PUTRGB(dst_2,py_2,0,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
152
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
153 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
154 PUTRGB(dst_2,py_2,1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
155 PUTRGB(dst_1,py_1,1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
156 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
157 PUTRGB(dst_2,py_2,1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
158 PUTRGB(dst_1,py_1,1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
159
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
160 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
161 PUTRGB(dst_1,py_1,2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
162 PUTRGB(dst_2,py_2,2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
163
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
164 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
165 PUTRGB(dst_2,py_2,3,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
166 PUTRGB(dst_1,py_1,3,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
167 ENDYUV2RGBLINE(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
168 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
169 PUTRGB(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
170 PUTRGB(dst_2,py_2,0,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
171
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
172 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
173 PUTRGB(dst_2,py_2,1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
174 PUTRGB(dst_1,py_1,1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
175 ENDYUV2RGBFUNC()
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
176
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
177 YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
178 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
179 PUTRGB24(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
180 PUTRGB24(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
181
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
182 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
183 PUTRGB24(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
184 PUTRGB24(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
185
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
186 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
187 PUTRGB24(dst_1,py_1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
188 PUTRGB24(dst_2,py_2,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
189
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
190 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
191 PUTRGB24(dst_2,py_2,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
192 PUTRGB24(dst_1,py_1,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
193 ENDYUV2RGBLINE(24)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
194 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
195 PUTRGB24(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
196 PUTRGB24(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
197
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
198 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
199 PUTRGB24(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
200 PUTRGB24(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
201 ENDYUV2RGBFUNC()
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
202
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
203 // only trivial mods from yuv2rgb_c_24_rgb
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
204 YUV2RGBFUNC(yuv2rgb_c_24_bgr, uint8_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
205 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
206 PUTBGR24(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
207 PUTBGR24(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
208
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
209 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
210 PUTBGR24(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
211 PUTBGR24(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
212
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
213 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
214 PUTBGR24(dst_1,py_1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
215 PUTBGR24(dst_2,py_2,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
216
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
217 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
218 PUTBGR24(dst_2,py_2,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
219 PUTBGR24(dst_1,py_1,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
220 ENDYUV2RGBLINE(24)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
221 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
222 PUTBGR24(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
223 PUTBGR24(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
224
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
225 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
226 PUTBGR24(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
227 PUTBGR24(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
228 ENDYUV2RGBFUNC()
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
229
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
230 // This is exactly the same code as yuv2rgb_c_32 except for the types of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
231 // r, g, b, dst_1, dst_2
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
232 YUV2RGBFUNC(yuv2rgb_c_16, uint16_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
233 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
234 PUTRGB(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
235 PUTRGB(dst_2,py_2,0,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
236
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
237 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
238 PUTRGB(dst_2,py_2,1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
239 PUTRGB(dst_1,py_1,1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
240
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
241 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
242 PUTRGB(dst_1,py_1,2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
243 PUTRGB(dst_2,py_2,2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
244
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
245 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
246 PUTRGB(dst_2,py_2,3,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
247 PUTRGB(dst_1,py_1,3,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
248 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
249
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
250 // This is exactly the same code as yuv2rgb_c_32 except for the types of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
251 // r, g, b, dst_1, dst_2
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
252 YUV2RGBFUNC(yuv2rgb_c_8, uint8_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
253 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
254 PUTRGB(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
255 PUTRGB(dst_2,py_2,0,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
256
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
257 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
258 PUTRGB(dst_2,py_2,1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
259 PUTRGB(dst_1,py_1,1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
260
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
261 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
262 PUTRGB(dst_1,py_1,2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
263 PUTRGB(dst_2,py_2,2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
264
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
265 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
266 PUTRGB(dst_2,py_2,3,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
267 PUTRGB(dst_1,py_1,3,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
268 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
269
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
270 // r, g, b, dst_1, dst_2
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
271 YUV2RGBFUNC(yuv2rgb_c_8_ordered_dither, uint8_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
272 const uint8_t *d32 = dither_8x8_32[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
273 const uint8_t *d64 = dither_8x8_73[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
274 #define PUTRGB8(dst,src,i,o) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
275 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
276 dst[2*i] = r[Y+d32[0+o]] + g[Y+d32[0+o]] + b[Y+d64[0+o]]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
277 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
278 dst[2*i+1] = r[Y+d32[1+o]] + g[Y+d32[1+o]] + b[Y+d64[1+o]];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
279
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
280 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
281 PUTRGB8(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
282 PUTRGB8(dst_2,py_2,0,0+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
283
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
284 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
285 PUTRGB8(dst_2,py_2,1,2+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
286 PUTRGB8(dst_1,py_1,1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
287
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
288 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
289 PUTRGB8(dst_1,py_1,2,4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
290 PUTRGB8(dst_2,py_2,2,4+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
291
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
292 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
293 PUTRGB8(dst_2,py_2,3,6+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
294 PUTRGB8(dst_1,py_1,3,6);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
295 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
296
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
297
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
298 // This is exactly the same code as yuv2rgb_c_32 except for the types of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
299 // r, g, b, dst_1, dst_2
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
300 YUV2RGBFUNC(yuv2rgb_c_4, uint8_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
301 int acc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
302 #define PUTRGB4(dst,src,i) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
303 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
304 acc = r[Y] + g[Y] + b[Y]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
305 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
306 acc |= (r[Y] + g[Y] + b[Y])<<4; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
307 dst[i] = acc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
308
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
309 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
310 PUTRGB4(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
311 PUTRGB4(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
312
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
313 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
314 PUTRGB4(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
315 PUTRGB4(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
316
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
317 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
318 PUTRGB4(dst_1,py_1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
319 PUTRGB4(dst_2,py_2,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
320
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
321 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
322 PUTRGB4(dst_2,py_2,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
323 PUTRGB4(dst_1,py_1,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
324 CLOSEYUV2RGBFUNC(4)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
325
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
326 YUV2RGBFUNC(yuv2rgb_c_4_ordered_dither, uint8_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
327 const uint8_t *d64 = dither_8x8_73[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
328 const uint8_t *d128 = dither_8x8_220[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
329 int acc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
330
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
331 #define PUTRGB4D(dst,src,i,o) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
332 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
333 acc = r[Y+d128[0+o]] + g[Y+d64[0+o]] + b[Y+d128[0+o]]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
334 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
335 acc |= (r[Y+d128[1+o]] + g[Y+d64[1+o]] + b[Y+d128[1+o]])<<4; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
336 dst[i]= acc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
337
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
338 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
339 PUTRGB4D(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
340 PUTRGB4D(dst_2,py_2,0,0+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
341
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
342 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
343 PUTRGB4D(dst_2,py_2,1,2+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
344 PUTRGB4D(dst_1,py_1,1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
345
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
346 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
347 PUTRGB4D(dst_1,py_1,2,4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
348 PUTRGB4D(dst_2,py_2,2,4+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
349
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
350 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
351 PUTRGB4D(dst_2,py_2,3,6+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
352 PUTRGB4D(dst_1,py_1,3,6);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
353 CLOSEYUV2RGBFUNC(4)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
354
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
355 // This is exactly the same code as yuv2rgb_c_32 except for the types of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
356 // r, g, b, dst_1, dst_2
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
357 YUV2RGBFUNC(yuv2rgb_c_4b, uint8_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
358 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
359 PUTRGB(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
360 PUTRGB(dst_2,py_2,0,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
361
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
362 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
363 PUTRGB(dst_2,py_2,1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
364 PUTRGB(dst_1,py_1,1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
365
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
366 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
367 PUTRGB(dst_1,py_1,2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
368 PUTRGB(dst_2,py_2,2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
369
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
370 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
371 PUTRGB(dst_2,py_2,3,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
372 PUTRGB(dst_1,py_1,3,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
373 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
374
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
375 YUV2RGBFUNC(yuv2rgb_c_4b_ordered_dither, uint8_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
376 const uint8_t *d64 = dither_8x8_73[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
377 const uint8_t *d128 = dither_8x8_220[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
378
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
379 #define PUTRGB4DB(dst,src,i,o) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
380 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
381 dst[2*i] = r[Y+d128[0+o]] + g[Y+d64[0+o]] + b[Y+d128[0+o]]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
382 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
383 dst[2*i+1] = r[Y+d128[1+o]] + g[Y+d64[1+o]] + b[Y+d128[1+o]];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
384
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
385 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
386 PUTRGB4DB(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
387 PUTRGB4DB(dst_2,py_2,0,0+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
388
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
389 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
390 PUTRGB4DB(dst_2,py_2,1,2+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
391 PUTRGB4DB(dst_1,py_1,1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
392
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
393 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
394 PUTRGB4DB(dst_1,py_1,2,4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
395 PUTRGB4DB(dst_2,py_2,2,4+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
396
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
397 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
398 PUTRGB4DB(dst_2,py_2,3,6+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
399 PUTRGB4DB(dst_1,py_1,3,6);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
400 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
401
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
402 YUV2RGBFUNC(yuv2rgb_c_1_ordered_dither, uint8_t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
403 const uint8_t *d128 = dither_8x8_220[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
404 char out_1 = 0, out_2 = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
405 g= c->table_gU[128] + c->table_gV[128];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
406
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
407 #define PUTRGB1(out,src,i,o) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
408 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
409 out+= out + g[Y+d128[0+o]]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
410 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
411 out+= out + g[Y+d128[1+o]];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
412
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
413 PUTRGB1(out_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
414 PUTRGB1(out_2,py_2,0,0+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
415
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
416 PUTRGB1(out_2,py_2,1,2+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
417 PUTRGB1(out_1,py_1,1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
418
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
419 PUTRGB1(out_1,py_1,2,4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
420 PUTRGB1(out_2,py_2,2,4+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
421
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
422 PUTRGB1(out_2,py_2,3,6+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
423 PUTRGB1(out_1,py_1,3,6);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
424
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
425 dst_1[0]= out_1;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
426 dst_2[0]= out_2;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
427 CLOSEYUV2RGBFUNC(1)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
428
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
429 SwsFunc sws_yuv2rgb_get_func_ptr(SwsContext *c)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
430 {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
431 SwsFunc t = NULL;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
432 #if (HAVE_MMX2 || HAVE_MMX) && CONFIG_GPL
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
433 if (c->flags & SWS_CPU_CAPS_MMX2) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
434 switch (c->dstFormat) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
435 case PIX_FMT_RGB32: return yuv420_rgb32_MMX2;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
436 case PIX_FMT_BGR24: return yuv420_rgb24_MMX2;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
437 case PIX_FMT_RGB565: return yuv420_rgb16_MMX2;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
438 case PIX_FMT_RGB555: return yuv420_rgb15_MMX2;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
439 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
440 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
441 if (c->flags & SWS_CPU_CAPS_MMX) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
442 switch (c->dstFormat) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
443 case PIX_FMT_RGB32: return yuv420_rgb32_MMX;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
444 case PIX_FMT_BGR24: return yuv420_rgb24_MMX;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
445 case PIX_FMT_RGB565: return yuv420_rgb16_MMX;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
446 case PIX_FMT_RGB555: return yuv420_rgb15_MMX;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
447 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
448 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
449 #endif
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
450 #if HAVE_VIS
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
451 t = sws_yuv2rgb_init_vis(c);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
452 #endif
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
453 #if CONFIG_MLIB
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
454 t = sws_yuv2rgb_init_mlib(c);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
455 #endif
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
456 #if HAVE_ALTIVEC && CONFIG_GPL
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
457 if (c->flags & SWS_CPU_CAPS_ALTIVEC)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
458 t = sws_yuv2rgb_init_altivec(c);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
459 #endif
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
460
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
461 #if ARCH_BFIN
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
462 if (c->flags & SWS_CPU_CAPS_BFIN)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
463 t = sws_ff_bfin_yuv2rgb_get_func_ptr(c);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
464 #endif
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
465
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
466 if (t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
467 return t;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
468
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
469 av_log(c, AV_LOG_WARNING, "No accelerated colorspace conversion found.\n");
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
470
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
471 switch (c->dstFormat) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
472 case PIX_FMT_BGR32_1:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
473 case PIX_FMT_RGB32_1:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
474 case PIX_FMT_BGR32:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
475 case PIX_FMT_RGB32: return yuv2rgb_c_32;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
476 case PIX_FMT_RGB24: return yuv2rgb_c_24_rgb;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
477 case PIX_FMT_BGR24: return yuv2rgb_c_24_bgr;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
478 case PIX_FMT_RGB565:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
479 case PIX_FMT_BGR565:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
480 case PIX_FMT_RGB555:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
481 case PIX_FMT_BGR555: return yuv2rgb_c_16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
482 case PIX_FMT_RGB8:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
483 case PIX_FMT_BGR8: return yuv2rgb_c_8_ordered_dither;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
484 case PIX_FMT_RGB4:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
485 case PIX_FMT_BGR4: return yuv2rgb_c_4_ordered_dither;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
486 case PIX_FMT_RGB4_BYTE:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
487 case PIX_FMT_BGR4_BYTE: return yuv2rgb_c_4b_ordered_dither;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
488 case PIX_FMT_MONOBLACK: return yuv2rgb_c_1_ordered_dither;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
489 default:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
490 assert(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
491 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
492 return NULL;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
493 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
494
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
495 static void fill_table(uint8_t* table[256], const int elemsize, const int inc, uint8_t *y_table)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
496 {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
497 int i;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
498 int64_t cb = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
499
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
500 y_table -= elemsize * (inc >> 9);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
501
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
502 for (i = 0; i < 256; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
503 table[i] = y_table + elemsize * (cb >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
504 cb += inc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
505 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
506 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
507
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
508 static void fill_gv_table(int table[256], const int elemsize, const int inc)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
509 {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
510 int i;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
511 int64_t cb = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
512 int off = -(inc >> 9);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
513
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
514 for (i = 0; i < 256; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
515 table[i] = elemsize * (off + (cb >> 16));
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
516 cb += inc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
517 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
518 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
519
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
520 av_cold int sws_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], int fullRange,
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
521 int brightness, int contrast, int saturation)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
522 {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
523 const int isRgb = c->dstFormat==PIX_FMT_RGB32
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
524 || c->dstFormat==PIX_FMT_RGB32_1
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
525 || c->dstFormat==PIX_FMT_BGR24
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
526 || c->dstFormat==PIX_FMT_RGB565
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
527 || c->dstFormat==PIX_FMT_RGB555
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
528 || c->dstFormat==PIX_FMT_RGB8
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
529 || c->dstFormat==PIX_FMT_RGB4
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
530 || c->dstFormat==PIX_FMT_RGB4_BYTE
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
531 || c->dstFormat==PIX_FMT_MONOBLACK;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
532 const int bpp = fmt_depth(c->dstFormat);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
533 uint8_t *y_table;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
534 uint16_t *y_table16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
535 uint32_t *y_table32;
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28688
diff changeset
536 int i, base, rbase, gbase, bbase, abase;
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
537 const int yoffs = fullRange ? 384 : 326;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
538
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
539 int64_t crv = inv_table[0];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
540 int64_t cbu = inv_table[1];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
541 int64_t cgu = -inv_table[2];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
542 int64_t cgv = -inv_table[3];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
543 int64_t cy = 1<<16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
544 int64_t oy = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
545
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
546 int64_t yb = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
547
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
548 if (!fullRange) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
549 cy = (cy*255) / 219;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
550 oy = 16<<16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
551 } else {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
552 crv = (crv*224) / 255;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
553 cbu = (cbu*224) / 255;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
554 cgu = (cgu*224) / 255;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
555 cgv = (cgv*224) / 255;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
556 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
557
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
558 cy = (cy *contrast ) >> 16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
559 crv = (crv*contrast * saturation) >> 32;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
560 cbu = (cbu*contrast * saturation) >> 32;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
561 cgu = (cgu*contrast * saturation) >> 32;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
562 cgv = (cgv*contrast * saturation) >> 32;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
563 oy -= 256*brightness;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
564
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
565 //scale coefficients by cy
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
566 crv = ((crv << 16) + 0x8000) / cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
567 cbu = ((cbu << 16) + 0x8000) / cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
568 cgu = ((cgu << 16) + 0x8000) / cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
569 cgv = ((cgv << 16) + 0x8000) / cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
570
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
571 av_free(c->yuvTable);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
572
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
573 switch (bpp) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
574 case 1:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
575 c->yuvTable = av_malloc(1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
576 y_table = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
577 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
578 for (i = 0; i < 1024-110; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
579 y_table[i+110] = av_clip_uint8((yb + 0x8000) >> 16) >> 7;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
580 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
581 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
582 fill_table(c->table_gU, 1, cgu, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
583 fill_gv_table(c->table_gV, 1, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
584 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
585 case 4:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
586 case 4|128:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
587 rbase = isRgb ? 3 : 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
588 gbase = 1;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
589 bbase = isRgb ? 0 : 3;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
590 c->yuvTable = av_malloc(1024*3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
591 y_table = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
592 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
593 for (i = 0; i < 1024-110; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
594 int yval = av_clip_uint8((yb + 0x8000) >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
595 y_table[i+110 ] = (yval >> 7) << rbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
596 y_table[i+ 37+1024] = ((yval + 43) / 85) << gbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
597 y_table[i+110+2048] = (yval >> 7) << bbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
598 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
599 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
600 fill_table(c->table_rV, 1, crv, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
601 fill_table(c->table_gU, 1, cgu, y_table + yoffs + 1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
602 fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2048);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
603 fill_gv_table(c->table_gV, 1, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
604 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
605 case 8:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
606 rbase = isRgb ? 5 : 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
607 gbase = isRgb ? 2 : 3;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
608 bbase = isRgb ? 0 : 6;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
609 c->yuvTable = av_malloc(1024*3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
610 y_table = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
611 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
612 for (i = 0; i < 1024-38; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
613 int yval = av_clip_uint8((yb + 0x8000) >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
614 y_table[i+16 ] = ((yval + 18) / 36) << rbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
615 y_table[i+16+1024] = ((yval + 18) / 36) << gbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
616 y_table[i+37+2048] = ((yval + 43) / 85) << bbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
617 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
618 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
619 fill_table(c->table_rV, 1, crv, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
620 fill_table(c->table_gU, 1, cgu, y_table + yoffs + 1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
621 fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2048);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
622 fill_gv_table(c->table_gV, 1, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
623 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
624 case 15:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
625 case 16:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
626 rbase = isRgb ? bpp - 5 : 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
627 gbase = 5;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
628 bbase = isRgb ? 0 : (bpp - 5);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
629 c->yuvTable = av_malloc(1024*3*2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
630 y_table16 = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
631 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
632 for (i = 0; i < 1024; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
633 uint8_t yval = av_clip_uint8((yb + 0x8000) >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
634 y_table16[i ] = (yval >> 3) << rbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
635 y_table16[i+1024] = (yval >> (18 - bpp)) << gbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
636 y_table16[i+2048] = (yval >> 3) << bbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
637 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
638 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
639 fill_table(c->table_rV, 2, crv, y_table16 + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
640 fill_table(c->table_gU, 2, cgu, y_table16 + yoffs + 1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
641 fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2048);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
642 fill_gv_table(c->table_gV, 2, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
643 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
644 case 24:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
645 c->yuvTable = av_malloc(1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
646 y_table = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
647 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
648 for (i = 0; i < 1024; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
649 y_table[i] = av_clip_uint8((yb + 0x8000) >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
650 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
651 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
652 fill_table(c->table_rV, 1, crv, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
653 fill_table(c->table_gU, 1, cgu, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
654 fill_table(c->table_bU, 1, cbu, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
655 fill_gv_table(c->table_gV, 1, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
656 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
657 case 32:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
658 base = (c->dstFormat == PIX_FMT_RGB32_1 || c->dstFormat == PIX_FMT_BGR32_1) ? 8 : 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
659 rbase = base + (isRgb ? 16 : 0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
660 gbase = base + 8;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
661 bbase = base + (isRgb ? 0 : 16);
28738
730912eb74d3 Fix braindead and broken way to calculate abase, fixes regression tests on
reimar
parents: 28721
diff changeset
662 abase = (base + 24) & 31;
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
663 c->yuvTable = av_malloc(1024*3*4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
664 y_table32 = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
665 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
666 for (i = 0; i < 1024; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
667 uint8_t yval = av_clip_uint8((yb + 0x8000) >> 16);
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28688
diff changeset
668 y_table32[i ] = (yval << rbase) + (255 << abase);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
669 y_table32[i+1024] = yval << gbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
670 y_table32[i+2048] = yval << bbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
671 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
672 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
673 fill_table(c->table_rV, 4, crv, y_table32 + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
674 fill_table(c->table_gU, 4, cgu, y_table32 + yoffs + 1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
675 fill_table(c->table_bU, 4, cbu, y_table32 + yoffs + 2048);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
676 fill_gv_table(c->table_gV, 4, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
677 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
678 default:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
679 c->yuvTable = NULL;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
680 av_log(c, AV_LOG_ERROR, "%ibpp not supported by yuv2rgb\n", bpp);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
681 return -1;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
682 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
683 return 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
684 }