annotate libswscale/swscale-example.c @ 25317:7f3cb5408f28

Fixed VIDIX color bug that was introduced when Radeon VIDIX driver was synchronized with vidix.sf.net. The red color was saturating. Corrected value fixes the issue and restore the color to the level it used to have before synchronization. Meaning of the value remains unknow but was retrieved from register's value of a Radeon 9000 card, so it may need further testing. Patch by Guillaume Lecerf (foxcore at gmail dot com)
author ben
date Mon, 10 Dec 2007 19:27:46 +0000
parents 5159b5f8784e
children 8d082a234a6d
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 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or modify
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
7 * it under the terms of the GNU General Public License as published by
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
9 * (at your option) any later version.
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
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
14 * GNU General Public License for more details.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
15 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
16 * You should have received a copy of the GNU General Public License
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20031
diff changeset
17 * 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
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
28 #include "avutil.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
29 #include "swscale.h"
20031
d7cf54666334 Fix warnings:
diego
parents: 19959
diff changeset
30 #include "swscale_internal.h"
d7cf54666334 Fix warnings:
diego
parents: 19959
diff changeset
31 #include "rgb2rgb.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
32
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
33 static uint64_t getSSD(uint8_t *src1, uint8_t *src2, int stride1, int stride2, int w, int h){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
34 int x,y;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
35 uint64_t ssd=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
36
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
37 //printf("%d %d\n", w, h);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
38
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
39 for (y=0; y<h; y++){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
40 for (x=0; x<w; x++){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
41 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
42 ssd+= d*d;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
43 //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
44 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
45 //printf("\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
46 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
47 return ssd;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
48 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
49
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
50 // test by ref -> src -> dst -> out & compare out against ref
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
51 // ref & out are YV12
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
52 static int doTest(uint8_t *ref[3], int refStride[3], int w, int h, int srcFormat, int dstFormat,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
53 int srcW, int srcH, int dstW, int dstH, int flags){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
54 uint8_t *src[3];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
55 uint8_t *dst[3];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
56 uint8_t *out[3];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
57 int srcStride[3], dstStride[3];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
58 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
59 uint64_t ssdY, ssdU, ssdV;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
60 struct SwsContext *srcContext, *dstContext, *outContext;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
61 int res;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
62
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
63 res = 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
64 for (i=0; i<3; i++){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
65 // avoid stride % bpp != 0
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
66 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
67 srcStride[i]= srcW*3;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
68 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
69 srcStride[i]= srcW*4;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
70
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
71 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
72 dstStride[i]= dstW*3;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
73 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
74 dstStride[i]= dstW*4;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
75
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
76 src[i]= (uint8_t*) malloc(srcStride[i]*srcH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
77 dst[i]= (uint8_t*) malloc(dstStride[i]*dstH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
78 out[i]= (uint8_t*) malloc(refStride[i]*h);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
79 if ((src[i] == NULL) || (dst[i] == NULL) || (out[i] == NULL)) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
80 perror("Malloc");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
81 res = -1;
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
82
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
83 goto end;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
84 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
85 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
86
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
87 dstContext = outContext = NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
88 srcContext= sws_getContext(w, h, PIX_FMT_YUV420P, srcW, srcH, srcFormat, flags, NULL, NULL, NULL);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
89 if (srcContext == NULL) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
90 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
91 sws_format_name(PIX_FMT_YUV420P),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
92 sws_format_name(srcFormat));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
93 res = -1;
19959
8ae8ee951284 Improve swscale-example to test conversions between all the possible
lucabe
parents: 19872
diff changeset
94
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
95 goto end;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
96 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
97 dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL, NULL);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
98 if (dstContext == NULL) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
99 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
100 sws_format_name(srcFormat),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
101 sws_format_name(dstFormat));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
102 res = -1;
19959
8ae8ee951284 Improve swscale-example to test conversions between all the possible
lucabe
parents: 19872
diff changeset
103
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
104 goto end;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
105 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
106 outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUV420P, flags, NULL, NULL, NULL);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
107 if (outContext == NULL) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
108 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
109 sws_format_name(dstFormat),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
110 sws_format_name(PIX_FMT_YUV420P));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
111 res = -1;
19959
8ae8ee951284 Improve swscale-example to test conversions between all the possible
lucabe
parents: 19872
diff changeset
112
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
113 goto end;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
114 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
115 // 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
116 // (int)src[0], (int)src[1], (int)src[2]);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
117
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
118 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
119 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
120 sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
121
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20094
diff changeset
122 #if defined(ARCH_X86)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
123 asm volatile ("emms\n\t");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
124 #endif
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
125
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
126 ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
127 ssdU= getSSD(ref[1], out[1], refStride[1], refStride[1], (w+1)>>1, (h+1)>>1);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
128 ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
129
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
130 if (srcFormat == PIX_FMT_GRAY8 || dstFormat==PIX_FMT_GRAY8) ssdU=ssdV=0; //FIXME check that output is really gray
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
131
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
132 ssdY/= w*h;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
133 ssdU/= w*h/4;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
134 ssdV/= w*h/4;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
135
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
136 if (ssdY>100 || ssdU>100 || ssdV>100){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
137 printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5lld,%5lld,%5lld\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
138 sws_format_name(srcFormat), srcW, srcH,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
139 sws_format_name(dstFormat), dstW, dstH,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
140 flags,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
141 ssdY, ssdU, ssdV);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
142 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
143
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
144 end:
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
145
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
146 sws_freeContext(srcContext);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
147 sws_freeContext(dstContext);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
148 sws_freeContext(outContext);
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 for (i=0; i<3; i++){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
151 free(src[i]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
152 free(dst[i]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
153 free(out[i]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
154 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
155
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
156 return res;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
157 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
158
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
159 void fast_memcpy(void *a, void *b, int s){ //FIXME
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
160 memcpy(a, b, s);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
161 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
162
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
163 static void selfTest(uint8_t *src[3], int stride[3], int w, int h){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
164 enum PixelFormat srcFormat, dstFormat;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
165 int srcW, srcH, dstW, dstH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
166 int flags;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
167
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
168 for (srcFormat = 0; srcFormat < PIX_FMT_NB; srcFormat++) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
169 for (dstFormat = 0; dstFormat < PIX_FMT_NB; dstFormat++) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
170 printf("%s -> %s\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
171 sws_format_name(srcFormat),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
172 sws_format_name(dstFormat));
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
173
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
174 srcW= w;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
175 srcH= h;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
176 for (dstW=w - w/3; dstW<= 4*w/3; dstW+= w/3){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
177 for (dstH=h - h/3; dstH<= 4*h/3; dstH+= h/3){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
178 for (flags=1; flags<33; flags*=2) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
179 int res;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
180
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
181 res = doTest(src, stride, w, h, srcFormat, dstFormat,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
182 srcW, srcH, dstW, dstH, flags);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
183 if (res < 0) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
184 dstW = 4 * w / 3;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
185 dstH = 4 * h / 3;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
186 flags = 33;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
187 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
188 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
189 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
190 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
191 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
192 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
193 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
194
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
195 #define W 96
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
196 #define H 96
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
197
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
198 int main(int argc, char **argv){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
199 uint8_t *rgb_data = malloc (W*H*4);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
200 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
201 int rgb_stride[3]={4*W, 0, 0};
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
202 uint8_t *data = malloc (3*W*H);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
203 uint8_t *src[3]= {data, data+W*H, data+W*H*2};
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
204 int stride[3]={W, W, W};
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
205 int x, y;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
206 struct SwsContext *sws;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
207
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
208 sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUV420P, 2, NULL, NULL, NULL);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23099
diff changeset
209
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
210 for (y=0; y<H; y++){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
211 for (x=0; x<W*4; x++){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
212 rgb_data[ x + y*4*W]= random();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
213 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
214 }
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20094
diff changeset
215 #if defined(ARCH_X86)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
216 sws_rgb2rgb_init(SWS_CPU_CAPS_MMX*0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
217 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
218 sws_rgb2rgb_init(0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
219 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
220 sws_scale(sws, rgb_src, rgb_stride, 0, H , src, stride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
221
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20094
diff changeset
222 #if defined(ARCH_X86)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
223 asm volatile ("emms\n\t");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
224 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
225
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
226 selfTest(src, stride, W, H);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
227
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
228 return 123;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
229 }