Mercurial > mplayer.hg
annotate libswscale/yuv2rgb_altivec.c @ 23974:30677153df21
Set lavc_context->channels before opening the codec, it is sufficient to
select the desired number of codecs for ffdca and does not break other codecs
like ffvorbis that do not (re)set the channel number during decode.
author | reimar |
---|---|
date | Wed, 01 Aug 2007 23:36:40 +0000 |
parents | 5159b5f8784e |
children | 1f5256c663f7 |
rev | line source |
---|---|
18861 | 1 /* |
2 marc.hoffman@analog.com March 8, 2004 | |
3 | |
4 Altivec Acceleration for Color Space Conversion revision 0.2 | |
5 | |
6 convert I420 YV12 to RGB in various formats, | |
7 it rejects images that are not in 420 formats | |
8 it rejects images that don't have widths of multiples of 16 | |
9 it rejects images that don't have heights of multiples of 2 | |
10 reject defers to C simulation codes. | |
11 | |
12 lots of optimizations to be done here | |
13 | |
14 1. need to fix saturation code, I just couldn't get it to fly with packs and adds. | |
15 so we currently use max min to clip | |
16 | |
17 2. the inefficient use of chroma loading needs a bit of brushing up | |
18 | |
19 3. analysis of pipeline stalls needs to be done, use shark to identify pipeline stalls | |
20 | |
21 | |
22 MODIFIED to calculate coeffs from currently selected color space. | |
23 MODIFIED core to be a macro which you spec the output format. | |
24 ADDED UYVY conversion which is never called due to some thing in SWSCALE. | |
25 CORRECTED algorithim selection to be strict on input formats. | |
26 ADDED runtime detection of altivec. | |
27 | |
28 ADDED altivec_yuv2packedX vertical scl + RGB converter | |
29 | |
30 March 27,2004 | |
31 PERFORMANCE ANALYSIS | |
32 | |
33 The C version use 25% of the processor or ~250Mips for D1 video rawvideo used as test | |
34 The ALTIVEC version uses 10% of the processor or ~100Mips for D1 video same sequence | |
35 | |
36 720*480*30 ~10MPS | |
37 | |
38 so we have roughly 10clocks per pixel this is too high something has to be wrong. | |
39 | |
40 OPTIMIZED clip codes to utilize vec_max and vec_packs removing the need for vec_min. | |
41 | |
42 OPTIMIZED DST OUTPUT cache/dma controls. we are pretty much | |
43 guaranteed to have the input video frame it was just decompressed so | |
44 it probably resides in L1 caches. However we are creating the | |
45 output video stream this needs to use the DSTST instruction to | |
46 optimize for the cache. We couple this with the fact that we are | |
47 not going to be visiting the input buffer again so we mark it Least | |
48 Recently Used. This shaves 25% of the processor cycles off. | |
49 | |
50 Now MEMCPY is the largest mips consumer in the system, probably due | |
51 to the inefficient X11 stuff. | |
52 | |
53 GL libraries seem to be very slow on this machine 1.33Ghz PB running | |
54 Jaguar, this is not the case for my 1Ghz PB. I thought it might be | |
55 a versioning issues, however i have libGL.1.2.dylib for both | |
56 machines. ((We need to figure this out now)) | |
57 | |
58 GL2 libraries work now with patch for RGB32 | |
59 | |
60 NOTE quartz vo driver ARGB32_to_RGB24 consumes 30% of the processor | |
61 | |
23129 | 62 Integrated luma prescaling adjustment for saturation/contrast/brightness adjustment. |
20094
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
63 */ |
19766 | 64 |
20094
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
65 /* |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
66 * This file is part of FFmpeg. |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
67 * |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
68 * FFmpeg is free software; you can redistribute it and/or modify |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
69 * it under the terms of the GNU General Public License as published by |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
70 * the Free Software Foundation; either version 2 of the License, or |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
71 * (at your option) any later version. |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
72 * |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
73 * FFmpeg is distributed in the hope that it will be useful, |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
74 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
75 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
76 * GNU General Public License for more details. |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
77 * |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
78 * You should have received a copy of the GNU General Public License |
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
79 * along with FFmpeg; if not, write to the Free Software |
23702 | 80 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
20094
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
20006
diff
changeset
|
81 */ |
19766 | 82 |
18861 | 83 #include <stdio.h> |
84 #include <stdlib.h> | |
85 #include <string.h> | |
86 #include <inttypes.h> | |
87 #include <assert.h> | |
88 #include "config.h" | |
89 #ifdef HAVE_MALLOC_H | |
90 #include <malloc.h> | |
91 #endif | |
92 #include "rgb2rgb.h" | |
93 #include "swscale.h" | |
94 #include "swscale_internal.h" | |
95 | |
96 #undef PROFILE_THE_BEAST | |
97 #undef INC_SCALING | |
98 | |
99 typedef unsigned char ubyte; | |
100 typedef signed char sbyte; | |
101 | |
102 | |
103 /* RGB interleaver, 16 planar pels 8-bit samples per channel in | |
104 homogeneous vector registers x0,x1,x2 are interleaved with the | |
105 following technique: | |
106 | |
107 o0 = vec_mergeh (x0,x1); | |
108 o1 = vec_perm (o0, x2, perm_rgb_0); | |
109 o2 = vec_perm (o0, x2, perm_rgb_1); | |
110 o3 = vec_mergel (x0,x1); | |
111 o4 = vec_perm (o3,o2,perm_rgb_2); | |
112 o5 = vec_perm (o3,o2,perm_rgb_3); | |
113 | |
114 perm_rgb_0: o0(RG).h v1(B) --> o1* | |
115 0 1 2 3 4 | |
116 rgbr|gbrg|brgb|rgbr | |
117 0010 0100 1001 0010 | |
118 0102 3145 2673 894A | |
119 | |
120 perm_rgb_1: o0(RG).h v1(B) --> o2 | |
121 0 1 2 3 4 | |
122 gbrg|brgb|bbbb|bbbb | |
123 0100 1001 1111 1111 | |
124 B5CD 6EF7 89AB CDEF | |
125 | |
126 perm_rgb_2: o3(RG).l o2(rgbB.l) --> o4* | |
127 0 1 2 3 4 | |
128 gbrg|brgb|rgbr|gbrg | |
129 1111 1111 0010 0100 | |
130 89AB CDEF 0182 3945 | |
131 | |
132 perm_rgb_2: o3(RG).l o2(rgbB.l) ---> o5* | |
133 0 1 2 3 4 | |
134 brgb|rgbr|gbrg|brgb | |
135 1001 0010 0100 1001 | |
136 a67b 89cA BdCD eEFf | |
137 | |
138 */ | |
139 static | |
140 const vector unsigned char | |
141 perm_rgb_0 = (const vector unsigned char)AVV(0x00,0x01,0x10,0x02,0x03,0x11,0x04,0x05, | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
142 0x12,0x06,0x07,0x13,0x08,0x09,0x14,0x0a), |
18861 | 143 perm_rgb_1 = (const vector unsigned char)AVV(0x0b,0x15,0x0c,0x0d,0x16,0x0e,0x0f,0x17, |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
144 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f), |
18861 | 145 perm_rgb_2 = (const vector unsigned char)AVV(0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
146 0x00,0x01,0x18,0x02,0x03,0x19,0x04,0x05), |
18861 | 147 perm_rgb_3 = (const vector unsigned char)AVV(0x1a,0x06,0x07,0x1b,0x08,0x09,0x1c,0x0a, |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
148 0x0b,0x1d,0x0c,0x0d,0x1e,0x0e,0x0f,0x1f); |
18861 | 149 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
150 #define vec_merge3(x2,x1,x0,y0,y1,y2) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
151 do { \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
152 typeof(x0) o0,o2,o3; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
153 o0 = vec_mergeh (x0,x1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
154 y0 = vec_perm (o0, x2, perm_rgb_0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
155 o2 = vec_perm (o0, x2, perm_rgb_1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
156 o3 = vec_mergel (x0,x1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
157 y1 = vec_perm (o3,o2,perm_rgb_2); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
158 y2 = vec_perm (o3,o2,perm_rgb_3); \ |
18861 | 159 } while(0) |
160 | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
161 #define vec_mstbgr24(x0,x1,x2,ptr) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
162 do { \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
163 typeof(x0) _0,_1,_2; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
164 vec_merge3 (x0,x1,x2,_0,_1,_2); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
165 vec_st (_0, 0, ptr++); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
166 vec_st (_1, 0, ptr++); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
167 vec_st (_2, 0, ptr++); \ |
18861 | 168 } while (0); |
169 | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
170 #define vec_mstrgb24(x0,x1,x2,ptr) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
171 do { \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
172 typeof(x0) _0,_1,_2; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
173 vec_merge3 (x2,x1,x0,_0,_1,_2); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
174 vec_st (_0, 0, ptr++); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
175 vec_st (_1, 0, ptr++); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
176 vec_st (_2, 0, ptr++); \ |
18861 | 177 } while (0); |
178 | |
179 /* pack the pixels in rgb0 format | |
180 msb R | |
181 lsb 0 | |
182 */ | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
183 #define vec_mstrgb32(T,x0,x1,x2,x3,ptr) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
184 do { \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
185 T _0,_1,_2,_3; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
186 _0 = vec_mergeh (x0,x1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
187 _1 = vec_mergeh (x2,x3); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
188 _2 = (T)vec_mergeh ((vector unsigned short)_0,(vector unsigned short)_1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
189 _3 = (T)vec_mergel ((vector unsigned short)_0,(vector unsigned short)_1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
190 vec_st (_2, 0*16, (T *)ptr); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
191 vec_st (_3, 1*16, (T *)ptr); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
192 _0 = vec_mergel (x0,x1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
193 _1 = vec_mergel (x2,x3); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
194 _2 = (T)vec_mergeh ((vector unsigned short)_0,(vector unsigned short)_1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
195 _3 = (T)vec_mergel ((vector unsigned short)_0,(vector unsigned short)_1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
196 vec_st (_2, 2*16, (T *)ptr); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
197 vec_st (_3, 3*16, (T *)ptr); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
198 ptr += 4; \ |
18861 | 199 } while (0); |
200 | |
201 /* | |
202 | |
203 | 1 0 1.4021 | | Y | | |
204 | 1 -0.3441 -0.7142 |x| Cb| | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
205 | 1 1.7718 0 | | Cr| |
18861 | 206 |
207 | |
208 Y: [-128 127] | |
209 Cb/Cr : [-128 127] | |
210 | |
211 typical yuv conversion work on Y: 0-255 this version has been optimized for jpeg decode. | |
212 | |
213 */ | |
214 | |
215 | |
216 | |
217 | |
218 #define vec_unh(x) \ | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
219 (vector signed short) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
220 vec_perm(x,(typeof(x))AVV(0),\ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
221 (vector unsigned char)AVV(0x10,0x00,0x10,0x01,0x10,0x02,0x10,0x03,\ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
222 0x10,0x04,0x10,0x05,0x10,0x06,0x10,0x07)) |
18861 | 223 #define vec_unl(x) \ |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
224 (vector signed short) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
225 vec_perm(x,(typeof(x))AVV(0),\ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
226 (vector unsigned char)AVV(0x10,0x08,0x10,0x09,0x10,0x0A,0x10,0x0B,\ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
227 0x10,0x0C,0x10,0x0D,0x10,0x0E,0x10,0x0F)) |
18861 | 228 |
229 #define vec_clip_s16(x) \ | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
230 vec_max (vec_min (x, (vector signed short)AVV(235,235,235,235,235,235,235,235)),\ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
231 (vector signed short)AVV( 16, 16, 16, 16, 16, 16, 16, 16)) |
18861 | 232 |
233 #define vec_packclp(x,y) \ | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
234 (vector unsigned char)vec_packs \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
235 ((vector unsigned short)vec_max (x,(vector signed short) AVV(0)), \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
236 (vector unsigned short)vec_max (y,(vector signed short) AVV(0))) |
18861 | 237 |
238 //#define out_pixels(a,b,c,ptr) vec_mstrgb32(typeof(a),((typeof (a))AVV(0)),a,a,a,ptr) | |
239 | |
240 | |
241 static inline void cvtyuvtoRGB (SwsContext *c, | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
242 vector signed short Y, vector signed short U, vector signed short V, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
243 vector signed short *R, vector signed short *G, vector signed short *B) |
18861 | 244 { |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
245 vector signed short vx,ux,uvx; |
18861 | 246 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
247 Y = vec_mradds (Y, c->CY, c->OY); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
248 U = vec_sub (U,(vector signed short) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
249 vec_splat((vector signed short)AVV(128),0)); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
250 V = vec_sub (V,(vector signed short) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
251 vec_splat((vector signed short)AVV(128),0)); |
18861 | 252 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
253 // ux = (CBU*(u<<c->CSHIFT)+0x4000)>>15; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
254 ux = vec_sl (U, c->CSHIFT); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
255 *B = vec_mradds (ux, c->CBU, Y); |
18861 | 256 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
257 // vx = (CRV*(v<<c->CSHIFT)+0x4000)>>15; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
258 vx = vec_sl (V, c->CSHIFT); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
259 *R = vec_mradds (vx, c->CRV, Y); |
18861 | 260 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
261 // uvx = ((CGU*u) + (CGV*v))>>15; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
262 uvx = vec_mradds (U, c->CGU, Y); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
263 *G = vec_mradds (V, c->CGV, uvx); |
18861 | 264 } |
265 | |
266 | |
267 /* | |
268 ------------------------------------------------------------------------------ | |
269 CS converters | |
270 ------------------------------------------------------------------------------ | |
271 */ | |
272 | |
273 | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
274 #define DEFCSP420_CVT(name,out_pixels) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
275 static int altivec_##name (SwsContext *c, \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
276 unsigned char **in, int *instrides, \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
277 int srcSliceY, int srcSliceH, \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
278 unsigned char **oplanes, int *outstrides) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
279 { \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
280 int w = c->srcW; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
281 int h = srcSliceH; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
282 int i,j; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
283 int instrides_scl[3]; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
284 vector unsigned char y0,y1; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
285 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
286 vector signed char u,v; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
287 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
288 vector signed short Y0,Y1,Y2,Y3; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
289 vector signed short U,V; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
290 vector signed short vx,ux,uvx; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
291 vector signed short vx0,ux0,uvx0; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
292 vector signed short vx1,ux1,uvx1; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
293 vector signed short R0,G0,B0; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
294 vector signed short R1,G1,B1; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
295 vector unsigned char R,G,B; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
296 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
297 vector unsigned char *y1ivP, *y2ivP, *uivP, *vivP; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
298 vector unsigned char align_perm; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
299 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
300 vector signed short \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
301 lCY = c->CY, \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
302 lOY = c->OY, \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
303 lCRV = c->CRV, \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
304 lCBU = c->CBU, \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
305 lCGU = c->CGU, \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
306 lCGV = c->CGV; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
307 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
308 vector unsigned short lCSHIFT = c->CSHIFT; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
309 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
310 ubyte *y1i = in[0]; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
311 ubyte *y2i = in[0]+instrides[0]; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
312 ubyte *ui = in[1]; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
313 ubyte *vi = in[2]; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
314 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
315 vector unsigned char *oute \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
316 = (vector unsigned char *) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
317 (oplanes[0]+srcSliceY*outstrides[0]); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
318 vector unsigned char *outo \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
319 = (vector unsigned char *) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
320 (oplanes[0]+srcSliceY*outstrides[0]+outstrides[0]); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
321 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
322 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
323 instrides_scl[0] = instrides[0]*2-w; /* the loop moves y{1,2}i by w */ \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
324 instrides_scl[1] = instrides[1]-w/2; /* the loop moves ui by w/2 */ \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
325 instrides_scl[2] = instrides[2]-w/2; /* the loop moves vi by w/2 */ \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
326 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
327 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
328 for (i=0;i<h/2;i++) { \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
329 vec_dstst (outo, (0x02000002|(((w*3+32)/32)<<16)), 0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
330 vec_dstst (oute, (0x02000002|(((w*3+32)/32)<<16)), 1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
331 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
332 for (j=0;j<w/16;j++) { \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
333 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
334 y1ivP = (vector unsigned char *)y1i; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
335 y2ivP = (vector unsigned char *)y2i; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
336 uivP = (vector unsigned char *)ui; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
337 vivP = (vector unsigned char *)vi; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
338 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
339 align_perm = vec_lvsl (0, y1i); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
340 y0 = (vector unsigned char) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
341 vec_perm (y1ivP[0], y1ivP[1], align_perm); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
342 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
343 align_perm = vec_lvsl (0, y2i); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
344 y1 = (vector unsigned char) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
345 vec_perm (y2ivP[0], y2ivP[1], align_perm); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
346 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
347 align_perm = vec_lvsl (0, ui); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
348 u = (vector signed char) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
349 vec_perm (uivP[0], uivP[1], align_perm); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
350 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
351 align_perm = vec_lvsl (0, vi); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
352 v = (vector signed char) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
353 vec_perm (vivP[0], vivP[1], align_perm); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
354 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
355 u = (vector signed char) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
356 vec_sub (u,(vector signed char) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
357 vec_splat((vector signed char)AVV(128),0)); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
358 v = (vector signed char) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
359 vec_sub (v,(vector signed char) \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
360 vec_splat((vector signed char)AVV(128),0)); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
361 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
362 U = vec_unpackh (u); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
363 V = vec_unpackh (v); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
364 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
365 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
366 Y0 = vec_unh (y0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
367 Y1 = vec_unl (y0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
368 Y2 = vec_unh (y1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
369 Y3 = vec_unl (y1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
370 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
371 Y0 = vec_mradds (Y0, lCY, lOY); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
372 Y1 = vec_mradds (Y1, lCY, lOY); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
373 Y2 = vec_mradds (Y2, lCY, lOY); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
374 Y3 = vec_mradds (Y3, lCY, lOY); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
375 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
376 /* ux = (CBU*(u<<CSHIFT)+0x4000)>>15 */ \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
377 ux = vec_sl (U, lCSHIFT); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
378 ux = vec_mradds (ux, lCBU, (vector signed short)AVV(0)); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
379 ux0 = vec_mergeh (ux,ux); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
380 ux1 = vec_mergel (ux,ux); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
381 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
382 /* vx = (CRV*(v<<CSHIFT)+0x4000)>>15; */ \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
383 vx = vec_sl (V, lCSHIFT); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
384 vx = vec_mradds (vx, lCRV, (vector signed short)AVV(0)); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
385 vx0 = vec_mergeh (vx,vx); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
386 vx1 = vec_mergel (vx,vx); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
387 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
388 /* uvx = ((CGU*u) + (CGV*v))>>15 */ \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
389 uvx = vec_mradds (U, lCGU, (vector signed short)AVV(0)); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
390 uvx = vec_mradds (V, lCGV, uvx); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
391 uvx0 = vec_mergeh (uvx,uvx); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
392 uvx1 = vec_mergel (uvx,uvx); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
393 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
394 R0 = vec_add (Y0,vx0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
395 G0 = vec_add (Y0,uvx0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
396 B0 = vec_add (Y0,ux0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
397 R1 = vec_add (Y1,vx1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
398 G1 = vec_add (Y1,uvx1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
399 B1 = vec_add (Y1,ux1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
400 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
401 R = vec_packclp (R0,R1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
402 G = vec_packclp (G0,G1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
403 B = vec_packclp (B0,B1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
404 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
405 out_pixels(R,G,B,oute); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
406 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
407 R0 = vec_add (Y2,vx0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
408 G0 = vec_add (Y2,uvx0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
409 B0 = vec_add (Y2,ux0); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
410 R1 = vec_add (Y3,vx1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
411 G1 = vec_add (Y3,uvx1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
412 B1 = vec_add (Y3,ux1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
413 R = vec_packclp (R0,R1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
414 G = vec_packclp (G0,G1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
415 B = vec_packclp (B0,B1); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
416 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
417 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
418 out_pixels(R,G,B,outo); \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
419 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
420 y1i += 16; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
421 y2i += 16; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
422 ui += 8; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
423 vi += 8; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
424 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
425 } \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
426 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
427 outo += (outstrides[0])>>4; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
428 oute += (outstrides[0])>>4; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
429 \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
430 ui += instrides_scl[1]; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
431 vi += instrides_scl[2]; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
432 y1i += instrides_scl[0]; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
433 y2i += instrides_scl[0]; \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
434 } \ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
435 return srcSliceH; \ |
18861 | 436 } |
437 | |
438 | |
439 #define out_abgr(a,b,c,ptr) vec_mstrgb32(typeof(a),((typeof (a))AVV(0)),c,b,a,ptr) | |
440 #define out_bgra(a,b,c,ptr) vec_mstrgb32(typeof(a),c,b,a,((typeof (a))AVV(0)),ptr) | |
441 #define out_rgba(a,b,c,ptr) vec_mstrgb32(typeof(a),a,b,c,((typeof (a))AVV(0)),ptr) | |
442 #define out_argb(a,b,c,ptr) vec_mstrgb32(typeof(a),((typeof (a))AVV(0)),a,b,c,ptr) | |
443 #define out_rgb24(a,b,c,ptr) vec_mstrgb24(a,b,c,ptr) | |
444 #define out_bgr24(a,b,c,ptr) vec_mstbgr24(a,b,c,ptr) | |
445 | |
446 DEFCSP420_CVT (yuv2_abgr, out_abgr) | |
447 #if 1 | |
448 DEFCSP420_CVT (yuv2_bgra, out_bgra) | |
449 #else | |
23129 | 450 static int altivec_yuv2_bgra32 (SwsContext *c, |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
451 unsigned char **in, int *instrides, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
452 int srcSliceY, int srcSliceH, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
453 unsigned char **oplanes, int *outstrides) |
23129 | 454 { |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
455 int w = c->srcW; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
456 int h = srcSliceH; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
457 int i,j; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
458 int instrides_scl[3]; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
459 vector unsigned char y0,y1; |
23129 | 460 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
461 vector signed char u,v; |
23129 | 462 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
463 vector signed short Y0,Y1,Y2,Y3; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
464 vector signed short U,V; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
465 vector signed short vx,ux,uvx; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
466 vector signed short vx0,ux0,uvx0; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
467 vector signed short vx1,ux1,uvx1; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
468 vector signed short R0,G0,B0; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
469 vector signed short R1,G1,B1; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
470 vector unsigned char R,G,B; |
23129 | 471 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
472 vector unsigned char *uivP, *vivP; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
473 vector unsigned char align_perm; |
23129 | 474 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
475 vector signed short |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
476 lCY = c->CY, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
477 lOY = c->OY, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
478 lCRV = c->CRV, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
479 lCBU = c->CBU, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
480 lCGU = c->CGU, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
481 lCGV = c->CGV; |
23129 | 482 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
483 vector unsigned short lCSHIFT = c->CSHIFT; |
23129 | 484 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
485 ubyte *y1i = in[0]; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
486 ubyte *y2i = in[0]+w; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
487 ubyte *ui = in[1]; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
488 ubyte *vi = in[2]; |
23129 | 489 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
490 vector unsigned char *oute |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
491 = (vector unsigned char *) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
492 (oplanes[0]+srcSliceY*outstrides[0]); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
493 vector unsigned char *outo |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
494 = (vector unsigned char *) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
495 (oplanes[0]+srcSliceY*outstrides[0]+outstrides[0]); |
23129 | 496 |
497 | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
498 instrides_scl[0] = instrides[0]; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
499 instrides_scl[1] = instrides[1]-w/2; /* the loop moves ui by w/2 */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
500 instrides_scl[2] = instrides[2]-w/2; /* the loop moves vi by w/2 */ |
23129 | 501 |
502 | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
503 for (i=0;i<h/2;i++) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
504 vec_dstst (outo, (0x02000002|(((w*3+32)/32)<<16)), 0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
505 vec_dstst (oute, (0x02000002|(((w*3+32)/32)<<16)), 1); |
23129 | 506 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
507 for (j=0;j<w/16;j++) { |
23129 | 508 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
509 y0 = vec_ldl (0,y1i); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
510 y1 = vec_ldl (0,y2i); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
511 uivP = (vector unsigned char *)ui; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
512 vivP = (vector unsigned char *)vi; |
23129 | 513 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
514 align_perm = vec_lvsl (0, ui); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
515 u = (vector signed char)vec_perm (uivP[0], uivP[1], align_perm); |
23129 | 516 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
517 align_perm = vec_lvsl (0, vi); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
518 v = (vector signed char)vec_perm (vivP[0], vivP[1], align_perm); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
519 u = (vector signed char) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
520 vec_sub (u,(vector signed char) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
521 vec_splat((vector signed char)AVV(128),0)); |
23129 | 522 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
523 v = (vector signed char) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
524 vec_sub (v, (vector signed char) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
525 vec_splat((vector signed char)AVV(128),0)); |
23129 | 526 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
527 U = vec_unpackh (u); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
528 V = vec_unpackh (v); |
23129 | 529 |
530 | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
531 Y0 = vec_unh (y0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
532 Y1 = vec_unl (y0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
533 Y2 = vec_unh (y1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
534 Y3 = vec_unl (y1); |
23129 | 535 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
536 Y0 = vec_mradds (Y0, lCY, lOY); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
537 Y1 = vec_mradds (Y1, lCY, lOY); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
538 Y2 = vec_mradds (Y2, lCY, lOY); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
539 Y3 = vec_mradds (Y3, lCY, lOY); |
23129 | 540 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
541 /* ux = (CBU*(u<<CSHIFT)+0x4000)>>15 */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
542 ux = vec_sl (U, lCSHIFT); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
543 ux = vec_mradds (ux, lCBU, (vector signed short)AVV(0)); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
544 ux0 = vec_mergeh (ux,ux); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
545 ux1 = vec_mergel (ux,ux); |
23129 | 546 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
547 /* vx = (CRV*(v<<CSHIFT)+0x4000)>>15; */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
548 vx = vec_sl (V, lCSHIFT); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
549 vx = vec_mradds (vx, lCRV, (vector signed short)AVV(0)); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
550 vx0 = vec_mergeh (vx,vx); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
551 vx1 = vec_mergel (vx,vx); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
552 /* uvx = ((CGU*u) + (CGV*v))>>15 */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
553 uvx = vec_mradds (U, lCGU, (vector signed short)AVV(0)); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
554 uvx = vec_mradds (V, lCGV, uvx); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
555 uvx0 = vec_mergeh (uvx,uvx); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
556 uvx1 = vec_mergel (uvx,uvx); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
557 R0 = vec_add (Y0,vx0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
558 G0 = vec_add (Y0,uvx0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
559 B0 = vec_add (Y0,ux0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
560 R1 = vec_add (Y1,vx1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
561 G1 = vec_add (Y1,uvx1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
562 B1 = vec_add (Y1,ux1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
563 R = vec_packclp (R0,R1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
564 G = vec_packclp (G0,G1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
565 B = vec_packclp (B0,B1); |
23129 | 566 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
567 out_argb(R,G,B,oute); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
568 R0 = vec_add (Y2,vx0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
569 G0 = vec_add (Y2,uvx0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
570 B0 = vec_add (Y2,ux0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
571 R1 = vec_add (Y3,vx1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
572 G1 = vec_add (Y3,uvx1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
573 B1 = vec_add (Y3,ux1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
574 R = vec_packclp (R0,R1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
575 G = vec_packclp (G0,G1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
576 B = vec_packclp (B0,B1); |
23129 | 577 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
578 out_argb(R,G,B,outo); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
579 y1i += 16; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
580 y2i += 16; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
581 ui += 8; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
582 vi += 8; |
23129 | 583 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
584 } |
23129 | 585 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
586 outo += (outstrides[0])>>4; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
587 oute += (outstrides[0])>>4; |
23129 | 588 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
589 ui += instrides_scl[1]; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
590 vi += instrides_scl[2]; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
591 y1i += instrides_scl[0]; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
592 y2i += instrides_scl[0]; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
593 } |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
594 return srcSliceH; |
18861 | 595 } |
596 | |
597 #endif | |
598 | |
599 | |
600 DEFCSP420_CVT (yuv2_rgba, out_rgba) | |
601 DEFCSP420_CVT (yuv2_argb, out_argb) | |
602 DEFCSP420_CVT (yuv2_rgb24, out_rgb24) | |
603 DEFCSP420_CVT (yuv2_bgr24, out_bgr24) | |
604 | |
605 | |
606 // uyvy|uyvy|uyvy|uyvy | |
607 // 0123 4567 89ab cdef | |
608 static | |
609 const vector unsigned char | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
610 demux_u = (const vector unsigned char)AVV(0x10,0x00,0x10,0x00, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
611 0x10,0x04,0x10,0x04, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
612 0x10,0x08,0x10,0x08, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
613 0x10,0x0c,0x10,0x0c), |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
614 demux_v = (const vector unsigned char)AVV(0x10,0x02,0x10,0x02, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
615 0x10,0x06,0x10,0x06, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
616 0x10,0x0A,0x10,0x0A, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
617 0x10,0x0E,0x10,0x0E), |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
618 demux_y = (const vector unsigned char)AVV(0x10,0x01,0x10,0x03, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
619 0x10,0x05,0x10,0x07, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
620 0x10,0x09,0x10,0x0B, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
621 0x10,0x0D,0x10,0x0F); |
18861 | 622 |
623 /* | |
624 this is so I can play live CCIR raw video | |
625 */ | |
626 static int altivec_uyvy_rgb32 (SwsContext *c, | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
627 unsigned char **in, int *instrides, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
628 int srcSliceY, int srcSliceH, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
629 unsigned char **oplanes, int *outstrides) |
18861 | 630 { |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
631 int w = c->srcW; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
632 int h = srcSliceH; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
633 int i,j; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
634 vector unsigned char uyvy; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
635 vector signed short Y,U,V; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
636 vector signed short R0,G0,B0,R1,G1,B1; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
637 vector unsigned char R,G,B; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
638 vector unsigned char *out; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
639 ubyte *img; |
18861 | 640 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
641 img = in[0]; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
642 out = (vector unsigned char *)(oplanes[0]+srcSliceY*outstrides[0]); |
18861 | 643 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
644 for (i=0;i<h;i++) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
645 for (j=0;j<w/16;j++) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
646 uyvy = vec_ld (0, img); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
647 U = (vector signed short) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
648 vec_perm (uyvy, (vector unsigned char)AVV(0), demux_u); |
18861 | 649 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
650 V = (vector signed short) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
651 vec_perm (uyvy, (vector unsigned char)AVV(0), demux_v); |
18861 | 652 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
653 Y = (vector signed short) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
654 vec_perm (uyvy, (vector unsigned char)AVV(0), demux_y); |
18861 | 655 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
656 cvtyuvtoRGB (c, Y,U,V,&R0,&G0,&B0); |
18861 | 657 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
658 uyvy = vec_ld (16, img); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
659 U = (vector signed short) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
660 vec_perm (uyvy, (vector unsigned char)AVV(0), demux_u); |
18861 | 661 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
662 V = (vector signed short) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
663 vec_perm (uyvy, (vector unsigned char)AVV(0), demux_v); |
18861 | 664 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
665 Y = (vector signed short) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
666 vec_perm (uyvy, (vector unsigned char)AVV(0), demux_y); |
18861 | 667 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
668 cvtyuvtoRGB (c, Y,U,V,&R1,&G1,&B1); |
18861 | 669 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
670 R = vec_packclp (R0,R1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
671 G = vec_packclp (G0,G1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
672 B = vec_packclp (B0,B1); |
18861 | 673 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
674 // vec_mstbgr24 (R,G,B, out); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
675 out_rgba (R,G,B,out); |
18861 | 676 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
677 img += 32; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
678 } |
18861 | 679 } |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
680 return srcSliceH; |
18861 | 681 } |
682 | |
683 | |
684 | |
685 /* Ok currently the acceleration routine only supports | |
686 inputs of widths a multiple of 16 | |
687 and heights a multiple 2 | |
688 | |
689 So we just fall back to the C codes for this. | |
690 */ | |
691 SwsFunc yuv2rgb_init_altivec (SwsContext *c) | |
692 { | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
693 if (!(c->flags & SWS_CPU_CAPS_ALTIVEC)) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
694 return NULL; |
18861 | 695 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
696 /* |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
697 and this seems not to matter too much I tried a bunch of |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
698 videos with abnormal widths and mplayer crashes else where. |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
699 mplayer -vo x11 -rawvideo on:w=350:h=240 raw-350x240.eyuv |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
700 boom with X11 bad match. |
23129 | 701 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
702 */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
703 if ((c->srcW & 0xf) != 0) return NULL; |
18861 | 704 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
705 switch (c->srcFormat) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
706 case PIX_FMT_YUV410P: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
707 case PIX_FMT_YUV420P: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
708 /*case IMGFMT_CLPL: ??? */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
709 case PIX_FMT_GRAY8: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
710 case PIX_FMT_NV12: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
711 case PIX_FMT_NV21: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
712 if ((c->srcH & 0x1) != 0) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
713 return NULL; |
18861 | 714 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
715 switch(c->dstFormat){ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
716 case PIX_FMT_RGB24: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
717 av_log(c, AV_LOG_WARNING, "ALTIVEC: Color Space RGB24\n"); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
718 return altivec_yuv2_rgb24; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
719 case PIX_FMT_BGR24: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
720 av_log(c, AV_LOG_WARNING, "ALTIVEC: Color Space BGR24\n"); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
721 return altivec_yuv2_bgr24; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
722 case PIX_FMT_ARGB: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
723 av_log(c, AV_LOG_WARNING, "ALTIVEC: Color Space ARGB\n"); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
724 return altivec_yuv2_argb; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
725 case PIX_FMT_ABGR: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
726 av_log(c, AV_LOG_WARNING, "ALTIVEC: Color Space ABGR\n"); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
727 return altivec_yuv2_abgr; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
728 case PIX_FMT_RGBA: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
729 av_log(c, AV_LOG_WARNING, "ALTIVEC: Color Space RGBA\n"); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
730 return altivec_yuv2_rgba; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
731 case PIX_FMT_BGRA: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
732 av_log(c, AV_LOG_WARNING, "ALTIVEC: Color Space BGRA\n"); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
733 return altivec_yuv2_bgra; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
734 default: return NULL; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
735 } |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
736 break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
737 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
738 case PIX_FMT_UYVY422: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
739 switch(c->dstFormat){ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
740 case PIX_FMT_BGR32: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
741 av_log(c, AV_LOG_WARNING, "ALTIVEC: Color Space UYVY -> RGB32\n"); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
742 return altivec_uyvy_rgb32; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
743 default: return NULL; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
744 } |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
745 break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
746 |
18861 | 747 } |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
748 return NULL; |
18861 | 749 } |
750 | |
751 static uint16_t roundToInt16(int64_t f){ | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
752 int r= (f + (1<<15))>>16; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
753 if (r<-0x7FFF) return 0x8000; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
754 else if (r> 0x7FFF) return 0x7FFF; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
755 else return r; |
18861 | 756 } |
757 | |
758 void yuv2rgb_altivec_init_tables (SwsContext *c, const int inv_table[4],int brightness,int contrast, int saturation) | |
759 { | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
760 union { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
761 signed short tmp[8] __attribute__ ((aligned(16))); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
762 vector signed short vec; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
763 } buf; |
18861 | 764 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
765 buf.tmp[0] = ( (0xffffLL) * contrast>>8 )>>9; //cy |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
766 buf.tmp[1] = -256*brightness; //oy |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
767 buf.tmp[2] = (inv_table[0]>>3) *(contrast>>16)*(saturation>>16); //crv |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
768 buf.tmp[3] = (inv_table[1]>>3) *(contrast>>16)*(saturation>>16); //cbu |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
769 buf.tmp[4] = -((inv_table[2]>>1)*(contrast>>16)*(saturation>>16)); //cgu |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
770 buf.tmp[5] = -((inv_table[3]>>1)*(contrast>>16)*(saturation>>16)); //cgv |
18861 | 771 |
772 | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
773 c->CSHIFT = (vector unsigned short)vec_splat_u16(2); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
774 c->CY = vec_splat ((vector signed short)buf.vec, 0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
775 c->OY = vec_splat ((vector signed short)buf.vec, 1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
776 c->CRV = vec_splat ((vector signed short)buf.vec, 2); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
777 c->CBU = vec_splat ((vector signed short)buf.vec, 3); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
778 c->CGU = vec_splat ((vector signed short)buf.vec, 4); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
779 c->CGV = vec_splat ((vector signed short)buf.vec, 5); |
18861 | 780 #if 0 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
781 { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
782 int i; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
783 char *v[6]={"cy","oy","crv","cbu","cgu","cgv"}; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
784 for (i=0; i<6; i++) |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
785 printf("%s %d ", v[i],buf.tmp[i] ); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
786 printf("\n"); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
787 } |
18861 | 788 #endif |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
789 return; |
18861 | 790 } |
791 | |
792 | |
793 void | |
794 altivec_yuv2packedX (SwsContext *c, | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
795 int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
796 int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize, |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
797 uint8_t *dest, int dstW, int dstY) |
18861 | 798 { |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
799 int i,j; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
800 vector signed short X,X0,X1,Y0,U0,V0,Y1,U1,V1,U,V; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
801 vector signed short R0,G0,B0,R1,G1,B1; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
802 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
803 vector unsigned char R,G,B; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
804 vector unsigned char *out,*nout; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
805 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
806 vector signed short RND = vec_splat_s16(1<<3); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
807 vector unsigned short SCL = vec_splat_u16(4); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
808 unsigned long scratch[16] __attribute__ ((aligned (16))); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
809 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
810 vector signed short *YCoeffs, *CCoeffs; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
811 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
812 YCoeffs = c->vYCoeffsBank+dstY*lumFilterSize; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
813 CCoeffs = c->vCCoeffsBank+dstY*chrFilterSize; |
18861 | 814 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
815 out = (vector unsigned char *)dest; |
18861 | 816 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
817 for (i=0; i<dstW; i+=16){ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
818 Y0 = RND; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
819 Y1 = RND; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
820 /* extract 16 coeffs from lumSrc */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
821 for (j=0; j<lumFilterSize; j++) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
822 X0 = vec_ld (0, &lumSrc[j][i]); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
823 X1 = vec_ld (16, &lumSrc[j][i]); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
824 Y0 = vec_mradds (X0, YCoeffs[j], Y0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
825 Y1 = vec_mradds (X1, YCoeffs[j], Y1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
826 } |
18861 | 827 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
828 U = RND; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
829 V = RND; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
830 /* extract 8 coeffs from U,V */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
831 for (j=0; j<chrFilterSize; j++) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
832 X = vec_ld (0, &chrSrc[j][i/2]); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
833 U = vec_mradds (X, CCoeffs[j], U); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
834 X = vec_ld (0, &chrSrc[j][i/2+2048]); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
835 V = vec_mradds (X, CCoeffs[j], V); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
836 } |
18861 | 837 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
838 /* scale and clip signals */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
839 Y0 = vec_sra (Y0, SCL); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
840 Y1 = vec_sra (Y1, SCL); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
841 U = vec_sra (U, SCL); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
842 V = vec_sra (V, SCL); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
843 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
844 Y0 = vec_clip_s16 (Y0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
845 Y1 = vec_clip_s16 (Y1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
846 U = vec_clip_s16 (U); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
847 V = vec_clip_s16 (V); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
848 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
849 /* now we have |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
850 Y0= y0 y1 y2 y3 y4 y5 y6 y7 Y1= y8 y9 y10 y11 y12 y13 y14 y15 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
851 U= u0 u1 u2 u3 u4 u5 u6 u7 V= v0 v1 v2 v3 v4 v5 v6 v7 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
852 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
853 Y0= y0 y1 y2 y3 y4 y5 y6 y7 Y1= y8 y9 y10 y11 y12 y13 y14 y15 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
854 U0= u0 u0 u1 u1 u2 u2 u3 u3 U1= u4 u4 u5 u5 u6 u6 u7 u7 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
855 V0= v0 v0 v1 v1 v2 v2 v3 v3 V1= v4 v4 v5 v5 v6 v6 v7 v7 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
856 */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
857 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
858 U0 = vec_mergeh (U,U); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
859 V0 = vec_mergeh (V,V); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
860 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
861 U1 = vec_mergel (U,U); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
862 V1 = vec_mergel (V,V); |
18861 | 863 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
864 cvtyuvtoRGB (c, Y0,U0,V0,&R0,&G0,&B0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
865 cvtyuvtoRGB (c, Y1,U1,V1,&R1,&G1,&B1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
866 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
867 R = vec_packclp (R0,R1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
868 G = vec_packclp (G0,G1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
869 B = vec_packclp (B0,B1); |
18861 | 870 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
871 switch(c->dstFormat) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
872 case PIX_FMT_ABGR: out_abgr (R,G,B,out); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
873 case PIX_FMT_BGRA: out_bgra (R,G,B,out); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
874 case PIX_FMT_RGBA: out_rgba (R,G,B,out); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
875 case PIX_FMT_ARGB: out_argb (R,G,B,out); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
876 case PIX_FMT_RGB24: out_rgb24 (R,G,B,out); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
877 case PIX_FMT_BGR24: out_bgr24 (R,G,B,out); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
878 default: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
879 { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
880 /* If this is reached, the caller should have called yuv2packedXinC |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
881 instead. */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
882 static int printed_error_message; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
883 if (!printed_error_message) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
884 av_log(c, AV_LOG_ERROR, "altivec_yuv2packedX doesn't support %s output\n", |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
885 sws_format_name(c->dstFormat)); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
886 printed_error_message=1; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
887 } |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
888 return; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
889 } |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
890 } |
18861 | 891 } |
892 | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
893 if (i < dstW) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
894 i -= 16; |
18861 | 895 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
896 Y0 = RND; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
897 Y1 = RND; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
898 /* extract 16 coeffs from lumSrc */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
899 for (j=0; j<lumFilterSize; j++) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
900 X0 = vec_ld (0, &lumSrc[j][i]); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
901 X1 = vec_ld (16, &lumSrc[j][i]); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
902 Y0 = vec_mradds (X0, YCoeffs[j], Y0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
903 Y1 = vec_mradds (X1, YCoeffs[j], Y1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
904 } |
18861 | 905 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
906 U = RND; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
907 V = RND; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
908 /* extract 8 coeffs from U,V */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
909 for (j=0; j<chrFilterSize; j++) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
910 X = vec_ld (0, &chrSrc[j][i/2]); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
911 U = vec_mradds (X, CCoeffs[j], U); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
912 X = vec_ld (0, &chrSrc[j][i/2+2048]); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
913 V = vec_mradds (X, CCoeffs[j], V); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
914 } |
18861 | 915 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
916 /* scale and clip signals */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
917 Y0 = vec_sra (Y0, SCL); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
918 Y1 = vec_sra (Y1, SCL); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
919 U = vec_sra (U, SCL); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
920 V = vec_sra (V, SCL); |
18861 | 921 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
922 Y0 = vec_clip_s16 (Y0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
923 Y1 = vec_clip_s16 (Y1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
924 U = vec_clip_s16 (U); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
925 V = vec_clip_s16 (V); |
18861 | 926 |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
927 /* now we have |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
928 Y0= y0 y1 y2 y3 y4 y5 y6 y7 Y1= y8 y9 y10 y11 y12 y13 y14 y15 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
929 U = u0 u1 u2 u3 u4 u5 u6 u7 V = v0 v1 v2 v3 v4 v5 v6 v7 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
930 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
931 Y0= y0 y1 y2 y3 y4 y5 y6 y7 Y1= y8 y9 y10 y11 y12 y13 y14 y15 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
932 U0= u0 u0 u1 u1 u2 u2 u3 u3 U1= u4 u4 u5 u5 u6 u6 u7 u7 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
933 V0= v0 v0 v1 v1 v2 v2 v3 v3 V1= v4 v4 v5 v5 v6 v6 v7 v7 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
934 */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
935 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
936 U0 = vec_mergeh (U,U); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
937 V0 = vec_mergeh (V,V); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
938 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
939 U1 = vec_mergel (U,U); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
940 V1 = vec_mergel (V,V); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
941 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
942 cvtyuvtoRGB (c, Y0,U0,V0,&R0,&G0,&B0); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
943 cvtyuvtoRGB (c, Y1,U1,V1,&R1,&G1,&B1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
944 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
945 R = vec_packclp (R0,R1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
946 G = vec_packclp (G0,G1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
947 B = vec_packclp (B0,B1); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
948 |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
949 nout = (vector unsigned char *)scratch; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
950 switch(c->dstFormat) { |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
951 case PIX_FMT_ABGR: out_abgr (R,G,B,nout); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
952 case PIX_FMT_BGRA: out_bgra (R,G,B,nout); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
953 case PIX_FMT_RGBA: out_rgba (R,G,B,nout); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
954 case PIX_FMT_ARGB: out_argb (R,G,B,nout); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
955 case PIX_FMT_RGB24: out_rgb24 (R,G,B,nout); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
956 case PIX_FMT_BGR24: out_bgr24 (R,G,B,nout); break; |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
957 default: |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
958 /* Unreachable, I think. */ |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
959 av_log(c, AV_LOG_ERROR, "altivec_yuv2packedX doesn't support %s output\n", |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
960 sws_format_name(c->dstFormat)); |
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
961 return; |
18861 | 962 } |
963 | |
23157
ebc55c913d73
cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
964 memcpy (&((uint32_t*)dest)[i], scratch, (dstW-i)/4); |
18861 | 965 } |
966 | |
967 } |