annotate imgresample.c @ 2497:69adfbbdcdeb libavcodec

- samples from mplayer ftp in the "adv" profile seem to have profile=2, which isn't the advanced one; and indeed, using adv. profile parser fails. Using normal parser works, and that's what is done - attempt at taking care of stride for NORM2 bitplane decoding - duplication of much code from msmpeg4.c; this code isn't yet used, but goes down as far as the block layer (mainly Transform Type stuff, the remains are wild editing without checking). Unusable yet, and lacks the AC decoding (but a step further in bitstream parsing) patch by anonymous
author michael
date Fri, 04 Feb 2005 02:20:38 +0000
parents 87b7fbed8609
children 40765c51a7a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
986e461dc072 Initial revision
glantau
parents:
diff changeset
2 * High quality image resampling with polyphase filters
429
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
3 * Copyright (c) 2001 Fabrice Bellard.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
4 *
429
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
5 * This library is free software; you can redistribute it and/or
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
7 * License as published by the Free Software Foundation; either
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
8 * version 2 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
9 *
429
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
10 * This library is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
13 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
14 *
429
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
16 * License along with this library; if not, write to the Free Software
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
18 */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
19
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
20 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
21 * @file imgresample.c
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
22 * High quality image resampling with polyphase filters .
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
23 */
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
24
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 18
diff changeset
25 #include "avcodec.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
26 #include "dsputil.h"
986e461dc072 Initial revision
glantau
parents:
diff changeset
27
17
b69fe46fd708 Adding fastmemcpy stuff to speedup mplayer project
nickols_k
parents: 2
diff changeset
28 #ifdef USE_FASTMEMCPY
b69fe46fd708 Adding fastmemcpy stuff to speedup mplayer project
nickols_k
parents: 2
diff changeset
29 #include "fastmemcpy.h"
b69fe46fd708 Adding fastmemcpy stuff to speedup mplayer project
nickols_k
parents: 2
diff changeset
30 #endif
b69fe46fd708 Adding fastmemcpy stuff to speedup mplayer project
nickols_k
parents: 2
diff changeset
31
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
32 #define NB_COMPONENTS 3
986e461dc072 Initial revision
glantau
parents:
diff changeset
33
986e461dc072 Initial revision
glantau
parents:
diff changeset
34 #define PHASE_BITS 4
986e461dc072 Initial revision
glantau
parents:
diff changeset
35 #define NB_PHASES (1 << PHASE_BITS)
986e461dc072 Initial revision
glantau
parents:
diff changeset
36 #define NB_TAPS 4
986e461dc072 Initial revision
glantau
parents:
diff changeset
37 #define FCENTER 1 /* index of the center of the filter */
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
38 //#define TEST 1 /* Test it */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
39
986e461dc072 Initial revision
glantau
parents:
diff changeset
40 #define POS_FRAC_BITS 16
986e461dc072 Initial revision
glantau
parents:
diff changeset
41 #define POS_FRAC (1 << POS_FRAC_BITS)
986e461dc072 Initial revision
glantau
parents:
diff changeset
42 /* 6 bits precision is needed for MMX */
986e461dc072 Initial revision
glantau
parents:
diff changeset
43 #define FILTER_BITS 8
986e461dc072 Initial revision
glantau
parents:
diff changeset
44
986e461dc072 Initial revision
glantau
parents:
diff changeset
45 #define LINE_BUF_HEIGHT (NB_TAPS * 4)
986e461dc072 Initial revision
glantau
parents:
diff changeset
46
986e461dc072 Initial revision
glantau
parents:
diff changeset
47 struct ImgReSampleContext {
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
48 int iwidth, iheight, owidth, oheight;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
49 int topBand, bottomBand, leftBand, rightBand;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
50 int padtop, padbottom, padleft, padright;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
51 int pad_owidth, pad_oheight;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
52 int h_incr, v_incr;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
53 int16_t h_filters[NB_PHASES][NB_TAPS] __align8; /* horizontal filters */
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
54 int16_t v_filters[NB_PHASES][NB_TAPS] __align8; /* vertical filters */
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
55 uint8_t *line_buf;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
56 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
57
2082
3dc9bbe1b152 polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample filters
michael
parents: 2064
diff changeset
58 void av_build_filter(int16_t *filter, double factor, int tap_count, int phase_count, int scale, int type);
3dc9bbe1b152 polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample filters
michael
parents: 2064
diff changeset
59
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
60 static inline int get_phase(int pos)
986e461dc072 Initial revision
glantau
parents:
diff changeset
61 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
62 return ((pos) >> (POS_FRAC_BITS - PHASE_BITS)) & ((1 << PHASE_BITS) - 1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
63 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
64
986e461dc072 Initial revision
glantau
parents:
diff changeset
65 /* This function must be optimized */
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
66 static void h_resample_fast(uint8_t *dst, int dst_width, const uint8_t *src,
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
67 int src_width, int src_start, int src_incr,
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
68 int16_t *filters)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
69 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
70 int src_pos, phase, sum, i;
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
71 const uint8_t *s;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
72 int16_t *filter;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
73
986e461dc072 Initial revision
glantau
parents:
diff changeset
74 src_pos = src_start;
986e461dc072 Initial revision
glantau
parents:
diff changeset
75 for(i=0;i<dst_width;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
76 #ifdef TEST
986e461dc072 Initial revision
glantau
parents:
diff changeset
77 /* test */
986e461dc072 Initial revision
glantau
parents:
diff changeset
78 if ((src_pos >> POS_FRAC_BITS) < 0 ||
986e461dc072 Initial revision
glantau
parents:
diff changeset
79 (src_pos >> POS_FRAC_BITS) > (src_width - NB_TAPS))
653
714795876872 Change abort() calls to av_abort() calls.
philipjsg
parents: 644
diff changeset
80 av_abort();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
81 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
82 s = src + (src_pos >> POS_FRAC_BITS);
986e461dc072 Initial revision
glantau
parents:
diff changeset
83 phase = get_phase(src_pos);
986e461dc072 Initial revision
glantau
parents:
diff changeset
84 filter = filters + phase * NB_TAPS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
85 #if NB_TAPS == 4
986e461dc072 Initial revision
glantau
parents:
diff changeset
86 sum = s[0] * filter[0] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
87 s[1] * filter[1] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
88 s[2] * filter[2] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
89 s[3] * filter[3];
986e461dc072 Initial revision
glantau
parents:
diff changeset
90 #else
986e461dc072 Initial revision
glantau
parents:
diff changeset
91 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
92 int j;
986e461dc072 Initial revision
glantau
parents:
diff changeset
93 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
94 for(j=0;j<NB_TAPS;j++)
986e461dc072 Initial revision
glantau
parents:
diff changeset
95 sum += s[j] * filter[j];
986e461dc072 Initial revision
glantau
parents:
diff changeset
96 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
97 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
98 sum = sum >> FILTER_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
99 if (sum < 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
100 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
101 else if (sum > 255)
986e461dc072 Initial revision
glantau
parents:
diff changeset
102 sum = 255;
986e461dc072 Initial revision
glantau
parents:
diff changeset
103 dst[0] = sum;
986e461dc072 Initial revision
glantau
parents:
diff changeset
104 src_pos += src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
105 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
106 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
107 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
108
986e461dc072 Initial revision
glantau
parents:
diff changeset
109 /* This function must be optimized */
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
110 static void v_resample(uint8_t *dst, int dst_width, const uint8_t *src,
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
111 int wrap, int16_t *filter)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
112 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
113 int sum, i;
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
114 const uint8_t *s;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
115
986e461dc072 Initial revision
glantau
parents:
diff changeset
116 s = src;
986e461dc072 Initial revision
glantau
parents:
diff changeset
117 for(i=0;i<dst_width;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
118 #if NB_TAPS == 4
986e461dc072 Initial revision
glantau
parents:
diff changeset
119 sum = s[0 * wrap] * filter[0] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
120 s[1 * wrap] * filter[1] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
121 s[2 * wrap] * filter[2] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
122 s[3 * wrap] * filter[3];
986e461dc072 Initial revision
glantau
parents:
diff changeset
123 #else
986e461dc072 Initial revision
glantau
parents:
diff changeset
124 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
125 int j;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
126 uint8_t *s1 = s;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
127
986e461dc072 Initial revision
glantau
parents:
diff changeset
128 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
129 for(j=0;j<NB_TAPS;j++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
130 sum += s1[0] * filter[j];
986e461dc072 Initial revision
glantau
parents:
diff changeset
131 s1 += wrap;
986e461dc072 Initial revision
glantau
parents:
diff changeset
132 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
133 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
134 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
135 sum = sum >> FILTER_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
136 if (sum < 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
137 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
138 else if (sum > 255)
986e461dc072 Initial revision
glantau
parents:
diff changeset
139 sum = 255;
986e461dc072 Initial revision
glantau
parents:
diff changeset
140 dst[0] = sum;
986e461dc072 Initial revision
glantau
parents:
diff changeset
141 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
142 s++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
143 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
144 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
145
2
2e2c46c87460 fixed config for direct mplayer build compatibility
glantau
parents: 0
diff changeset
146 #ifdef HAVE_MMX
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
147
986e461dc072 Initial revision
glantau
parents:
diff changeset
148 #include "i386/mmx.h"
986e461dc072 Initial revision
glantau
parents:
diff changeset
149
986e461dc072 Initial revision
glantau
parents:
diff changeset
150 #define FILTER4(reg) \
986e461dc072 Initial revision
glantau
parents:
diff changeset
151 {\
986e461dc072 Initial revision
glantau
parents:
diff changeset
152 s = src + (src_pos >> POS_FRAC_BITS);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
153 phase = get_phase(src_pos);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
154 filter = filters + phase * NB_TAPS;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
155 movq_m2r(*s, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
156 punpcklbw_r2r(mm7, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
157 movq_m2r(*filter, mm6);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
158 pmaddwd_r2r(reg, mm6);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
159 movq_r2r(mm6, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
160 psrlq_i2r(32, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
161 paddd_r2r(mm6, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
162 psrad_i2r(FILTER_BITS, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
163 src_pos += src_incr;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
164 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
165
986e461dc072 Initial revision
glantau
parents:
diff changeset
166 #define DUMP(reg) movq_r2m(reg, tmp); printf(#reg "=%016Lx\n", tmp.uq);
986e461dc072 Initial revision
glantau
parents:
diff changeset
167
986e461dc072 Initial revision
glantau
parents:
diff changeset
168 /* XXX: do four pixels at a time */
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
169 static void h_resample_fast4_mmx(uint8_t *dst, int dst_width,
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
170 const uint8_t *src, int src_width,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
171 int src_start, int src_incr, int16_t *filters)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
172 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
173 int src_pos, phase;
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
174 const uint8_t *s;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
175 int16_t *filter;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
176 mmx_t tmp;
986e461dc072 Initial revision
glantau
parents:
diff changeset
177
986e461dc072 Initial revision
glantau
parents:
diff changeset
178 src_pos = src_start;
986e461dc072 Initial revision
glantau
parents:
diff changeset
179 pxor_r2r(mm7, mm7);
986e461dc072 Initial revision
glantau
parents:
diff changeset
180
986e461dc072 Initial revision
glantau
parents:
diff changeset
181 while (dst_width >= 4) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
182
986e461dc072 Initial revision
glantau
parents:
diff changeset
183 FILTER4(mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
184 FILTER4(mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
185 FILTER4(mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
186 FILTER4(mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
187
986e461dc072 Initial revision
glantau
parents:
diff changeset
188 packuswb_r2r(mm7, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
189 packuswb_r2r(mm7, mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
190 packuswb_r2r(mm7, mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
191 packuswb_r2r(mm7, mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
192 movq_r2m(mm0, tmp);
986e461dc072 Initial revision
glantau
parents:
diff changeset
193 dst[0] = tmp.ub[0];
986e461dc072 Initial revision
glantau
parents:
diff changeset
194 movq_r2m(mm1, tmp);
986e461dc072 Initial revision
glantau
parents:
diff changeset
195 dst[1] = tmp.ub[0];
986e461dc072 Initial revision
glantau
parents:
diff changeset
196 movq_r2m(mm2, tmp);
986e461dc072 Initial revision
glantau
parents:
diff changeset
197 dst[2] = tmp.ub[0];
986e461dc072 Initial revision
glantau
parents:
diff changeset
198 movq_r2m(mm3, tmp);
986e461dc072 Initial revision
glantau
parents:
diff changeset
199 dst[3] = tmp.ub[0];
986e461dc072 Initial revision
glantau
parents:
diff changeset
200 dst += 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
201 dst_width -= 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
202 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
203 while (dst_width > 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
204 FILTER4(mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
205 packuswb_r2r(mm7, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
206 movq_r2m(mm0, tmp);
986e461dc072 Initial revision
glantau
parents:
diff changeset
207 dst[0] = tmp.ub[0];
986e461dc072 Initial revision
glantau
parents:
diff changeset
208 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
209 dst_width--;
986e461dc072 Initial revision
glantau
parents:
diff changeset
210 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
211 emms();
986e461dc072 Initial revision
glantau
parents:
diff changeset
212 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
213
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
214 static void v_resample4_mmx(uint8_t *dst, int dst_width, const uint8_t *src,
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
215 int wrap, int16_t *filter)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
216 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
217 int sum, i, v;
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
218 const uint8_t *s;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
219 mmx_t tmp;
986e461dc072 Initial revision
glantau
parents:
diff changeset
220 mmx_t coefs[4];
986e461dc072 Initial revision
glantau
parents:
diff changeset
221
986e461dc072 Initial revision
glantau
parents:
diff changeset
222 for(i=0;i<4;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
223 v = filter[i];
986e461dc072 Initial revision
glantau
parents:
diff changeset
224 coefs[i].uw[0] = v;
986e461dc072 Initial revision
glantau
parents:
diff changeset
225 coefs[i].uw[1] = v;
986e461dc072 Initial revision
glantau
parents:
diff changeset
226 coefs[i].uw[2] = v;
986e461dc072 Initial revision
glantau
parents:
diff changeset
227 coefs[i].uw[3] = v;
986e461dc072 Initial revision
glantau
parents:
diff changeset
228 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
229
986e461dc072 Initial revision
glantau
parents:
diff changeset
230 pxor_r2r(mm7, mm7);
986e461dc072 Initial revision
glantau
parents:
diff changeset
231 s = src;
986e461dc072 Initial revision
glantau
parents:
diff changeset
232 while (dst_width >= 4) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
233 movq_m2r(s[0 * wrap], mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
234 punpcklbw_r2r(mm7, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
235 movq_m2r(s[1 * wrap], mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
236 punpcklbw_r2r(mm7, mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
237 movq_m2r(s[2 * wrap], mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
238 punpcklbw_r2r(mm7, mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
239 movq_m2r(s[3 * wrap], mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
240 punpcklbw_r2r(mm7, mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
241
986e461dc072 Initial revision
glantau
parents:
diff changeset
242 pmullw_m2r(coefs[0], mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
243 pmullw_m2r(coefs[1], mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
244 pmullw_m2r(coefs[2], mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
245 pmullw_m2r(coefs[3], mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
246
986e461dc072 Initial revision
glantau
parents:
diff changeset
247 paddw_r2r(mm1, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
248 paddw_r2r(mm3, mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
249 paddw_r2r(mm2, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
250 psraw_i2r(FILTER_BITS, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
251
986e461dc072 Initial revision
glantau
parents:
diff changeset
252 packuswb_r2r(mm7, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
253 movq_r2m(mm0, tmp);
986e461dc072 Initial revision
glantau
parents:
diff changeset
254
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
255 *(uint32_t *)dst = tmp.ud[0];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
256 dst += 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
257 s += 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
258 dst_width -= 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
259 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
260 while (dst_width > 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
261 sum = s[0 * wrap] * filter[0] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
262 s[1 * wrap] * filter[1] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
263 s[2 * wrap] * filter[2] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
264 s[3 * wrap] * filter[3];
986e461dc072 Initial revision
glantau
parents:
diff changeset
265 sum = sum >> FILTER_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
266 if (sum < 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
267 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
268 else if (sum > 255)
986e461dc072 Initial revision
glantau
parents:
diff changeset
269 sum = 255;
986e461dc072 Initial revision
glantau
parents:
diff changeset
270 dst[0] = sum;
986e461dc072 Initial revision
glantau
parents:
diff changeset
271 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
272 s++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
273 dst_width--;
986e461dc072 Initial revision
glantau
parents:
diff changeset
274 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
275 emms();
986e461dc072 Initial revision
glantau
parents:
diff changeset
276 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
277 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
278
894
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
279 #ifdef HAVE_ALTIVEC
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
280 typedef union {
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
281 vector unsigned char v;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
282 unsigned char c[16];
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
283 } vec_uc_t;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
284
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
285 typedef union {
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
286 vector signed short v;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
287 signed short s[8];
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
288 } vec_ss_t;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
289
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
290 void v_resample16_altivec(uint8_t *dst, int dst_width, const uint8_t *src,
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
291 int wrap, int16_t *filter)
894
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
292 {
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
293 int sum, i;
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
294 const uint8_t *s;
894
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
295 vector unsigned char *tv, tmp, dstv, zero;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
296 vec_ss_t srchv[4], srclv[4], fv[4];
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
297 vector signed short zeros, sumhv, sumlv;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
298 s = src;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
299
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
300 for(i=0;i<4;i++)
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
301 {
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
302 /*
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
303 The vec_madds later on does an implicit >>15 on the result.
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
304 Since FILTER_BITS is 8, and we have 15 bits of magnitude in
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
305 a signed short, we have just enough bits to pre-shift our
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
306 filter constants <<7 to compensate for vec_madds.
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
307 */
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
308 fv[i].s[0] = filter[i] << (15-FILTER_BITS);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
309 fv[i].v = vec_splat(fv[i].v, 0);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
310 }
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
311
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
312 zero = vec_splat_u8(0);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
313 zeros = vec_splat_s16(0);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
314
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
315
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
316 /*
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
317 When we're resampling, we'd ideally like both our input buffers,
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
318 and output buffers to be 16-byte aligned, so we can do both aligned
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
319 reads and writes. Sadly we can't always have this at the moment, so
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
320 we opt for aligned writes, as unaligned writes have a huge overhead.
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
321 To do this, do enough scalar resamples to get dst 16-byte aligned.
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
322 */
898
6d5e3fe7aea1 Simplify an expression and eliminate a compile warning
philipjsg
parents: 894
diff changeset
323 i = (-(int)dst) & 0xf;
894
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
324 while(i>0) {
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
325 sum = s[0 * wrap] * filter[0] +
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
326 s[1 * wrap] * filter[1] +
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
327 s[2 * wrap] * filter[2] +
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
328 s[3 * wrap] * filter[3];
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
329 sum = sum >> FILTER_BITS;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
330 if (sum<0) sum = 0; else if (sum>255) sum=255;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
331 dst[0] = sum;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
332 dst++;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
333 s++;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
334 dst_width--;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
335 i--;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
336 }
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
337
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
338 /* Do our altivec resampling on 16 pixels at once. */
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
339 while(dst_width>=16) {
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
340 /*
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
341 Read 16 (potentially unaligned) bytes from each of
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
342 4 lines into 4 vectors, and split them into shorts.
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
343 Interleave the multipy/accumulate for the resample
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
344 filter with the loads to hide the 3 cycle latency
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
345 the vec_madds have.
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
346 */
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
347 tv = (vector unsigned char *) &s[0 * wrap];
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
348 tmp = vec_perm(tv[0], tv[1], vec_lvsl(0, &s[i * wrap]));
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
349 srchv[0].v = (vector signed short) vec_mergeh(zero, tmp);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
350 srclv[0].v = (vector signed short) vec_mergel(zero, tmp);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
351 sumhv = vec_madds(srchv[0].v, fv[0].v, zeros);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
352 sumlv = vec_madds(srclv[0].v, fv[0].v, zeros);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
353
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
354 tv = (vector unsigned char *) &s[1 * wrap];
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
355 tmp = vec_perm(tv[0], tv[1], vec_lvsl(0, &s[1 * wrap]));
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
356 srchv[1].v = (vector signed short) vec_mergeh(zero, tmp);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
357 srclv[1].v = (vector signed short) vec_mergel(zero, tmp);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
358 sumhv = vec_madds(srchv[1].v, fv[1].v, sumhv);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
359 sumlv = vec_madds(srclv[1].v, fv[1].v, sumlv);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
360
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
361 tv = (vector unsigned char *) &s[2 * wrap];
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
362 tmp = vec_perm(tv[0], tv[1], vec_lvsl(0, &s[2 * wrap]));
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
363 srchv[2].v = (vector signed short) vec_mergeh(zero, tmp);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
364 srclv[2].v = (vector signed short) vec_mergel(zero, tmp);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
365 sumhv = vec_madds(srchv[2].v, fv[2].v, sumhv);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
366 sumlv = vec_madds(srclv[2].v, fv[2].v, sumlv);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
367
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
368 tv = (vector unsigned char *) &s[3 * wrap];
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
369 tmp = vec_perm(tv[0], tv[1], vec_lvsl(0, &s[3 * wrap]));
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
370 srchv[3].v = (vector signed short) vec_mergeh(zero, tmp);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
371 srclv[3].v = (vector signed short) vec_mergel(zero, tmp);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
372 sumhv = vec_madds(srchv[3].v, fv[3].v, sumhv);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
373 sumlv = vec_madds(srclv[3].v, fv[3].v, sumlv);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
374
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
375 /*
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
376 Pack the results into our destination vector,
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
377 and do an aligned write of that back to memory.
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
378 */
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
379 dstv = vec_packsu(sumhv, sumlv) ;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
380 vec_st(dstv, 0, (vector unsigned char *) dst);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
381
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
382 dst+=16;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
383 s+=16;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
384 dst_width-=16;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
385 }
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
386
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
387 /*
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
388 If there are any leftover pixels, resample them
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
389 with the slow scalar method.
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
390 */
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
391 while(dst_width>0) {
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
392 sum = s[0 * wrap] * filter[0] +
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
393 s[1 * wrap] * filter[1] +
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
394 s[2 * wrap] * filter[2] +
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
395 s[3 * wrap] * filter[3];
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
396 sum = sum >> FILTER_BITS;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
397 if (sum<0) sum = 0; else if (sum>255) sum=255;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
398 dst[0] = sum;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
399 dst++;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
400 s++;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
401 dst_width--;
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
402 }
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
403 }
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
404 #endif
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
405
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
406 /* slow version to handle limit cases. Does not need optimisation */
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
407 static void h_resample_slow(uint8_t *dst, int dst_width,
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
408 const uint8_t *src, int src_width,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
409 int src_start, int src_incr, int16_t *filters)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
410 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
411 int src_pos, phase, sum, j, v, i;
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
412 const uint8_t *s, *src_end;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
413 int16_t *filter;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
414
986e461dc072 Initial revision
glantau
parents:
diff changeset
415 src_end = src + src_width;
986e461dc072 Initial revision
glantau
parents:
diff changeset
416 src_pos = src_start;
986e461dc072 Initial revision
glantau
parents:
diff changeset
417 for(i=0;i<dst_width;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
418 s = src + (src_pos >> POS_FRAC_BITS);
986e461dc072 Initial revision
glantau
parents:
diff changeset
419 phase = get_phase(src_pos);
986e461dc072 Initial revision
glantau
parents:
diff changeset
420 filter = filters + phase * NB_TAPS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
421 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
422 for(j=0;j<NB_TAPS;j++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
423 if (s < src)
986e461dc072 Initial revision
glantau
parents:
diff changeset
424 v = src[0];
986e461dc072 Initial revision
glantau
parents:
diff changeset
425 else if (s >= src_end)
986e461dc072 Initial revision
glantau
parents:
diff changeset
426 v = src_end[-1];
986e461dc072 Initial revision
glantau
parents:
diff changeset
427 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
428 v = s[0];
986e461dc072 Initial revision
glantau
parents:
diff changeset
429 sum += v * filter[j];
986e461dc072 Initial revision
glantau
parents:
diff changeset
430 s++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
431 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
432 sum = sum >> FILTER_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
433 if (sum < 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
434 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
435 else if (sum > 255)
986e461dc072 Initial revision
glantau
parents:
diff changeset
436 sum = 255;
986e461dc072 Initial revision
glantau
parents:
diff changeset
437 dst[0] = sum;
986e461dc072 Initial revision
glantau
parents:
diff changeset
438 src_pos += src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
439 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
440 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
441 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
442
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
443 static void h_resample(uint8_t *dst, int dst_width, const uint8_t *src,
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
444 int src_width, int src_start, int src_incr,
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
445 int16_t *filters)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
446 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
447 int n, src_end;
986e461dc072 Initial revision
glantau
parents:
diff changeset
448
986e461dc072 Initial revision
glantau
parents:
diff changeset
449 if (src_start < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
450 n = (0 - src_start + src_incr - 1) / src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
451 h_resample_slow(dst, n, src, src_width, src_start, src_incr, filters);
986e461dc072 Initial revision
glantau
parents:
diff changeset
452 dst += n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
453 dst_width -= n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
454 src_start += n * src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
455 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
456 src_end = src_start + dst_width * src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
457 if (src_end > ((src_width - NB_TAPS) << POS_FRAC_BITS)) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
458 n = (((src_width - NB_TAPS + 1) << POS_FRAC_BITS) - 1 - src_start) /
986e461dc072 Initial revision
glantau
parents:
diff changeset
459 src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
460 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
461 n = dst_width;
986e461dc072 Initial revision
glantau
parents:
diff changeset
462 }
2
2e2c46c87460 fixed config for direct mplayer build compatibility
glantau
parents: 0
diff changeset
463 #ifdef HAVE_MMX
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
464 if ((mm_flags & MM_MMX) && NB_TAPS == 4)
986e461dc072 Initial revision
glantau
parents:
diff changeset
465 h_resample_fast4_mmx(dst, n,
986e461dc072 Initial revision
glantau
parents:
diff changeset
466 src, src_width, src_start, src_incr, filters);
986e461dc072 Initial revision
glantau
parents:
diff changeset
467 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
468 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
469 h_resample_fast(dst, n,
986e461dc072 Initial revision
glantau
parents:
diff changeset
470 src, src_width, src_start, src_incr, filters);
986e461dc072 Initial revision
glantau
parents:
diff changeset
471 if (n < dst_width) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
472 dst += n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
473 dst_width -= n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
474 src_start += n * src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
475 h_resample_slow(dst, dst_width,
986e461dc072 Initial revision
glantau
parents:
diff changeset
476 src, src_width, src_start, src_incr, filters);
986e461dc072 Initial revision
glantau
parents:
diff changeset
477 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
478 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
479
986e461dc072 Initial revision
glantau
parents:
diff changeset
480 static void component_resample(ImgReSampleContext *s,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
481 uint8_t *output, int owrap, int owidth, int oheight,
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
482 uint8_t *input, int iwrap, int iwidth, int iheight)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
483 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
484 int src_y, src_y1, last_src_y, ring_y, phase_y, y1, y;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
485 uint8_t *new_line, *src_line;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
486
986e461dc072 Initial revision
glantau
parents:
diff changeset
487 last_src_y = - FCENTER - 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
488 /* position of the bottom of the filter in the source image */
986e461dc072 Initial revision
glantau
parents:
diff changeset
489 src_y = (last_src_y + NB_TAPS) * POS_FRAC;
986e461dc072 Initial revision
glantau
parents:
diff changeset
490 ring_y = NB_TAPS; /* position in ring buffer */
986e461dc072 Initial revision
glantau
parents:
diff changeset
491 for(y=0;y<oheight;y++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
492 /* apply horizontal filter on new lines from input if needed */
986e461dc072 Initial revision
glantau
parents:
diff changeset
493 src_y1 = src_y >> POS_FRAC_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
494 while (last_src_y < src_y1) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
495 if (++ring_y >= LINE_BUF_HEIGHT + NB_TAPS)
986e461dc072 Initial revision
glantau
parents:
diff changeset
496 ring_y = NB_TAPS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
497 last_src_y++;
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
498 /* handle limit conditions : replicate line (slightly
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
499 inefficient because we filter multiple times) */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
500 y1 = last_src_y;
986e461dc072 Initial revision
glantau
parents:
diff changeset
501 if (y1 < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
502 y1 = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
503 } else if (y1 >= iheight) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
504 y1 = iheight - 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
505 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
506 src_line = input + y1 * iwrap;
986e461dc072 Initial revision
glantau
parents:
diff changeset
507 new_line = s->line_buf + ring_y * owidth;
986e461dc072 Initial revision
glantau
parents:
diff changeset
508 /* apply filter and handle limit cases correctly */
986e461dc072 Initial revision
glantau
parents:
diff changeset
509 h_resample(new_line, owidth,
986e461dc072 Initial revision
glantau
parents:
diff changeset
510 src_line, iwidth, - FCENTER * POS_FRAC, s->h_incr,
986e461dc072 Initial revision
glantau
parents:
diff changeset
511 &s->h_filters[0][0]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
512 /* handle ring buffer wraping */
986e461dc072 Initial revision
glantau
parents:
diff changeset
513 if (ring_y >= LINE_BUF_HEIGHT) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
514 memcpy(s->line_buf + (ring_y - LINE_BUF_HEIGHT) * owidth,
986e461dc072 Initial revision
glantau
parents:
diff changeset
515 new_line, owidth);
986e461dc072 Initial revision
glantau
parents:
diff changeset
516 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
517 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
518 /* apply vertical filter */
986e461dc072 Initial revision
glantau
parents:
diff changeset
519 phase_y = get_phase(src_y);
2
2e2c46c87460 fixed config for direct mplayer build compatibility
glantau
parents: 0
diff changeset
520 #ifdef HAVE_MMX
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
521 /* desactivated MMX because loss of precision */
986e461dc072 Initial revision
glantau
parents:
diff changeset
522 if ((mm_flags & MM_MMX) && NB_TAPS == 4 && 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
523 v_resample4_mmx(output, owidth,
986e461dc072 Initial revision
glantau
parents:
diff changeset
524 s->line_buf + (ring_y - NB_TAPS + 1) * owidth, owidth,
986e461dc072 Initial revision
glantau
parents:
diff changeset
525 &s->v_filters[phase_y][0]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
526 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
527 #endif
894
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
528 #ifdef HAVE_ALTIVEC
920
a0ad8e3452f2 practically disabling altivec resampling code (some ppl said its broken) patch by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents: 898
diff changeset
529 if ((mm_flags & MM_ALTIVEC) && NB_TAPS == 4 && FILTER_BITS <= 6)
894
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
530 v_resample16_altivec(output, owidth,
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
531 s->line_buf + (ring_y - NB_TAPS + 1) * owidth, owidth,
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
532 &s->v_filters[phase_y][0]);
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
533 else
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
534 #endif
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
535 v_resample(output, owidth,
986e461dc072 Initial revision
glantau
parents:
diff changeset
536 s->line_buf + (ring_y - NB_TAPS + 1) * owidth, owidth,
986e461dc072 Initial revision
glantau
parents:
diff changeset
537 &s->v_filters[phase_y][0]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
538
986e461dc072 Initial revision
glantau
parents:
diff changeset
539 src_y += s->v_incr;
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
540
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
541 output += owrap;
986e461dc072 Initial revision
glantau
parents:
diff changeset
542 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
543 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
544
986e461dc072 Initial revision
glantau
parents:
diff changeset
545 ImgReSampleContext *img_resample_init(int owidth, int oheight,
986e461dc072 Initial revision
glantau
parents:
diff changeset
546 int iwidth, int iheight)
986e461dc072 Initial revision
glantau
parents:
diff changeset
547 {
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
548 return img_resample_full_init(owidth, oheight, iwidth, iheight,
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
549 0, 0, 0, 0, 0, 0, 0, 0);
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
550 }
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
551
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
552 ImgReSampleContext *img_resample_full_init(int owidth, int oheight,
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
553 int iwidth, int iheight,
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
554 int topBand, int bottomBand,
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
555 int leftBand, int rightBand,
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
556 int padtop, int padbottom,
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
557 int padleft, int padright)
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
558 {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
559 ImgReSampleContext *s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
560
986e461dc072 Initial revision
glantau
parents:
diff changeset
561 s = av_mallocz(sizeof(ImgReSampleContext));
986e461dc072 Initial revision
glantau
parents:
diff changeset
562 if (!s)
986e461dc072 Initial revision
glantau
parents:
diff changeset
563 return NULL;
2422
18b8b2dcc037 various security fixes and precautionary checks
michael
parents: 2400
diff changeset
564 if((unsigned)owidth >= UINT_MAX / (LINE_BUF_HEIGHT + NB_TAPS))
18b8b2dcc037 various security fixes and precautionary checks
michael
parents: 2400
diff changeset
565 return NULL;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
566 s->line_buf = av_mallocz(owidth * (LINE_BUF_HEIGHT + NB_TAPS));
986e461dc072 Initial revision
glantau
parents:
diff changeset
567 if (!s->line_buf)
986e461dc072 Initial revision
glantau
parents:
diff changeset
568 goto fail;
986e461dc072 Initial revision
glantau
parents:
diff changeset
569
986e461dc072 Initial revision
glantau
parents:
diff changeset
570 s->owidth = owidth;
986e461dc072 Initial revision
glantau
parents:
diff changeset
571 s->oheight = oheight;
986e461dc072 Initial revision
glantau
parents:
diff changeset
572 s->iwidth = iwidth;
986e461dc072 Initial revision
glantau
parents:
diff changeset
573 s->iheight = iheight;
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
574
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
575 s->topBand = topBand;
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
576 s->bottomBand = bottomBand;
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
577 s->leftBand = leftBand;
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
578 s->rightBand = rightBand;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
579
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
580 s->padtop = padtop;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
581 s->padbottom = padbottom;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
582 s->padleft = padleft;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
583 s->padright = padright;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
584
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
585 s->pad_owidth = owidth - (padleft + padright);
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
586 s->pad_oheight = oheight - (padtop + padbottom);
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
587
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
588 s->h_incr = ((iwidth - leftBand - rightBand) * POS_FRAC) / s->pad_owidth;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
589 s->v_incr = ((iheight - topBand - bottomBand) * POS_FRAC) / s->pad_oheight;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
590
2082
3dc9bbe1b152 polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample filters
michael
parents: 2064
diff changeset
591 av_build_filter(&s->h_filters[0][0], (float) s->pad_owidth /
3dc9bbe1b152 polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample filters
michael
parents: 2064
diff changeset
592 (float) (iwidth - leftBand - rightBand), NB_TAPS, NB_PHASES, 1<<FILTER_BITS, 0);
3dc9bbe1b152 polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample filters
michael
parents: 2064
diff changeset
593 av_build_filter(&s->v_filters[0][0], (float) s->pad_oheight /
3dc9bbe1b152 polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample filters
michael
parents: 2064
diff changeset
594 (float) (iheight - topBand - bottomBand), NB_TAPS, NB_PHASES, 1<<FILTER_BITS, 0);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
595
986e461dc072 Initial revision
glantau
parents:
diff changeset
596 return s;
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
597 fail:
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 18
diff changeset
598 av_free(s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
599 return NULL;
986e461dc072 Initial revision
glantau
parents:
diff changeset
600 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
601
986e461dc072 Initial revision
glantau
parents:
diff changeset
602 void img_resample(ImgReSampleContext *s,
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
603 AVPicture *output, const AVPicture *input)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
604 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
605 int i, shift;
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
606 uint8_t* optr;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
607
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
608 for (i=0;i<3;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
609 shift = (i == 0) ? 0 : 1;
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
610
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
611 optr = output->data[i] + (((output->linesize[i] *
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
612 s->padtop) + s->padleft) >> shift);
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
613
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
614 component_resample(s, optr, output->linesize[i],
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
615 s->pad_owidth >> shift, s->pad_oheight >> shift,
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
616 input->data[i] + (input->linesize[i] *
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
617 (s->topBand >> shift)) + (s->leftBand >> shift),
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
618 input->linesize[i], ((s->iwidth - s->leftBand -
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
619 s->rightBand) >> shift),
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
620 (s->iheight - s->topBand - s->bottomBand) >> shift);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
621 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
622 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
623
986e461dc072 Initial revision
glantau
parents:
diff changeset
624 void img_resample_close(ImgReSampleContext *s)
986e461dc072 Initial revision
glantau
parents:
diff changeset
625 {
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 18
diff changeset
626 av_free(s->line_buf);
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 18
diff changeset
627 av_free(s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
628 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
629
986e461dc072 Initial revision
glantau
parents:
diff changeset
630 #ifdef TEST
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
631 #include <stdio.h>
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
632
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
633 /* input */
986e461dc072 Initial revision
glantau
parents:
diff changeset
634 #define XSIZE 256
986e461dc072 Initial revision
glantau
parents:
diff changeset
635 #define YSIZE 256
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
636 uint8_t img[XSIZE * YSIZE];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
637
986e461dc072 Initial revision
glantau
parents:
diff changeset
638 /* output */
986e461dc072 Initial revision
glantau
parents:
diff changeset
639 #define XSIZE1 512
986e461dc072 Initial revision
glantau
parents:
diff changeset
640 #define YSIZE1 512
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
641 uint8_t img1[XSIZE1 * YSIZE1];
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
642 uint8_t img2[XSIZE1 * YSIZE1];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
643
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
644 void save_pgm(const char *filename, uint8_t *img, int xsize, int ysize)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
645 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
646 FILE *f;
986e461dc072 Initial revision
glantau
parents:
diff changeset
647 f=fopen(filename,"w");
986e461dc072 Initial revision
glantau
parents:
diff changeset
648 fprintf(f,"P5\n%d %d\n%d\n", xsize, ysize, 255);
986e461dc072 Initial revision
glantau
parents:
diff changeset
649 fwrite(img,1, xsize * ysize,f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
650 fclose(f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
651 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
652
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
653 static void dump_filter(int16_t *filter)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
654 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
655 int i, ph;
986e461dc072 Initial revision
glantau
parents:
diff changeset
656
986e461dc072 Initial revision
glantau
parents:
diff changeset
657 for(ph=0;ph<NB_PHASES;ph++) {
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
658 av_log(NULL, AV_LOG_INFO, "%2d: ", ph);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
659 for(i=0;i<NB_TAPS;i++) {
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
660 av_log(NULL, AV_LOG_INFO, " %5.2f", filter[ph * NB_TAPS + i] / 256.0);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
661 }
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
662 av_log(NULL, AV_LOG_INFO, "\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
663 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
664 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
665
2
2e2c46c87460 fixed config for direct mplayer build compatibility
glantau
parents: 0
diff changeset
666 #ifdef HAVE_MMX
644
641708b5c33c fixing tests
michaelni
parents: 630
diff changeset
667 int mm_flags;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
668 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
669
986e461dc072 Initial revision
glantau
parents:
diff changeset
670 int main(int argc, char **argv)
986e461dc072 Initial revision
glantau
parents:
diff changeset
671 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
672 int x, y, v, i, xsize, ysize;
986e461dc072 Initial revision
glantau
parents:
diff changeset
673 ImgReSampleContext *s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
674 float fact, factors[] = { 1/2.0, 3.0/4.0, 1.0, 4.0/3.0, 16.0/9.0, 2.0 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
675 char buf[256];
986e461dc072 Initial revision
glantau
parents:
diff changeset
676
986e461dc072 Initial revision
glantau
parents:
diff changeset
677 /* build test image */
986e461dc072 Initial revision
glantau
parents:
diff changeset
678 for(y=0;y<YSIZE;y++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
679 for(x=0;x<XSIZE;x++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
680 if (x < XSIZE/2 && y < YSIZE/2) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
681 if (x < XSIZE/4 && y < YSIZE/4) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
682 if ((x % 10) <= 6 &&
986e461dc072 Initial revision
glantau
parents:
diff changeset
683 (y % 10) <= 6)
986e461dc072 Initial revision
glantau
parents:
diff changeset
684 v = 0xff;
986e461dc072 Initial revision
glantau
parents:
diff changeset
685 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
686 v = 0x00;
986e461dc072 Initial revision
glantau
parents:
diff changeset
687 } else if (x < XSIZE/4) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
688 if (x & 1)
986e461dc072 Initial revision
glantau
parents:
diff changeset
689 v = 0xff;
986e461dc072 Initial revision
glantau
parents:
diff changeset
690 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
691 v = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
692 } else if (y < XSIZE/4) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
693 if (y & 1)
986e461dc072 Initial revision
glantau
parents:
diff changeset
694 v = 0xff;
986e461dc072 Initial revision
glantau
parents:
diff changeset
695 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
696 v = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
697 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
698 if (y < YSIZE*3/8) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
699 if ((y+x) & 1)
986e461dc072 Initial revision
glantau
parents:
diff changeset
700 v = 0xff;
986e461dc072 Initial revision
glantau
parents:
diff changeset
701 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
702 v = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
703 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
704 if (((x+3) % 4) <= 1 &&
986e461dc072 Initial revision
glantau
parents:
diff changeset
705 ((y+3) % 4) <= 1)
986e461dc072 Initial revision
glantau
parents:
diff changeset
706 v = 0xff;
986e461dc072 Initial revision
glantau
parents:
diff changeset
707 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
708 v = 0x00;
986e461dc072 Initial revision
glantau
parents:
diff changeset
709 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
710 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
711 } else if (x < XSIZE/2) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
712 v = ((x - (XSIZE/2)) * 255) / (XSIZE/2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
713 } else if (y < XSIZE/2) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
714 v = ((y - (XSIZE/2)) * 255) / (XSIZE/2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
715 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
716 v = ((x + y - XSIZE) * 255) / XSIZE;
986e461dc072 Initial revision
glantau
parents:
diff changeset
717 }
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
718 img[(YSIZE - y) * XSIZE + (XSIZE - x)] = v;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
719 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
720 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
721 save_pgm("/tmp/in.pgm", img, XSIZE, YSIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
722 for(i=0;i<sizeof(factors)/sizeof(float);i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
723 fact = factors[i];
986e461dc072 Initial revision
glantau
parents:
diff changeset
724 xsize = (int)(XSIZE * fact);
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
725 ysize = (int)((YSIZE - 100) * fact);
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
726 s = img_resample_full_init(xsize, ysize, XSIZE, YSIZE, 50 ,50, 0, 0, 0, 0, 0, 0);
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
727 av_log(NULL, AV_LOG_INFO, "Factor=%0.2f\n", fact);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
728 dump_filter(&s->h_filters[0][0]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
729 component_resample(s, img1, xsize, xsize, ysize,
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
730 img + 50 * XSIZE, XSIZE, XSIZE, YSIZE - 100);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
731 img_resample_close(s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
732
2423
87b7fbed8609 dissallow sprintf
michael
parents: 2422
diff changeset
733 snprintf(buf, sizeof(buf), "/tmp/out%d.pgm", i);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
734 save_pgm(buf, img1, xsize, ysize);
986e461dc072 Initial revision
glantau
parents:
diff changeset
735 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
736
986e461dc072 Initial revision
glantau
parents:
diff changeset
737 /* mmx test */
2
2e2c46c87460 fixed config for direct mplayer build compatibility
glantau
parents: 0
diff changeset
738 #ifdef HAVE_MMX
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
739 av_log(NULL, AV_LOG_INFO, "MMX test\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
740 fact = 0.72;
986e461dc072 Initial revision
glantau
parents:
diff changeset
741 xsize = (int)(XSIZE * fact);
986e461dc072 Initial revision
glantau
parents:
diff changeset
742 ysize = (int)(YSIZE * fact);
986e461dc072 Initial revision
glantau
parents:
diff changeset
743 mm_flags = MM_MMX;
986e461dc072 Initial revision
glantau
parents:
diff changeset
744 s = img_resample_init(xsize, ysize, XSIZE, YSIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
745 component_resample(s, img1, xsize, xsize, ysize,
986e461dc072 Initial revision
glantau
parents:
diff changeset
746 img, XSIZE, XSIZE, YSIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
747
986e461dc072 Initial revision
glantau
parents:
diff changeset
748 mm_flags = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
749 s = img_resample_init(xsize, ysize, XSIZE, YSIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
750 component_resample(s, img2, xsize, xsize, ysize,
986e461dc072 Initial revision
glantau
parents:
diff changeset
751 img, XSIZE, XSIZE, YSIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
752 if (memcmp(img1, img2, xsize * ysize) != 0) {
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
753 av_log(NULL, AV_LOG_ERROR, "mmx error\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
754 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
755 }
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
756 av_log(NULL, AV_LOG_INFO, "MMX OK\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
757 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
758 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
759 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
760
986e461dc072 Initial revision
glantau
parents:
diff changeset
761 #endif