ffmpeg / libswscale / swscale-test.c @ db46be01
History | View | Annotate | Download (12.9 KB)
1 | c9b99ea6 | Michael Niedermayer | /*
|
---|---|---|---|
2 | d026b45e | Diego Biurrun | * Copyright (C) 2003 Michael Niedermayer <michaelni@gmx.at>
|
3 | *
|
||
4 | 2912e87a | Mans Rullgard | * This file is part of Libav.
|
5 | d026b45e | Diego Biurrun | *
|
6 | 2912e87a | Mans Rullgard | * Libav is free software; you can redistribute it and/or
|
7 | 54e3ae2e | Diego Biurrun | * modify it under the terms of the GNU Lesser General Public
|
8 | * License as published by the Free Software Foundation; either
|
||
9 | * version 2.1 of the License, or (at your option) any later version.
|
||
10 | d026b45e | Diego Biurrun | *
|
11 | 2912e87a | Mans Rullgard | * Libav is distributed in the hope that it will be useful,
|
12 | d026b45e | Diego Biurrun | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | 54e3ae2e | Diego Biurrun | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | * Lesser General Public License for more details.
|
||
15 | d026b45e | Diego Biurrun | *
|
16 | 54e3ae2e | Diego Biurrun | * You should have received a copy of the GNU Lesser General Public
|
17 | 2912e87a | Mans Rullgard | * License along with Libav; if not, write to the Free Software
|
18 | b19bcbaa | Diego Biurrun | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
19 | d026b45e | Diego Biurrun | */
|
20 | c9b99ea6 | Michael Niedermayer | |
21 | #include <stdio.h> |
||
22 | #include <stdlib.h> |
||
23 | #include <string.h> |
||
24 | #include <inttypes.h> |
||
25 | #include <stdarg.h> |
||
26 | |||
27 | e9e12f0e | Luca Abeni | #undef HAVE_AV_CONFIG_H
|
28 | 737eb597 | Reinhard Tartler | #include "libavutil/imgutils.h" |
29 | 51d83986 | Måns Rullgård | #include "libavutil/mem.h" |
30 | 83da2c6f | Diego Biurrun | #include "libavutil/avutil.h" |
31 | 8d884020 | Ramiro Polla | #include "libavutil/crc.h" |
32 | 92bfd746 | Ramiro Polla | #include "libavutil/pixdesc.h" |
33 | 9a034dde | Ramiro Polla | #include "libavutil/lfg.h" |
34 | c9b99ea6 | Michael Niedermayer | #include "swscale.h" |
35 | |||
36 | 71ed6c8f | Ramiro Polla | /* HACK Duplicated from swscale_internal.h.
|
37 | * Should be removed when a cleaner pixel format system exists. */
|
||
38 | f5a9c4ee | Ramiro Polla | #define isGray(x) ( \
|
39 | (x)==PIX_FMT_GRAY8 \ |
||
40 | || (x)==PIX_FMT_GRAY16BE \ |
||
41 | || (x)==PIX_FMT_GRAY16LE \ |
||
42 | ) |
||
43 | a48ce2c3 | Ramiro Polla | #define hasChroma(x) (!( \
|
44 | d426ea20 | Ramiro Polla | isGray(x) \ |
45 | || (x)==PIX_FMT_MONOBLACK \ |
||
46 | || (x)==PIX_FMT_MONOWHITE \ |
||
47 | )) |
||
48 | 71ed6c8f | Ramiro Polla | #define isALPHA(x) ( \
|
49 | (x)==PIX_FMT_BGR32 \ |
||
50 | || (x)==PIX_FMT_BGR32_1 \ |
||
51 | || (x)==PIX_FMT_RGB32 \ |
||
52 | || (x)==PIX_FMT_RGB32_1 \ |
||
53 | || (x)==PIX_FMT_YUVA420P \ |
||
54 | ) |
||
55 | dc822901 | Diego Biurrun | |
56 | dd68318c | Ramiro Polla | static uint64_t getSSD(uint8_t *src1, uint8_t *src2, int stride1, int stride2, int w, int h) |
57 | { |
||
58 | 221b804f | Diego Biurrun | int x,y;
|
59 | uint64_t ssd=0;
|
||
60 | c9b99ea6 | Michael Niedermayer | |
61 | //printf("%d %d\n", w, h);
|
||
62 | 6a4970ab | Diego Biurrun | |
63 | dd68318c | Ramiro Polla | for (y=0; y<h; y++) { |
64 | for (x=0; x<w; x++) { |
||
65 | 221b804f | Diego Biurrun | int d= src1[x + y*stride1] - src2[x + y*stride2];
|
66 | ssd+= d*d; |
||
67 | c9b99ea6 | Michael Niedermayer | //printf("%d", abs(src1[x + y*stride1] - src2[x + y*stride2])/26 );
|
68 | 221b804f | Diego Biurrun | } |
69 | c9b99ea6 | Michael Niedermayer | //printf("\n");
|
70 | 221b804f | Diego Biurrun | } |
71 | return ssd;
|
||
72 | c9b99ea6 | Michael Niedermayer | } |
73 | |||
74 | 4bf44785 | Ramiro Polla | struct Results {
|
75 | uint64_t ssdY; |
||
76 | uint64_t ssdU; |
||
77 | uint64_t ssdV; |
||
78 | uint64_t ssdA; |
||
79 | uint32_t crc; |
||
80 | }; |
||
81 | |||
82 | c9b99ea6 | Michael Niedermayer | // test by ref -> src -> dst -> out & compare out against ref
|
83 | // ref & out are YV12
|
||
84 | 2d8d885b | Stefano Sabatini | static int doTest(uint8_t *ref[4], int refStride[4], int w, int h, |
85 | enum PixelFormat srcFormat, enum PixelFormat dstFormat, |
||
86 | 4bf44785 | Ramiro Polla | int srcW, int srcH, int dstW, int dstH, int flags, |
87 | struct Results *r)
|
||
88 | dd68318c | Ramiro Polla | { |
89 | 3e1e7800 | Ramiro Polla | static enum PixelFormat cur_srcFormat; |
90 | 6bbae4c8 | Ramiro Polla | static int cur_srcW, cur_srcH; |
91 | 3e1e7800 | Ramiro Polla | static uint8_t *src[4]; |
92 | static int srcStride[4]; |
||
93 | 1cd98da8 | Benoit Fouet | uint8_t *dst[4] = {0}; |
94 | uint8_t *out[4] = {0}; |
||
95 | 73016d29 | Ramiro Polla | int dstStride[4]; |
96 | 221b804f | Diego Biurrun | int i;
|
97 | f5a9c4ee | Ramiro Polla | uint64_t ssdY, ssdU=0, ssdV=0, ssdA=0; |
98 | 73016d29 | Ramiro Polla | struct SwsContext *dstContext = NULL, *outContext = NULL; |
99 | 8d884020 | Ramiro Polla | uint32_t crc = 0;
|
100 | e07b1939 | Ramiro Polla | int res = 0; |
101 | 221b804f | Diego Biurrun | |
102 | 6bbae4c8 | Ramiro Polla | if (cur_srcFormat != srcFormat || cur_srcW != srcW || cur_srcH != srcH) {
|
103 | 3e1e7800 | Ramiro Polla | struct SwsContext *srcContext = NULL; |
104 | int p;
|
||
105 | |||
106 | for (p = 0; p < 4; p++) |
||
107 | 523d9407 | Clément Bœsch | av_freep(&src[p]); |
108 | 3e1e7800 | Ramiro Polla | |
109 | av_image_fill_linesizes(srcStride, srcFormat, srcW); |
||
110 | for (p = 0; p < 4; p++) { |
||
111 | if (srcStride[p])
|
||
112 | src[p] = av_mallocz(srcStride[p]*srcH+16);
|
||
113 | if (srcStride[p] && !src[p]) {
|
||
114 | perror("Malloc");
|
||
115 | res = -1;
|
||
116 | |||
117 | goto end;
|
||
118 | } |
||
119 | } |
||
120 | srcContext = sws_getContext(w, h, PIX_FMT_YUVA420P, srcW, srcH, |
||
121 | 6bbae4c8 | Ramiro Polla | srcFormat, SWS_BILINEAR, NULL, NULL, NULL); |
122 | 3e1e7800 | Ramiro Polla | if (!srcContext) {
|
123 | fprintf(stderr, "Failed to get %s ---> %s\n",
|
||
124 | av_pix_fmt_descriptors[PIX_FMT_YUVA420P].name, |
||
125 | av_pix_fmt_descriptors[srcFormat].name); |
||
126 | res = -1;
|
||
127 | |||
128 | goto end;
|
||
129 | } |
||
130 | sws_scale(srcContext, ref, refStride, 0, h, src, srcStride);
|
||
131 | sws_freeContext(srcContext); |
||
132 | |||
133 | cur_srcFormat = srcFormat; |
||
134 | cur_srcW = srcW; |
||
135 | cur_srcH = srcH; |
||
136 | } |
||
137 | |||
138 | 4389d606 | Ramiro Polla | av_image_fill_linesizes(dstStride, dstFormat, dstW); |
139 | dd68318c | Ramiro Polla | for (i=0; i<4; i++) { |
140 | 9e5f164d | Ramiro Polla | /* Image buffers passed into libswscale can be allocated any way you
|
141 | * prefer, as long as they're aligned enough for the architecture, and
|
||
142 | * they're freed appropriately (such as using av_free for buffers
|
||
143 | * allocated with av_malloc). */
|
||
144 | 67e1d527 | Ramiro Polla | /* An extra 16 bytes is being allocated because some scalers may write
|
145 | * out of bounds. */
|
||
146 | 06c93cb7 | Ramiro Polla | if (dstStride[i])
|
147 | a4fc3bd5 | Ramiro Polla | dst[i]= av_mallocz(dstStride[i]*dstH+16);
|
148 | 4bf44785 | Ramiro Polla | if (dstStride[i] && !dst[i]) {
|
149 | 221b804f | Diego Biurrun | perror("Malloc");
|
150 | res = -1;
|
||
151 | |||
152 | goto end;
|
||
153 | } |
||
154 | } |
||
155 | |||
156 | dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL, NULL); |
||
157 | 1b0a4572 | Benoit Fouet | if (!dstContext) {
|
158 | 221b804f | Diego Biurrun | fprintf(stderr, "Failed to get %s ---> %s\n",
|
159 | 92bfd746 | Ramiro Polla | av_pix_fmt_descriptors[srcFormat].name, |
160 | av_pix_fmt_descriptors[dstFormat].name); |
||
161 | 221b804f | Diego Biurrun | res = -1;
|
162 | |||
163 | goto end;
|
||
164 | } |
||
165 | // printf("test %X %X %X -> %X %X %X\n", (int)ref[0], (int)ref[1], (int)ref[2],
|
||
166 | // (int)src[0], (int)src[1], (int)src[2]);
|
||
167 | |||
168 | 9bb9875e | Ramiro Polla | printf(" %s %dx%d -> %s %3dx%3d flags=%2d",
|
169 | b6f1e7ec | Ramiro Polla | av_pix_fmt_descriptors[srcFormat].name, srcW, srcH, |
170 | av_pix_fmt_descriptors[dstFormat].name, dstW, dstH, |
||
171 | flags); |
||
172 | fflush(stdout); |
||
173 | |||
174 | 221b804f | Diego Biurrun | sws_scale(dstContext, src, srcStride, 0, srcH, dst, dstStride);
|
175 | 27161c06 | Alex Beregszaszi | |
176 | 8d884020 | Ramiro Polla | for (i = 0; i < 4 && dstStride[i]; i++) { |
177 | crc = av_crc(av_crc_get_table(AV_CRC_32_IEEE), crc, dst[i], dstStride[i] * dstH); |
||
178 | } |
||
179 | |||
180 | 4bf44785 | Ramiro Polla | if (r && crc == r->crc) {
|
181 | ssdY = r->ssdY; |
||
182 | ssdU = r->ssdU; |
||
183 | ssdV = r->ssdV; |
||
184 | ssdA = r->ssdA; |
||
185 | } else {
|
||
186 | for (i=0; i<4; i++) { |
||
187 | if (refStride[i])
|
||
188 | out[i]= av_mallocz(refStride[i]*h); |
||
189 | if (refStride[i] && !out[i]) {
|
||
190 | perror("Malloc");
|
||
191 | res = -1;
|
||
192 | |||
193 | goto end;
|
||
194 | } |
||
195 | } |
||
196 | f1084cb0 | Ramiro Polla | outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUVA420P, SWS_BILINEAR, NULL, NULL, NULL); |
197 | 4bf44785 | Ramiro Polla | if (!outContext) {
|
198 | fprintf(stderr, "Failed to get %s ---> %s\n",
|
||
199 | av_pix_fmt_descriptors[dstFormat].name, |
||
200 | av_pix_fmt_descriptors[PIX_FMT_YUVA420P].name); |
||
201 | res = -1;
|
||
202 | |||
203 | goto end;
|
||
204 | } |
||
205 | sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride);
|
||
206 | |||
207 | 9075bc7c | Ramiro Polla | ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h); |
208 | if (hasChroma(srcFormat) && hasChroma(dstFormat)) {
|
||
209 | //FIXME check that output is really gray
|
||
210 | ssdU= getSSD(ref[1], out[1], refStride[1], refStride[1], (w+1)>>1, (h+1)>>1); |
||
211 | ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1); |
||
212 | } |
||
213 | if (isALPHA(srcFormat) && isALPHA(dstFormat))
|
||
214 | ssdA= getSSD(ref[3], out[3], refStride[3], refStride[3], w, h); |
||
215 | 6a4970ab | Diego Biurrun | |
216 | 9075bc7c | Ramiro Polla | ssdY/= w*h; |
217 | ssdU/= w*h/4;
|
||
218 | ssdV/= w*h/4;
|
||
219 | ssdA/= w*h; |
||
220 | 6a4970ab | Diego Biurrun | |
221 | 4bf44785 | Ramiro Polla | sws_freeContext(outContext); |
222 | |||
223 | for (i=0; i<4; i++) { |
||
224 | if (refStride[i])
|
||
225 | av_free(out[i]); |
||
226 | } |
||
227 | } |
||
228 | |||
229 | 8d884020 | Ramiro Polla | printf(" CRC=%08x SSD=%5"PRId64",%5"PRId64",%5"PRId64",%5"PRId64"\n", |
230 | crc, ssdY, ssdU, ssdV, ssdA); |
||
231 | c9b99ea6 | Michael Niedermayer | |
232 | a48ce2c3 | Ramiro Polla | end:
|
233 | 6a4970ab | Diego Biurrun | |
234 | 221b804f | Diego Biurrun | sws_freeContext(dstContext); |
235 | c9b99ea6 | Michael Niedermayer | |
236 | dd68318c | Ramiro Polla | for (i=0; i<4; i++) { |
237 | 06c93cb7 | Ramiro Polla | if (dstStride[i])
|
238 | a4fc3bd5 | Ramiro Polla | av_free(dst[i]); |
239 | 221b804f | Diego Biurrun | } |
240 | c9b99ea6 | Michael Niedermayer | |
241 | 221b804f | Diego Biurrun | return res;
|
242 | c9b99ea6 | Michael Niedermayer | } |
243 | |||
244 | 9b4bf9c2 | Ramiro Polla | static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h, |
245 | enum PixelFormat srcFormat_in,
|
||
246 | enum PixelFormat dstFormat_in)
|
||
247 | dd68318c | Ramiro Polla | { |
248 | 6b052ba8 | Ramiro Polla | const int flags[] = { SWS_FAST_BILINEAR, |
249 | dd653355 | Ramiro Polla | SWS_BILINEAR, SWS_BICUBIC, |
250 | SWS_X , SWS_POINT , SWS_AREA, 0 };
|
||
251 | 6b052ba8 | Ramiro Polla | const int srcW = w; |
252 | const int srcH = h; |
||
253 | const int dstW[] = { srcW - srcW/3, srcW, srcW + srcW/3, 0 }; |
||
254 | const int dstH[] = { srcH - srcH/3, srcH, srcH + srcH/3, 0 }; |
||
255 | 91cfeac6 | Stefano Sabatini | enum PixelFormat srcFormat, dstFormat;
|
256 | |||
257 | 9b4bf9c2 | Ramiro Polla | for (srcFormat = srcFormat_in != PIX_FMT_NONE ? srcFormat_in : 0; |
258 | srcFormat < PIX_FMT_NB; srcFormat++) { |
||
259 | 91cfeac6 | Stefano Sabatini | if (!sws_isSupportedInput(srcFormat) || !sws_isSupportedOutput(srcFormat))
|
260 | continue;
|
||
261 | |||
262 | 9b4bf9c2 | Ramiro Polla | for (dstFormat = dstFormat_in != PIX_FMT_NONE ? dstFormat_in : 0; |
263 | dstFormat < PIX_FMT_NB; dstFormat++) { |
||
264 | 91cfeac6 | Stefano Sabatini | int i, j, k;
|
265 | int res = 0; |
||
266 | |||
267 | if (!sws_isSupportedInput(dstFormat) || !sws_isSupportedOutput(dstFormat))
|
||
268 | continue;
|
||
269 | 731c04ad | Stefano Sabatini | |
270 | 221b804f | Diego Biurrun | printf("%s -> %s\n",
|
271 | 92bfd746 | Ramiro Polla | av_pix_fmt_descriptors[srcFormat].name, |
272 | av_pix_fmt_descriptors[dstFormat].name); |
||
273 | ae9e0e83 | Michael Niedermayer | fflush(stdout); |
274 | 221b804f | Diego Biurrun | |
275 | 73016d29 | Ramiro Polla | for (k = 0; flags[k] && !res; k++) { |
276 | be1c5d35 | Ramiro Polla | for (i = 0; dstW[i] && !res; i++) |
277 | for (j = 0; dstH[j] && !res; j++) |
||
278 | 3e1e7800 | Ramiro Polla | res = doTest(ref, refStride, w, h, |
279 | 73016d29 | Ramiro Polla | srcFormat, dstFormat, |
280 | 4bf44785 | Ramiro Polla | srcW, srcH, dstW[i], dstH[j], flags[k], |
281 | NULL);
|
||
282 | 73016d29 | Ramiro Polla | } |
283 | 9b4bf9c2 | Ramiro Polla | if (dstFormat_in != PIX_FMT_NONE)
|
284 | break;
|
||
285 | 91cfeac6 | Stefano Sabatini | } |
286 | 9b4bf9c2 | Ramiro Polla | if (srcFormat_in != PIX_FMT_NONE)
|
287 | break;
|
||
288 | 91cfeac6 | Stefano Sabatini | } |
289 | c9b99ea6 | Michael Niedermayer | } |
290 | |||
291 | 9b4bf9c2 | Ramiro Polla | static int fileTest(uint8_t *ref[4], int refStride[4], int w, int h, FILE *fp, |
292 | b9f5e3bd | Ramiro Polla | enum PixelFormat srcFormat_in,
|
293 | enum PixelFormat dstFormat_in)
|
||
294 | 4bf44785 | Ramiro Polla | { |
295 | char buf[256]; |
||
296 | |||
297 | while (fgets(buf, sizeof(buf), fp)) { |
||
298 | struct Results r;
|
||
299 | enum PixelFormat srcFormat;
|
||
300 | char srcStr[12]; |
||
301 | int srcW, srcH;
|
||
302 | enum PixelFormat dstFormat;
|
||
303 | char dstStr[12]; |
||
304 | int dstW, dstH;
|
||
305 | int flags;
|
||
306 | int ret;
|
||
307 | |||
308 | ret = sscanf(buf, " %12s %dx%d -> %12s %dx%d flags=%d CRC=%x"
|
||
309 | " SSD=%"PRId64", %"PRId64", %"PRId64", %"PRId64"\n", |
||
310 | srcStr, &srcW, &srcH, dstStr, &dstW, &dstH, |
||
311 | &flags, &r.crc, &r.ssdY, &r.ssdU, &r.ssdV, &r.ssdA); |
||
312 | if (ret != 12) { |
||
313 | srcStr[0] = dstStr[0] = 0; |
||
314 | ret = sscanf(buf, "%12s -> %12s\n", srcStr, dstStr);
|
||
315 | } |
||
316 | |||
317 | srcFormat = av_get_pix_fmt(srcStr); |
||
318 | dstFormat = av_get_pix_fmt(dstStr); |
||
319 | |||
320 | if (srcFormat == PIX_FMT_NONE || dstFormat == PIX_FMT_NONE) {
|
||
321 | fprintf(stderr, "malformed input file\n");
|
||
322 | return -1; |
||
323 | } |
||
324 | 9b4bf9c2 | Ramiro Polla | if ((srcFormat_in != PIX_FMT_NONE && srcFormat_in != srcFormat) ||
|
325 | (dstFormat_in != PIX_FMT_NONE && dstFormat_in != dstFormat)) |
||
326 | continue;
|
||
327 | 4bf44785 | Ramiro Polla | if (ret != 12) { |
328 | printf("%s", buf);
|
||
329 | continue;
|
||
330 | } |
||
331 | |||
332 | doTest(ref, refStride, w, h, |
||
333 | srcFormat, dstFormat, |
||
334 | srcW, srcH, dstW, dstH, flags, |
||
335 | &r); |
||
336 | } |
||
337 | |||
338 | return 0; |
||
339 | } |
||
340 | |||
341 | c9b99ea6 | Michael Niedermayer | #define W 96 |
342 | #define H 96 |
||
343 | |||
344 | dd68318c | Ramiro Polla | int main(int argc, char **argv) |
345 | { |
||
346 | 9b4bf9c2 | Ramiro Polla | enum PixelFormat srcFormat = PIX_FMT_NONE;
|
347 | enum PixelFormat dstFormat = PIX_FMT_NONE;
|
||
348 | 51d83986 | Måns Rullgård | uint8_t *rgb_data = av_malloc (W*H*4);
|
349 | 221b804f | Diego Biurrun | uint8_t *rgb_src[3]= {rgb_data, NULL, NULL}; |
350 | int rgb_stride[3]={4*W, 0, 0}; |
||
351 | 51d83986 | Måns Rullgård | uint8_t *data = av_malloc (4*W*H);
|
352 | 110f147a | Cédric Schieli | uint8_t *src[4]= {data, data+W*H, data+W*H*2, data+W*H*3}; |
353 | int stride[4]={W, W, W, W}; |
||
354 | 221b804f | Diego Biurrun | int x, y;
|
355 | struct SwsContext *sws;
|
||
356 | 9a034dde | Ramiro Polla | AVLFG rand; |
357 | 4bf44785 | Ramiro Polla | int res = -1; |
358 | int i;
|
||
359 | 221b804f | Diego Biurrun | |
360 | 7248797c | Ramiro Polla | if (!rgb_data || !data)
|
361 | return -1; |
||
362 | |||
363 | 91cfeac6 | Stefano Sabatini | sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUVA420P, SWS_BILINEAR, NULL, NULL, NULL); |
364 | 221b804f | Diego Biurrun | |
365 | 9a034dde | Ramiro Polla | av_lfg_init(&rand, 1);
|
366 | |||
367 | dd68318c | Ramiro Polla | for (y=0; y<H; y++) { |
368 | for (x=0; x<W*4; x++) { |
||
369 | 9a034dde | Ramiro Polla | rgb_data[ x + y*4*W]= av_lfg_get(&rand);
|
370 | 221b804f | Diego Biurrun | } |
371 | } |
||
372 | e5091488 | Benoit Fouet | sws_scale(sws, rgb_src, rgb_stride, 0, H, src, stride);
|
373 | 64d39b7c | Reimar Döffinger | sws_freeContext(sws); |
374 | 51d83986 | Måns Rullgård | av_free(rgb_data); |
375 | 27161c06 | Alex Beregszaszi | |
376 | 4bf44785 | Ramiro Polla | for (i = 1; i < argc; i += 2) { |
377 | if (argv[i][0] != '-' || i+1 == argc) |
||
378 | goto bad_option;
|
||
379 | if (!strcmp(argv[i], "-ref")) { |
||
380 | FILE *fp = fopen(argv[i+1], "r"); |
||
381 | if (!fp) {
|
||
382 | fprintf(stderr, "could not open '%s'\n", argv[i+1]); |
||
383 | goto error;
|
||
384 | } |
||
385 | 9b4bf9c2 | Ramiro Polla | res = fileTest(src, stride, W, H, fp, srcFormat, dstFormat); |
386 | 4bf44785 | Ramiro Polla | fclose(fp); |
387 | goto end;
|
||
388 | 9b4bf9c2 | Ramiro Polla | } else if (!strcmp(argv[i], "-src")) { |
389 | srcFormat = av_get_pix_fmt(argv[i+1]);
|
||
390 | if (srcFormat == PIX_FMT_NONE) {
|
||
391 | fprintf(stderr, "invalid pixel format %s\n", argv[i+1]); |
||
392 | return -1; |
||
393 | } |
||
394 | } else if (!strcmp(argv[i], "-dst")) { |
||
395 | dstFormat = av_get_pix_fmt(argv[i+1]);
|
||
396 | if (dstFormat == PIX_FMT_NONE) {
|
||
397 | fprintf(stderr, "invalid pixel format %s\n", argv[i+1]); |
||
398 | return -1; |
||
399 | } |
||
400 | 4bf44785 | Ramiro Polla | } else {
|
401 | bad_option:
|
||
402 | fprintf(stderr, "bad option or argument missing (%s)\n", argv[i]);
|
||
403 | goto error;
|
||
404 | } |
||
405 | } |
||
406 | |||
407 | 9b4bf9c2 | Ramiro Polla | selfTest(src, stride, W, H, srcFormat, dstFormat); |
408 | 4bf44785 | Ramiro Polla | end:
|
409 | res = 0;
|
||
410 | error:
|
||
411 | 51d83986 | Måns Rullgård | av_free(data); |
412 | 516b1f82 | Michael Niedermayer | |
413 | 4bf44785 | Ramiro Polla | return res;
|
414 | c9b99ea6 | Michael Niedermayer | } |