annotate libswscale/swscale.c @ 25661:293aeec83153

Replace the persistent CODECS_FLAG_SELECTED by a local "stringset" with an almost-trivial implementation. This allows making the builtin codec structs const, and it also makes clearer that this "selected" status is not used outside the init functions.
author reimar
date Sat, 12 Jan 2008 14:05:46 +0000
parents 0926055fe5b8
children 12970064a271
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: 19987
diff changeset
2 * Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at>
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19987
diff changeset
3 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19987
diff changeset
4 * This file is part of FFmpeg.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19987
diff changeset
5 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19987
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: 19987
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: 19987
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: 19987
diff changeset
9 * (at your option) any later version.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19987
diff changeset
10 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19987
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: 19987
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: 19987
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: 19987
diff changeset
14 * GNU General Public License for more details.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19987
diff changeset
15 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19987
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: 19987
diff changeset
17 * along with FFmpeg; if not, write to the Free Software
23702
5159b5f8784e license header consistency cosmetics
diego
parents: 23585
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: 19987
diff changeset
19 *
21029
1f2ba24b4e47 Clarify that some of the non-SIMD code is now LGPLed.
lucabe
parents: 20943
diff changeset
20 * the C code (not assembly, mmx, ...) of this file can be used
1f2ba24b4e47 Clarify that some of the non-SIMD code is now LGPLed.
lucabe
parents: 20943
diff changeset
21 * under the LGPL license too
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19987
diff changeset
22 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
23
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
24 /*
22218
ff7aa2aecb9d pal8 input
michael
parents: 21981
diff changeset
25 supported Input formats: YV12, I420/IYUV, YUY2, UYVY, BGR32, BGR24, BGR16, BGR15, RGB32, RGB24, Y8/Y800, YVU9/IF09, PAL8
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
26 supported output formats: YV12, I420/IYUV, YUY2, UYVY, {BGR,RGB}{1,4,8,15,16,24,32}, Y8/Y800, YVU9/IF09
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
27 {BGR,RGB}{1,4,8,15,16} support dithering
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
28
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
29 unscaled special converters (YV12=I420=IYUV, Y800=Y8)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
30 YV12 -> {BGR,RGB}{1,4,8,15,16,24,32}
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
31 x -> x
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
32 YUV9 -> YV12
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
33 YUV9/YV12 -> Y800
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
34 Y800 -> YUV9/YV12
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
35 BGR24 -> BGR32 & RGB24 -> RGB32
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
36 BGR32 -> BGR24 & RGB32 -> RGB24
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
37 BGR15 -> BGR16
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
38 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
39
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
40 /*
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
41 tested special converters (most are tested actually but i didnt write it down ...)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
42 YV12 -> BGR16
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
43 YV12 -> YV12
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
44 BGR15 -> BGR16
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
45 BGR16 -> BGR16
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
46 YVU9 -> YV12
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
47
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
48 untested special converters
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
49 YV12/I420 -> BGR15/BGR24/BGR32 (it is the yuv2rgb stuff, so it should be ok)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
50 YV12/I420 -> YV12/I420
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
51 YUY2/BGR15/BGR24/BGR32/RGB24/RGB32 -> same format
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
52 BGR24 -> BGR32 & RGB24 -> RGB32
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
53 BGR32 -> BGR24 & RGB32 -> RGB24
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
54 BGR24 -> YV12
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
55 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
56
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
57 #include <inttypes.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
58 #include <string.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
59 #include <math.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
60 #include <stdio.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
61 #include <unistd.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
62 #include "config.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
63 #include <assert.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
64 #ifdef HAVE_SYS_MMAN_H
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
65 #include <sys/mman.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
66 #if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
67 #define MAP_ANONYMOUS MAP_ANON
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
68 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
69 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
70 #include "swscale.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
71 #include "swscale_internal.h"
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
72 #include "x86_cpu.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
73 #include "bswap.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
74 #include "rgb2rgb.h"
23361
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
75 #include "libavcodec/opt.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
76
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
77 #undef MOVNTQ
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
78 #undef PAVGB
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
79
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
80 //#undef HAVE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
81 //#define HAVE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
82 //#undef HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
83 //#undef ARCH_X86
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
84 //#define WORDS_BIGENDIAN
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
85 #define DITHER1XBPP
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
86
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
87 #define FAST_BGR2YV12 // use 7 bit coeffs instead of 15bit
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
88
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
89 #define RET 0xC3 //near return opcode for X86
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
90
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
91 #ifdef MP_DEBUG
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
92 #define ASSERT(x) assert(x);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
93 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
94 #define ASSERT(x) ;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
95 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
96
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
97 #ifdef M_PI
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
98 #define PI M_PI
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
99 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
100 #define PI 3.14159265358979323846
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
101 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
102
23278
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
103 #define isSupportedIn(x) ( \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
104 (x)==PIX_FMT_YUV420P \
24581
a7fe1ee84511 add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents: 24289
diff changeset
105 || (x)==PIX_FMT_YUVA420P \
23278
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
106 || (x)==PIX_FMT_YUYV422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
107 || (x)==PIX_FMT_UYVY422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
108 || (x)==PIX_FMT_RGB32 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
109 || (x)==PIX_FMT_BGR24 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
110 || (x)==PIX_FMT_BGR565 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
111 || (x)==PIX_FMT_BGR555 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
112 || (x)==PIX_FMT_BGR32 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
113 || (x)==PIX_FMT_RGB24 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
114 || (x)==PIX_FMT_RGB565 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
115 || (x)==PIX_FMT_RGB555 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
116 || (x)==PIX_FMT_GRAY8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
117 || (x)==PIX_FMT_YUV410P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
118 || (x)==PIX_FMT_GRAY16BE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
119 || (x)==PIX_FMT_GRAY16LE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
120 || (x)==PIX_FMT_YUV444P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
121 || (x)==PIX_FMT_YUV422P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
122 || (x)==PIX_FMT_YUV411P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
123 || (x)==PIX_FMT_PAL8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
124 || (x)==PIX_FMT_BGR8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
125 || (x)==PIX_FMT_RGB8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
126 || (x)==PIX_FMT_BGR4_BYTE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
127 || (x)==PIX_FMT_RGB4_BYTE \
23791
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
128 || (x)==PIX_FMT_YUV440P \
23278
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
129 )
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
130 #define isSupportedOut(x) ( \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
131 (x)==PIX_FMT_YUV420P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
132 || (x)==PIX_FMT_YUYV422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
133 || (x)==PIX_FMT_UYVY422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
134 || (x)==PIX_FMT_YUV444P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
135 || (x)==PIX_FMT_YUV422P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
136 || (x)==PIX_FMT_YUV411P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
137 || isRGB(x) \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
138 || isBGR(x) \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
139 || (x)==PIX_FMT_NV12 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
140 || (x)==PIX_FMT_NV21 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
141 || (x)==PIX_FMT_GRAY16BE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
142 || (x)==PIX_FMT_GRAY16LE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
143 || (x)==PIX_FMT_GRAY8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
144 || (x)==PIX_FMT_YUV410P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
145 )
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
146 #define isPacked(x) ( \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
147 (x)==PIX_FMT_PAL8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
148 || (x)==PIX_FMT_YUYV422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
149 || (x)==PIX_FMT_UYVY422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
150 || isRGB(x) \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
151 || isBGR(x) \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
152 )
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
153
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
154 #define RGB2YUV_SHIFT 16
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
155 #define BY ((int)( 0.098*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
156 #define BV ((int)(-0.071*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
157 #define BU ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
158 #define GY ((int)( 0.504*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
159 #define GV ((int)(-0.368*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
160 #define GU ((int)(-0.291*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
161 #define RY ((int)( 0.257*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
162 #define RV ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
163 #define RU ((int)(-0.148*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
164
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
165 extern const int32_t Inverse_Table_6_9[8][4];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
166
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
167 /*
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
168 NOTES
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
169 Special versions: fast Y 1:1 scaling (no interpolation in y direction)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
170
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
171 TODO
23869
diego
parents: 23791
diff changeset
172 more intelligent misalignment avoidance for the horizontal scaler
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
173 write special vertical cubic upscale version
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
174 Optimize C code (yv12 / minmax)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
175 add support for packed pixel yuv input & output
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
176 add support for Y8 output
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
177 optimize bgr24 & bgr32
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
178 add BGR4 output support
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
179 write special BGR->BGR scaler
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
180 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
181
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
182 #if defined(ARCH_X86) && defined (CONFIG_GPL)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
183 static uint64_t attribute_used __attribute__((aligned(8))) bF8= 0xF8F8F8F8F8F8F8F8LL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
184 static uint64_t attribute_used __attribute__((aligned(8))) bFC= 0xFCFCFCFCFCFCFCFCLL;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
185 static uint64_t __attribute__((aligned(8))) w10= 0x0010001000100010LL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
186 static uint64_t attribute_used __attribute__((aligned(8))) w02= 0x0002000200020002LL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
187 static uint64_t attribute_used __attribute__((aligned(8))) bm00001111=0x00000000FFFFFFFFLL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
188 static uint64_t attribute_used __attribute__((aligned(8))) bm00000111=0x0000000000FFFFFFLL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
189 static uint64_t attribute_used __attribute__((aligned(8))) bm11111000=0xFFFFFFFFFF000000LL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
190 static uint64_t attribute_used __attribute__((aligned(8))) bm01010101=0x00FF00FF00FF00FFLL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
191
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
192 static volatile uint64_t attribute_used __attribute__((aligned(8))) b5Dither;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
193 static volatile uint64_t attribute_used __attribute__((aligned(8))) g5Dither;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
194 static volatile uint64_t attribute_used __attribute__((aligned(8))) g6Dither;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
195 static volatile uint64_t attribute_used __attribute__((aligned(8))) r5Dither;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
196
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
197 static uint64_t __attribute__((aligned(8))) dither4[2]={
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
198 0x0103010301030103LL,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
199 0x0200020002000200LL,};
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
200
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
201 static uint64_t __attribute__((aligned(8))) dither8[2]={
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
202 0x0602060206020602LL,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
203 0x0004000400040004LL,};
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
204
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
205 static uint64_t __attribute__((aligned(8))) b16Mask= 0x001F001F001F001FLL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
206 static uint64_t attribute_used __attribute__((aligned(8))) g16Mask= 0x07E007E007E007E0LL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
207 static uint64_t attribute_used __attribute__((aligned(8))) r16Mask= 0xF800F800F800F800LL;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
208 static uint64_t __attribute__((aligned(8))) b15Mask= 0x001F001F001F001FLL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
209 static uint64_t attribute_used __attribute__((aligned(8))) g15Mask= 0x03E003E003E003E0LL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
210 static uint64_t attribute_used __attribute__((aligned(8))) r15Mask= 0x7C007C007C007C00LL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
211
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
212 static uint64_t attribute_used __attribute__((aligned(8))) M24A= 0x00FF0000FF0000FFLL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
213 static uint64_t attribute_used __attribute__((aligned(8))) M24B= 0xFF0000FF0000FF00LL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
214 static uint64_t attribute_used __attribute__((aligned(8))) M24C= 0x0000FF0000FF0000LL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
215
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
216 #ifdef FAST_BGR2YV12
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
217 static const uint64_t bgr2YCoeff attribute_used __attribute__((aligned(8))) = 0x000000210041000DULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
218 static const uint64_t bgr2UCoeff attribute_used __attribute__((aligned(8))) = 0x0000FFEEFFDC0038ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
219 static const uint64_t bgr2VCoeff attribute_used __attribute__((aligned(8))) = 0x00000038FFD2FFF8ULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
220 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
221 static const uint64_t bgr2YCoeff attribute_used __attribute__((aligned(8))) = 0x000020E540830C8BULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
222 static const uint64_t bgr2UCoeff attribute_used __attribute__((aligned(8))) = 0x0000ED0FDAC23831ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
223 static const uint64_t bgr2VCoeff attribute_used __attribute__((aligned(8))) = 0x00003831D0E6F6EAULL;
19206
c629606a0702 Comment some #endif lines.
diego
parents: 19181
diff changeset
224 #endif /* FAST_BGR2YV12 */
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
225 static const uint64_t bgr2YOffset attribute_used __attribute__((aligned(8))) = 0x1010101010101010ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
226 static const uint64_t bgr2UVOffset attribute_used __attribute__((aligned(8))) = 0x8080808080808080ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
227 static const uint64_t w1111 attribute_used __attribute__((aligned(8))) = 0x0001000100010001ULL;
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20411
diff changeset
228 #endif /* defined(ARCH_X86) */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
229
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
230 // clipping helper table for C implementations:
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
231 static unsigned char clip_table[768];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
232
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
233 static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
234
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
235 extern const uint8_t dither_2x2_4[2][8];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
236 extern const uint8_t dither_2x2_8[2][8];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
237 extern const uint8_t dither_8x8_32[8][8];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
238 extern const uint8_t dither_8x8_73[8][8];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
239 extern const uint8_t dither_8x8_220[8][8];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
240
21981
a14ddab18acd Pass a context to av_log(), when possible
lucabe
parents: 21869
diff changeset
241 static const char * sws_context_to_name(void * ptr) {
a14ddab18acd Pass a context to av_log(), when possible
lucabe
parents: 21869
diff changeset
242 return "swscaler";
a14ddab18acd Pass a context to av_log(), when possible
lucabe
parents: 21869
diff changeset
243 }
a14ddab18acd Pass a context to av_log(), when possible
lucabe
parents: 21869
diff changeset
244
23361
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
245 #define OFFSET(x) offsetof(SwsContext, x)
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
246 #define DEFAULT 0
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
247 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
248
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
249 static const AVOption options[] = {
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
250 { "sws_flags", "scaler/cpu flags", OFFSET(flags), FF_OPT_TYPE_FLAGS, DEFAULT, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
251 { "fast_bilinear", "fast bilinear", 0, FF_OPT_TYPE_CONST, SWS_FAST_BILINEAR, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
252 { "bilinear", "bilinear", 0, FF_OPT_TYPE_CONST, SWS_BILINEAR, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
253 { "bicubic", "bicubic", 0, FF_OPT_TYPE_CONST, SWS_BICUBIC, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
254 { "experimental", "experimental", 0, FF_OPT_TYPE_CONST, SWS_X, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
255 { "neighbor", "nearest neighbor", 0, FF_OPT_TYPE_CONST, SWS_POINT, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
256 { "area", "averaging area", 0, FF_OPT_TYPE_CONST, SWS_AREA, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
257 { "bicublin", "luma bicubic, chroma bilinear", 0, FF_OPT_TYPE_CONST, SWS_BICUBLIN, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
258 { "gauss", "gaussian", 0, FF_OPT_TYPE_CONST, SWS_GAUSS, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
259 { "sinc", "sinc", 0, FF_OPT_TYPE_CONST, SWS_SINC, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
260 { "lanczos", "lanczos", 0, FF_OPT_TYPE_CONST, SWS_LANCZOS, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
261 { "spline", "natural bicubic spline", 0, FF_OPT_TYPE_CONST, SWS_SPLINE, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
262 { "print_info", "print info", 0, FF_OPT_TYPE_CONST, SWS_PRINT_INFO, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
263 { "accurate_rnd", "accurate rounding", 0, FF_OPT_TYPE_CONST, SWS_ACCURATE_RND, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
264 { "mmx", "MMX SIMD acceleration", 0, FF_OPT_TYPE_CONST, SWS_CPU_CAPS_MMX, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
265 { "mmx2", "MMX2 SIMD acceleration", 0, FF_OPT_TYPE_CONST, SWS_CPU_CAPS_MMX2, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
266 { "3dnow", "3DNOW SIMD acceleration", 0, FF_OPT_TYPE_CONST, SWS_CPU_CAPS_3DNOW, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
267 { "altivec", "AltiVec SIMD acceleration", 0, FF_OPT_TYPE_CONST, SWS_CPU_CAPS_ALTIVEC, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
268 { "bfin", "Blackfin SIMD acceleration", 0, FF_OPT_TYPE_CONST, SWS_CPU_CAPS_BFIN, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
269 { "full_chroma_int", "full chroma interpolation", 0 , FF_OPT_TYPE_CONST, SWS_FULL_CHR_H_INT, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
270 { "full_chroma_inp", "full chroma input", 0 , FF_OPT_TYPE_CONST, SWS_FULL_CHR_H_INP, INT_MIN, INT_MAX, VE, "sws_flags" },
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
271 { NULL }
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
272 };
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
273
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
274 #undef VE
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
275 #undef DEFAULT
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
276
705f72c9a0f6 ffmpeg -sws_flags command line option to set swscaler flags
ivo
parents: 23289
diff changeset
277 static AVClass sws_context_class = { "SWScaler", sws_context_to_name, options };
21981
a14ddab18acd Pass a context to av_log(), when possible
lucabe
parents: 21869
diff changeset
278
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
279 char *sws_format_name(enum PixelFormat format)
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
280 {
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
281 switch (format) {
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
282 case PIX_FMT_YUV420P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
283 return "yuv420p";
24581
a7fe1ee84511 add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents: 24289
diff changeset
284 case PIX_FMT_YUVA420P:
a7fe1ee84511 add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents: 24289
diff changeset
285 return "yuva420p";
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
286 case PIX_FMT_YUYV422:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
287 return "yuyv422";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
288 case PIX_FMT_RGB24:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
289 return "rgb24";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
290 case PIX_FMT_BGR24:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
291 return "bgr24";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
292 case PIX_FMT_YUV422P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
293 return "yuv422p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
294 case PIX_FMT_YUV444P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
295 return "yuv444p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
296 case PIX_FMT_RGB32:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
297 return "rgb32";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
298 case PIX_FMT_YUV410P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
299 return "yuv410p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
300 case PIX_FMT_YUV411P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
301 return "yuv411p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
302 case PIX_FMT_RGB565:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
303 return "rgb565";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
304 case PIX_FMT_RGB555:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
305 return "rgb555";
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
306 case PIX_FMT_GRAY16BE:
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
307 return "gray16be";
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
308 case PIX_FMT_GRAY16LE:
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
309 return "gray16le";
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
310 case PIX_FMT_GRAY8:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
311 return "gray8";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
312 case PIX_FMT_MONOWHITE:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
313 return "mono white";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
314 case PIX_FMT_MONOBLACK:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
315 return "mono black";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
316 case PIX_FMT_PAL8:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
317 return "Palette";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
318 case PIX_FMT_YUVJ420P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
319 return "yuvj420p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
320 case PIX_FMT_YUVJ422P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
321 return "yuvj422p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
322 case PIX_FMT_YUVJ444P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
323 return "yuvj444p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
324 case PIX_FMT_XVMC_MPEG2_MC:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
325 return "xvmc_mpeg2_mc";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
326 case PIX_FMT_XVMC_MPEG2_IDCT:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
327 return "xvmc_mpeg2_idct";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
328 case PIX_FMT_UYVY422:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
329 return "uyvy422";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
330 case PIX_FMT_UYYVYY411:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
331 return "uyyvyy411";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
332 case PIX_FMT_RGB32_1:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
333 return "rgb32x";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
334 case PIX_FMT_BGR32_1:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
335 return "bgr32x";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
336 case PIX_FMT_BGR32:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
337 return "bgr32";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
338 case PIX_FMT_BGR565:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
339 return "bgr565";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
340 case PIX_FMT_BGR555:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
341 return "bgr555";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
342 case PIX_FMT_BGR8:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
343 return "bgr8";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
344 case PIX_FMT_BGR4:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
345 return "bgr4";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
346 case PIX_FMT_BGR4_BYTE:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
347 return "bgr4 byte";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
348 case PIX_FMT_RGB8:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
349 return "rgb8";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
350 case PIX_FMT_RGB4:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
351 return "rgb4";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
352 case PIX_FMT_RGB4_BYTE:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
353 return "rgb4 byte";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
354 case PIX_FMT_NV12:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
355 return "nv12";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
356 case PIX_FMT_NV21:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
357 return "nv21";
23791
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
358 case PIX_FMT_YUV440P:
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
359 return "yuv440p";
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
360 default:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
361 return "Unknown format";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
362 }
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
363 }
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
364
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
365 #if defined(ARCH_X86) && defined (CONFIG_GPL)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
366 void in_asm_used_var_warning_killer()
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
367 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
368 volatile int i= bF8+bFC+w10+
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
369 bm00001111+bm00000111+bm11111000+b16Mask+g16Mask+r16Mask+b15Mask+g15Mask+r15Mask+
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
370 M24A+M24B+M24C+w02 + b5Dither+g5Dither+r5Dither+g6Dither+dither4[0]+dither8[0]+bm01010101;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
371 if (i) i=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
372 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
373 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
374
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
375 static inline void yuv2yuvXinC(int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
376 int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
377 uint8_t *dest, uint8_t *uDest, uint8_t *vDest, int dstW, int chrDstW)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
378 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
379 //FIXME Optimize (just quickly writen not opti..)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
380 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
381 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
382 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
383 int val=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
384 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
385 for (j=0; j<lumFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
386 val += lumSrc[j][i] * lumFilter[j];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
387
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
388 dest[i]= av_clip_uint8(val>>19);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
389 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
390
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
391 if (uDest != NULL)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
392 for (i=0; i<chrDstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
393 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
394 int u=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
395 int v=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
396 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
397 for (j=0; j<chrFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
398 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
399 u += chrSrc[j][i] * chrFilter[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
400 v += chrSrc[j][i + 2048] * chrFilter[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
401 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
402
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
403 uDest[i]= av_clip_uint8(u>>19);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
404 vDest[i]= av_clip_uint8(v>>19);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
405 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
406 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
407
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
408 static inline void yuv2nv12XinC(int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
409 int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
410 uint8_t *dest, uint8_t *uDest, int dstW, int chrDstW, int dstFormat)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
411 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
412 //FIXME Optimize (just quickly writen not opti..)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
413 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
414 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
415 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
416 int val=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
417 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
418 for (j=0; j<lumFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
419 val += lumSrc[j][i] * lumFilter[j];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
420
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
421 dest[i]= av_clip_uint8(val>>19);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
422 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
423
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
424 if (uDest == NULL)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
425 return;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
426
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
427 if (dstFormat == PIX_FMT_NV12)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
428 for (i=0; i<chrDstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
429 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
430 int u=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
431 int v=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
432 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
433 for (j=0; j<chrFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
434 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
435 u += chrSrc[j][i] * chrFilter[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
436 v += chrSrc[j][i + 2048] * chrFilter[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
437 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
438
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
439 uDest[2*i]= av_clip_uint8(u>>19);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
440 uDest[2*i+1]= av_clip_uint8(v>>19);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
441 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
442 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
443 for (i=0; i<chrDstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
444 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
445 int u=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
446 int v=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
447 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
448 for (j=0; j<chrFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
449 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
450 u += chrSrc[j][i] * chrFilter[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
451 v += chrSrc[j][i + 2048] * chrFilter[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
452 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
453
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
454 uDest[2*i]= av_clip_uint8(v>>19);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
455 uDest[2*i+1]= av_clip_uint8(u>>19);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
456 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
457 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
458
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
459 #define YSCALE_YUV_2_PACKEDX_C(type) \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
460 for (i=0; i<(dstW>>1); i++){\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
461 int j;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
462 int Y1 = 1<<18;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
463 int Y2 = 1<<18;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
464 int U = 1<<18;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
465 int V = 1<<18;\
23400
16cce5d6ff9f rename attribute_unused to av_unused as it is declared in common.h
benoit
parents: 23382
diff changeset
466 type av_unused *r, *b, *g;\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
467 const int i2= 2*i;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
468 \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
469 for (j=0; j<lumFilterSize; j++)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
470 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
471 Y1 += lumSrc[j][i2] * lumFilter[j];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
472 Y2 += lumSrc[j][i2+1] * lumFilter[j];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
473 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
474 for (j=0; j<chrFilterSize; j++)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
475 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
476 U += chrSrc[j][i] * chrFilter[j];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
477 V += chrSrc[j][i+2048] * chrFilter[j];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
478 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
479 Y1>>=19;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
480 Y2>>=19;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
481 U >>=19;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
482 V >>=19;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
483 if ((Y1|Y2|U|V)&256)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
484 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
485 if (Y1>255) Y1=255; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
486 else if (Y1<0)Y1=0; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
487 if (Y2>255) Y2=255; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
488 else if (Y2<0)Y2=0; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
489 if (U>255) U=255; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
490 else if (U<0) U=0; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
491 if (V>255) V=255; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
492 else if (V<0) V=0; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
493 }
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
494
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
495 #define YSCALE_YUV_2_RGBX_C(type) \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
496 YSCALE_YUV_2_PACKEDX_C(type) \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
497 r = (type *)c->table_rV[V]; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
498 g = (type *)(c->table_gU[U] + c->table_gV[V]); \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
499 b = (type *)c->table_bU[U]; \
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
500
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
501 #define YSCALE_YUV_2_PACKED2_C \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
502 for (i=0; i<(dstW>>1); i++){ \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
503 const int i2= 2*i; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
504 int Y1= (buf0[i2 ]*yalpha1+buf1[i2 ]*yalpha)>>19; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
505 int Y2= (buf0[i2+1]*yalpha1+buf1[i2+1]*yalpha)>>19; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
506 int U= (uvbuf0[i ]*uvalpha1+uvbuf1[i ]*uvalpha)>>19; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
507 int V= (uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19; \
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
508
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
509 #define YSCALE_YUV_2_RGB2_C(type) \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
510 YSCALE_YUV_2_PACKED2_C\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
511 type *r, *b, *g;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
512 r = (type *)c->table_rV[V];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
513 g = (type *)(c->table_gU[U] + c->table_gV[V]);\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
514 b = (type *)c->table_bU[U];\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
515
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
516 #define YSCALE_YUV_2_PACKED1_C \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
517 for (i=0; i<(dstW>>1); i++){\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
518 const int i2= 2*i;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
519 int Y1= buf0[i2 ]>>7;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
520 int Y2= buf0[i2+1]>>7;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
521 int U= (uvbuf1[i ])>>7;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
522 int V= (uvbuf1[i+2048])>>7;\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
523
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
524 #define YSCALE_YUV_2_RGB1_C(type) \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
525 YSCALE_YUV_2_PACKED1_C\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
526 type *r, *b, *g;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
527 r = (type *)c->table_rV[V];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
528 g = (type *)(c->table_gU[U] + c->table_gV[V]);\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
529 b = (type *)c->table_bU[U];\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
530
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
531 #define YSCALE_YUV_2_PACKED1B_C \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
532 for (i=0; i<(dstW>>1); i++){\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
533 const int i2= 2*i;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
534 int Y1= buf0[i2 ]>>7;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
535 int Y2= buf0[i2+1]>>7;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
536 int U= (uvbuf0[i ] + uvbuf1[i ])>>8;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
537 int V= (uvbuf0[i+2048] + uvbuf1[i+2048])>>8;\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
538
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
539 #define YSCALE_YUV_2_RGB1B_C(type) \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
540 YSCALE_YUV_2_PACKED1B_C\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
541 type *r, *b, *g;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
542 r = (type *)c->table_rV[V];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
543 g = (type *)(c->table_gU[U] + c->table_gV[V]);\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
544 b = (type *)c->table_bU[U];\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
545
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
546 #define YSCALE_YUV_2_ANYRGB_C(func, func2)\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
547 switch(c->dstFormat)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
548 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
549 case PIX_FMT_RGB32:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
550 case PIX_FMT_BGR32:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
551 func(uint32_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
552 ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
553 ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
554 } \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
555 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
556 case PIX_FMT_RGB24:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
557 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
558 ((uint8_t*)dest)[0]= r[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
559 ((uint8_t*)dest)[1]= g[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
560 ((uint8_t*)dest)[2]= b[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
561 ((uint8_t*)dest)[3]= r[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
562 ((uint8_t*)dest)[4]= g[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
563 ((uint8_t*)dest)[5]= b[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
564 dest+=6;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
565 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
566 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
567 case PIX_FMT_BGR24:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
568 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
569 ((uint8_t*)dest)[0]= b[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
570 ((uint8_t*)dest)[1]= g[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
571 ((uint8_t*)dest)[2]= r[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
572 ((uint8_t*)dest)[3]= b[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
573 ((uint8_t*)dest)[4]= g[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
574 ((uint8_t*)dest)[5]= r[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
575 dest+=6;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
576 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
577 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
578 case PIX_FMT_RGB565:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
579 case PIX_FMT_BGR565:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
580 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
581 const int dr1= dither_2x2_8[y&1 ][0];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
582 const int dg1= dither_2x2_4[y&1 ][0];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
583 const int db1= dither_2x2_8[(y&1)^1][0];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
584 const int dr2= dither_2x2_8[y&1 ][1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
585 const int dg2= dither_2x2_4[y&1 ][1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
586 const int db2= dither_2x2_8[(y&1)^1][1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
587 func(uint16_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
588 ((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
589 ((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
590 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
591 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
592 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
593 case PIX_FMT_RGB555:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
594 case PIX_FMT_BGR555:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
595 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
596 const int dr1= dither_2x2_8[y&1 ][0];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
597 const int dg1= dither_2x2_8[y&1 ][1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
598 const int db1= dither_2x2_8[(y&1)^1][0];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
599 const int dr2= dither_2x2_8[y&1 ][1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
600 const int dg2= dither_2x2_8[y&1 ][0];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
601 const int db2= dither_2x2_8[(y&1)^1][1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
602 func(uint16_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
603 ((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
604 ((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
605 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
606 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
607 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
608 case PIX_FMT_RGB8:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
609 case PIX_FMT_BGR8:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
610 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
611 const uint8_t * const d64= dither_8x8_73[y&7];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
612 const uint8_t * const d32= dither_8x8_32[y&7];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
613 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
614 ((uint8_t*)dest)[i2+0]= r[Y1+d32[(i2+0)&7]] + g[Y1+d32[(i2+0)&7]] + b[Y1+d64[(i2+0)&7]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
615 ((uint8_t*)dest)[i2+1]= r[Y2+d32[(i2+1)&7]] + g[Y2+d32[(i2+1)&7]] + b[Y2+d64[(i2+1)&7]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
616 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
617 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
618 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
619 case PIX_FMT_RGB4:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
620 case PIX_FMT_BGR4:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
621 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
622 const uint8_t * const d64= dither_8x8_73 [y&7];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
623 const uint8_t * const d128=dither_8x8_220[y&7];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
624 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
625 ((uint8_t*)dest)[i]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]]\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
626 + ((r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]])<<4);\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
627 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
628 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
629 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
630 case PIX_FMT_RGB4_BYTE:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
631 case PIX_FMT_BGR4_BYTE:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
632 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
633 const uint8_t * const d64= dither_8x8_73 [y&7];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
634 const uint8_t * const d128=dither_8x8_220[y&7];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
635 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
636 ((uint8_t*)dest)[i2+0]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
637 ((uint8_t*)dest)[i2+1]= r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
638 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
639 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
640 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
641 case PIX_FMT_MONOBLACK:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
642 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
643 const uint8_t * const d128=dither_8x8_220[y&7];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
644 uint8_t *g= c->table_gU[128] + c->table_gV[128];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
645 for (i=0; i<dstW-7; i+=8){\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
646 int acc;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
647 acc = g[((buf0[i ]*yalpha1+buf1[i ]*yalpha)>>19) + d128[0]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
648 acc+= acc + g[((buf0[i+1]*yalpha1+buf1[i+1]*yalpha)>>19) + d128[1]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
649 acc+= acc + g[((buf0[i+2]*yalpha1+buf1[i+2]*yalpha)>>19) + d128[2]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
650 acc+= acc + g[((buf0[i+3]*yalpha1+buf1[i+3]*yalpha)>>19) + d128[3]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
651 acc+= acc + g[((buf0[i+4]*yalpha1+buf1[i+4]*yalpha)>>19) + d128[4]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
652 acc+= acc + g[((buf0[i+5]*yalpha1+buf1[i+5]*yalpha)>>19) + d128[5]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
653 acc+= acc + g[((buf0[i+6]*yalpha1+buf1[i+6]*yalpha)>>19) + d128[6]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
654 acc+= acc + g[((buf0[i+7]*yalpha1+buf1[i+7]*yalpha)>>19) + d128[7]];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
655 ((uint8_t*)dest)[0]= acc;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
656 dest++;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
657 }\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
658 \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
659 /*\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
660 ((uint8_t*)dest)-= dstW>>4;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
661 {\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
662 int acc=0;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
663 int left=0;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
664 static int top[1024];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
665 static int last_new[1024][1024];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
666 static int last_in3[1024][1024];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
667 static int drift[1024][1024];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
668 int topLeft=0;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
669 int shift=0;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
670 int count=0;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
671 const uint8_t * const d128=dither_8x8_220[y&7];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
672 int error_new=0;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
673 int error_in3=0;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
674 int f=0;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
675 \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
676 for (i=dstW>>1; i<dstW; i++){\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
677 int in= ((buf0[i ]*yalpha1+buf1[i ]*yalpha)>>19);\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
678 int in2 = (76309 * (in - 16) + 32768) >> 16;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
679 int in3 = (in2 < 0) ? 0 : ((in2 > 255) ? 255 : in2);\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
680 int old= (left*7 + topLeft + top[i]*5 + top[i+1]*3)/20 + in3\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
681 + (last_new[y][i] - in3)*f/256;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
682 int new= old> 128 ? 255 : 0;\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
683 \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
684 error_new+= FFABS(last_new[y][i] - new);\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
685 error_in3+= FFABS(last_in3[y][i] - in3);\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
686 f= error_new - error_in3*4;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
687 if (f<0) f=0;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
688 if (f>256) f=256;\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
689 \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
690 topLeft= top[i];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
691 left= top[i]= old - new;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
692 last_new[y][i]= new;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
693 last_in3[y][i]= in3;\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
694 \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
695 acc+= acc + (new&1);\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
696 if ((i&7)==6){\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
697 ((uint8_t*)dest)[0]= acc;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
698 ((uint8_t*)dest)++;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
699 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
700 }\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
701 }\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
702 */\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
703 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
704 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
705 case PIX_FMT_YUYV422:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
706 func2\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
707 ((uint8_t*)dest)[2*i2+0]= Y1;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
708 ((uint8_t*)dest)[2*i2+1]= U;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
709 ((uint8_t*)dest)[2*i2+2]= Y2;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
710 ((uint8_t*)dest)[2*i2+3]= V;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
711 } \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
712 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
713 case PIX_FMT_UYVY422:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
714 func2\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
715 ((uint8_t*)dest)[2*i2+0]= U;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
716 ((uint8_t*)dest)[2*i2+1]= Y1;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
717 ((uint8_t*)dest)[2*i2+2]= V;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
718 ((uint8_t*)dest)[2*i2+3]= Y2;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
719 } \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
720 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
721 }\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
722
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
723
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
724 static inline void yuv2packedXinC(SwsContext *c, int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
725 int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
726 uint8_t *dest, int dstW, int y)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
727 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
728 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
729 switch(c->dstFormat)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
730 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
731 case PIX_FMT_BGR32:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
732 case PIX_FMT_RGB32:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
733 YSCALE_YUV_2_RGBX_C(uint32_t)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
734 ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
735 ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
736 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
737 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
738 case PIX_FMT_RGB24:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
739 YSCALE_YUV_2_RGBX_C(uint8_t)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
740 ((uint8_t*)dest)[0]= r[Y1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
741 ((uint8_t*)dest)[1]= g[Y1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
742 ((uint8_t*)dest)[2]= b[Y1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
743 ((uint8_t*)dest)[3]= r[Y2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
744 ((uint8_t*)dest)[4]= g[Y2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
745 ((uint8_t*)dest)[5]= b[Y2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
746 dest+=6;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
747 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
748 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
749 case PIX_FMT_BGR24:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
750 YSCALE_YUV_2_RGBX_C(uint8_t)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
751 ((uint8_t*)dest)[0]= b[Y1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
752 ((uint8_t*)dest)[1]= g[Y1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
753 ((uint8_t*)dest)[2]= r[Y1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
754 ((uint8_t*)dest)[3]= b[Y2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
755 ((uint8_t*)dest)[4]= g[Y2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
756 ((uint8_t*)dest)[5]= r[Y2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
757 dest+=6;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
758 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
759 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
760 case PIX_FMT_RGB565:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
761 case PIX_FMT_BGR565:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
762 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
763 const int dr1= dither_2x2_8[y&1 ][0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
764 const int dg1= dither_2x2_4[y&1 ][0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
765 const int db1= dither_2x2_8[(y&1)^1][0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
766 const int dr2= dither_2x2_8[y&1 ][1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
767 const int dg2= dither_2x2_4[y&1 ][1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
768 const int db2= dither_2x2_8[(y&1)^1][1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
769 YSCALE_YUV_2_RGBX_C(uint16_t)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
770 ((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
771 ((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
772 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
773 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
774 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
775 case PIX_FMT_RGB555:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
776 case PIX_FMT_BGR555:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
777 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
778 const int dr1= dither_2x2_8[y&1 ][0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
779 const int dg1= dither_2x2_8[y&1 ][1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
780 const int db1= dither_2x2_8[(y&1)^1][0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
781 const int dr2= dither_2x2_8[y&1 ][1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
782 const int dg2= dither_2x2_8[y&1 ][0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
783 const int db2= dither_2x2_8[(y&1)^1][1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
784 YSCALE_YUV_2_RGBX_C(uint16_t)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
785 ((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
786 ((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
787 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
788 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
789 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
790 case PIX_FMT_RGB8:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
791 case PIX_FMT_BGR8:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
792 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
793 const uint8_t * const d64= dither_8x8_73[y&7];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
794 const uint8_t * const d32= dither_8x8_32[y&7];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
795 YSCALE_YUV_2_RGBX_C(uint8_t)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
796 ((uint8_t*)dest)[i2+0]= r[Y1+d32[(i2+0)&7]] + g[Y1+d32[(i2+0)&7]] + b[Y1+d64[(i2+0)&7]];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
797 ((uint8_t*)dest)[i2+1]= r[Y2+d32[(i2+1)&7]] + g[Y2+d32[(i2+1)&7]] + b[Y2+d64[(i2+1)&7]];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
798 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
799 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
800 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
801 case PIX_FMT_RGB4:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
802 case PIX_FMT_BGR4:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
803 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
804 const uint8_t * const d64= dither_8x8_73 [y&7];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
805 const uint8_t * const d128=dither_8x8_220[y&7];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
806 YSCALE_YUV_2_RGBX_C(uint8_t)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
807 ((uint8_t*)dest)[i]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]]
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
808 +((r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]])<<4);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
809 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
810 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
811 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
812 case PIX_FMT_RGB4_BYTE:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
813 case PIX_FMT_BGR4_BYTE:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
814 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
815 const uint8_t * const d64= dither_8x8_73 [y&7];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
816 const uint8_t * const d128=dither_8x8_220[y&7];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
817 YSCALE_YUV_2_RGBX_C(uint8_t)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
818 ((uint8_t*)dest)[i2+0]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
819 ((uint8_t*)dest)[i2+1]= r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
820 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
821 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
822 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
823 case PIX_FMT_MONOBLACK:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
824 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
825 const uint8_t * const d128=dither_8x8_220[y&7];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
826 uint8_t *g= c->table_gU[128] + c->table_gV[128];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
827 int acc=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
828 for (i=0; i<dstW-1; i+=2){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
829 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
830 int Y1=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
831 int Y2=1<<18;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
832
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
833 for (j=0; j<lumFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
834 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
835 Y1 += lumSrc[j][i] * lumFilter[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
836 Y2 += lumSrc[j][i+1] * lumFilter[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
837 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
838 Y1>>=19;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
839 Y2>>=19;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
840 if ((Y1|Y2)&256)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
841 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
842 if (Y1>255) Y1=255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
843 else if (Y1<0)Y1=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
844 if (Y2>255) Y2=255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
845 else if (Y2<0)Y2=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
846 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
847 acc+= acc + g[Y1+d128[(i+0)&7]];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
848 acc+= acc + g[Y2+d128[(i+1)&7]];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
849 if ((i&7)==6){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
850 ((uint8_t*)dest)[0]= acc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
851 dest++;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
852 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
853 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
854 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
855 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
856 case PIX_FMT_YUYV422:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
857 YSCALE_YUV_2_PACKEDX_C(void)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
858 ((uint8_t*)dest)[2*i2+0]= Y1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
859 ((uint8_t*)dest)[2*i2+1]= U;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
860 ((uint8_t*)dest)[2*i2+2]= Y2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
861 ((uint8_t*)dest)[2*i2+3]= V;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
862 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
863 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
864 case PIX_FMT_UYVY422:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
865 YSCALE_YUV_2_PACKEDX_C(void)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
866 ((uint8_t*)dest)[2*i2+0]= U;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
867 ((uint8_t*)dest)[2*i2+1]= Y1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
868 ((uint8_t*)dest)[2*i2+2]= V;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
869 ((uint8_t*)dest)[2*i2+3]= Y2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
870 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
871 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
872 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
873 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
874
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
875
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
876 //Note: we have C, X86, MMX, MMX2, 3DNOW version therse no 3DNOW+MMX2 one
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
877 //Plain C versions
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
878 #if !defined (HAVE_MMX) || defined (RUNTIME_CPUDETECT) || !defined(CONFIG_GPL)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
879 #define COMPILE_C
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
880 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
881
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
882 #ifdef ARCH_POWERPC
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
883 #if (defined (HAVE_ALTIVEC) || defined (RUNTIME_CPUDETECT)) && defined (CONFIG_GPL)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
884 #define COMPILE_ALTIVEC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
885 #endif //HAVE_ALTIVEC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
886 #endif //ARCH_POWERPC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
887
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20411
diff changeset
888 #if defined(ARCH_X86)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
889
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
890 #if ((defined (HAVE_MMX) && !defined (HAVE_3DNOW) && !defined (HAVE_MMX2)) || defined (RUNTIME_CPUDETECT)) && defined (CONFIG_GPL)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
891 #define COMPILE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
892 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
893
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
894 #if (defined (HAVE_MMX2) || defined (RUNTIME_CPUDETECT)) && defined (CONFIG_GPL)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
895 #define COMPILE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
896 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
897
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
898 #if ((defined (HAVE_3DNOW) && !defined (HAVE_MMX2)) || defined (RUNTIME_CPUDETECT)) && defined (CONFIG_GPL)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
899 #define COMPILE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
900 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
901 #endif //ARCH_X86 || ARCH_X86_64
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
902
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
903 #undef HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
904 #undef HAVE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
905 #undef HAVE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
906
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
907 #ifdef COMPILE_C
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
908 #undef HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
909 #undef HAVE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
910 #undef HAVE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
911 #undef HAVE_ALTIVEC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
912 #define RENAME(a) a ## _C
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
913 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
914 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
915
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
916 #ifdef ARCH_POWERPC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
917 #ifdef COMPILE_ALTIVEC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
918 #undef RENAME
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
919 #define HAVE_ALTIVEC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
920 #define RENAME(a) a ## _altivec
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
921 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
922 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
923 #endif //ARCH_POWERPC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
924
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20411
diff changeset
925 #if defined(ARCH_X86)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
926
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
927 //X86 versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
928 /*
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
929 #undef RENAME
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
930 #undef HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
931 #undef HAVE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
932 #undef HAVE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
933 #define ARCH_X86
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
934 #define RENAME(a) a ## _X86
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
935 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
936 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
937 //MMX versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
938 #ifdef COMPILE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
939 #undef RENAME
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
940 #define HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
941 #undef HAVE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
942 #undef HAVE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
943 #define RENAME(a) a ## _MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
944 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
945 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
946
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
947 //MMX2 versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
948 #ifdef COMPILE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
949 #undef RENAME
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
950 #define HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
951 #define HAVE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
952 #undef HAVE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
953 #define RENAME(a) a ## _MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
954 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
955 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
956
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
957 //3DNOW versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
958 #ifdef COMPILE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
959 #undef RENAME
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
960 #define HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
961 #undef HAVE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
962 #define HAVE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
963 #define RENAME(a) a ## _3DNow
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
964 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
965 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
966
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
967 #endif //ARCH_X86 || ARCH_X86_64
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
968
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
969 // minor note: the HAVE_xyz is messed up after that line so don't use it
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
970
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
971 static double getSplineCoeff(double a, double b, double c, double d, double dist)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
972 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
973 // printf("%f %f %f %f %f\n", a,b,c,d,dist);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
974 if (dist<=1.0) return ((d*dist + c)*dist + b)*dist +a;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
975 else return getSplineCoeff( 0.0,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
976 b+ 2.0*c + 3.0*d,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
977 c + 3.0*d,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
978 -b- 3.0*c - 6.0*d,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
979 dist-1.0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
980 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
981
19172
bae6c99a99cc vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents: 19169
diff changeset
982 static inline int initFilter(int16_t **outFilter, int16_t **filterPos, int *outFilterSize, int xInc,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
983 int srcW, int dstW, int filterAlign, int one, int flags,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
984 SwsVector *srcFilter, SwsVector *dstFilter, double param[2])
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
985 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
986 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
987 int filterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
988 int filter2Size;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
989 int minFilterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
990 double *filter=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
991 double *filter2=NULL;
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20411
diff changeset
992 #if defined(ARCH_X86)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
993 if (flags & SWS_CPU_CAPS_MMX)
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
994 asm volatile("emms\n\t"::: "memory"); //FIXME this should not be required but it IS (even for non-MMX versions)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
995 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
996
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
997 // Note the +1 is for the MMXscaler which reads over the end
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
998 *filterPos = av_malloc((dstW+1)*sizeof(int16_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
999
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1000 if (FFABS(xInc - 0x10000) <10) // unscaled
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1001 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1002 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1003 filterSize= 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1004 filter= av_malloc(dstW*sizeof(double)*filterSize);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1005 for (i=0; i<dstW*filterSize; i++) filter[i]=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1006
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1007 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1008 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1009 filter[i*filterSize]=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1010 (*filterPos)[i]=i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1011 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1012
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1013 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1014 else if (flags&SWS_POINT) // lame looking point sampling mode
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1015 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1016 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1017 int xDstInSrc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1018 filterSize= 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1019 filter= av_malloc(dstW*sizeof(double)*filterSize);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1020
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1021 xDstInSrc= xInc/2 - 0x8000;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1022 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1023 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1024 int xx= (xDstInSrc - ((filterSize-1)<<15) + (1<<15))>>16;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1025
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1026 (*filterPos)[i]= xx;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1027 filter[i]= 1.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1028 xDstInSrc+= xInc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1029 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1030 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1031 else if ((xInc <= (1<<16) && (flags&SWS_AREA)) || (flags&SWS_FAST_BILINEAR)) // bilinear upscale
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1032 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1033 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1034 int xDstInSrc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1035 if (flags&SWS_BICUBIC) filterSize= 4;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1036 else if (flags&SWS_X ) filterSize= 4;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1037 else filterSize= 2; // SWS_BILINEAR / SWS_AREA
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1038 filter= av_malloc(dstW*sizeof(double)*filterSize);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1039
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1040 xDstInSrc= xInc/2 - 0x8000;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1041 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1042 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1043 int xx= (xDstInSrc - ((filterSize-1)<<15) + (1<<15))>>16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1044 int j;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1045
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1046 (*filterPos)[i]= xx;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1047 //Bilinear upscale / linear interpolate / Area averaging
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1048 for (j=0; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1049 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1050 double d= FFABS((xx<<16) - xDstInSrc)/(double)(1<<16);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1051 double coeff= 1.0 - d;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1052 if (coeff<0) coeff=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1053 filter[i*filterSize + j]= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1054 xx++;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1055 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1056 xDstInSrc+= xInc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1057 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1058 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1059 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1060 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1061 double xDstInSrc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1062 double sizeFactor, filterSizeInSrc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1063 const double xInc1= (double)xInc / (double)(1<<16);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1064
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1065 if (flags&SWS_BICUBIC) sizeFactor= 4.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1066 else if (flags&SWS_X) sizeFactor= 8.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1067 else if (flags&SWS_AREA) sizeFactor= 1.0; //downscale only, for upscale it is bilinear
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1068 else if (flags&SWS_GAUSS) sizeFactor= 8.0; // infinite ;)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1069 else if (flags&SWS_LANCZOS) sizeFactor= param[0] != SWS_PARAM_DEFAULT ? 2.0*param[0] : 6.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1070 else if (flags&SWS_SINC) sizeFactor= 20.0; // infinite ;)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1071 else if (flags&SWS_SPLINE) sizeFactor= 20.0; // infinite ;)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1072 else if (flags&SWS_BILINEAR) sizeFactor= 2.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1073 else {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1074 sizeFactor= 0.0; //GCC warning killer
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1075 ASSERT(0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1076 }
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1077
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1078 if (xInc1 <= 1.0) filterSizeInSrc= sizeFactor; // upscale
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1079 else filterSizeInSrc= sizeFactor*srcW / (double)dstW;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1080
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1081 filterSize= (int)ceil(1 + filterSizeInSrc); // will be reduced later if possible
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1082 if (filterSize > srcW-2) filterSize=srcW-2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1083
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1084 filter= av_malloc(dstW*sizeof(double)*filterSize);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1085
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1086 xDstInSrc= xInc1 / 2.0 - 0.5;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1087 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1088 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1089 int xx= (int)(xDstInSrc - (filterSize-1)*0.5 + 0.5);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1090 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1091 (*filterPos)[i]= xx;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1092 for (j=0; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1093 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1094 double d= FFABS(xx - xDstInSrc)/filterSizeInSrc*sizeFactor;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1095 double coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1096 if (flags & SWS_BICUBIC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1097 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1098 double B= param[0] != SWS_PARAM_DEFAULT ? param[0] : 0.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1099 double C= param[1] != SWS_PARAM_DEFAULT ? param[1] : 0.6;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1100
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1101 if (d<1.0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1102 coeff = (12-9*B-6*C)*d*d*d + (-18+12*B+6*C)*d*d + 6-2*B;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1103 else if (d<2.0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1104 coeff = (-B-6*C)*d*d*d + (6*B+30*C)*d*d + (-12*B-48*C)*d +8*B+24*C;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1105 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1106 coeff=0.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1107 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1108 /* else if (flags & SWS_X)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1109 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1110 double p= param ? param*0.01 : 0.3;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1111 coeff = d ? sin(d*PI)/(d*PI) : 1.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1112 coeff*= pow(2.0, - p*d*d);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1113 }*/
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1114 else if (flags & SWS_X)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1115 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1116 double A= param[0] != SWS_PARAM_DEFAULT ? param[0] : 1.0;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1117
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1118 if (d<1.0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1119 coeff = cos(d*PI);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1120 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1121 coeff=-1.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1122 if (coeff<0.0) coeff= -pow(-coeff, A);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1123 else coeff= pow( coeff, A);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1124 coeff= coeff*0.5 + 0.5;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1125 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1126 else if (flags & SWS_AREA)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1127 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1128 double srcPixelSize= 1.0/xInc1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1129 if (d + srcPixelSize/2 < 0.5) coeff= 1.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1130 else if (d - srcPixelSize/2 < 0.5) coeff= (0.5-d)/srcPixelSize + 0.5;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1131 else coeff=0.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1132 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1133 else if (flags & SWS_GAUSS)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1134 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1135 double p= param[0] != SWS_PARAM_DEFAULT ? param[0] : 3.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1136 coeff = pow(2.0, - p*d*d);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1137 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1138 else if (flags & SWS_SINC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1139 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1140 coeff = d ? sin(d*PI)/(d*PI) : 1.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1141 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1142 else if (flags & SWS_LANCZOS)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1143 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1144 double p= param[0] != SWS_PARAM_DEFAULT ? param[0] : 3.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1145 coeff = d ? sin(d*PI)*sin(d*PI/p)/(d*d*PI*PI/p) : 1.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1146 if (d>p) coeff=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1147 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1148 else if (flags & SWS_BILINEAR)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1149 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1150 coeff= 1.0 - d;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1151 if (coeff<0) coeff=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1152 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1153 else if (flags & SWS_SPLINE)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1154 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1155 double p=-2.196152422706632;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1156 coeff = getSplineCoeff(1.0, 0.0, p, -p-1.0, d);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1157 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1158 else {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1159 coeff= 0.0; //GCC warning killer
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1160 ASSERT(0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1161 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1162
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1163 filter[i*filterSize + j]= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1164 xx++;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1165 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1166 xDstInSrc+= xInc1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1167 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1168 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1169
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1170 /* apply src & dst Filter to filter -> filter2
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1171 av_free(filter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1172 */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1173 ASSERT(filterSize>0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1174 filter2Size= filterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1175 if (srcFilter) filter2Size+= srcFilter->length - 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1176 if (dstFilter) filter2Size+= dstFilter->length - 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1177 ASSERT(filter2Size>0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1178 filter2= av_malloc(filter2Size*dstW*sizeof(double));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1179
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1180 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1181 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1182 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1183 SwsVector scaleFilter;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1184 SwsVector *outVec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1185
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1186 scaleFilter.coeff= filter + i*filterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1187 scaleFilter.length= filterSize;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1188
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1189 if (srcFilter) outVec= sws_getConvVec(srcFilter, &scaleFilter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1190 else outVec= &scaleFilter;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1191
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1192 ASSERT(outVec->length == filter2Size)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1193 //FIXME dstFilter
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1194
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1195 for (j=0; j<outVec->length; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1196 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1197 filter2[i*filter2Size + j]= outVec->coeff[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1198 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1199
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1200 (*filterPos)[i]+= (filterSize-1)/2 - (filter2Size-1)/2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1201
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1202 if (outVec != &scaleFilter) sws_freeVec(outVec);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1203 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1204 av_free(filter); filter=NULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1205
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1206 /* try to reduce the filter-size (step1 find size and shift left) */
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
1207 // Assume it is near normalized (*0.5 or *2.0 is OK but * 0.001 is not).
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1208 minFilterSize= 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1209 for (i=dstW-1; i>=0; i--)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1210 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1211 int min= filter2Size;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1212 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1213 double cutOff=0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1214
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1215 /* get rid off near zero elements on the left by shifting left */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1216 for (j=0; j<filter2Size; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1217 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1218 int k;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1219 cutOff += FFABS(filter2[i*filter2Size]);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1220
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1221 if (cutOff > SWS_MAX_REDUCE_CUTOFF) break;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1222
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
1223 /* preserve monotonicity because the core can't handle the filter otherwise */
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1224 if (i<dstW-1 && (*filterPos)[i] >= (*filterPos)[i+1]) break;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1225
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1226 // Move filter coeffs left
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1227 for (k=1; k<filter2Size; k++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1228 filter2[i*filter2Size + k - 1]= filter2[i*filter2Size + k];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1229 filter2[i*filter2Size + k - 1]= 0.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1230 (*filterPos)[i]++;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1231 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1232
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1233 cutOff=0.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1234 /* count near zeros on the right */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1235 for (j=filter2Size-1; j>0; j--)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1236 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1237 cutOff += FFABS(filter2[i*filter2Size + j]);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1238
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1239 if (cutOff > SWS_MAX_REDUCE_CUTOFF) break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1240 min--;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1241 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1242
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1243 if (min>minFilterSize) minFilterSize= min;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1244 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1245
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1246 if (flags & SWS_CPU_CAPS_ALTIVEC) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1247 // we can handle the special case 4,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1248 // so we don't want to go to the full 8
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1249 if (minFilterSize < 5)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1250 filterAlign = 4;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1251
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1252 // we really don't want to waste our time
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1253 // doing useless computation, so fall-back on
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1254 // the scalar C code for very small filter.
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1255 // vectorizing is worth it only if you have
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1256 // decent-sized vector.
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1257 if (minFilterSize < 3)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1258 filterAlign = 1;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1259 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1260
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1261 if (flags & SWS_CPU_CAPS_MMX) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1262 // special case for unscaled vertical filtering
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1263 if (minFilterSize == 1 && filterAlign == 2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1264 filterAlign= 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1265 }
19172
bae6c99a99cc vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents: 19169
diff changeset
1266
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1267 ASSERT(minFilterSize > 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1268 filterSize= (minFilterSize +(filterAlign-1)) & (~(filterAlign-1));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1269 ASSERT(filterSize > 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1270 filter= av_malloc(filterSize*dstW*sizeof(double));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1271 if (filterSize >= MAX_FILTER_SIZE)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1272 return -1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1273 *outFilterSize= filterSize;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1274
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1275 if (flags&SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1276 av_log(NULL, AV_LOG_VERBOSE, "SwScaler: reducing / aligning filtersize %d -> %d\n", filter2Size, filterSize);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1277 /* try to reduce the filter-size (step2 reduce it) */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1278 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1279 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1280 int j;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1281
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1282 for (j=0; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1283 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1284 if (j>=filter2Size) filter[i*filterSize + j]= 0.0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1285 else filter[i*filterSize + j]= filter2[i*filter2Size + j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1286 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1287 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1288 av_free(filter2); filter2=NULL;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1289
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1290
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1291 //FIXME try to align filterpos if possible
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1292
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1293 //fix borders
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1294 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1295 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1296 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1297 if ((*filterPos)[i] < 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1298 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1299 // Move filter coeffs left to compensate for filterPos
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1300 for (j=1; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1301 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1302 int left= FFMAX(j + (*filterPos)[i], 0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1303 filter[i*filterSize + left] += filter[i*filterSize + j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1304 filter[i*filterSize + j]=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1305 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1306 (*filterPos)[i]= 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1307 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1308
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1309 if ((*filterPos)[i] + filterSize > srcW)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1310 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1311 int shift= (*filterPos)[i] + filterSize - srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1312 // Move filter coeffs right to compensate for filterPos
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1313 for (j=filterSize-2; j>=0; j--)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1314 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1315 int right= FFMIN(j + shift, filterSize-1);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1316 filter[i*filterSize +right] += filter[i*filterSize +j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1317 filter[i*filterSize +j]=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1318 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1319 (*filterPos)[i]= srcW - filterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1320 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1321 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1322
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1323 // Note the +1 is for the MMXscaler which reads over the end
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1324 /* align at 16 for AltiVec (needed by hScale_altivec_real) */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1325 *outFilter= av_mallocz(*outFilterSize*(dstW+1)*sizeof(int16_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1326
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1327 /* Normalize & Store in outFilter */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1328 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1329 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1330 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1331 double error=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1332 double sum=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1333 double scale= one;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1334
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1335 for (j=0; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1336 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1337 sum+= filter[i*filterSize + j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1338 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1339 scale/= sum;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1340 for (j=0; j<*outFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1341 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1342 double v= filter[i*filterSize + j]*scale + error;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1343 int intV= floor(v + 0.5);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1344 (*outFilter)[i*(*outFilterSize) + j]= intV;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1345 error = v - intV;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1346 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1347 }
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1348
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1349 (*filterPos)[dstW]= (*filterPos)[dstW-1]; // the MMX scaler will read over the end
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1350 for (i=0; i<*outFilterSize; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1351 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1352 int j= dstW*(*outFilterSize);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1353 (*outFilter)[j + i]= (*outFilter)[j + i - (*outFilterSize)];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1354 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1355
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1356 av_free(filter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1357 return 0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1358 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1359
19368
eb51949c73eb Use COMPILE_MMX2 instead of HAVE_MMX2 to determine whether to compile
uau
parents: 19336
diff changeset
1360 #ifdef COMPILE_MMX2
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1361 static void initMMX2HScaler(int dstW, int xInc, uint8_t *funnyCode, int16_t *filter, int32_t *filterPos, int numSplits)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1362 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1363 uint8_t *fragmentA;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1364 long imm8OfPShufW1A;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1365 long imm8OfPShufW2A;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1366 long fragmentLengthA;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1367 uint8_t *fragmentB;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1368 long imm8OfPShufW1B;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1369 long imm8OfPShufW2B;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1370 long fragmentLengthB;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1371 int fragmentPos;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1372
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1373 int xpos, i;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1374
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1375 // create an optimized horizontal scaling routine
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1376
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1377 //code fragment
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1378
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1379 asm volatile(
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1380 "jmp 9f \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1381 // Begin
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1382 "0: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1383 "movq (%%"REG_d", %%"REG_a"), %%mm3 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1384 "movd (%%"REG_c", %%"REG_S"), %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1385 "movd 1(%%"REG_c", %%"REG_S"), %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1386 "punpcklbw %%mm7, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1387 "punpcklbw %%mm7, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1388 "pshufw $0xFF, %%mm1, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1389 "1: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1390 "pshufw $0xFF, %%mm0, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1391 "2: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1392 "psubw %%mm1, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1393 "movl 8(%%"REG_b", %%"REG_a"), %%esi \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1394 "pmullw %%mm3, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1395 "psllw $7, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1396 "paddw %%mm1, %%mm0 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1397
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1398 "movq %%mm0, (%%"REG_D", %%"REG_a") \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1399
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1400 "add $8, %%"REG_a" \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1401 // End
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1402 "9: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1403 // "int $3 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1404 "lea 0b, %0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1405 "lea 1b, %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1406 "lea 2b, %2 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1407 "dec %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1408 "dec %2 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1409 "sub %0, %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1410 "sub %0, %2 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1411 "lea 9b, %3 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1412 "sub %0, %3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1413
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1414
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1415 :"=r" (fragmentA), "=r" (imm8OfPShufW1A), "=r" (imm8OfPShufW2A),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1416 "=r" (fragmentLengthA)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1417 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1418
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1419 asm volatile(
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1420 "jmp 9f \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1421 // Begin
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1422 "0: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1423 "movq (%%"REG_d", %%"REG_a"), %%mm3 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1424 "movd (%%"REG_c", %%"REG_S"), %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1425 "punpcklbw %%mm7, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1426 "pshufw $0xFF, %%mm0, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1427 "1: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1428 "pshufw $0xFF, %%mm0, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1429 "2: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1430 "psubw %%mm1, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1431 "movl 8(%%"REG_b", %%"REG_a"), %%esi \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1432 "pmullw %%mm3, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1433 "psllw $7, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1434 "paddw %%mm1, %%mm0 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1435
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1436 "movq %%mm0, (%%"REG_D", %%"REG_a") \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1437
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1438 "add $8, %%"REG_a" \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1439 // End
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1440 "9: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1441 // "int $3 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1442 "lea 0b, %0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1443 "lea 1b, %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1444 "lea 2b, %2 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1445 "dec %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1446 "dec %2 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1447 "sub %0, %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1448 "sub %0, %2 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1449 "lea 9b, %3 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1450 "sub %0, %3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1451
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1452
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1453 :"=r" (fragmentB), "=r" (imm8OfPShufW1B), "=r" (imm8OfPShufW2B),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1454 "=r" (fragmentLengthB)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1455 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1456
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1457 xpos= 0; //lumXInc/2 - 0x8000; // difference between pixel centers
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1458 fragmentPos=0;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1459
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1460 for (i=0; i<dstW/numSplits; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1461 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1462 int xx=xpos>>16;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1463
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1464 if ((i&3) == 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1465 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1466 int a=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1467 int b=((xpos+xInc)>>16) - xx;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1468 int c=((xpos+xInc*2)>>16) - xx;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1469 int d=((xpos+xInc*3)>>16) - xx;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1470
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1471 filter[i ] = (( xpos & 0xFFFF) ^ 0xFFFF)>>9;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1472 filter[i+1] = (((xpos+xInc ) & 0xFFFF) ^ 0xFFFF)>>9;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1473 filter[i+2] = (((xpos+xInc*2) & 0xFFFF) ^ 0xFFFF)>>9;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1474 filter[i+3] = (((xpos+xInc*3) & 0xFFFF) ^ 0xFFFF)>>9;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1475 filterPos[i/2]= xx;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1476
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1477 if (d+1<4)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1478 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1479 int maxShift= 3-(d+1);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1480 int shift=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1481
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1482 memcpy(funnyCode + fragmentPos, fragmentB, fragmentLengthB);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1483
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1484 funnyCode[fragmentPos + imm8OfPShufW1B]=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1485 (a+1) | ((b+1)<<2) | ((c+1)<<4) | ((d+1)<<6);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1486 funnyCode[fragmentPos + imm8OfPShufW2B]=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1487 a | (b<<2) | (c<<4) | (d<<6);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1488
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1489 if (i+3>=dstW) shift=maxShift; //avoid overread
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1490 else if ((filterPos[i/2]&3) <= maxShift) shift=filterPos[i/2]&3; //Align
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1491
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1492 if (shift && i>=shift)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1493 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1494 funnyCode[fragmentPos + imm8OfPShufW1B]+= 0x55*shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1495 funnyCode[fragmentPos + imm8OfPShufW2B]+= 0x55*shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1496 filterPos[i/2]-=shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1497 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1498
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1499 fragmentPos+= fragmentLengthB;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1500 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1501 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1502 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1503 int maxShift= 3-d;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1504 int shift=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1505
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1506 memcpy(funnyCode + fragmentPos, fragmentA, fragmentLengthA);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1507
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1508 funnyCode[fragmentPos + imm8OfPShufW1A]=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1509 funnyCode[fragmentPos + imm8OfPShufW2A]=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1510 a | (b<<2) | (c<<4) | (d<<6);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1511
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1512 if (i+4>=dstW) shift=maxShift; //avoid overread
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1513 else if ((filterPos[i/2]&3) <= maxShift) shift=filterPos[i/2]&3; //partial align
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1514
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1515 if (shift && i>=shift)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1516 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1517 funnyCode[fragmentPos + imm8OfPShufW1A]+= 0x55*shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1518 funnyCode[fragmentPos + imm8OfPShufW2A]+= 0x55*shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1519 filterPos[i/2]-=shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1520 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1521
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1522 fragmentPos+= fragmentLengthA;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1523 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1524
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1525 funnyCode[fragmentPos]= RET;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1526 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1527 xpos+=xInc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1528 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1529 filterPos[i/2]= xpos>>16; // needed to jump to the next part
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1530 }
19368
eb51949c73eb Use COMPILE_MMX2 instead of HAVE_MMX2 to determine whether to compile
uau
parents: 19336
diff changeset
1531 #endif /* COMPILE_MMX2 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1532
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1533 static void globalInit(void){
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1534 // generating tables:
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1535 int i;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1536 for (i=0; i<768; i++){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1537 int c= av_clip_uint8(i-256);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1538 clip_table[i]=c;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1539 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1540 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1541
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1542 static SwsFunc getSwsFunc(int flags){
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1543
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
1544 #if defined(RUNTIME_CPUDETECT) && defined (CONFIG_GPL)
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20411
diff changeset
1545 #if defined(ARCH_X86)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1546 // ordered per speed fasterst first
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1547 if (flags & SWS_CPU_CAPS_MMX2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1548 return swScale_MMX2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1549 else if (flags & SWS_CPU_CAPS_3DNOW)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1550 return swScale_3DNow;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1551 else if (flags & SWS_CPU_CAPS_MMX)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1552 return swScale_MMX;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1553 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1554 return swScale_C;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1555
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1556 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1557 #ifdef ARCH_POWERPC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1558 if (flags & SWS_CPU_CAPS_ALTIVEC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1559 return swScale_altivec;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1560 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1561 return swScale_C;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1562 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1563 return swScale_C;
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20411
diff changeset
1564 #endif /* defined(ARCH_X86) */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1565 #else //RUNTIME_CPUDETECT
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1566 #ifdef HAVE_MMX2
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1567 return swScale_MMX2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1568 #elif defined (HAVE_3DNOW)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1569 return swScale_3DNow;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1570 #elif defined (HAVE_MMX)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1571 return swScale_MMX;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1572 #elif defined (HAVE_ALTIVEC)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1573 return swScale_altivec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1574 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1575 return swScale_C;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1576 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1577 #endif //!RUNTIME_CPUDETECT
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1578 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1579
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1580 static int PlanarToNV12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1581 int srcSliceH, uint8_t* dstParam[], int dstStride[]){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1582 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1583 /* Copy Y plane */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1584 if (dstStride[0]==srcStride[0] && srcStride[0] > 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1585 memcpy(dst, src[0], srcSliceH*dstStride[0]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1586 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1587 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1588 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1589 uint8_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1590 uint8_t *dstPtr= dst;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1591 for (i=0; i<srcSliceH; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1592 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1593 memcpy(dstPtr, srcPtr, c->srcW);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1594 srcPtr+= srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1595 dstPtr+= dstStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1596 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1597 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1598 dst = dstParam[1] + dstStride[1]*srcSliceY/2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1599 if (c->dstFormat == PIX_FMT_NV12)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1600 interleaveBytes( src[1],src[2],dst,c->srcW/2,srcSliceH/2,srcStride[1],srcStride[2],dstStride[0] );
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1601 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1602 interleaveBytes( src[2],src[1],dst,c->srcW/2,srcSliceH/2,srcStride[2],srcStride[1],dstStride[0] );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1603
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1604 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1605 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1606
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1607 static int PlanarToYuy2Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1608 int srcSliceH, uint8_t* dstParam[], int dstStride[]){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1609 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1610
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1611 yv12toyuy2( src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0] );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1612
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1613 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1614 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1615
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1616 static int PlanarToUyvyWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1617 int srcSliceH, uint8_t* dstParam[], int dstStride[]){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1618 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1619
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1620 yv12touyvy( src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0] );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1621
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1622 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1623 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1624
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1625 /* {RGB,BGR}{15,16,24,32} -> {RGB,BGR}{15,16,24,32} */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1626 static int rgb2rgbWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1627 int srcSliceH, uint8_t* dst[], int dstStride[]){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1628 const int srcFormat= c->srcFormat;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1629 const int dstFormat= c->dstFormat;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1630 const int srcBpp= (fmt_depth(srcFormat) + 7) >> 3;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1631 const int dstBpp= (fmt_depth(dstFormat) + 7) >> 3;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1632 const int srcId= fmt_depth(srcFormat) >> 2; /* 1:0, 4:1, 8:2, 15:3, 16:4, 24:6, 32:8 */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1633 const int dstId= fmt_depth(dstFormat) >> 2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1634 void (*conv)(const uint8_t *src, uint8_t *dst, long src_size)=NULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1635
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1636 /* BGR -> BGR */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1637 if ( (isBGR(srcFormat) && isBGR(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1638 || (isRGB(srcFormat) && isRGB(dstFormat))){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1639 switch(srcId | (dstId<<4)){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1640 case 0x34: conv= rgb16to15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1641 case 0x36: conv= rgb24to15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1642 case 0x38: conv= rgb32to15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1643 case 0x43: conv= rgb15to16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1644 case 0x46: conv= rgb24to16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1645 case 0x48: conv= rgb32to16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1646 case 0x63: conv= rgb15to24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1647 case 0x64: conv= rgb16to24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1648 case 0x68: conv= rgb32to24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1649 case 0x83: conv= rgb15to32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1650 case 0x84: conv= rgb16to32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1651 case 0x86: conv= rgb24to32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1652 default: av_log(c, AV_LOG_ERROR, "swScaler: internal error %s -> %s converter\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1653 sws_format_name(srcFormat), sws_format_name(dstFormat)); break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1654 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1655 }else if ( (isBGR(srcFormat) && isRGB(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1656 || (isRGB(srcFormat) && isBGR(dstFormat))){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1657 switch(srcId | (dstId<<4)){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1658 case 0x33: conv= rgb15tobgr15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1659 case 0x34: conv= rgb16tobgr15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1660 case 0x36: conv= rgb24tobgr15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1661 case 0x38: conv= rgb32tobgr15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1662 case 0x43: conv= rgb15tobgr16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1663 case 0x44: conv= rgb16tobgr16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1664 case 0x46: conv= rgb24tobgr16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1665 case 0x48: conv= rgb32tobgr16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1666 case 0x63: conv= rgb15tobgr24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1667 case 0x64: conv= rgb16tobgr24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1668 case 0x66: conv= rgb24tobgr24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1669 case 0x68: conv= rgb32tobgr24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1670 case 0x83: conv= rgb15tobgr32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1671 case 0x84: conv= rgb16tobgr32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1672 case 0x86: conv= rgb24tobgr32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1673 case 0x88: conv= rgb32tobgr32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1674 default: av_log(c, AV_LOG_ERROR, "swScaler: internal error %s -> %s converter\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1675 sws_format_name(srcFormat), sws_format_name(dstFormat)); break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1676 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1677 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1678 av_log(c, AV_LOG_ERROR, "swScaler: internal error %s -> %s converter\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1679 sws_format_name(srcFormat), sws_format_name(dstFormat));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1680 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1681
23188
6431b46104b7 test if color conv fonction exists prior to using it
benoit
parents: 23155
diff changeset
1682 if(conv)
6431b46104b7 test if color conv fonction exists prior to using it
benoit
parents: 23155
diff changeset
1683 {
25439
17098467fc9b Make sure strides have positive values before converting.
benoit
parents: 24607
diff changeset
1684 if (dstStride[0]*srcBpp == srcStride[0]*dstBpp && srcStride[0] > 0)
23189
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1685 conv(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]);
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1686 else
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1687 {
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1688 int i;
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1689 uint8_t *srcPtr= src[0];
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1690 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1691
23189
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1692 for (i=0; i<srcSliceH; i++)
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1693 {
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1694 conv(srcPtr, dstPtr, c->srcW*srcBpp);
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1695 srcPtr+= srcStride[0];
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1696 dstPtr+= dstStride[0];
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1697 }
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1698 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1699 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1700 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1701 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1702
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1703 static int bgr24toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1704 int srcSliceH, uint8_t* dst[], int dstStride[]){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1705
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1706 rgb24toyv12(
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1707 src[0],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1708 dst[0]+ srcSliceY *dstStride[0],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1709 dst[1]+(srcSliceY>>1)*dstStride[1],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1710 dst[2]+(srcSliceY>>1)*dstStride[2],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1711 c->srcW, srcSliceH,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1712 dstStride[0], dstStride[1], srcStride[0]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1713 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1714 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1715
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1716 static int yvu9toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1717 int srcSliceH, uint8_t* dst[], int dstStride[]){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1718 int i;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1719
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1720 /* copy Y */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1721 if (srcStride[0]==dstStride[0] && srcStride[0] > 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1722 memcpy(dst[0]+ srcSliceY*dstStride[0], src[0], srcStride[0]*srcSliceH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1723 else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1724 uint8_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1725 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1726
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1727 for (i=0; i<srcSliceH; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1728 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1729 memcpy(dstPtr, srcPtr, c->srcW);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1730 srcPtr+= srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1731 dstPtr+= dstStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1732 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1733 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1734
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1735 if (c->dstFormat==PIX_FMT_YUV420P){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1736 planar2x(src[1], dst[1], c->chrSrcW, c->chrSrcH, srcStride[1], dstStride[1]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1737 planar2x(src[2], dst[2], c->chrSrcW, c->chrSrcH, srcStride[2], dstStride[2]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1738 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1739 planar2x(src[1], dst[2], c->chrSrcW, c->chrSrcH, srcStride[1], dstStride[2]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1740 planar2x(src[2], dst[1], c->chrSrcW, c->chrSrcH, srcStride[2], dstStride[1]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1741 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1742 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1743 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1744
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1745 /* unscaled copy like stuff (assumes nearly identical formats) */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1746 static int simpleCopy(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1747 int srcSliceH, uint8_t* dst[], int dstStride[]){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1748
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1749 if (isPacked(c->srcFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1750 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1751 if (dstStride[0]==srcStride[0] && srcStride[0] > 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1752 memcpy(dst[0] + dstStride[0]*srcSliceY, src[0], srcSliceH*dstStride[0]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1753 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1754 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1755 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1756 uint8_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1757 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1758 int length=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1759
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1760 /* universal length finder */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1761 while(length+c->srcW <= FFABS(dstStride[0])
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1762 && length+c->srcW <= FFABS(srcStride[0])) length+= c->srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1763 ASSERT(length!=0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1764
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1765 for (i=0; i<srcSliceH; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1766 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1767 memcpy(dstPtr, srcPtr, length);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1768 srcPtr+= srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1769 dstPtr+= dstStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1770 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1771 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1772 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1773 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1774 { /* Planar YUV or gray */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1775 int plane;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1776 for (plane=0; plane<3; plane++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1777 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1778 int length= plane==0 ? c->srcW : -((-c->srcW )>>c->chrDstHSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1779 int y= plane==0 ? srcSliceY: -((-srcSliceY)>>c->chrDstVSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1780 int height= plane==0 ? srcSliceH: -((-srcSliceH)>>c->chrDstVSubSample);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1781
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1782 if ((isGray(c->srcFormat) || isGray(c->dstFormat)) && plane>0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1783 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1784 if (!isGray(c->dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1785 memset(dst[plane], 128, dstStride[plane]*height);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1786 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1787 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1788 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1789 if (dstStride[plane]==srcStride[plane] && srcStride[plane] > 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1790 memcpy(dst[plane] + dstStride[plane]*y, src[plane], height*dstStride[plane]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1791 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1792 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1793 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1794 uint8_t *srcPtr= src[plane];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1795 uint8_t *dstPtr= dst[plane] + dstStride[plane]*y;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1796 for (i=0; i<height; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1797 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1798 memcpy(dstPtr, srcPtr, length);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1799 srcPtr+= srcStride[plane];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1800 dstPtr+= dstStride[plane];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1801 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1802 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1803 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1804 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1805 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1806 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1807 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1808
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1809 static int gray16togray(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1810 int srcSliceH, uint8_t* dst[], int dstStride[]){
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1811
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1812 int length= c->srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1813 int y= srcSliceY;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1814 int height= srcSliceH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1815 int i, j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1816 uint8_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1817 uint8_t *dstPtr= dst[0] + dstStride[0]*y;
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1818
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1819 if (!isGray(c->dstFormat)){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1820 int height= -((-srcSliceH)>>c->chrDstVSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1821 memset(dst[1], 128, dstStride[1]*height);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1822 memset(dst[2], 128, dstStride[2]*height);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1823 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1824 if (c->srcFormat == PIX_FMT_GRAY16LE) srcPtr++;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1825 for (i=0; i<height; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1826 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1827 for (j=0; j<length; j++) dstPtr[j] = srcPtr[j<<1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1828 srcPtr+= srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1829 dstPtr+= dstStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1830 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1831 return srcSliceH;
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1832 }
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1833
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1834 static int graytogray16(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1835 int srcSliceH, uint8_t* dst[], int dstStride[]){
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1836
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1837 int length= c->srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1838 int y= srcSliceY;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1839 int height= srcSliceH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1840 int i, j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1841 uint8_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1842 uint8_t *dstPtr= dst[0] + dstStride[0]*y;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1843 for (i=0; i<height; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1844 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1845 for (j=0; j<length; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1846 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1847 dstPtr[j<<1] = srcPtr[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1848 dstPtr[(j<<1)+1] = srcPtr[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1849 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1850 srcPtr+= srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1851 dstPtr+= dstStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1852 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1853 return srcSliceH;
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1854 }
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1855
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1856 static int gray16swap(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1857 int srcSliceH, uint8_t* dst[], int dstStride[]){
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1858
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1859 int length= c->srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1860 int y= srcSliceY;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1861 int height= srcSliceH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1862 int i, j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1863 uint16_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1864 uint16_t *dstPtr= dst[0] + dstStride[0]*y/2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1865 for (i=0; i<height; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1866 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1867 for (j=0; j<length; j++) dstPtr[j] = bswap_16(srcPtr[j]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1868 srcPtr+= srcStride[0]/2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1869 dstPtr+= dstStride[0]/2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1870 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1871 return srcSliceH;
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1872 }
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1873
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1874
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1875 static void getSubSampleFactors(int *h, int *v, int format){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1876 switch(format){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1877 case PIX_FMT_UYVY422:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1878 case PIX_FMT_YUYV422:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1879 *h=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1880 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1881 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1882 case PIX_FMT_YUV420P:
24581
a7fe1ee84511 add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents: 24289
diff changeset
1883 case PIX_FMT_YUVA420P:
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1884 case PIX_FMT_GRAY16BE:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1885 case PIX_FMT_GRAY16LE:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1886 case PIX_FMT_GRAY8: //FIXME remove after different subsamplings are fully implemented
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1887 case PIX_FMT_NV12:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1888 case PIX_FMT_NV21:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1889 *h=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1890 *v=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1891 break;
23791
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
1892 case PIX_FMT_YUV440P:
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
1893 *h=0;
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
1894 *v=1;
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
1895 break;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1896 case PIX_FMT_YUV410P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1897 *h=2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1898 *v=2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1899 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1900 case PIX_FMT_YUV444P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1901 *h=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1902 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1903 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1904 case PIX_FMT_YUV422P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1905 *h=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1906 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1907 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1908 case PIX_FMT_YUV411P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1909 *h=2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1910 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1911 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1912 default:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1913 *h=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1914 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1915 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1916 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1917 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1918
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1919 static uint16_t roundToInt16(int64_t f){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1920 int r= (f + (1<<15))>>16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1921 if (r<-0x7FFF) return 0x8000;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1922 else if (r> 0x7FFF) return 0x7FFF;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1923 else return r;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1924 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1925
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1926 /**
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1927 * @param inv_table the yuv2rgb coeffs, normally Inverse_Table_6_9[x]
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
1928 * @param fullRange if 1 then the luma range is 0..255 if 0 it is 16..235
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1929 * @return -1 if not supported
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1930 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1931 int sws_setColorspaceDetails(SwsContext *c, const int inv_table[4], int srcRange, const int table[4], int dstRange, int brightness, int contrast, int saturation){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1932 int64_t crv = inv_table[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1933 int64_t cbu = inv_table[1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1934 int64_t cgu = -inv_table[2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1935 int64_t cgv = -inv_table[3];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1936 int64_t cy = 1<<16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1937 int64_t oy = 0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1938
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1939 if (isYUV(c->dstFormat) || isGray(c->dstFormat)) return -1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1940 memcpy(c->srcColorspaceTable, inv_table, sizeof(int)*4);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1941 memcpy(c->dstColorspaceTable, table, sizeof(int)*4);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1942
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1943 c->brightness= brightness;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1944 c->contrast = contrast;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1945 c->saturation= saturation;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1946 c->srcRange = srcRange;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1947 c->dstRange = dstRange;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1948
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1949 c->uOffset= 0x0400040004000400LL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1950 c->vOffset= 0x0400040004000400LL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1951
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1952 if (!srcRange){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1953 cy= (cy*255) / 219;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1954 oy= 16<<16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1955 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1956 crv= (crv*224) / 255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1957 cbu= (cbu*224) / 255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1958 cgu= (cgu*224) / 255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1959 cgv= (cgv*224) / 255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1960 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1961
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1962 cy = (cy *contrast )>>16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1963 crv= (crv*contrast * saturation)>>32;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1964 cbu= (cbu*contrast * saturation)>>32;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1965 cgu= (cgu*contrast * saturation)>>32;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1966 cgv= (cgv*contrast * saturation)>>32;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1967
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1968 oy -= 256*brightness;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1969
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1970 c->yCoeff= roundToInt16(cy *8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1971 c->vrCoeff= roundToInt16(crv*8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1972 c->ubCoeff= roundToInt16(cbu*8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1973 c->vgCoeff= roundToInt16(cgv*8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1974 c->ugCoeff= roundToInt16(cgu*8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1975 c->yOffset= roundToInt16(oy * 8) * 0x0001000100010001ULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1976
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1977 yuv2rgb_c_init_tables(c, inv_table, srcRange, brightness, contrast, saturation);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1978 //FIXME factorize
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1979
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1980 #ifdef COMPILE_ALTIVEC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1981 if (c->flags & SWS_CPU_CAPS_ALTIVEC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1982 yuv2rgb_altivec_init_tables (c, inv_table, brightness, contrast, saturation);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1983 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1984 return 0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1985 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1986
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1987 /**
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1988 * @return -1 if not supported
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1989 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1990 int sws_getColorspaceDetails(SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1991 if (isYUV(c->dstFormat) || isGray(c->dstFormat)) return -1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1992
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1993 *inv_table = c->srcColorspaceTable;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1994 *table = c->dstColorspaceTable;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1995 *srcRange = c->srcRange;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1996 *dstRange = c->dstRange;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1997 *brightness= c->brightness;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1998 *contrast = c->contrast;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1999 *saturation= c->saturation;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2000
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2001 return 0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2002 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2003
19987
f00912e9480b Add support for YUVJ formats
lucabe
parents: 19872
diff changeset
2004 static int handle_jpeg(int *format)
f00912e9480b Add support for YUVJ formats
lucabe
parents: 19872
diff changeset
2005 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2006 switch (*format) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2007 case PIX_FMT_YUVJ420P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2008 *format = PIX_FMT_YUV420P;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2009 return 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2010 case PIX_FMT_YUVJ422P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2011 *format = PIX_FMT_YUV422P;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2012 return 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2013 case PIX_FMT_YUVJ444P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2014 *format = PIX_FMT_YUV444P;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2015 return 1;
23791
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2016 case PIX_FMT_YUVJ440P:
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2017 *format = PIX_FMT_YUV440P;
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2018 return 1;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2019 default:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2020 return 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2021 }
19987
f00912e9480b Add support for YUVJ formats
lucabe
parents: 19872
diff changeset
2022 }
f00912e9480b Add support for YUVJ formats
lucabe
parents: 19872
diff changeset
2023
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
2024 SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2025 SwsFilter *srcFilter, SwsFilter *dstFilter, double *param){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2026
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2027 SwsContext *c;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2028 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2029 int usesVFilter, usesHFilter;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2030 int unscaled, needsDither;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2031 int srcRange, dstRange;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2032 SwsFilter dummyFilter= {NULL, NULL, NULL, NULL};
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20411
diff changeset
2033 #if defined(ARCH_X86)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2034 if (flags & SWS_CPU_CAPS_MMX)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2035 asm volatile("emms\n\t"::: "memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2036 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2037
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
2038 #if !defined(RUNTIME_CPUDETECT) || !defined (CONFIG_GPL) //ensure that the flags match the compiled variant if cpudetect is off
23289
786823779b67 Blackfin optimized YUV420 to RGB CSC Color Space Converters.
gpoirier
parents: 23278
diff changeset
2039 flags &= ~(SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2|SWS_CPU_CAPS_3DNOW|SWS_CPU_CAPS_ALTIVEC|SWS_CPU_CAPS_BFIN);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2040 #ifdef HAVE_MMX2
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2041 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2042 #elif defined (HAVE_3DNOW)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2043 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_3DNOW;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2044 #elif defined (HAVE_MMX)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2045 flags |= SWS_CPU_CAPS_MMX;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2046 #elif defined (HAVE_ALTIVEC)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2047 flags |= SWS_CPU_CAPS_ALTIVEC;
24607
965e0c3565bf Revert wrong ARCH_BFIN --> HAVE_BFIN change.
diego
parents: 24581
diff changeset
2048 #elif defined (ARCH_BFIN)
23289
786823779b67 Blackfin optimized YUV420 to RGB CSC Color Space Converters.
gpoirier
parents: 23278
diff changeset
2049 flags |= SWS_CPU_CAPS_BFIN;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2050 #endif
19206
c629606a0702 Comment some #endif lines.
diego
parents: 19181
diff changeset
2051 #endif /* RUNTIME_CPUDETECT */
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2052 if (clip_table[512] != 255) globalInit();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2053 if (rgb15to16 == NULL) sws_rgb2rgb_init(flags);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2054
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2055 unscaled = (srcW == dstW && srcH == dstH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2056 needsDither= (isBGR(dstFormat) || isRGB(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2057 && (fmt_depth(dstFormat))<24
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2058 && ((fmt_depth(dstFormat))<(fmt_depth(srcFormat)) || (!(isRGB(srcFormat) || isBGR(srcFormat))));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2059
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2060 srcRange = handle_jpeg(&srcFormat);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2061 dstRange = handle_jpeg(&dstFormat);
19987
f00912e9480b Add support for YUVJ formats
lucabe
parents: 19872
diff changeset
2062
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2063 if (!isSupportedIn(srcFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2064 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2065 av_log(NULL, AV_LOG_ERROR, "swScaler: %s is not supported as input format\n", sws_format_name(srcFormat));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2066 return NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2067 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2068 if (!isSupportedOut(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2069 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2070 av_log(NULL, AV_LOG_ERROR, "swScaler: %s is not supported as output format\n", sws_format_name(dstFormat));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2071 return NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2072 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2073
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2074 /* sanity check */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2075 if (srcW<4 || srcH<1 || dstW<8 || dstH<1) //FIXME check if these are enough and try to lowwer them after fixing the relevant parts of the code
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2076 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2077 av_log(NULL, AV_LOG_ERROR, "swScaler: %dx%d -> %dx%d is invalid scaling dimension\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2078 srcW, srcH, dstW, dstH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2079 return NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2080 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2081
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2082 if (!dstFilter) dstFilter= &dummyFilter;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2083 if (!srcFilter) srcFilter= &dummyFilter;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2084
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2085 c= av_mallocz(sizeof(SwsContext));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2086
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2087 c->av_class = &sws_context_class;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2088 c->srcW= srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2089 c->srcH= srcH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2090 c->dstW= dstW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2091 c->dstH= dstH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2092 c->lumXInc= ((srcW<<16) + (dstW>>1))/dstW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2093 c->lumYInc= ((srcH<<16) + (dstH>>1))/dstH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2094 c->flags= flags;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2095 c->dstFormat= dstFormat;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2096 c->srcFormat= srcFormat;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2097 c->vRounder= 4* 0x0001000100010001ULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2098
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2099 usesHFilter= usesVFilter= 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2100 if (dstFilter->lumV!=NULL && dstFilter->lumV->length>1) usesVFilter=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2101 if (dstFilter->lumH!=NULL && dstFilter->lumH->length>1) usesHFilter=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2102 if (dstFilter->chrV!=NULL && dstFilter->chrV->length>1) usesVFilter=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2103 if (dstFilter->chrH!=NULL && dstFilter->chrH->length>1) usesHFilter=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2104 if (srcFilter->lumV!=NULL && srcFilter->lumV->length>1) usesVFilter=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2105 if (srcFilter->lumH!=NULL && srcFilter->lumH->length>1) usesHFilter=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2106 if (srcFilter->chrV!=NULL && srcFilter->chrV->length>1) usesVFilter=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2107 if (srcFilter->chrH!=NULL && srcFilter->chrH->length>1) usesHFilter=1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2108
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2109 getSubSampleFactors(&c->chrSrcHSubSample, &c->chrSrcVSubSample, srcFormat);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2110 getSubSampleFactors(&c->chrDstHSubSample, &c->chrDstVSubSample, dstFormat);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2111
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2112 // reuse chroma for 2 pixles rgb/bgr unless user wants full chroma interpolation
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2113 if ((isBGR(dstFormat) || isRGB(dstFormat)) && !(flags&SWS_FULL_CHR_H_INT)) c->chrDstHSubSample=1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2114
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2115 // drop some chroma lines if the user wants it
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2116 c->vChrDrop= (flags&SWS_SRC_V_CHR_DROP_MASK)>>SWS_SRC_V_CHR_DROP_SHIFT;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2117 c->chrSrcVSubSample+= c->vChrDrop;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2118
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2119 // drop every 2. pixel for chroma calculation unless user wants full chroma
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2120 if ((isBGR(srcFormat) || isRGB(srcFormat)) && !(flags&SWS_FULL_CHR_H_INP)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2121 && srcFormat!=PIX_FMT_RGB8 && srcFormat!=PIX_FMT_BGR8
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2122 && srcFormat!=PIX_FMT_RGB4 && srcFormat!=PIX_FMT_BGR4
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2123 && srcFormat!=PIX_FMT_RGB4_BYTE && srcFormat!=PIX_FMT_BGR4_BYTE)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2124 c->chrSrcHSubSample=1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2125
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2126 if (param){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2127 c->param[0] = param[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2128 c->param[1] = param[1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2129 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2130 c->param[0] =
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2131 c->param[1] = SWS_PARAM_DEFAULT;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2132 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2133
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2134 c->chrIntHSubSample= c->chrDstHSubSample;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2135 c->chrIntVSubSample= c->chrSrcVSubSample;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2136
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2137 // Note the -((-x)>>y) is so that we always round toward +inf.
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2138 c->chrSrcW= -((-srcW) >> c->chrSrcHSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2139 c->chrSrcH= -((-srcH) >> c->chrSrcVSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2140 c->chrDstW= -((-dstW) >> c->chrDstHSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2141 c->chrDstH= -((-dstH) >> c->chrDstVSubSample);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2142
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2143 sws_setColorspaceDetails(c, Inverse_Table_6_9[SWS_CS_DEFAULT], srcRange, Inverse_Table_6_9[SWS_CS_DEFAULT] /* FIXME*/, dstRange, 0, 1<<16, 1<<16);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2144
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2145 /* unscaled special Cases */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2146 if (unscaled && !usesHFilter && !usesVFilter)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2147 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2148 /* yv12_to_nv12 */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2149 if (srcFormat == PIX_FMT_YUV420P && (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2150 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2151 c->swScale= PlanarToNV12Wrapper;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2152 }
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
2153 #ifdef CONFIG_GPL
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2154 /* yuv2bgr */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2155 if ((srcFormat==PIX_FMT_YUV420P || srcFormat==PIX_FMT_YUV422P) && (isBGR(dstFormat) || isRGB(dstFormat)))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2156 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2157 c->swScale= yuv2rgb_get_func_ptr(c);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2158 }
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
2159 #endif
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2160
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2161 if ( srcFormat==PIX_FMT_YUV410P && dstFormat==PIX_FMT_YUV420P )
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2162 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2163 c->swScale= yvu9toyv12Wrapper;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2164 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2165
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2166 /* bgr24toYV12 */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2167 if (srcFormat==PIX_FMT_BGR24 && dstFormat==PIX_FMT_YUV420P)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2168 c->swScale= bgr24toyv12Wrapper;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2169
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2170 /* rgb/bgr -> rgb/bgr (no dither needed forms) */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2171 if ( (isBGR(srcFormat) || isRGB(srcFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2172 && (isBGR(dstFormat) || isRGB(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2173 && srcFormat != PIX_FMT_BGR8 && dstFormat != PIX_FMT_BGR8
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2174 && srcFormat != PIX_FMT_RGB8 && dstFormat != PIX_FMT_RGB8
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2175 && srcFormat != PIX_FMT_BGR4 && dstFormat != PIX_FMT_BGR4
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2176 && srcFormat != PIX_FMT_RGB4 && dstFormat != PIX_FMT_RGB4
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2177 && srcFormat != PIX_FMT_BGR4_BYTE && dstFormat != PIX_FMT_BGR4_BYTE
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2178 && srcFormat != PIX_FMT_RGB4_BYTE && dstFormat != PIX_FMT_RGB4_BYTE
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2179 && srcFormat != PIX_FMT_MONOBLACK && dstFormat != PIX_FMT_MONOBLACK
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2180 && !needsDither)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2181 c->swScale= rgb2rgbWrapper;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2182
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2183 /* LQ converters if -sws 0 or -sws 4*/
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2184 if (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2185 /* rgb/bgr -> rgb/bgr (dither needed forms) */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2186 if ( (isBGR(srcFormat) || isRGB(srcFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2187 && (isBGR(dstFormat) || isRGB(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2188 && needsDither)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2189 c->swScale= rgb2rgbWrapper;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2190
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2191 /* yv12_to_yuy2 */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2192 if (srcFormat == PIX_FMT_YUV420P &&
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2193 (dstFormat == PIX_FMT_YUYV422 || dstFormat == PIX_FMT_UYVY422))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2194 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2195 if (dstFormat == PIX_FMT_YUYV422)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2196 c->swScale= PlanarToYuy2Wrapper;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2197 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2198 c->swScale= PlanarToUyvyWrapper;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2199 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2200 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2201
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2202 #ifdef COMPILE_ALTIVEC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2203 if ((c->flags & SWS_CPU_CAPS_ALTIVEC) &&
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2204 ((srcFormat == PIX_FMT_YUV420P &&
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2205 (dstFormat == PIX_FMT_YUYV422 || dstFormat == PIX_FMT_UYVY422)))) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2206 // unscaled YV12 -> packed YUV, we want speed
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2207 if (dstFormat == PIX_FMT_YUYV422)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2208 c->swScale= yv12toyuy2_unscaled_altivec;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2209 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2210 c->swScale= yv12touyvy_unscaled_altivec;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2211 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2212 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2213
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2214 /* simple copy */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2215 if ( srcFormat == dstFormat
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2216 || (isPlanarYUV(srcFormat) && isGray(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2217 || (isPlanarYUV(dstFormat) && isGray(srcFormat)) )
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2218 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2219 c->swScale= simpleCopy;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2220 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2221
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2222 /* gray16{le,be} conversions */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2223 if (isGray16(srcFormat) && (isPlanarYUV(dstFormat) || (dstFormat == PIX_FMT_GRAY8)))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2224 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2225 c->swScale= gray16togray;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2226 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2227 if ((isPlanarYUV(srcFormat) || (srcFormat == PIX_FMT_GRAY8)) && isGray16(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2228 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2229 c->swScale= graytogray16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2230 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2231 if (srcFormat != dstFormat && isGray16(srcFormat) && isGray16(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2232 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2233 c->swScale= gray16swap;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2234 }
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
2235
23585
d3ae6979d3df integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents: 23536
diff changeset
2236 #ifdef ARCH_BFIN
d3ae6979d3df integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents: 23536
diff changeset
2237 if (flags & SWS_CPU_CAPS_BFIN)
d3ae6979d3df integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents: 23536
diff changeset
2238 ff_bfin_get_unscaled_swscale (c);
d3ae6979d3df integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents: 23536
diff changeset
2239 #endif
d3ae6979d3df integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents: 23536
diff changeset
2240
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2241 if (c->swScale){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2242 if (flags&SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2243 av_log(c, AV_LOG_INFO, "SwScaler: using unscaled %s -> %s special converter\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2244 sws_format_name(srcFormat), sws_format_name(dstFormat));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2245 return c;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2246 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2247 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2248
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2249 if (flags & SWS_CPU_CAPS_MMX2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2250 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2251 c->canMMX2BeUsed= (dstW >=srcW && (dstW&31)==0 && (srcW&15)==0) ? 1 : 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2252 if (!c->canMMX2BeUsed && dstW >=srcW && (srcW&15)==0 && (flags&SWS_FAST_BILINEAR))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2253 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2254 if (flags&SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2255 av_log(c, AV_LOG_INFO, "SwScaler: output Width is not a multiple of 32 -> no MMX2 scaler\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2256 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2257 if (usesHFilter) c->canMMX2BeUsed=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2258 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2259 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2260 c->canMMX2BeUsed=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2261
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2262 c->chrXInc= ((c->chrSrcW<<16) + (c->chrDstW>>1))/c->chrDstW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2263 c->chrYInc= ((c->chrSrcH<<16) + (c->chrDstH>>1))/c->chrDstH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2264
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2265 // match pixel 0 of the src to pixel 0 of dst and match pixel n-2 of src to pixel n-2 of dst
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2266 // but only for the FAST_BILINEAR mode otherwise do correct scaling
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2267 // n-2 is the last chrominance sample available
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
2268 // this is not perfect, but no one should notice the difference, the more correct variant
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2269 // would be like the vertical one, but that would require some special code for the
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2270 // first and last pixel
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2271 if (flags&SWS_FAST_BILINEAR)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2272 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2273 if (c->canMMX2BeUsed)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2274 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2275 c->lumXInc+= 20;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2276 c->chrXInc+= 20;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2277 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2278 //we don't use the x86asm scaler if mmx is available
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2279 else if (flags & SWS_CPU_CAPS_MMX)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2280 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2281 c->lumXInc = ((srcW-2)<<16)/(dstW-2) - 20;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2282 c->chrXInc = ((c->chrSrcW-2)<<16)/(c->chrDstW-2) - 20;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2283 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2284 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2285
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2286 /* precalculate horizontal scaler filter coefficients */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2287 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2288 const int filterAlign=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2289 (flags & SWS_CPU_CAPS_MMX) ? 4 :
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2290 (flags & SWS_CPU_CAPS_ALTIVEC) ? 8 :
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2291 1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2292
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2293 initFilter(&c->hLumFilter, &c->hLumFilterPos, &c->hLumFilterSize, c->lumXInc,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2294 srcW , dstW, filterAlign, 1<<14,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2295 (flags&SWS_BICUBLIN) ? (flags|SWS_BICUBIC) : flags,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2296 srcFilter->lumH, dstFilter->lumH, c->param);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2297 initFilter(&c->hChrFilter, &c->hChrFilterPos, &c->hChrFilterSize, c->chrXInc,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2298 c->chrSrcW, c->chrDstW, filterAlign, 1<<14,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2299 (flags&SWS_BICUBLIN) ? (flags|SWS_BILINEAR) : flags,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2300 srcFilter->chrH, dstFilter->chrH, c->param);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2301
19333
4f5e2e0529b1 Do not assemble MMX, MMX2 or 3DNOW code unconditionally on X86 and X86_64.
diego
parents: 19270
diff changeset
2302 #define MAX_FUNNY_CODE_SIZE 10000
19368
eb51949c73eb Use COMPILE_MMX2 instead of HAVE_MMX2 to determine whether to compile
uau
parents: 19336
diff changeset
2303 #if defined(COMPILE_MMX2)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2304 // can't downscale !!!
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2305 if (c->canMMX2BeUsed && (flags & SWS_FAST_BILINEAR))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2306 {
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2307 #ifdef MAP_ANONYMOUS
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2308 c->funnyYCode = (uint8_t*)mmap(NULL, MAX_FUNNY_CODE_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2309 c->funnyUVCode = (uint8_t*)mmap(NULL, MAX_FUNNY_CODE_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2310 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2311 c->funnyYCode = av_malloc(MAX_FUNNY_CODE_SIZE);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2312 c->funnyUVCode = av_malloc(MAX_FUNNY_CODE_SIZE);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2313 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2314
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2315 c->lumMmx2Filter = av_malloc((dstW /8+8)*sizeof(int16_t));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2316 c->chrMmx2Filter = av_malloc((c->chrDstW /4+8)*sizeof(int16_t));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2317 c->lumMmx2FilterPos= av_malloc((dstW /2/8+8)*sizeof(int32_t));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2318 c->chrMmx2FilterPos= av_malloc((c->chrDstW/2/4+8)*sizeof(int32_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2319
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2320 initMMX2HScaler( dstW, c->lumXInc, c->funnyYCode , c->lumMmx2Filter, c->lumMmx2FilterPos, 8);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2321 initMMX2HScaler(c->chrDstW, c->chrXInc, c->funnyUVCode, c->chrMmx2Filter, c->chrMmx2FilterPos, 4);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2322 }
19368
eb51949c73eb Use COMPILE_MMX2 instead of HAVE_MMX2 to determine whether to compile
uau
parents: 19336
diff changeset
2323 #endif /* defined(COMPILE_MMX2) */
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2324 } // Init Horizontal stuff
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2325
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2326
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2327
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2328 /* precalculate vertical scaler filter coefficients */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2329 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2330 const int filterAlign=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2331 (flags & SWS_CPU_CAPS_MMX) && (flags & SWS_ACCURATE_RND) ? 2 :
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2332 (flags & SWS_CPU_CAPS_ALTIVEC) ? 8 :
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2333 1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2334
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2335 initFilter(&c->vLumFilter, &c->vLumFilterPos, &c->vLumFilterSize, c->lumYInc,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2336 srcH , dstH, filterAlign, (1<<12)-4,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2337 (flags&SWS_BICUBLIN) ? (flags|SWS_BICUBIC) : flags,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2338 srcFilter->lumV, dstFilter->lumV, c->param);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2339 initFilter(&c->vChrFilter, &c->vChrFilterPos, &c->vChrFilterSize, c->chrYInc,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2340 c->chrSrcH, c->chrDstH, filterAlign, (1<<12)-4,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2341 (flags&SWS_BICUBLIN) ? (flags|SWS_BILINEAR) : flags,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2342 srcFilter->chrV, dstFilter->chrV, c->param);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2343
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2344 #ifdef HAVE_ALTIVEC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2345 c->vYCoeffsBank = av_malloc(sizeof (vector signed short)*c->vLumFilterSize*c->dstH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2346 c->vCCoeffsBank = av_malloc(sizeof (vector signed short)*c->vChrFilterSize*c->chrDstH);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2347
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2348 for (i=0;i<c->vLumFilterSize*c->dstH;i++) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2349 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2350 short *p = (short *)&c->vYCoeffsBank[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2351 for (j=0;j<8;j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2352 p[j] = c->vLumFilter[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2353 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2354
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2355 for (i=0;i<c->vChrFilterSize*c->chrDstH;i++) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2356 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2357 short *p = (short *)&c->vCCoeffsBank[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2358 for (j=0;j<8;j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2359 p[j] = c->vChrFilter[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2360 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2361 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2362 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2363
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2364 // Calculate Buffer Sizes so that they won't run out while handling these damn slices
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2365 c->vLumBufSize= c->vLumFilterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2366 c->vChrBufSize= c->vChrFilterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2367 for (i=0; i<dstH; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2368 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2369 int chrI= i*c->chrDstH / dstH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2370 int nextSlice= FFMAX(c->vLumFilterPos[i ] + c->vLumFilterSize - 1,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2371 ((c->vChrFilterPos[chrI] + c->vChrFilterSize - 1)<<c->chrSrcVSubSample));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2372
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2373 nextSlice>>= c->chrSrcVSubSample;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2374 nextSlice<<= c->chrSrcVSubSample;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2375 if (c->vLumFilterPos[i ] + c->vLumBufSize < nextSlice)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2376 c->vLumBufSize= nextSlice - c->vLumFilterPos[i ];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2377 if (c->vChrFilterPos[chrI] + c->vChrBufSize < (nextSlice>>c->chrSrcVSubSample))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2378 c->vChrBufSize= (nextSlice>>c->chrSrcVSubSample) - c->vChrFilterPos[chrI];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2379 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2380
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2381 // allocate pixbufs (we use dynamic allocation because otherwise we would need to
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2382 c->lumPixBuf= av_malloc(c->vLumBufSize*2*sizeof(int16_t*));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2383 c->chrPixBuf= av_malloc(c->vChrBufSize*2*sizeof(int16_t*));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2384 //Note we need at least one pixel more at the end because of the mmx code (just in case someone wanna replace the 4000/8000)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2385 /* align at 16 bytes for AltiVec */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2386 for (i=0; i<c->vLumBufSize; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2387 c->lumPixBuf[i]= c->lumPixBuf[i+c->vLumBufSize]= av_mallocz(4000);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2388 for (i=0; i<c->vChrBufSize; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2389 c->chrPixBuf[i]= c->chrPixBuf[i+c->vChrBufSize]= av_malloc(8000);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2390
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2391 //try to avoid drawing green stuff between the right end and the stride end
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2392 for (i=0; i<c->vChrBufSize; i++) memset(c->chrPixBuf[i], 64, 8000);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2393
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2394 ASSERT(c->chrDstH <= dstH)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2395
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2396 if (flags&SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2397 {
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2398 #ifdef DITHER1XBPP
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2399 char *dither= " dithered";
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2400 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2401 char *dither= "";
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2402 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2403 if (flags&SWS_FAST_BILINEAR)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2404 av_log(c, AV_LOG_INFO, "SwScaler: FAST_BILINEAR scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2405 else if (flags&SWS_BILINEAR)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2406 av_log(c, AV_LOG_INFO, "SwScaler: BILINEAR scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2407 else if (flags&SWS_BICUBIC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2408 av_log(c, AV_LOG_INFO, "SwScaler: BICUBIC scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2409 else if (flags&SWS_X)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2410 av_log(c, AV_LOG_INFO, "SwScaler: Experimental scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2411 else if (flags&SWS_POINT)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2412 av_log(c, AV_LOG_INFO, "SwScaler: Nearest Neighbor / POINT scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2413 else if (flags&SWS_AREA)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2414 av_log(c, AV_LOG_INFO, "SwScaler: Area Averageing scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2415 else if (flags&SWS_BICUBLIN)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2416 av_log(c, AV_LOG_INFO, "SwScaler: luma BICUBIC / chroma BILINEAR scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2417 else if (flags&SWS_GAUSS)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2418 av_log(c, AV_LOG_INFO, "SwScaler: Gaussian scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2419 else if (flags&SWS_SINC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2420 av_log(c, AV_LOG_INFO, "SwScaler: Sinc scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2421 else if (flags&SWS_LANCZOS)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2422 av_log(c, AV_LOG_INFO, "SwScaler: Lanczos scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2423 else if (flags&SWS_SPLINE)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2424 av_log(c, AV_LOG_INFO, "SwScaler: Bicubic spline scaler, ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2425 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2426 av_log(c, AV_LOG_INFO, "SwScaler: ehh flags invalid?! ");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2427
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2428 if (dstFormat==PIX_FMT_BGR555 || dstFormat==PIX_FMT_BGR565)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2429 av_log(c, AV_LOG_INFO, "from %s to%s %s ",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2430 sws_format_name(srcFormat), dither, sws_format_name(dstFormat));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2431 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2432 av_log(c, AV_LOG_INFO, "from %s to %s ",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2433 sws_format_name(srcFormat), sws_format_name(dstFormat));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2434
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2435 if (flags & SWS_CPU_CAPS_MMX2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2436 av_log(c, AV_LOG_INFO, "using MMX2\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2437 else if (flags & SWS_CPU_CAPS_3DNOW)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2438 av_log(c, AV_LOG_INFO, "using 3DNOW\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2439 else if (flags & SWS_CPU_CAPS_MMX)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2440 av_log(c, AV_LOG_INFO, "using MMX\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2441 else if (flags & SWS_CPU_CAPS_ALTIVEC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2442 av_log(c, AV_LOG_INFO, "using AltiVec\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2443 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2444 av_log(c, AV_LOG_INFO, "using C\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2445 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2446
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2447 if (flags & SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2448 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2449 if (flags & SWS_CPU_CAPS_MMX)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2450 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2451 if (c->canMMX2BeUsed && (flags&SWS_FAST_BILINEAR))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2452 av_log(c, AV_LOG_VERBOSE, "SwScaler: using FAST_BILINEAR MMX2 scaler for horizontal scaling\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2453 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2454 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2455 if (c->hLumFilterSize==4)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2456 av_log(c, AV_LOG_VERBOSE, "SwScaler: using 4-tap MMX scaler for horizontal luminance scaling\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2457 else if (c->hLumFilterSize==8)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2458 av_log(c, AV_LOG_VERBOSE, "SwScaler: using 8-tap MMX scaler for horizontal luminance scaling\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2459 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2460 av_log(c, AV_LOG_VERBOSE, "SwScaler: using n-tap MMX scaler for horizontal luminance scaling\n");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2461
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2462 if (c->hChrFilterSize==4)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2463 av_log(c, AV_LOG_VERBOSE, "SwScaler: using 4-tap MMX scaler for horizontal chrominance scaling\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2464 else if (c->hChrFilterSize==8)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2465 av_log(c, AV_LOG_VERBOSE, "SwScaler: using 8-tap MMX scaler for horizontal chrominance scaling\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2466 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2467 av_log(c, AV_LOG_VERBOSE, "SwScaler: using n-tap MMX scaler for horizontal chrominance scaling\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2468 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2469 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2470 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2471 {
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20411
diff changeset
2472 #if defined(ARCH_X86)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2473 av_log(c, AV_LOG_VERBOSE, "SwScaler: using X86-Asm scaler for horizontal scaling\n");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2474 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2475 if (flags & SWS_FAST_BILINEAR)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2476 av_log(c, AV_LOG_VERBOSE, "SwScaler: using FAST_BILINEAR C scaler for horizontal scaling\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2477 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2478 av_log(c, AV_LOG_VERBOSE, "SwScaler: using C scaler for horizontal scaling\n");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2479 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2480 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2481 if (isPlanarYUV(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2482 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2483 if (c->vLumFilterSize==1)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2484 av_log(c, AV_LOG_VERBOSE, "SwScaler: using 1-tap %s \"scaler\" for vertical scaling (YV12 like)\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2485 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2486 av_log(c, AV_LOG_VERBOSE, "SwScaler: using n-tap %s scaler for vertical scaling (YV12 like)\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2487 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2488 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2489 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2490 if (c->vLumFilterSize==1 && c->vChrFilterSize==2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2491 av_log(c, AV_LOG_VERBOSE, "SwScaler: using 1-tap %s \"scaler\" for vertical luminance scaling (BGR)\n"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2492 "SwScaler: 2-tap scaler for vertical chrominance scaling (BGR)\n",(flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2493 else if (c->vLumFilterSize==2 && c->vChrFilterSize==2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2494 av_log(c, AV_LOG_VERBOSE, "SwScaler: using 2-tap linear %s scaler for vertical scaling (BGR)\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2495 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2496 av_log(c, AV_LOG_VERBOSE, "SwScaler: using n-tap %s scaler for vertical scaling (BGR)\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2497 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2498
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2499 if (dstFormat==PIX_FMT_BGR24)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2500 av_log(c, AV_LOG_VERBOSE, "SwScaler: using %s YV12->BGR24 Converter\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2501 (flags & SWS_CPU_CAPS_MMX2) ? "MMX2" : ((flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C"));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2502 else if (dstFormat==PIX_FMT_RGB32)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2503 av_log(c, AV_LOG_VERBOSE, "SwScaler: using %s YV12->BGR32 Converter\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2504 else if (dstFormat==PIX_FMT_BGR565)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2505 av_log(c, AV_LOG_VERBOSE, "SwScaler: using %s YV12->BGR16 Converter\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2506 else if (dstFormat==PIX_FMT_BGR555)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2507 av_log(c, AV_LOG_VERBOSE, "SwScaler: using %s YV12->BGR15 Converter\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2508
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2509 av_log(c, AV_LOG_VERBOSE, "SwScaler: %dx%d -> %dx%d\n", srcW, srcH, dstW, dstH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2510 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2511 if (flags & SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2512 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2513 av_log(c, AV_LOG_DEBUG, "SwScaler:Lum srcW=%d srcH=%d dstW=%d dstH=%d xInc=%d yInc=%d\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2514 c->srcW, c->srcH, c->dstW, c->dstH, c->lumXInc, c->lumYInc);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2515 av_log(c, AV_LOG_DEBUG, "SwScaler:Chr srcW=%d srcH=%d dstW=%d dstH=%d xInc=%d yInc=%d\n",
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2516 c->chrSrcW, c->chrSrcH, c->chrDstW, c->chrDstH, c->chrXInc, c->chrYInc);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2517 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2518
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2519 c->swScale= getSwsFunc(flags);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2520 return c;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2521 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2522
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2523 /**
25457
0926055fe5b8 comment typo fixes
diego
parents: 25439
diff changeset
2524 * swscale wrapper, so we don't need to export the SwsContext.
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2525 * assumes planar YUV to be in YUV order instead of YVU
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2526 */
21869
99c7b02c4edb Add "support for both orderings of the slices (top->down / bottom->up)"
lucabe
parents: 21817
diff changeset
2527 int sws_scale(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2528 int srcSliceH, uint8_t* dst[], int dstStride[]){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2529 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2530 uint8_t* src2[4]= {src[0], src[1], src[2]};
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2531 uint32_t pal[256];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2532 if (c->sliceDir == 0 && srcSliceY != 0 && srcSliceY + srcSliceH != c->srcH) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2533 av_log(c, AV_LOG_ERROR, "swScaler: slices start in the middle!\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2534 return 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2535 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2536 if (c->sliceDir == 0) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2537 if (srcSliceY == 0) c->sliceDir = 1; else c->sliceDir = -1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2538 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2539
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2540 if (c->srcFormat == PIX_FMT_PAL8){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2541 for (i=0; i<256; i++){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2542 int p= ((uint32_t*)(src[1]))[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2543 int r= (p>>16)&0xFF;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2544 int g= (p>> 8)&0xFF;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2545 int b= p &0xFF;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2546 int y= av_clip_uint8(((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16 );
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2547 int u= av_clip_uint8(((RU*r + GU*g + BU*b)>>RGB2YUV_SHIFT) + 128);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2548 int v= av_clip_uint8(((RV*r + GV*g + BV*b)>>RGB2YUV_SHIFT) + 128);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2549 pal[i]= y + (u<<8) + (v<<16);
22975
c91bb8f1cd85 convert palette to yuv instead of converting each pixel after pal->rgb
michael
parents: 22914
diff changeset
2550 }
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2551 src2[1]= pal;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2552 }
22975
c91bb8f1cd85 convert palette to yuv instead of converting each pixel after pal->rgb
michael
parents: 22914
diff changeset
2553
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2554 // copy strides, so they can safely be modified
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2555 if (c->sliceDir == 1) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2556 // slices go from top to bottom
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2557 int srcStride2[4]= {srcStride[0], srcStride[1], srcStride[2]};
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2558 int dstStride2[4]= {dstStride[0], dstStride[1], dstStride[2]};
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2559 return c->swScale(c, src2, srcStride2, srcSliceY, srcSliceH, dst, dstStride2);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2560 } else {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2561 // slices go from bottom to top => we flip the image internally
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2562 uint8_t* dst2[4]= {dst[0] + (c->dstH-1)*dstStride[0],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2563 dst[1] + ((c->dstH>>c->chrDstVSubSample)-1)*dstStride[1],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2564 dst[2] + ((c->dstH>>c->chrDstVSubSample)-1)*dstStride[2]};
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2565 int srcStride2[4]= {-srcStride[0], -srcStride[1], -srcStride[2]};
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2566 int dstStride2[4]= {-dstStride[0], -dstStride[1], -dstStride[2]};
22975
c91bb8f1cd85 convert palette to yuv instead of converting each pixel after pal->rgb
michael
parents: 22914
diff changeset
2567
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2568 src2[0] += (srcSliceH-1)*srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2569 if (c->srcFormat != PIX_FMT_PAL8)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2570 src2[1] += ((srcSliceH>>c->chrSrcVSubSample)-1)*srcStride[1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2571 src2[2] += ((srcSliceH>>c->chrSrcVSubSample)-1)*srcStride[2];
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2572
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2573 return c->swScale(c, src2, srcStride2, c->srcH-srcSliceY-srcSliceH, srcSliceH, dst2, dstStride2);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2574 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2575 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2576
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2577 /**
25457
0926055fe5b8 comment typo fixes
diego
parents: 25439
diff changeset
2578 * swscale wrapper, so we don't need to export the SwsContext
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2579 */
21869
99c7b02c4edb Add "support for both orderings of the slices (top->down / bottom->up)"
lucabe
parents: 21817
diff changeset
2580 int sws_scale_ordered(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2581 int srcSliceH, uint8_t* dst[], int dstStride[]){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2582 return sws_scale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2583 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2584
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2585 SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2586 float lumaSharpen, float chromaSharpen,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2587 float chromaHShift, float chromaVShift,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2588 int verbose)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2589 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2590 SwsFilter *filter= av_malloc(sizeof(SwsFilter));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2591
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2592 if (lumaGBlur!=0.0){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2593 filter->lumH= sws_getGaussianVec(lumaGBlur, 3.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2594 filter->lumV= sws_getGaussianVec(lumaGBlur, 3.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2595 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2596 filter->lumH= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2597 filter->lumV= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2598 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2599
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2600 if (chromaGBlur!=0.0){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2601 filter->chrH= sws_getGaussianVec(chromaGBlur, 3.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2602 filter->chrV= sws_getGaussianVec(chromaGBlur, 3.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2603 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2604 filter->chrH= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2605 filter->chrV= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2606 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2607
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2608 if (chromaSharpen!=0.0){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2609 SwsVector *id= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2610 sws_scaleVec(filter->chrH, -chromaSharpen);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2611 sws_scaleVec(filter->chrV, -chromaSharpen);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2612 sws_addVec(filter->chrH, id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2613 sws_addVec(filter->chrV, id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2614 sws_freeVec(id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2615 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2616
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2617 if (lumaSharpen!=0.0){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2618 SwsVector *id= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2619 sws_scaleVec(filter->lumH, -lumaSharpen);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2620 sws_scaleVec(filter->lumV, -lumaSharpen);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2621 sws_addVec(filter->lumH, id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2622 sws_addVec(filter->lumV, id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2623 sws_freeVec(id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2624 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2625
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2626 if (chromaHShift != 0.0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2627 sws_shiftVec(filter->chrH, (int)(chromaHShift+0.5));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2628
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2629 if (chromaVShift != 0.0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2630 sws_shiftVec(filter->chrV, (int)(chromaVShift+0.5));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2631
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2632 sws_normalizeVec(filter->chrH, 1.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2633 sws_normalizeVec(filter->chrV, 1.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2634 sws_normalizeVec(filter->lumH, 1.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2635 sws_normalizeVec(filter->lumV, 1.0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2636
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2637 if (verbose) sws_printVec(filter->chrH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2638 if (verbose) sws_printVec(filter->lumH);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2639
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2640 return filter;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2641 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2642
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2643 /**
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2644 * returns a normalized gaussian curve used to filter stuff
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2645 * quality=3 is high quality, lowwer is lowwer quality
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2646 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2647 SwsVector *sws_getGaussianVec(double variance, double quality){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2648 const int length= (int)(variance*quality + 0.5) | 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2649 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2650 double *coeff= av_malloc(length*sizeof(double));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2651 double middle= (length-1)*0.5;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2652 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2653
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2654 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2655 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2656
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2657 for (i=0; i<length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2658 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2659 double dist= i-middle;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2660 coeff[i]= exp( -dist*dist/(2*variance*variance) ) / sqrt(2*variance*PI);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2661 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2662
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2663 sws_normalizeVec(vec, 1.0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2664
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2665 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2666 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2667
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2668 SwsVector *sws_getConstVec(double c, int length){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2669 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2670 double *coeff= av_malloc(length*sizeof(double));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2671 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2672
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2673 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2674 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2675
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2676 for (i=0; i<length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2677 coeff[i]= c;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2678
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2679 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2680 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2681
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2682
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2683 SwsVector *sws_getIdentityVec(void){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2684 return sws_getConstVec(1.0, 1);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2685 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2686
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2687 double sws_dcVec(SwsVector *a){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2688 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2689 double sum=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2690
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2691 for (i=0; i<a->length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2692 sum+= a->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2693
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2694 return sum;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2695 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2696
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2697 void sws_scaleVec(SwsVector *a, double scalar){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2698 int i;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2699
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2700 for (i=0; i<a->length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2701 a->coeff[i]*= scalar;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2702 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2703
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2704 void sws_normalizeVec(SwsVector *a, double height){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2705 sws_scaleVec(a, height/sws_dcVec(a));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2706 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2707
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2708 static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2709 int length= a->length + b->length - 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2710 double *coeff= av_malloc(length*sizeof(double));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2711 int i, j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2712 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2713
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2714 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2715 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2716
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2717 for (i=0; i<length; i++) coeff[i]= 0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2718
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2719 for (i=0; i<a->length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2720 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2721 for (j=0; j<b->length; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2722 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2723 coeff[i+j]+= a->coeff[i]*b->coeff[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2724 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2725 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2726
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2727 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2728 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2729
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2730 static SwsVector *sws_sumVec(SwsVector *a, SwsVector *b){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2731 int length= FFMAX(a->length, b->length);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2732 double *coeff= av_malloc(length*sizeof(double));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2733 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2734 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2735
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2736 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2737 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2738
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2739 for (i=0; i<length; i++) coeff[i]= 0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2740
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2741 for (i=0; i<a->length; i++) coeff[i + (length-1)/2 - (a->length-1)/2]+= a->coeff[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2742 for (i=0; i<b->length; i++) coeff[i + (length-1)/2 - (b->length-1)/2]+= b->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2743
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2744 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2745 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2746
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2747 static SwsVector *sws_diffVec(SwsVector *a, SwsVector *b){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2748 int length= FFMAX(a->length, b->length);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2749 double *coeff= av_malloc(length*sizeof(double));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2750 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2751 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2752
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2753 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2754 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2755
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2756 for (i=0; i<length; i++) coeff[i]= 0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2757
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2758 for (i=0; i<a->length; i++) coeff[i + (length-1)/2 - (a->length-1)/2]+= a->coeff[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2759 for (i=0; i<b->length; i++) coeff[i + (length-1)/2 - (b->length-1)/2]-= b->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2760
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2761 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2762 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2763
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2764 /* shift left / or right if "shift" is negative */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2765 static SwsVector *sws_getShiftedVec(SwsVector *a, int shift){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2766 int length= a->length + FFABS(shift)*2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2767 double *coeff= av_malloc(length*sizeof(double));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2768 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2769 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2770
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2771 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2772 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2773
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2774 for (i=0; i<length; i++) coeff[i]= 0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2775
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2776 for (i=0; i<a->length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2777 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2778 coeff[i + (length-1)/2 - (a->length-1)/2 - shift]= a->coeff[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2779 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2780
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2781 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2782 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2783
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2784 void sws_shiftVec(SwsVector *a, int shift){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2785 SwsVector *shifted= sws_getShiftedVec(a, shift);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2786 av_free(a->coeff);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2787 a->coeff= shifted->coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2788 a->length= shifted->length;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2789 av_free(shifted);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2790 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2791
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2792 void sws_addVec(SwsVector *a, SwsVector *b){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2793 SwsVector *sum= sws_sumVec(a, b);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2794 av_free(a->coeff);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2795 a->coeff= sum->coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2796 a->length= sum->length;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2797 av_free(sum);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2798 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2799
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2800 void sws_subVec(SwsVector *a, SwsVector *b){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2801 SwsVector *diff= sws_diffVec(a, b);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2802 av_free(a->coeff);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2803 a->coeff= diff->coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2804 a->length= diff->length;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2805 av_free(diff);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2806 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2807
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2808 void sws_convVec(SwsVector *a, SwsVector *b){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2809 SwsVector *conv= sws_getConvVec(a, b);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2810 av_free(a->coeff);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2811 a->coeff= conv->coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2812 a->length= conv->length;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2813 av_free(conv);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2814 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2815
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2816 SwsVector *sws_cloneVec(SwsVector *a){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2817 double *coeff= av_malloc(a->length*sizeof(double));
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2818 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2819 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2820
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2821 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2822 vec->length= a->length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2823
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2824 for (i=0; i<a->length; i++) coeff[i]= a->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2825
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2826 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2827 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2828
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2829 void sws_printVec(SwsVector *a){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2830 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2831 double max=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2832 double min=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2833 double range;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2834
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2835 for (i=0; i<a->length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2836 if (a->coeff[i]>max) max= a->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2837
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2838 for (i=0; i<a->length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2839 if (a->coeff[i]<min) min= a->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2840
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2841 range= max - min;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2842
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2843 for (i=0; i<a->length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2844 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2845 int x= (int)((a->coeff[i]-min)*60.0/range +0.5);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2846 av_log(NULL, AV_LOG_DEBUG, "%1.3f ", a->coeff[i]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2847 for (;x>0; x--) av_log(NULL, AV_LOG_DEBUG, " ");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2848 av_log(NULL, AV_LOG_DEBUG, "|\n");
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2849 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2850 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2851
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2852 void sws_freeVec(SwsVector *a){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2853 if (!a) return;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2854 av_free(a->coeff);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2855 a->coeff=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2856 a->length=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2857 av_free(a);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2858 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2859
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2860 void sws_freeFilter(SwsFilter *filter){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2861 if (!filter) return;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2862
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2863 if (filter->lumH) sws_freeVec(filter->lumH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2864 if (filter->lumV) sws_freeVec(filter->lumV);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2865 if (filter->chrH) sws_freeVec(filter->chrH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2866 if (filter->chrV) sws_freeVec(filter->chrV);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2867 av_free(filter);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2868 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2869
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2870
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2871 void sws_freeContext(SwsContext *c){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2872 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2873 if (!c) return;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2874
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2875 if (c->lumPixBuf)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2876 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2877 for (i=0; i<c->vLumBufSize; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2878 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2879 av_free(c->lumPixBuf[i]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2880 c->lumPixBuf[i]=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2881 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2882 av_free(c->lumPixBuf);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2883 c->lumPixBuf=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2884 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2885
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2886 if (c->chrPixBuf)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2887 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2888 for (i=0; i<c->vChrBufSize; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2889 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2890 av_free(c->chrPixBuf[i]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2891 c->chrPixBuf[i]=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2892 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2893 av_free(c->chrPixBuf);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2894 c->chrPixBuf=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2895 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2896
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2897 av_free(c->vLumFilter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2898 c->vLumFilter = NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2899 av_free(c->vChrFilter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2900 c->vChrFilter = NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2901 av_free(c->hLumFilter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2902 c->hLumFilter = NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2903 av_free(c->hChrFilter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2904 c->hChrFilter = NULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2905 #ifdef HAVE_ALTIVEC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2906 av_free(c->vYCoeffsBank);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2907 c->vYCoeffsBank = NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2908 av_free(c->vCCoeffsBank);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2909 c->vCCoeffsBank = NULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2910 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2911
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2912 av_free(c->vLumFilterPos);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2913 c->vLumFilterPos = NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2914 av_free(c->vChrFilterPos);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2915 c->vChrFilterPos = NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2916 av_free(c->hLumFilterPos);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2917 c->hLumFilterPos = NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2918 av_free(c->hChrFilterPos);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2919 c->hChrFilterPos = NULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2920
21683
befebdb3ebaa Allow to compile swscale's non-SIMD code under the LGPL license.
lucabe
parents: 21029
diff changeset
2921 #if defined(ARCH_X86) && defined(CONFIG_GPL)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2922 #ifdef MAP_ANONYMOUS
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2923 if (c->funnyYCode) munmap(c->funnyYCode, MAX_FUNNY_CODE_SIZE);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2924 if (c->funnyUVCode) munmap(c->funnyUVCode, MAX_FUNNY_CODE_SIZE);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2925 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2926 av_free(c->funnyYCode);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2927 av_free(c->funnyUVCode);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2928 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2929 c->funnyYCode=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2930 c->funnyUVCode=NULL;
20576
9e7c80f126d6 Use common define for x86_32 and x86_64.
diego
parents: 20411
diff changeset
2931 #endif /* defined(ARCH_X86) */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2932
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2933 av_free(c->lumMmx2Filter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2934 c->lumMmx2Filter=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2935 av_free(c->chrMmx2Filter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2936 c->chrMmx2Filter=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2937 av_free(c->lumMmx2FilterPos);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2938 c->lumMmx2FilterPos=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2939 av_free(c->chrMmx2FilterPos);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2940 c->chrMmx2FilterPos=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2941 av_free(c->yuvTable);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2942 c->yuvTable=NULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2943
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2944 av_free(c);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2945 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2946
19661
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2947 /**
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2948 * Checks if context is valid or reallocs a new one instead.
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2949 * If context is NULL, just calls sws_getContext() to get a new one.
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2950 * Otherwise, checks if the parameters are the same already saved in context.
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2951 * If that is the case, returns the current context.
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2952 * Otherwise, frees context and gets a new one.
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2953 *
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2954 * Be warned that srcFilter, dstFilter are not checked, they are
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2955 * asumed to remain valid.
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2956 */
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2957 struct SwsContext *sws_getCachedContext(struct SwsContext *context,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2958 int srcW, int srcH, int srcFormat,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2959 int dstW, int dstH, int dstFormat, int flags,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2960 SwsFilter *srcFilter, SwsFilter *dstFilter, double *param)
19661
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2961 {
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2962 if (context != NULL) {
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2963 if ((context->srcW != srcW) || (context->srcH != srcH) ||
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2964 (context->srcFormat != srcFormat) ||
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2965 (context->dstW != dstW) || (context->dstH != dstH) ||
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2966 (context->dstFormat != dstFormat) || (context->flags != flags) ||
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2967 (context->param != param))
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2968 {
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2969 sws_freeContext(context);
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2970 context = NULL;
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2971 }
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2972 }
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2973 if (context == NULL) {
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2974 return sws_getContext(srcW, srcH, srcFormat,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2975 dstW, dstH, dstFormat, flags,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2976 srcFilter, dstFilter, param);
19661
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2977 }
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2978 return context;
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2979 }
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
2980