annotate libswscale/swscale-test.c @ 30785:2c9cfd354ca0

Revert r30825, it was not supposed to be committed. 127.32L to me, beware when using git svn dcommit for committing stuff to svn...
author stefano
date Thu, 04 Mar 2010 01:02:24 +0000
parents 1bd54aea2896
children 23c297eb1092
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1 /*
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
2 * Copyright (C) 2003 Michael Niedermayer <michaelni@gmx.at>
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
3 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
4 * This file is part of FFmpeg.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
5 *
26397
f250e353a56b Relicense test/example files as LGPL with Michael's permission.
diego
parents: 25752
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
f250e353a56b Relicense test/example files as LGPL with Michael's permission.
diego
parents: 25752
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
f250e353a56b Relicense test/example files as LGPL with Michael's permission.
diego
parents: 25752
diff changeset
8 * License as published by the Free Software Foundation; either
f250e353a56b Relicense test/example files as LGPL with Michael's permission.
diego
parents: 25752
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
10 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26397
f250e353a56b Relicense test/example files as LGPL with Michael's permission.
diego
parents: 25752
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f250e353a56b Relicense test/example files as LGPL with Michael's permission.
diego
parents: 25752
diff changeset
14 * Lesser General Public License for more details.
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
15 *
26397
f250e353a56b Relicense test/example files as LGPL with Michael's permission.
diego
parents: 25752
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
f250e353a56b Relicense test/example files as LGPL with Michael's permission.
diego
parents: 25752
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
23702
5159b5f8784e license header consistency cosmetics
diego
parents: 23155
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
19 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
20
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
21 #include <stdio.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
22 #include <stdlib.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
23 #include <string.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
24 #include <inttypes.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
25 #include <stdarg.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
26
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
27 #undef HAVE_AV_CONFIG_H
30327
028ec0735169 swscale-example: use av_malloc()
mru
parents: 30326
diff changeset
28 #include "libavutil/mem.h"
26670
e6774798e913 Use full path for #includes from another directory.
diego
parents: 26397
diff changeset
29 #include "libavutil/avutil.h"
28958
99f0c79aba05 swscale-example: use LFG instead of random()
ramiro
parents: 28483
diff changeset
30 #include "libavutil/lfg.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
31 #include "swscale.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
32
29373
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
33 /* HACK Duplicated from swscale_internal.h.
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
34 * Should be removed when a cleaner pixel format system exists. */
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
35 const char *sws_format_name(enum PixelFormat format);
29461
1429547613d0 swscale-example: Check for Gray formats.
ramiro
parents: 29373
diff changeset
36 #define isGray(x) ( \
1429547613d0 swscale-example: Check for Gray formats.
ramiro
parents: 29373
diff changeset
37 (x)==PIX_FMT_GRAY8 \
1429547613d0 swscale-example: Check for Gray formats.
ramiro
parents: 29373
diff changeset
38 || (x)==PIX_FMT_GRAY16BE \
1429547613d0 swscale-example: Check for Gray formats.
ramiro
parents: 29373
diff changeset
39 || (x)==PIX_FMT_GRAY16LE \
1429547613d0 swscale-example: Check for Gray formats.
ramiro
parents: 29373
diff changeset
40 )
29503
a3e1ef1c76d0 Fix inconsistent indentation.
ramiro
parents: 29496
diff changeset
41 #define hasChroma(x) (!( \
29469
a5f2750d1ff1 swscale-example: Don't check for chroma planes in mono formats.
ramiro
parents: 29464
diff changeset
42 isGray(x) \
a5f2750d1ff1 swscale-example: Don't check for chroma planes in mono formats.
ramiro
parents: 29464
diff changeset
43 || (x)==PIX_FMT_MONOBLACK \
a5f2750d1ff1 swscale-example: Don't check for chroma planes in mono formats.
ramiro
parents: 29464
diff changeset
44 || (x)==PIX_FMT_MONOWHITE \
a5f2750d1ff1 swscale-example: Don't check for chroma planes in mono formats.
ramiro
parents: 29464
diff changeset
45 ))
29373
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
46 #define isALPHA(x) ( \
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
47 (x)==PIX_FMT_BGR32 \
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
48 || (x)==PIX_FMT_BGR32_1 \
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
49 || (x)==PIX_FMT_RGB32 \
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
50 || (x)==PIX_FMT_RGB32_1 \
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
51 || (x)==PIX_FMT_YUVA420P \
c2c83f344012 Remove dependency from swscale_internal.h to lavu/internal.h, it is no longer
ramiro
parents: 29312
diff changeset
52 )
29312
4851d0d2136b Fix compilation: #undef standard library functions that are
diego
parents: 29301
diff changeset
53
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
54 static uint64_t getSSD(uint8_t *src1, uint8_t *src2, int stride1, int stride2, int w, int h)
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
55 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
56 int x,y;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
57 uint64_t ssd=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
58
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
59 //printf("%d %d\n", w, h);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
60
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
61 for (y=0; y<h; y++) {
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
62 for (x=0; x<w; x++) {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
63 int d= src1[x + y*stride1] - src2[x + y*stride2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
64 ssd+= d*d;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
65 //printf("%d", abs(src1[x + y*stride1] - src2[x + y*stride2])/26 );
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
66 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
67 //printf("\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
68 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
69 return ssd;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
70 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
71
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
72 // test by ref -> src -> dst -> out & compare out against ref
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
73 // ref & out are YV12
30326
63f2871ba1b3 Split long line.
stefano
parents: 30325
diff changeset
74 static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
63f2871ba1b3 Split long line.
stefano
parents: 30325
diff changeset
75 enum PixelFormat srcFormat, enum PixelFormat dstFormat,
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
76 int srcW, int srcH, int dstW, int dstH, int flags)
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
77 {
28982
a73861318395 Initialize pointer arrays which may be freed before being initialized.
benoit
parents: 28978
diff changeset
78 uint8_t *src[4] = {0};
a73861318395 Initialize pointer arrays which may be freed before being initialized.
benoit
parents: 28978
diff changeset
79 uint8_t *dst[4] = {0};
a73861318395 Initialize pointer arrays which may be freed before being initialized.
benoit
parents: 28978
diff changeset
80 uint8_t *out[4] = {0};
28978
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
81 int srcStride[4], dstStride[4];
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
82 int i;
29461
1429547613d0 swscale-example: Check for Gray formats.
ramiro
parents: 29373
diff changeset
83 uint64_t ssdY, ssdU=0, ssdV=0, ssdA=0;
28973
9ae8c54007f5 Initialize *srcContext, *dstContext, *outContext to NULL, avoids the warnings:
diego
parents: 28958
diff changeset
84 struct SwsContext *srcContext = NULL, *dstContext = NULL,
9ae8c54007f5 Initialize *srcContext, *dstContext, *outContext to NULL, avoids the warnings:
diego
parents: 28958
diff changeset
85 *outContext = NULL;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
86 int res;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
87
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
88 res = 0;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
89 for (i=0; i<4; i++) {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
90 // avoid stride % bpp != 0
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
91 if (srcFormat==PIX_FMT_RGB24 || srcFormat==PIX_FMT_BGR24)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
92 srcStride[i]= srcW*3;
29301
4d26a10456cd Testing RGB48 variants requires bigger stride in swscale-example.c
kostya
parents: 29068
diff changeset
93 else if (srcFormat==PIX_FMT_RGB48BE || srcFormat==PIX_FMT_RGB48LE)
4d26a10456cd Testing RGB48 variants requires bigger stride in swscale-example.c
kostya
parents: 29068
diff changeset
94 srcStride[i]= srcW*6;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
95 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
96 srcStride[i]= srcW*4;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
97
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
98 if (dstFormat==PIX_FMT_RGB24 || dstFormat==PIX_FMT_BGR24)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
99 dstStride[i]= dstW*3;
29301
4d26a10456cd Testing RGB48 variants requires bigger stride in swscale-example.c
kostya
parents: 29068
diff changeset
100 else if (dstFormat==PIX_FMT_RGB48BE || dstFormat==PIX_FMT_RGB48LE)
4d26a10456cd Testing RGB48 variants requires bigger stride in swscale-example.c
kostya
parents: 29068
diff changeset
101 dstStride[i]= dstW*6;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
102 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
103 dstStride[i]= dstW*4;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
104
30331
4398e647c2ea swscale-example: Add comment about the use of av_{malloc,free}.
ramiro
parents: 30327
diff changeset
105 /* Image buffers passed into libswscale can be allocated any way you
4398e647c2ea swscale-example: Add comment about the use of av_{malloc,free}.
ramiro
parents: 30327
diff changeset
106 * prefer, as long as they're aligned enough for the architecture, and
4398e647c2ea swscale-example: Add comment about the use of av_{malloc,free}.
ramiro
parents: 30327
diff changeset
107 * they're freed appropriately (such as using av_free for buffers
4398e647c2ea swscale-example: Add comment about the use of av_{malloc,free}.
ramiro
parents: 30327
diff changeset
108 * allocated with av_malloc). */
30415
3f9c8b7320a2 Fix randomness of the swscale-test output.
stefano
parents: 30397
diff changeset
109 src[i]= av_mallocz(srcStride[i]*srcH);
3f9c8b7320a2 Fix randomness of the swscale-test output.
stefano
parents: 30397
diff changeset
110 dst[i]= av_mallocz(dstStride[i]*dstH);
3f9c8b7320a2 Fix randomness of the swscale-test output.
stefano
parents: 30397
diff changeset
111 out[i]= av_mallocz(refStride[i]*h);
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25751
diff changeset
112 if (!src[i] || !dst[i] || !out[i]) {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
113 perror("Malloc");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
114 res = -1;
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
115
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
116 goto end;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
117 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
118 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
119
28978
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
120 srcContext= sws_getContext(w, h, PIX_FMT_YUVA420P, srcW, srcH, srcFormat, flags, NULL, NULL, NULL);
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25751
diff changeset
121 if (!srcContext) {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
122 fprintf(stderr, "Failed to get %s ---> %s\n",
28978
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
123 sws_format_name(PIX_FMT_YUVA420P),
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
124 sws_format_name(srcFormat));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
125 res = -1;
19959
8ae8ee951284 Improve swscale-example to test conversions between all the possible
lucabe
parents: 19872
diff changeset
126
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
127 goto end;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
128 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
129 dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL, NULL);
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25751
diff changeset
130 if (!dstContext) {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
131 fprintf(stderr, "Failed to get %s ---> %s\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
132 sws_format_name(srcFormat),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
133 sws_format_name(dstFormat));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
134 res = -1;
19959
8ae8ee951284 Improve swscale-example to test conversions between all the possible
lucabe
parents: 19872
diff changeset
135
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
136 goto end;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
137 }
28978
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
138 outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUVA420P, flags, NULL, NULL, NULL);
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25751
diff changeset
139 if (!outContext) {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
140 fprintf(stderr, "Failed to get %s ---> %s\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
141 sws_format_name(dstFormat),
28978
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
142 sws_format_name(PIX_FMT_YUVA420P));
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
143 res = -1;
19959
8ae8ee951284 Improve swscale-example to test conversions between all the possible
lucabe
parents: 19872
diff changeset
144
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
145 goto end;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
146 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
147 // printf("test %X %X %X -> %X %X %X\n", (int)ref[0], (int)ref[1], (int)ref[2],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
148 // (int)src[0], (int)src[1], (int)src[2]);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
149
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
150 sws_scale(srcContext, ref, refStride, 0, h , src, srcStride);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
151 sws_scale(dstContext, src, srcStride, 0, srcH, dst, dstStride);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
152 sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
153
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
154 ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h);
29469
a5f2750d1ff1 swscale-example: Don't check for chroma planes in mono formats.
ramiro
parents: 29464
diff changeset
155 if (hasChroma(srcFormat) && hasChroma(dstFormat)) {
29461
1429547613d0 swscale-example: Check for Gray formats.
ramiro
parents: 29373
diff changeset
156 //FIXME check that output is really gray
29464
32ee4e7438ac Indent.
ramiro
parents: 29463
diff changeset
157 ssdU= getSSD(ref[1], out[1], refStride[1], refStride[1], (w+1)>>1, (h+1)>>1);
32ee4e7438ac Indent.
ramiro
parents: 29463
diff changeset
158 ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1);
29461
1429547613d0 swscale-example: Check for Gray formats.
ramiro
parents: 29373
diff changeset
159 }
28978
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
160 if (isALPHA(srcFormat) && isALPHA(dstFormat))
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
161 ssdA= getSSD(ref[3], out[3], refStride[3], refStride[3], w, h);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
162
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
163 ssdY/= w*h;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
164 ssdU/= w*h/4;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
165 ssdV/= w*h/4;
28978
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
166 ssdA/= w*h;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
167
29068
b58c687a3078 Use correct PRId64 instead of "lld" in printf string, fixes compiler warnings.
reimar
parents: 28982
diff changeset
168 printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5"PRId64",%5"PRId64",%5"PRId64",%5"PRId64"\n",
27640
ecb0fb0738f3 cosmetics: indentation
diego
parents: 27639
diff changeset
169 sws_format_name(srcFormat), srcW, srcH,
ecb0fb0738f3 cosmetics: indentation
diego
parents: 27639
diff changeset
170 sws_format_name(dstFormat), dstW, dstH,
28978
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
171 flags, ssdY, ssdU, ssdV, ssdA);
27640
ecb0fb0738f3 cosmetics: indentation
diego
parents: 27639
diff changeset
172 fflush(stdout);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
173
29503
a3e1ef1c76d0 Fix inconsistent indentation.
ramiro
parents: 29496
diff changeset
174 end:
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
175
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
176 sws_freeContext(srcContext);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
177 sws_freeContext(dstContext);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
178 sws_freeContext(outContext);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
179
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
180 for (i=0; i<4; i++) {
30327
028ec0735169 swscale-example: use av_malloc()
mru
parents: 30326
diff changeset
181 av_free(src[i]);
028ec0735169 swscale-example: use av_malloc()
mru
parents: 30326
diff changeset
182 av_free(dst[i]);
028ec0735169 swscale-example: use av_malloc()
mru
parents: 30326
diff changeset
183 av_free(out[i]);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
184 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
185
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
186 return res;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
187 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
188
30785
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
189 static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h)
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
190 {
29485
d252912eaf5b swscale-example: Make selection of dstW, dstH, and flags more clear.
ramiro
parents: 29481
diff changeset
191 const int flags[] = { SWS_FAST_BILINEAR,
29543
8833a311a140 Revert mistakenly commited hunk.
ramiro
parents: 29542
diff changeset
192 SWS_BILINEAR, SWS_BICUBIC,
8833a311a140 Revert mistakenly commited hunk.
ramiro
parents: 29542
diff changeset
193 SWS_X , SWS_POINT , SWS_AREA, 0 };
29485
d252912eaf5b swscale-example: Make selection of dstW, dstH, and flags more clear.
ramiro
parents: 29481
diff changeset
194 const int srcW = w;
d252912eaf5b swscale-example: Make selection of dstW, dstH, and flags more clear.
ramiro
parents: 29481
diff changeset
195 const int srcH = h;
d252912eaf5b swscale-example: Make selection of dstW, dstH, and flags more clear.
ramiro
parents: 29481
diff changeset
196 const int dstW[] = { srcW - srcW/3, srcW, srcW + srcW/3, 0 };
d252912eaf5b swscale-example: Make selection of dstW, dstH, and flags more clear.
ramiro
parents: 29481
diff changeset
197 const int dstH[] = { srcH - srcH/3, srcH, srcH + srcH/3, 0 };
30785
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
198 enum PixelFormat srcFormat, dstFormat;
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
199
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
200 for (srcFormat = 0; srcFormat < PIX_FMT_NB; srcFormat++) {
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
201 if (!sws_isSupportedInput(srcFormat) || !sws_isSupportedOutput(srcFormat))
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
202 continue;
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
203
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
204 for (dstFormat = 0; dstFormat < PIX_FMT_NB; dstFormat++) {
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
205 int i, j, k;
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
206 int res = 0;
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
207
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
208 if (!sws_isSupportedInput(dstFormat) || !sws_isSupportedOutput(dstFormat))
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
209 continue;
30335
a31ec2f03d54 Make selfTest() perform tests where both the input and output formats
stefano
parents: 30331
diff changeset
210
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
211 printf("%s -> %s\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
212 sws_format_name(srcFormat),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
213 sws_format_name(dstFormat));
27483
2c27916c40d2 Add fflush to prevent stdout & stderr from being mixed.
michael
parents: 26670
diff changeset
214 fflush(stdout);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
215
29485
d252912eaf5b swscale-example: Make selection of dstW, dstH, and flags more clear.
ramiro
parents: 29481
diff changeset
216 for (i = 0; dstW[i] && !res; i++)
d252912eaf5b swscale-example: Make selection of dstW, dstH, and flags more clear.
ramiro
parents: 29481
diff changeset
217 for (j = 0; dstH[j] && !res; j++)
d252912eaf5b swscale-example: Make selection of dstW, dstH, and flags more clear.
ramiro
parents: 29481
diff changeset
218 for (k = 0; flags[k] && !res; k++)
29506
b7d639772e17 swscale-example: Rename src->ref so as to not confuse with src being used in doTest().
ramiro
parents: 29505
diff changeset
219 res = doTest(ref, refStride, w, h, srcFormat, dstFormat,
30785
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
220 srcW, srcH, dstW[i], dstH[j], flags[k]);
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
221 }
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
222 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
223 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
224
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
225 #define W 96
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
226 #define H 96
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
227
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
228 int main(int argc, char **argv)
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
229 {
30327
028ec0735169 swscale-example: use av_malloc()
mru
parents: 30326
diff changeset
230 uint8_t *rgb_data = av_malloc (W*H*4);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
231 uint8_t *rgb_src[3]= {rgb_data, NULL, NULL};
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
232 int rgb_stride[3]={4*W, 0, 0};
30327
028ec0735169 swscale-example: use av_malloc()
mru
parents: 30326
diff changeset
233 uint8_t *data = av_malloc (4*W*H);
28978
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
234 uint8_t *src[4]= {data, data+W*H, data+W*H*2, data+W*H*3};
3aa3a63b8a83 Also test the alpha channel in swscale-example
sdrik
parents: 28973
diff changeset
235 int stride[4]={W, W, W, W};
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
236 int x, y;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
237 struct SwsContext *sws;
28958
99f0c79aba05 swscale-example: use LFG instead of random()
ramiro
parents: 28483
diff changeset
238 AVLFG rand;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
239
29542
3e7ffd70b12b swscale: Check for return values of malloc.
ramiro
parents: 29541
diff changeset
240 if (!rgb_data || !data)
3e7ffd70b12b swscale: Check for return values of malloc.
ramiro
parents: 29541
diff changeset
241 return -1;
3e7ffd70b12b swscale: Check for return values of malloc.
ramiro
parents: 29541
diff changeset
242
30785
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
243 sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUVA420P, SWS_BILINEAR, NULL, NULL, NULL);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
244
28958
99f0c79aba05 swscale-example: use LFG instead of random()
ramiro
parents: 28483
diff changeset
245 av_lfg_init(&rand, 1);
99f0c79aba05 swscale-example: use LFG instead of random()
ramiro
parents: 28483
diff changeset
246
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
247 for (y=0; y<H; y++) {
c080f1f5c07e Cosmetics:
ramiro
parents: 29469
diff changeset
248 for (x=0; x<W*4; x++) {
28958
99f0c79aba05 swscale-example: use LFG instead of random()
ramiro
parents: 28483
diff changeset
249 rgb_data[ x + y*4*W]= av_lfg_get(&rand);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
250 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
251 }
25749
8d082a234a6d Remove non cosmetic spaces inside parentheses.
benoit
parents: 23702
diff changeset
252 sws_scale(sws, rgb_src, rgb_stride, 0, H, src, stride);
29496
a307b7206944 Free initial swscale context, too. Avoids a valgrind warning.
reimar
parents: 29495
diff changeset
253 sws_freeContext(sws);
30327
028ec0735169 swscale-example: use av_malloc()
mru
parents: 30326
diff changeset
254 av_free(rgb_data);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
255
30785
2c9cfd354ca0 Revert r30825, it was not supposed to be committed.
stefano
parents: 30783
diff changeset
256 selfTest(src, stride, W, H);
30327
028ec0735169 swscale-example: use av_malloc()
mru
parents: 30326
diff changeset
257 av_free(data);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
258
29462
db2d76bfaaa6 swscale-example: Don't return random value from main().
ramiro
parents: 29461
diff changeset
259 return 0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
260 }