annotate imgresample.c @ 8991:ca768cb2bfb6 libavcodec

Use last decoded SPS as current SPS in order to parse picture timing SEI correctly. This works around an apparent H.264 standard deficiency. Patch by Ivan Schreter, schreter gmx net
author cehoyos
date Fri, 20 Feb 2009 16:20:01 +0000
parents eda229beb608
children a199529ef171
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
2 * High quality image resampling with polyphase filters
8629
04423b2f6e0b cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 8590
diff changeset
3 * Copyright (c) 2001 Fabrice Bellard
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3589
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3589
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3589
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
429
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
9 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3589
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3589
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
15 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
16 *
429
718a22dc121f license/copyright change
glantau
parents: 412
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3589
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2979
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
20 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
21
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
22 /**
8718
e9d9d946f213 Use full internal pathname in doxygen @file directives.
diego
parents: 8629
diff changeset
23 * @file libavcodec/imgresample.c
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
24 * High quality image resampling with polyphase filters .
8805
eda229beb608 Document old scaler as deprecated
vitor
parents: 8718
diff changeset
25 *
eda229beb608 Document old scaler as deprecated
vitor
parents: 8718
diff changeset
26 * WARNING: This file is deprecated and will be removed after FFmpeg 0.5
eda229beb608 Document old scaler as deprecated
vitor
parents: 8718
diff changeset
27 * release, do not lose your time improving it!
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
28 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
29
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 18
diff changeset
30 #include "avcodec.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
31 #include "dsputil.h"
8313
2eaafc02cd3d Add img_convert() to imgconvert.h and #include it from imgresample.c.
diego
parents: 8104
diff changeset
32 #include "imgconvert.h"
6764
7829c158c1c4 Add missing path to #include statement.
diego
parents: 6464
diff changeset
33 #include "libswscale/swscale.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
34
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8430
diff changeset
35 #if HAVE_ALTIVEC
5750
09f99af1db40 Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents: 5187
diff changeset
36 #include "ppc/imgresample_altivec.h"
09f99af1db40 Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents: 5187
diff changeset
37 #endif
09f99af1db40 Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents: 5187
diff changeset
38
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
39 #define NB_COMPONENTS 3
986e461dc072 Initial revision
glantau
parents:
diff changeset
40
986e461dc072 Initial revision
glantau
parents:
diff changeset
41 #define PHASE_BITS 4
986e461dc072 Initial revision
glantau
parents:
diff changeset
42 #define NB_PHASES (1 << PHASE_BITS)
986e461dc072 Initial revision
glantau
parents:
diff changeset
43 #define NB_TAPS 4
986e461dc072 Initial revision
glantau
parents:
diff changeset
44 #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
45 //#define TEST 1 /* Test it */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
46
986e461dc072 Initial revision
glantau
parents:
diff changeset
47 #define POS_FRAC_BITS 16
986e461dc072 Initial revision
glantau
parents:
diff changeset
48 #define POS_FRAC (1 << POS_FRAC_BITS)
986e461dc072 Initial revision
glantau
parents:
diff changeset
49 /* 6 bits precision is needed for MMX */
986e461dc072 Initial revision
glantau
parents:
diff changeset
50 #define FILTER_BITS 8
986e461dc072 Initial revision
glantau
parents:
diff changeset
51
986e461dc072 Initial revision
glantau
parents:
diff changeset
52 #define LINE_BUF_HEIGHT (NB_TAPS * 4)
986e461dc072 Initial revision
glantau
parents:
diff changeset
53
4065
93163e2a2398 Do not use a fake libavcodec/swscale.h, but always use the real one
lucabe
parents: 4036
diff changeset
54 struct SwsContext {
6464
0c3cc1d7a0b3 Make av_class a pointer to a const AVClass. Addresses one warning in
takis
parents: 6434
diff changeset
55 const AVClass *av_class;
4065
93163e2a2398 Do not use a fake libavcodec/swscale.h, but always use the real one
lucabe
parents: 4036
diff changeset
56 struct ImgReSampleContext *resampling_ctx;
93163e2a2398 Do not use a fake libavcodec/swscale.h, but always use the real one
lucabe
parents: 4036
diff changeset
57 enum PixelFormat src_pix_fmt, dst_pix_fmt;
93163e2a2398 Do not use a fake libavcodec/swscale.h, but always use the real one
lucabe
parents: 4036
diff changeset
58 };
93163e2a2398 Do not use a fake libavcodec/swscale.h, but always use the real one
lucabe
parents: 4036
diff changeset
59
7823
4525dcd81357 Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 6974
diff changeset
60 typedef struct ImgReSampleContext {
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
61 int iwidth, iheight, owidth, oheight;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
62 int topBand, bottomBand, leftBand, rightBand;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
63 int padtop, padbottom, padleft, padright;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
64 int pad_owidth, pad_oheight;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
65 int h_incr, v_incr;
3089
072dbc669253 MSVC-compatible __align8/__align16 declaration
diego
parents: 3036
diff changeset
66 DECLARE_ALIGNED_8(int16_t, h_filters[NB_PHASES][NB_TAPS]); /* horizontal filters */
072dbc669253 MSVC-compatible __align8/__align16 declaration
diego
parents: 3036
diff changeset
67 DECLARE_ALIGNED_8(int16_t, v_filters[NB_PHASES][NB_TAPS]); /* vertical filters */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
68 uint8_t *line_buf;
7823
4525dcd81357 Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 6974
diff changeset
69 } ImgReSampleContext;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
70
2082
3dc9bbe1b152 polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample filters
michael
parents: 2064
diff changeset
71 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
72
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
73 static inline int get_phase(int pos)
986e461dc072 Initial revision
glantau
parents:
diff changeset
74 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
75 return ((pos) >> (POS_FRAC_BITS - PHASE_BITS)) & ((1 << PHASE_BITS) - 1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
76 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
77
986e461dc072 Initial revision
glantau
parents:
diff changeset
78 /* This function must be optimized */
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
79 static void h_resample_fast(uint8_t *dst, int dst_width, const uint8_t *src,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
80 int src_width, int src_start, int src_incr,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
81 int16_t *filters)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
82 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
83 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
84 const uint8_t *s;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
85 int16_t *filter;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
86
986e461dc072 Initial revision
glantau
parents:
diff changeset
87 src_pos = src_start;
986e461dc072 Initial revision
glantau
parents:
diff changeset
88 for(i=0;i<dst_width;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
89 #ifdef TEST
986e461dc072 Initial revision
glantau
parents:
diff changeset
90 /* test */
986e461dc072 Initial revision
glantau
parents:
diff changeset
91 if ((src_pos >> POS_FRAC_BITS) < 0 ||
986e461dc072 Initial revision
glantau
parents:
diff changeset
92 (src_pos >> POS_FRAC_BITS) > (src_width - NB_TAPS))
653
714795876872 Change abort() calls to av_abort() calls.
philipjsg
parents: 644
diff changeset
93 av_abort();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
94 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
95 s = src + (src_pos >> POS_FRAC_BITS);
986e461dc072 Initial revision
glantau
parents:
diff changeset
96 phase = get_phase(src_pos);
986e461dc072 Initial revision
glantau
parents:
diff changeset
97 filter = filters + phase * NB_TAPS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
98 #if NB_TAPS == 4
986e461dc072 Initial revision
glantau
parents:
diff changeset
99 sum = s[0] * filter[0] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
100 s[1] * filter[1] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
101 s[2] * filter[2] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
102 s[3] * filter[3];
986e461dc072 Initial revision
glantau
parents:
diff changeset
103 #else
986e461dc072 Initial revision
glantau
parents:
diff changeset
104 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
105 int j;
986e461dc072 Initial revision
glantau
parents:
diff changeset
106 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
107 for(j=0;j<NB_TAPS;j++)
986e461dc072 Initial revision
glantau
parents:
diff changeset
108 sum += s[j] * filter[j];
986e461dc072 Initial revision
glantau
parents:
diff changeset
109 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
110 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
111 sum = sum >> FILTER_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
112 if (sum < 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
113 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
114 else if (sum > 255)
986e461dc072 Initial revision
glantau
parents:
diff changeset
115 sum = 255;
986e461dc072 Initial revision
glantau
parents:
diff changeset
116 dst[0] = sum;
986e461dc072 Initial revision
glantau
parents:
diff changeset
117 src_pos += src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
118 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
119 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
120 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
121
986e461dc072 Initial revision
glantau
parents:
diff changeset
122 /* This function must be optimized */
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
123 static void v_resample(uint8_t *dst, int dst_width, const uint8_t *src,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
124 int wrap, int16_t *filter)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
125 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
126 int sum, i;
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
127 const uint8_t *s;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
128
986e461dc072 Initial revision
glantau
parents:
diff changeset
129 s = src;
986e461dc072 Initial revision
glantau
parents:
diff changeset
130 for(i=0;i<dst_width;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
131 #if NB_TAPS == 4
986e461dc072 Initial revision
glantau
parents:
diff changeset
132 sum = s[0 * wrap] * filter[0] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
133 s[1 * wrap] * filter[1] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
134 s[2 * wrap] * filter[2] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
135 s[3 * wrap] * filter[3];
986e461dc072 Initial revision
glantau
parents:
diff changeset
136 #else
986e461dc072 Initial revision
glantau
parents:
diff changeset
137 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
138 int j;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
139 uint8_t *s1 = s;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
140
986e461dc072 Initial revision
glantau
parents:
diff changeset
141 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
142 for(j=0;j<NB_TAPS;j++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
143 sum += s1[0] * filter[j];
986e461dc072 Initial revision
glantau
parents:
diff changeset
144 s1 += wrap;
986e461dc072 Initial revision
glantau
parents:
diff changeset
145 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
146 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
147 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
148 sum = sum >> FILTER_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
149 if (sum < 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
150 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
151 else if (sum > 255)
986e461dc072 Initial revision
glantau
parents:
diff changeset
152 sum = 255;
986e461dc072 Initial revision
glantau
parents:
diff changeset
153 dst[0] = sum;
986e461dc072 Initial revision
glantau
parents:
diff changeset
154 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
155 s++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
156 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
157 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
158
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8430
diff changeset
159 #if HAVE_MMX
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
160
8430
7768bdfd4f7b Rename libavcodec/i386/ --> libavcodec/x86/.
diego
parents: 8316
diff changeset
161 #include "x86/mmx.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
162
986e461dc072 Initial revision
glantau
parents:
diff changeset
163 #define FILTER4(reg) \
986e461dc072 Initial revision
glantau
parents:
diff changeset
164 {\
986e461dc072 Initial revision
glantau
parents:
diff changeset
165 s = src + (src_pos >> POS_FRAC_BITS);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
166 phase = get_phase(src_pos);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
167 filter = filters + phase * NB_TAPS;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
168 movq_m2r(*s, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
169 punpcklbw_r2r(mm7, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
170 movq_m2r(*filter, mm6);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
171 pmaddwd_r2r(reg, mm6);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
172 movq_r2r(mm6, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
173 psrlq_i2r(32, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
174 paddd_r2r(mm6, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
175 psrad_i2r(FILTER_BITS, reg);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
176 src_pos += src_incr;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
177 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
178
4122
daae66c03857 Replace most of the %lld and %llx by their (cleaner) PRI*64 counterparts.
diego
parents: 4105
diff changeset
179 #define DUMP(reg) movq_r2m(reg, tmp); printf(#reg "=%016"PRIx64"\n", tmp.uq);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
180
986e461dc072 Initial revision
glantau
parents:
diff changeset
181 /* 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
182 static void h_resample_fast4_mmx(uint8_t *dst, int dst_width,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
183 const uint8_t *src, int src_width,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
184 int src_start, int src_incr, int16_t *filters)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
185 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
186 int src_pos, phase;
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
187 const uint8_t *s;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
188 int16_t *filter;
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
189 uint64_t tmp;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
190
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
191 src_pos = src_start;
986e461dc072 Initial revision
glantau
parents:
diff changeset
192 pxor_r2r(mm7, mm7);
986e461dc072 Initial revision
glantau
parents:
diff changeset
193
986e461dc072 Initial revision
glantau
parents:
diff changeset
194 while (dst_width >= 4) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
195
986e461dc072 Initial revision
glantau
parents:
diff changeset
196 FILTER4(mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
197 FILTER4(mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
198 FILTER4(mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
199 FILTER4(mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
200
986e461dc072 Initial revision
glantau
parents:
diff changeset
201 packuswb_r2r(mm7, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
202 packuswb_r2r(mm7, mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
203 packuswb_r2r(mm7, mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
204 packuswb_r2r(mm7, mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
205 movq_r2m(mm0, tmp);
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
206 dst[0] = tmp & 0xFF;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
207 movq_r2m(mm1, tmp);
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
208 dst[1] = tmp & 0xFF;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
209 movq_r2m(mm2, tmp);
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
210 dst[2] = tmp & 0xFF;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
211 movq_r2m(mm3, tmp);
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
212 dst[3] = tmp & 0xFF;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
213 dst += 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
214 dst_width -= 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
215 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
216 while (dst_width > 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
217 FILTER4(mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
218 packuswb_r2r(mm7, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
219 movq_r2m(mm0, tmp);
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
220 dst[0] = tmp & 0xFF;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
221 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
222 dst_width--;
986e461dc072 Initial revision
glantau
parents:
diff changeset
223 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
224 emms();
986e461dc072 Initial revision
glantau
parents:
diff changeset
225 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
226
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
227 static void v_resample4_mmx(uint8_t *dst, int dst_width, const uint8_t *src,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
228 int wrap, int16_t *filter)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
229 {
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
230 int sum, i;
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
231 const uint8_t *s;
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
232 uint64_t tmp;
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
233 uint64_t coefs[4];
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
234
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
235 for(i=0;i<4;i++) {
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
236 tmp = filter[i];
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
237 coefs[i] = (tmp<<48) + (tmp<<32) + (tmp<<16) + tmp;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
238 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
239
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
240 pxor_r2r(mm7, mm7);
986e461dc072 Initial revision
glantau
parents:
diff changeset
241 s = src;
986e461dc072 Initial revision
glantau
parents:
diff changeset
242 while (dst_width >= 4) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
243 movq_m2r(s[0 * wrap], mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
244 punpcklbw_r2r(mm7, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
245 movq_m2r(s[1 * wrap], mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
246 punpcklbw_r2r(mm7, mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
247 movq_m2r(s[2 * wrap], mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
248 punpcklbw_r2r(mm7, mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
249 movq_m2r(s[3 * wrap], mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
250 punpcklbw_r2r(mm7, mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
251
986e461dc072 Initial revision
glantau
parents:
diff changeset
252 pmullw_m2r(coefs[0], mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
253 pmullw_m2r(coefs[1], mm1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
254 pmullw_m2r(coefs[2], mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
255 pmullw_m2r(coefs[3], mm3);
986e461dc072 Initial revision
glantau
parents:
diff changeset
256
986e461dc072 Initial revision
glantau
parents:
diff changeset
257 paddw_r2r(mm1, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
258 paddw_r2r(mm3, mm2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
259 paddw_r2r(mm2, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
260 psraw_i2r(FILTER_BITS, mm0);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
261
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
262 packuswb_r2r(mm7, mm0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
263 movq_r2m(mm0, tmp);
986e461dc072 Initial revision
glantau
parents:
diff changeset
264
8316
589f9a71df95 Get rid of mmx_t.
aurel
parents: 8313
diff changeset
265 *(uint32_t *)dst = tmp & 0xFFFFFFFF;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
266 dst += 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
267 s += 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
268 dst_width -= 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
269 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
270 while (dst_width > 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
271 sum = s[0 * wrap] * filter[0] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
272 s[1 * wrap] * filter[1] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
273 s[2 * wrap] * filter[2] +
986e461dc072 Initial revision
glantau
parents:
diff changeset
274 s[3 * wrap] * filter[3];
986e461dc072 Initial revision
glantau
parents:
diff changeset
275 sum = sum >> FILTER_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
276 if (sum < 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
277 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
278 else if (sum > 255)
986e461dc072 Initial revision
glantau
parents:
diff changeset
279 sum = 255;
986e461dc072 Initial revision
glantau
parents:
diff changeset
280 dst[0] = sum;
986e461dc072 Initial revision
glantau
parents:
diff changeset
281 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
282 s++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
283 dst_width--;
986e461dc072 Initial revision
glantau
parents:
diff changeset
284 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
285 emms();
986e461dc072 Initial revision
glantau
parents:
diff changeset
286 }
5054
6e7e23b6615d Add explanatory comments to some #endifs.
diego
parents: 4624
diff changeset
287 #endif /* HAVE_MMX */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
288
5963
80103098c797 spelling
vitor
parents: 5750
diff changeset
289 /* slow version to handle limit cases. Does not need optimization */
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
290 static void h_resample_slow(uint8_t *dst, int dst_width,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
291 const uint8_t *src, int src_width,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
292 int src_start, int src_incr, int16_t *filters)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
293 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
294 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
295 const uint8_t *s, *src_end;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
296 int16_t *filter;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
297
986e461dc072 Initial revision
glantau
parents:
diff changeset
298 src_end = src + src_width;
986e461dc072 Initial revision
glantau
parents:
diff changeset
299 src_pos = src_start;
986e461dc072 Initial revision
glantau
parents:
diff changeset
300 for(i=0;i<dst_width;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
301 s = src + (src_pos >> POS_FRAC_BITS);
986e461dc072 Initial revision
glantau
parents:
diff changeset
302 phase = get_phase(src_pos);
986e461dc072 Initial revision
glantau
parents:
diff changeset
303 filter = filters + phase * NB_TAPS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
304 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
305 for(j=0;j<NB_TAPS;j++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
306 if (s < src)
986e461dc072 Initial revision
glantau
parents:
diff changeset
307 v = src[0];
986e461dc072 Initial revision
glantau
parents:
diff changeset
308 else if (s >= src_end)
986e461dc072 Initial revision
glantau
parents:
diff changeset
309 v = src_end[-1];
986e461dc072 Initial revision
glantau
parents:
diff changeset
310 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
311 v = s[0];
986e461dc072 Initial revision
glantau
parents:
diff changeset
312 sum += v * filter[j];
986e461dc072 Initial revision
glantau
parents:
diff changeset
313 s++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
314 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
315 sum = sum >> FILTER_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
316 if (sum < 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
317 sum = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
318 else if (sum > 255)
986e461dc072 Initial revision
glantau
parents:
diff changeset
319 sum = 255;
986e461dc072 Initial revision
glantau
parents:
diff changeset
320 dst[0] = sum;
986e461dc072 Initial revision
glantau
parents:
diff changeset
321 src_pos += src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
322 dst++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
323 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
324 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
325
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
326 static void h_resample(uint8_t *dst, int dst_width, const uint8_t *src,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
327 int src_width, int src_start, int src_incr,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
328 int16_t *filters)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
329 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
330 int n, src_end;
986e461dc072 Initial revision
glantau
parents:
diff changeset
331
986e461dc072 Initial revision
glantau
parents:
diff changeset
332 if (src_start < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
333 n = (0 - src_start + src_incr - 1) / src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
334 h_resample_slow(dst, n, src, src_width, src_start, src_incr, filters);
986e461dc072 Initial revision
glantau
parents:
diff changeset
335 dst += n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
336 dst_width -= n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
337 src_start += n * src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
338 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
339 src_end = src_start + dst_width * src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
340 if (src_end > ((src_width - NB_TAPS) << POS_FRAC_BITS)) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
341 n = (((src_width - NB_TAPS + 1) << POS_FRAC_BITS) - 1 - src_start) /
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
342 src_incr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
343 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
344 n = dst_width;
986e461dc072 Initial revision
glantau
parents:
diff changeset
345 }
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8430
diff changeset
346 #if HAVE_MMX
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8042
diff changeset
347 if ((mm_flags & FF_MM_MMX) && NB_TAPS == 4)
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
348 h_resample_fast4_mmx(dst, n,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
349 src, src_width, src_start, src_incr, filters);
986e461dc072 Initial revision
glantau
parents:
diff changeset
350 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
351 #endif
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
352 h_resample_fast(dst, n,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
353 src, src_width, src_start, src_incr, filters);
986e461dc072 Initial revision
glantau
parents:
diff changeset
354 if (n < dst_width) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
355 dst += n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
356 dst_width -= n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
357 src_start += n * src_incr;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
358 h_resample_slow(dst, dst_width,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
359 src, src_width, src_start, src_incr, filters);
986e461dc072 Initial revision
glantau
parents:
diff changeset
360 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
361 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
362
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
363 static void component_resample(ImgReSampleContext *s,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
364 uint8_t *output, int owrap, int owidth, int oheight,
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
365 uint8_t *input, int iwrap, int iwidth, int iheight)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
366 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
367 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
368 uint8_t *new_line, *src_line;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
369
986e461dc072 Initial revision
glantau
parents:
diff changeset
370 last_src_y = - FCENTER - 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
371 /* position of the bottom of the filter in the source image */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
372 src_y = (last_src_y + NB_TAPS) * POS_FRAC;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
373 ring_y = NB_TAPS; /* position in ring buffer */
986e461dc072 Initial revision
glantau
parents:
diff changeset
374 for(y=0;y<oheight;y++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
375 /* apply horizontal filter on new lines from input if needed */
986e461dc072 Initial revision
glantau
parents:
diff changeset
376 src_y1 = src_y >> POS_FRAC_BITS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
377 while (last_src_y < src_y1) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
378 if (++ring_y >= LINE_BUF_HEIGHT + NB_TAPS)
986e461dc072 Initial revision
glantau
parents:
diff changeset
379 ring_y = NB_TAPS;
986e461dc072 Initial revision
glantau
parents:
diff changeset
380 last_src_y++;
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
381 /* 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
382 inefficient because we filter multiple times) */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
383 y1 = last_src_y;
986e461dc072 Initial revision
glantau
parents:
diff changeset
384 if (y1 < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
385 y1 = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
386 } else if (y1 >= iheight) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
387 y1 = iheight - 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
388 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
389 src_line = input + y1 * iwrap;
986e461dc072 Initial revision
glantau
parents:
diff changeset
390 new_line = s->line_buf + ring_y * owidth;
986e461dc072 Initial revision
glantau
parents:
diff changeset
391 /* apply filter and handle limit cases correctly */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
392 h_resample(new_line, owidth,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
393 src_line, iwidth, - FCENTER * POS_FRAC, s->h_incr,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
394 &s->h_filters[0][0]);
6055
bc22d052c6e5 comment typo fixes
diego
parents: 5963
diff changeset
395 /* handle ring buffer wrapping */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
396 if (ring_y >= LINE_BUF_HEIGHT) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
397 memcpy(s->line_buf + (ring_y - LINE_BUF_HEIGHT) * owidth,
986e461dc072 Initial revision
glantau
parents:
diff changeset
398 new_line, owidth);
986e461dc072 Initial revision
glantau
parents:
diff changeset
399 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
400 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
401 /* apply vertical filter */
986e461dc072 Initial revision
glantau
parents:
diff changeset
402 phase_y = get_phase(src_y);
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8430
diff changeset
403 #if HAVE_MMX
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
404 /* desactivated MMX because loss of precision */
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8042
diff changeset
405 if ((mm_flags & FF_MM_MMX) && NB_TAPS == 4 && 0)
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
406 v_resample4_mmx(output, owidth,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
407 s->line_buf + (ring_y - NB_TAPS + 1) * owidth, owidth,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
408 &s->v_filters[phase_y][0]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
409 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
410 #endif
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8430
diff changeset
411 #if HAVE_ALTIVEC
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8042
diff changeset
412 if ((mm_flags & FF_MM_ALTIVEC) && NB_TAPS == 4 && FILTER_BITS <= 6)
7863
4ce4a18cae8e cosmetics: Fix indentation.
diego
parents: 7823
diff changeset
413 v_resample16_altivec(output, owidth,
4ce4a18cae8e cosmetics: Fix indentation.
diego
parents: 7823
diff changeset
414 s->line_buf + (ring_y - NB_TAPS + 1) * owidth,
4ce4a18cae8e cosmetics: Fix indentation.
diego
parents: 7823
diff changeset
415 owidth, &s->v_filters[phase_y][0]);
894
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
416 else
a408778eff87 altivec accelerated v-resample patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents: 653
diff changeset
417 #endif
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
418 v_resample(output, owidth,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
419 s->line_buf + (ring_y - NB_TAPS + 1) * owidth, owidth,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
420 &s->v_filters[phase_y][0]);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
421
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
422 src_y += s->v_incr;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
423
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
424 output += owrap;
986e461dc072 Initial revision
glantau
parents:
diff changeset
425 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
426 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
427
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
428 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
429 int iwidth, int iheight,
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
430 int topBand, int bottomBand,
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
431 int leftBand, int rightBand,
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
432 int padtop, int padbottom,
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
433 int padleft, int padright)
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
434 {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
435 ImgReSampleContext *s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
436
2904
84404858c529 sanity check whether dimensions are non-null
alex
parents: 2846
diff changeset
437 if (!owidth || !oheight || !iwidth || !iheight)
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
438 return NULL;
2904
84404858c529 sanity check whether dimensions are non-null
alex
parents: 2846
diff changeset
439
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
440 s = av_mallocz(sizeof(ImgReSampleContext));
986e461dc072 Initial revision
glantau
parents:
diff changeset
441 if (!s)
986e461dc072 Initial revision
glantau
parents:
diff changeset
442 return NULL;
2422
18b8b2dcc037 various security fixes and precautionary checks
michael
parents: 2400
diff changeset
443 if((unsigned)owidth >= UINT_MAX / (LINE_BUF_HEIGHT + NB_TAPS))
6912
941a4e753961 memleak / fixes CID118
michael
parents: 6764
diff changeset
444 goto fail;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
445 s->line_buf = av_mallocz(owidth * (LINE_BUF_HEIGHT + NB_TAPS));
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
446 if (!s->line_buf)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
447 goto fail;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
448
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
449 s->owidth = owidth;
986e461dc072 Initial revision
glantau
parents:
diff changeset
450 s->oheight = oheight;
986e461dc072 Initial revision
glantau
parents:
diff changeset
451 s->iwidth = iwidth;
986e461dc072 Initial revision
glantau
parents:
diff changeset
452 s->iheight = iheight;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
453
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
454 s->topBand = topBand;
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
455 s->bottomBand = bottomBand;
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
456 s->leftBand = leftBand;
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
457 s->rightBand = rightBand;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
458
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
459 s->padtop = padtop;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
460 s->padbottom = padbottom;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
461 s->padleft = padleft;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
462 s->padright = padright;
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
463
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
464 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
465 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
466
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
467 s->h_incr = ((iwidth - leftBand - rightBand) * POS_FRAC) / s->pad_owidth;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
468 s->v_incr = ((iheight - topBand - bottomBand) * POS_FRAC) / s->pad_oheight;
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
469
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
470 av_build_filter(&s->h_filters[0][0], (float) s->pad_owidth /
2082
3dc9bbe1b152 polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample filters
michael
parents: 2064
diff changeset
471 (float) (iwidth - leftBand - rightBand), NB_TAPS, NB_PHASES, 1<<FILTER_BITS, 0);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
472 av_build_filter(&s->v_filters[0][0], (float) s->pad_oheight /
2082
3dc9bbe1b152 polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample filters
michael
parents: 2064
diff changeset
473 (float) (iheight - topBand - bottomBand), NB_TAPS, NB_PHASES, 1<<FILTER_BITS, 0);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
474
986e461dc072 Initial revision
glantau
parents:
diff changeset
475 return s;
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
476 fail:
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 18
diff changeset
477 av_free(s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
478 return NULL;
986e461dc072 Initial revision
glantau
parents:
diff changeset
479 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
480
7823
4525dcd81357 Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 6974
diff changeset
481 ImgReSampleContext *img_resample_init(int owidth, int oheight,
4525dcd81357 Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 6974
diff changeset
482 int iwidth, int iheight)
4525dcd81357 Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 6974
diff changeset
483 {
4525dcd81357 Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 6974
diff changeset
484 return img_resample_full_init(owidth, oheight, iwidth, iheight,
4525dcd81357 Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 6974
diff changeset
485 0, 0, 0, 0, 0, 0, 0, 0);
4525dcd81357 Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 6974
diff changeset
486 }
4525dcd81357 Bump Major version, this commit is almost just renaming bits_per_sample to
michael
parents: 6974
diff changeset
487
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
488 void img_resample(ImgReSampleContext *s,
1488
766a2f4edbea avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents: 1106
diff changeset
489 AVPicture *output, const AVPicture *input)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
490 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
491 int i, shift;
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
492 uint8_t* optr;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
493
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
494 for (i=0;i<3;i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
495 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
496
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
497 optr = output->data[i] + (((output->linesize[i] *
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
498 s->padtop) + s->padleft) >> shift);
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
499
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
500 component_resample(s, optr, output->linesize[i],
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
501 s->pad_owidth >> shift, s->pad_oheight >> shift,
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
502 input->data[i] + (input->linesize[i] *
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
503 (s->topBand >> shift)) + (s->leftBand >> shift),
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
504 input->linesize[i], ((s->iwidth - s->leftBand -
1928
0c23a5564489 padding support in ffmpeg patch by (Todd Kirby <doubleshot at pacbell dot net>)
michael
parents: 1488
diff changeset
505 s->rightBand) >> shift),
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
506 (s->iheight - s->topBand - s->bottomBand) >> shift);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
507 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
508 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
509
986e461dc072 Initial revision
glantau
parents:
diff changeset
510 void img_resample_close(ImgReSampleContext *s)
986e461dc072 Initial revision
glantau
parents:
diff changeset
511 {
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 18
diff changeset
512 av_free(s->line_buf);
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 18
diff changeset
513 av_free(s);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
514 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
515
6974
ccb0813842ea add context_to_name func for logging
bcoudurier
parents: 6962
diff changeset
516 static const char *context_to_name(void* ptr)
ccb0813842ea add context_to_name func for logging
bcoudurier
parents: 6962
diff changeset
517 {
ccb0813842ea add context_to_name func for logging
bcoudurier
parents: 6962
diff changeset
518 return "imgconvert";
ccb0813842ea add context_to_name func for logging
bcoudurier
parents: 6962
diff changeset
519 }
ccb0813842ea add context_to_name func for logging
bcoudurier
parents: 6962
diff changeset
520
ccb0813842ea add context_to_name func for logging
bcoudurier
parents: 6962
diff changeset
521 static const AVClass context_class = { "imgresample", context_to_name, NULL };
6433
d42d5a90f7de Provide non null class name to avoid crash with ffmpeg -h.
michael
parents: 6055
diff changeset
522
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
523 struct SwsContext *sws_getContext(int srcW, int srcH, int srcFormat,
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
524 int dstW, int dstH, int dstFormat,
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
525 int flags, SwsFilter *srcFilter,
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
526 SwsFilter *dstFilter, double *param)
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
527 {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
528 struct SwsContext *ctx;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
529
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
530 ctx = av_malloc(sizeof(struct SwsContext));
6433
d42d5a90f7de Provide non null class name to avoid crash with ffmpeg -h.
michael
parents: 6055
diff changeset
531 if (!ctx) {
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
532 av_log(NULL, AV_LOG_ERROR, "Cannot allocate a resampling context!\n");
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
533
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
534 return NULL;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
535 }
6433
d42d5a90f7de Provide non null class name to avoid crash with ffmpeg -h.
michael
parents: 6055
diff changeset
536 ctx->av_class = &context_class;
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
537
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
538 if ((srcH != dstH) || (srcW != dstW)) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
539 if ((srcFormat != PIX_FMT_YUV420P) || (dstFormat != PIX_FMT_YUV420P)) {
6962
c4e281443310 give context to av_log
bcoudurier
parents: 6912
diff changeset
540 av_log(ctx, AV_LOG_INFO, "PIX_FMT_YUV420P will be used as an intermediate format for rescaling\n");
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
541 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
542 ctx->resampling_ctx = img_resample_init(dstW, dstH, srcW, srcH);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
543 } else {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
544 ctx->resampling_ctx = av_malloc(sizeof(ImgReSampleContext));
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
545 ctx->resampling_ctx->iheight = srcH;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
546 ctx->resampling_ctx->iwidth = srcW;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
547 ctx->resampling_ctx->oheight = dstH;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
548 ctx->resampling_ctx->owidth = dstW;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
549 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
550 ctx->src_pix_fmt = srcFormat;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
551 ctx->dst_pix_fmt = dstFormat;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
552
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
553 return ctx;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
554 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
555
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
556 void sws_freeContext(struct SwsContext *ctx)
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
557 {
4357
1654075b205c fix segfault with http://sam.zoy.org/zzuf/lol-ffplay.ogm and
takis
parents: 4197
diff changeset
558 if (!ctx)
1654075b205c fix segfault with http://sam.zoy.org/zzuf/lol-ffplay.ogm and
takis
parents: 4197
diff changeset
559 return;
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
560 if ((ctx->resampling_ctx->iwidth != ctx->resampling_ctx->owidth) ||
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
561 (ctx->resampling_ctx->iheight != ctx->resampling_ctx->oheight)) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
562 img_resample_close(ctx->resampling_ctx);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
563 } else {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
564 av_free(ctx->resampling_ctx);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
565 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
566 av_free(ctx);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
567 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
568
4036
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
569
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
570 /**
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
571 * Checks if context is valid or reallocs a new one instead.
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
572 * If context is NULL, just calls sws_getContext() to get a new one.
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
573 * Otherwise, checks if the parameters are the same already saved in context.
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
574 * If that is the case, returns the current context.
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
575 * Otherwise, frees context and gets a new one.
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
576 *
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
577 * Be warned that srcFilter, dstFilter are not checked, they are
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
578 * asumed to remain valid.
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
579 */
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
580 struct SwsContext *sws_getCachedContext(struct SwsContext *ctx,
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
581 int srcW, int srcH, int srcFormat,
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
582 int dstW, int dstH, int dstFormat, int flags,
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
583 SwsFilter *srcFilter, SwsFilter *dstFilter, double *param)
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
584 {
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
585 if (ctx != NULL) {
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
586 if ((ctx->resampling_ctx->iwidth != srcW) ||
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
587 (ctx->resampling_ctx->iheight != srcH) ||
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
588 (ctx->src_pix_fmt != srcFormat) ||
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
589 (ctx->resampling_ctx->owidth != dstW) ||
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
590 (ctx->resampling_ctx->oheight != dstH) ||
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
591 (ctx->dst_pix_fmt != dstFormat))
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
592 {
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
593 sws_freeContext(ctx);
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
594 ctx = NULL;
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
595 }
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
596 }
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
597 if (ctx == NULL) {
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
598 return sws_getContext(srcW, srcH, srcFormat,
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
599 dstW, dstH, dstFormat, flags,
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
600 srcFilter, dstFilter, param);
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
601 }
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
602 return ctx;
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
603 }
207c22206d53 Implement sws_getCachedContext() in swscale emulation
lucabe
parents: 3947
diff changeset
604
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
605 int sws_scale(struct SwsContext *ctx, uint8_t* src[], int srcStride[],
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
606 int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[])
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
607 {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
608 AVPicture src_pict, dst_pict;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
609 int i, res = 0;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
610 AVPicture picture_format_temp;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
611 AVPicture picture_resample_temp, *formatted_picture, *resampled_picture;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
612 uint8_t *buf1 = NULL, *buf2 = NULL;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
613 enum PixelFormat current_pix_fmt;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
614
4105
225d287b337f AVPicture has 4 planes, not 3
lucabe
parents: 4065
diff changeset
615 for (i = 0; i < 4; i++) {
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
616 src_pict.data[i] = src[i];
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
617 src_pict.linesize[i] = srcStride[i];
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
618 dst_pict.data[i] = dst[i];
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
619 dst_pict.linesize[i] = dstStride[i];
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
620 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
621 if ((ctx->resampling_ctx->iwidth != ctx->resampling_ctx->owidth) ||
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
622 (ctx->resampling_ctx->iheight != ctx->resampling_ctx->oheight)) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
623 /* We have to rescale the picture, but only YUV420P rescaling is supported... */
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
624
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
625 if (ctx->src_pix_fmt != PIX_FMT_YUV420P) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
626 int size;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
627
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
628 /* create temporary picture for rescaling input*/
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
629 size = avpicture_get_size(PIX_FMT_YUV420P, ctx->resampling_ctx->iwidth, ctx->resampling_ctx->iheight);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
630 buf1 = av_malloc(size);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
631 if (!buf1) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
632 res = -1;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
633 goto the_end;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
634 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
635 formatted_picture = &picture_format_temp;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
636 avpicture_fill((AVPicture*)formatted_picture, buf1,
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
637 PIX_FMT_YUV420P, ctx->resampling_ctx->iwidth, ctx->resampling_ctx->iheight);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
638
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
639 if (img_convert((AVPicture*)formatted_picture, PIX_FMT_YUV420P,
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
640 &src_pict, ctx->src_pix_fmt,
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
641 ctx->resampling_ctx->iwidth, ctx->resampling_ctx->iheight) < 0) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
642
6962
c4e281443310 give context to av_log
bcoudurier
parents: 6912
diff changeset
643 av_log(ctx, AV_LOG_ERROR, "pixel format conversion not handled\n");
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
644 res = -1;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
645 goto the_end;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
646 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
647 } else {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
648 formatted_picture = &src_pict;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
649 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
650
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
651 if (ctx->dst_pix_fmt != PIX_FMT_YUV420P) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
652 int size;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
653
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
654 /* create temporary picture for rescaling output*/
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
655 size = avpicture_get_size(PIX_FMT_YUV420P, ctx->resampling_ctx->owidth, ctx->resampling_ctx->oheight);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
656 buf2 = av_malloc(size);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
657 if (!buf2) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
658 res = -1;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
659 goto the_end;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
660 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
661 resampled_picture = &picture_resample_temp;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
662 avpicture_fill((AVPicture*)resampled_picture, buf2,
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
663 PIX_FMT_YUV420P, ctx->resampling_ctx->owidth, ctx->resampling_ctx->oheight);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
664
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
665 } else {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
666 resampled_picture = &dst_pict;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
667 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
668
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
669 /* ...and finally rescale!!! */
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
670 img_resample(ctx->resampling_ctx, resampled_picture, formatted_picture);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
671 current_pix_fmt = PIX_FMT_YUV420P;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
672 } else {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
673 resampled_picture = &src_pict;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
674 current_pix_fmt = ctx->src_pix_fmt;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
675 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
676
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
677 if (current_pix_fmt != ctx->dst_pix_fmt) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
678 if (img_convert(&dst_pict, ctx->dst_pix_fmt,
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
679 resampled_picture, current_pix_fmt,
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
680 ctx->resampling_ctx->owidth, ctx->resampling_ctx->oheight) < 0) {
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
681
6962
c4e281443310 give context to av_log
bcoudurier
parents: 6912
diff changeset
682 av_log(ctx, AV_LOG_ERROR, "pixel format conversion not handled\n");
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
683
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
684 res = -1;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
685 goto the_end;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
686 }
3516
f60df50f50aa Fix a corner case in sws emulation
lucabe
parents: 3249
diff changeset
687 } else if (resampled_picture != &dst_pict) {
4624
6a900f539e2c Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents: 4357
diff changeset
688 av_picture_copy(&dst_pict, resampled_picture, current_pix_fmt,
3516
f60df50f50aa Fix a corner case in sws emulation
lucabe
parents: 3249
diff changeset
689 ctx->resampling_ctx->owidth, ctx->resampling_ctx->oheight);
3249
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
690 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
691
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
692 the_end:
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
693 av_free(buf1);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
694 av_free(buf2);
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
695 return res;
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
696 }
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
697
ad3d12d04645 Introduce swscale interface in libavcodec
lucabe
parents: 3089
diff changeset
698
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
699 #ifdef TEST
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
700 #include <stdio.h>
5055
4ffb80ba1d2a Fix imgresample-test linking.
diego
parents: 5054
diff changeset
701 #undef exit
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
702
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
703 /* input */
986e461dc072 Initial revision
glantau
parents:
diff changeset
704 #define XSIZE 256
986e461dc072 Initial revision
glantau
parents:
diff changeset
705 #define YSIZE 256
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
706 uint8_t img[XSIZE * YSIZE];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
707
986e461dc072 Initial revision
glantau
parents:
diff changeset
708 /* output */
986e461dc072 Initial revision
glantau
parents:
diff changeset
709 #define XSIZE1 512
986e461dc072 Initial revision
glantau
parents:
diff changeset
710 #define YSIZE1 512
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
711 uint8_t img1[XSIZE1 * YSIZE1];
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
712 uint8_t img2[XSIZE1 * YSIZE1];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
713
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
714 void save_pgm(const char *filename, uint8_t *img, int xsize, int ysize)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
715 {
2846
40765c51a7a9 Compilation fixes part 1 patch by (Arvind R. and Burkhard Plaum, plaum, ipf uni-stuttgart de)
michael
parents: 2423
diff changeset
716 #undef fprintf
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
717 FILE *f;
986e461dc072 Initial revision
glantau
parents:
diff changeset
718 f=fopen(filename,"w");
986e461dc072 Initial revision
glantau
parents:
diff changeset
719 fprintf(f,"P5\n%d %d\n%d\n", xsize, ysize, 255);
986e461dc072 Initial revision
glantau
parents:
diff changeset
720 fwrite(img,1, xsize * ysize,f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
721 fclose(f);
2846
40765c51a7a9 Compilation fixes part 1 patch by (Arvind R. and Burkhard Plaum, plaum, ipf uni-stuttgart de)
michael
parents: 2423
diff changeset
722 #define fprintf please_use_av_log
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
723 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
724
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
725 static void dump_filter(int16_t *filter)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
726 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
727 int i, ph;
986e461dc072 Initial revision
glantau
parents:
diff changeset
728
986e461dc072 Initial revision
glantau
parents:
diff changeset
729 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
730 av_log(NULL, AV_LOG_INFO, "%2d: ", ph);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
731 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
732 av_log(NULL, AV_LOG_INFO, " %5.2f", filter[ph * NB_TAPS + i] / 256.0);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
733 }
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
734 av_log(NULL, AV_LOG_INFO, "\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
735 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
736 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
737
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8430
diff changeset
738 #if HAVE_MMX
644
641708b5c33c fixing tests
michaelni
parents: 630
diff changeset
739 int mm_flags;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
740 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
741
986e461dc072 Initial revision
glantau
parents:
diff changeset
742 int main(int argc, char **argv)
986e461dc072 Initial revision
glantau
parents:
diff changeset
743 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
744 int x, y, v, i, xsize, ysize;
986e461dc072 Initial revision
glantau
parents:
diff changeset
745 ImgReSampleContext *s;
986e461dc072 Initial revision
glantau
parents:
diff changeset
746 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
747 char buf[256];
986e461dc072 Initial revision
glantau
parents:
diff changeset
748
986e461dc072 Initial revision
glantau
parents:
diff changeset
749 /* build test image */
986e461dc072 Initial revision
glantau
parents:
diff changeset
750 for(y=0;y<YSIZE;y++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
751 for(x=0;x<XSIZE;x++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
752 if (x < XSIZE/2 && y < YSIZE/2) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
753 if (x < XSIZE/4 && y < YSIZE/4) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
754 if ((x % 10) <= 6 &&
986e461dc072 Initial revision
glantau
parents:
diff changeset
755 (y % 10) <= 6)
986e461dc072 Initial revision
glantau
parents:
diff changeset
756 v = 0xff;
986e461dc072 Initial revision
glantau
parents:
diff changeset
757 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
758 v = 0x00;
986e461dc072 Initial revision
glantau
parents:
diff changeset
759 } else if (x < XSIZE/4) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
760 if (x & 1)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
761 v = 0xff;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
762 else
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
763 v = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
764 } else if (y < XSIZE/4) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
765 if (y & 1)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
766 v = 0xff;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
767 else
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
768 v = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
769 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
770 if (y < YSIZE*3/8) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
771 if ((y+x) & 1)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
772 v = 0xff;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2904
diff changeset
773 else
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
774 v = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
775 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
776 if (((x+3) % 4) <= 1 &&
986e461dc072 Initial revision
glantau
parents:
diff changeset
777 ((y+3) % 4) <= 1)
986e461dc072 Initial revision
glantau
parents:
diff changeset
778 v = 0xff;
986e461dc072 Initial revision
glantau
parents:
diff changeset
779 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
780 v = 0x00;
986e461dc072 Initial revision
glantau
parents:
diff changeset
781 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
782 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
783 } else if (x < XSIZE/2) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
784 v = ((x - (XSIZE/2)) * 255) / (XSIZE/2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
785 } else if (y < XSIZE/2) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
786 v = ((y - (XSIZE/2)) * 255) / (XSIZE/2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
787 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
788 v = ((x + y - XSIZE) * 255) / XSIZE;
986e461dc072 Initial revision
glantau
parents:
diff changeset
789 }
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
790 img[(YSIZE - y) * XSIZE + (XSIZE - x)] = v;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
791 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
792 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
793 save_pgm("/tmp/in.pgm", img, XSIZE, YSIZE);
8042
e70975d5ff80 uses FF_ARRAY_ELEMS() where appropriate
aurel
parents: 7863
diff changeset
794 for(i=0;i<FF_ARRAY_ELEMS(factors);i++) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
795 fact = factors[i];
986e461dc072 Initial revision
glantau
parents:
diff changeset
796 xsize = (int)(XSIZE * fact);
630
b4ee42142ad1 croping patch by (talus25 at speakeasy dot net) with fixes from atmos & me
michaelni
parents: 429
diff changeset
797 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
798 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
799 av_log(NULL, AV_LOG_INFO, "Factor=%0.2f\n", fact);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
800 dump_filter(&s->h_filters[0][0]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
801 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
802 img + 50 * XSIZE, XSIZE, XSIZE, YSIZE - 100);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
803 img_resample_close(s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
804
2423
87b7fbed8609 dissallow sprintf
michael
parents: 2422
diff changeset
805 snprintf(buf, sizeof(buf), "/tmp/out%d.pgm", i);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
806 save_pgm(buf, img1, xsize, ysize);
986e461dc072 Initial revision
glantau
parents:
diff changeset
807 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
808
986e461dc072 Initial revision
glantau
parents:
diff changeset
809 /* mmx test */
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8430
diff changeset
810 #if HAVE_MMX
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
811 av_log(NULL, AV_LOG_INFO, "MMX test\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
812 fact = 0.72;
986e461dc072 Initial revision
glantau
parents:
diff changeset
813 xsize = (int)(XSIZE * fact);
986e461dc072 Initial revision
glantau
parents:
diff changeset
814 ysize = (int)(YSIZE * fact);
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8042
diff changeset
815 mm_flags = FF_MM_MMX;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
816 s = img_resample_init(xsize, ysize, XSIZE, YSIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
817 component_resample(s, img1, xsize, xsize, ysize,
986e461dc072 Initial revision
glantau
parents:
diff changeset
818 img, XSIZE, XSIZE, YSIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
819
986e461dc072 Initial revision
glantau
parents:
diff changeset
820 mm_flags = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
821 s = img_resample_init(xsize, ysize, XSIZE, YSIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
822 component_resample(s, img2, xsize, xsize, ysize,
986e461dc072 Initial revision
glantau
parents:
diff changeset
823 img, XSIZE, XSIZE, YSIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
824 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
825 av_log(NULL, AV_LOG_ERROR, "mmx error\n");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
826 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
827 }
2400
17ec73c65748 imgresample test cleanup patch by (Panagiotis Issaris <takis )( lumumba d0t luc d0t ac.be>)
michael
parents: 2082
diff changeset
828 av_log(NULL, AV_LOG_INFO, "MMX OK\n");
5054
6e7e23b6615d Add explanatory comments to some #endifs.
diego
parents: 4624
diff changeset
829 #endif /* HAVE_MMX */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
830 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
831 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
832
5054
6e7e23b6615d Add explanatory comments to some #endifs.
diego
parents: 4624
diff changeset
833 #endif /* TEST */