annotate libswscale/swscale.c @ 28883:c3f295ceae51

Do not call waveOutReset in uninit if you should wait till playing finishes, and retry waveOutClose if it fails due to still playing.
author reimar
date Mon, 09 Mar 2009 19:15:20 +0000
parents 04cc20101f70
children 0ee63ee71db3
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 /*
27490
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
25 supported Input formats: YV12, I420/IYUV, YUY2, UYVY, BGR32, BGR32_1, BGR24, BGR16, BGR15, RGB32, RGB32_1, 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 /*
26196
diego
parents: 26180
diff changeset
41 tested special converters (most are tested actually, but I did not write it down ...)
18861
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
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
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
27511
c9e8d182aa4b Make fast bilinear scaler work again.
michael
parents: 27496
diff changeset
57 #define _SVID_SOURCE //needed for MAP_ANONYMOUS
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
58 #include <inttypes.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
59 #include <string.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
60 #include <math.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
61 #include <stdio.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
62 #include <unistd.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
63 #include "config.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
64 #include <assert.h>
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
65 #if HAVE_SYS_MMAN_H
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
66 #include <sys/mman.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
67 #if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
68 #define MAP_ANONYMOUS MAP_ANON
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
69 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
70 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
71 #include "swscale.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
72 #include "swscale_internal.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
73 #include "rgb2rgb.h"
26670
e6774798e913 Use full path for #includes from another directory.
diego
parents: 26238
diff changeset
74 #include "libavutil/x86_cpu.h"
e6774798e913 Use full path for #includes from another directory.
diego
parents: 26238
diff changeset
75 #include "libavutil/bswap.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
76
27460
1b5516898adb Implement swscale_version().
stefano
parents: 27300
diff changeset
77 unsigned swscale_version(void)
1b5516898adb Implement swscale_version().
stefano
parents: 27300
diff changeset
78 {
1b5516898adb Implement swscale_version().
stefano
parents: 27300
diff changeset
79 return LIBSWSCALE_VERSION_INT;
1b5516898adb Implement swscale_version().
stefano
parents: 27300
diff changeset
80 }
1b5516898adb Implement swscale_version().
stefano
parents: 27300
diff changeset
81
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
82 #undef MOVNTQ
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
83 #undef PAVGB
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
84
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
85 //#undef HAVE_MMX2
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
86 //#define HAVE_AMD3DNOW
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
87 //#undef HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
88 //#undef ARCH_X86
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
89 //#define WORDS_BIGENDIAN
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
90 #define DITHER1XBPP
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
91
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
92 #define FAST_BGR2YV12 // use 7 bit coefficients instead of 15 bit
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
93
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
94 #define RET 0xC3 //near return opcode for x86
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
95
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
96 #ifdef M_PI
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
97 #define PI M_PI
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
98 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
99 #define PI 3.14159265358979323846
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
100 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
101
23278
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
102 #define isSupportedIn(x) ( \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
103 (x)==PIX_FMT_YUV420P \
24581
a7fe1ee84511 add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents: 24289
diff changeset
104 || (x)==PIX_FMT_YUVA420P \
23278
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
105 || (x)==PIX_FMT_YUYV422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
106 || (x)==PIX_FMT_UYVY422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
107 || (x)==PIX_FMT_RGB32 \
27490
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
108 || (x)==PIX_FMT_RGB32_1 \
23278
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 \
27490
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
113 || (x)==PIX_FMT_BGR32_1 \
23278
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
114 || (x)==PIX_FMT_RGB24 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
115 || (x)==PIX_FMT_RGB565 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
116 || (x)==PIX_FMT_RGB555 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
117 || (x)==PIX_FMT_GRAY8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
118 || (x)==PIX_FMT_YUV410P \
27557
a594051dc796 Add support for PIX_FMT_YUV440P.
michael
parents: 27555
diff changeset
119 || (x)==PIX_FMT_YUV440P \
23278
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
120 || (x)==PIX_FMT_GRAY16BE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
121 || (x)==PIX_FMT_GRAY16LE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
122 || (x)==PIX_FMT_YUV444P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
123 || (x)==PIX_FMT_YUV422P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
124 || (x)==PIX_FMT_YUV411P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
125 || (x)==PIX_FMT_PAL8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
126 || (x)==PIX_FMT_BGR8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
127 || (x)==PIX_FMT_RGB8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
128 || (x)==PIX_FMT_BGR4_BYTE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
129 || (x)==PIX_FMT_RGB4_BYTE \
23791
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
130 || (x)==PIX_FMT_YUV440P \
27555
bf2638aa89b4 Support mono as input format.
michael
parents: 27554
diff changeset
131 || (x)==PIX_FMT_MONOWHITE \
bf2638aa89b4 Support mono as input format.
michael
parents: 27554
diff changeset
132 || (x)==PIX_FMT_MONOBLACK \
23278
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
133 )
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
134 #define isSupportedOut(x) ( \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
135 (x)==PIX_FMT_YUV420P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
136 || (x)==PIX_FMT_YUYV422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
137 || (x)==PIX_FMT_UYVY422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
138 || (x)==PIX_FMT_YUV444P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
139 || (x)==PIX_FMT_YUV422P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
140 || (x)==PIX_FMT_YUV411P \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
141 || isRGB(x) \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
142 || isBGR(x) \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
143 || (x)==PIX_FMT_NV12 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
144 || (x)==PIX_FMT_NV21 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
145 || (x)==PIX_FMT_GRAY16BE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
146 || (x)==PIX_FMT_GRAY16LE \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
147 || (x)==PIX_FMT_GRAY8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
148 || (x)==PIX_FMT_YUV410P \
27557
a594051dc796 Add support for PIX_FMT_YUV440P.
michael
parents: 27555
diff changeset
149 || (x)==PIX_FMT_YUV440P \
23278
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
150 )
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
151 #define isPacked(x) ( \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
152 (x)==PIX_FMT_PAL8 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
153 || (x)==PIX_FMT_YUYV422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
154 || (x)==PIX_FMT_UYVY422 \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
155 || isRGB(x) \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
156 || isBGR(x) \
b745a8414f2c cosmetics; one test per line for all isXXX(x) macros
ivo
parents: 23189
diff changeset
157 )
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
158 #define usePal(x) ( \
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
159 (x)==PIX_FMT_PAL8 \
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
160 || (x)==PIX_FMT_BGR4_BYTE \
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
161 || (x)==PIX_FMT_RGB4_BYTE \
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
162 || (x)==PIX_FMT_BGR8 \
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
163 || (x)==PIX_FMT_RGB8 \
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
164 )
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
165
27536
dded40ae9728 Change RGB2YUV_SHIFT from 16 to 15 to make it able to work
michael
parents: 27532
diff changeset
166 #define RGB2YUV_SHIFT 15
27545
cd5855b269df Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents: 27543
diff changeset
167 #define BY ( (int)(0.114*219/255*(1<<RGB2YUV_SHIFT)+0.5))
cd5855b269df Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents: 27543
diff changeset
168 #define BV (-(int)(0.081*224/255*(1<<RGB2YUV_SHIFT)+0.5))
cd5855b269df Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents: 27543
diff changeset
169 #define BU ( (int)(0.500*224/255*(1<<RGB2YUV_SHIFT)+0.5))
cd5855b269df Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents: 27543
diff changeset
170 #define GY ( (int)(0.587*219/255*(1<<RGB2YUV_SHIFT)+0.5))
cd5855b269df Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents: 27543
diff changeset
171 #define GV (-(int)(0.419*224/255*(1<<RGB2YUV_SHIFT)+0.5))
cd5855b269df Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents: 27543
diff changeset
172 #define GU (-(int)(0.331*224/255*(1<<RGB2YUV_SHIFT)+0.5))
cd5855b269df Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents: 27543
diff changeset
173 #define RY ( (int)(0.299*219/255*(1<<RGB2YUV_SHIFT)+0.5))
cd5855b269df Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents: 27543
diff changeset
174 #define RV ( (int)(0.500*224/255*(1<<RGB2YUV_SHIFT)+0.5))
cd5855b269df Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents: 27543
diff changeset
175 #define RU (-(int)(0.169*224/255*(1<<RGB2YUV_SHIFT)+0.5))
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
176
28460
12c0dfccf149 Give better name to Inverse_Table_6_9
kostya
parents: 28457
diff changeset
177 extern const int32_t ff_yuv2rgb_coeffs[8][4];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
178
27526
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
179 static const double rgb2yuv_table[8][9]={
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
180 {0.7152, 0.0722, 0.2126, -0.386, 0.5, -0.115, -0.454, -0.046, 0.5},
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
181 {0.7152, 0.0722, 0.2126, -0.386, 0.5, -0.115, -0.454, -0.046, 0.5},
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
182 {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5},
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
183 {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5},
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
184 {0.59 , 0.11 , 0.30 , -0.331, 0.5, -0.169, -0.421, -0.079, 0.5}, //FCC
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
185 {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5},
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
186 {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //SMPTE 170M
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
187 {0.701 , 0.087 , 0.212 , -0.384, 0.5 -0.116, -0.445, -0.055, 0.5}, //SMPTE 240M
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
188 };
f515e8a1273c Add table of rgb->yuv conversion coefficients.
michael
parents: 27515
diff changeset
189
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
190 /*
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
191 NOTES
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
192 Special versions: fast Y 1:1 scaling (no interpolation in y direction)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
193
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
194 TODO
23869
diego
parents: 23791
diff changeset
195 more intelligent misalignment avoidance for the horizontal scaler
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
196 write special vertical cubic upscale version
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
197 optimize C code (YV12 / minmax)
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
198 add support for packed pixel YUV input & output
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
199 add support for Y8 output
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
200 optimize BGR24 & BGR32
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
201 add BGR4 output support
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
202 write special BGR->BGR scaler
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
203 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
204
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
205 #if ARCH_X86 && CONFIG_GPL
25875
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
206 DECLARE_ASM_CONST(8, uint64_t, bF8)= 0xF8F8F8F8F8F8F8F8LL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
207 DECLARE_ASM_CONST(8, uint64_t, bFC)= 0xFCFCFCFCFCFCFCFCLL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
208 DECLARE_ASM_CONST(8, uint64_t, w10)= 0x0010001000100010LL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
209 DECLARE_ASM_CONST(8, uint64_t, w02)= 0x0002000200020002LL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
210 DECLARE_ASM_CONST(8, uint64_t, bm00001111)=0x00000000FFFFFFFFLL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
211 DECLARE_ASM_CONST(8, uint64_t, bm00000111)=0x0000000000FFFFFFLL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
212 DECLARE_ASM_CONST(8, uint64_t, bm11111000)=0xFFFFFFFFFF000000LL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
213 DECLARE_ASM_CONST(8, uint64_t, bm01010101)=0x00FF00FF00FF00FFLL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
214
26028
afd429e00184 Discard two symbols from libswscale.
cehoyos
parents: 25967
diff changeset
215 const DECLARE_ALIGNED(8, uint64_t, ff_dither4[2]) = {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
216 0x0103010301030103LL,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
217 0x0200020002000200LL,};
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
218
26028
afd429e00184 Discard two symbols from libswscale.
cehoyos
parents: 25967
diff changeset
219 const DECLARE_ALIGNED(8, uint64_t, ff_dither8[2]) = {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
220 0x0602060206020602LL,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
221 0x0004000400040004LL,};
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
222
25875
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
223 DECLARE_ASM_CONST(8, uint64_t, b16Mask)= 0x001F001F001F001FLL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
224 DECLARE_ASM_CONST(8, uint64_t, g16Mask)= 0x07E007E007E007E0LL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
225 DECLARE_ASM_CONST(8, uint64_t, r16Mask)= 0xF800F800F800F800LL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
226 DECLARE_ASM_CONST(8, uint64_t, b15Mask)= 0x001F001F001F001FLL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
227 DECLARE_ASM_CONST(8, uint64_t, g15Mask)= 0x03E003E003E003E0LL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
228 DECLARE_ASM_CONST(8, uint64_t, r15Mask)= 0x7C007C007C007C00LL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25801
diff changeset
229
25882
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
230 DECLARE_ALIGNED(8, const uint64_t, ff_M24A) = 0x00FF0000FF0000FFLL;
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
231 DECLARE_ALIGNED(8, const uint64_t, ff_M24B) = 0xFF0000FF0000FF00LL;
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
232 DECLARE_ALIGNED(8, const uint64_t, ff_M24C) = 0x0000FF0000FF0000LL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
233
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
234 #ifdef FAST_BGR2YV12
25882
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
235 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2YCoeff) = 0x000000210041000DULL;
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
236 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2UCoeff) = 0x0000FFEEFFDC0038ULL;
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
237 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2VCoeff) = 0x00000038FFD2FFF8ULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
238 #else
25882
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
239 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2YCoeff) = 0x000020E540830C8BULL;
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
240 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2UCoeff) = 0x0000ED0FDAC23831ULL;
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
241 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2VCoeff) = 0x00003831D0E6F6EAULL;
19206
c629606a0702 Comment some #endif lines.
diego
parents: 19181
diff changeset
242 #endif /* FAST_BGR2YV12 */
25882
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
243 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2YOffset) = 0x1010101010101010ULL;
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
244 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2UVOffset) = 0x8080808080808080ULL;
2ad528dd42a0 Make some assembler constants global instead of declaring them multiple times.
reimar
parents: 25875
diff changeset
245 DECLARE_ALIGNED(8, const uint64_t, ff_w1111) = 0x0001000100010001ULL;
27529
ffb573fae5e8 Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents: 27526
diff changeset
246
27705
ad1d056da559 Mark some symbols in swscale.c as constant.
flameeyes
parents: 27704
diff changeset
247 DECLARE_ASM_CONST(8, uint64_t, ff_bgr24toY1Coeff) = 0x0C88000040870C88ULL;
ad1d056da559 Mark some symbols in swscale.c as constant.
flameeyes
parents: 27704
diff changeset
248 DECLARE_ASM_CONST(8, uint64_t, ff_bgr24toY2Coeff) = 0x20DE4087000020DEULL;
ad1d056da559 Mark some symbols in swscale.c as constant.
flameeyes
parents: 27704
diff changeset
249 DECLARE_ASM_CONST(8, uint64_t, ff_rgb24toY1Coeff) = 0x20DE0000408720DEULL;
ad1d056da559 Mark some symbols in swscale.c as constant.
flameeyes
parents: 27704
diff changeset
250 DECLARE_ASM_CONST(8, uint64_t, ff_rgb24toY2Coeff) = 0x0C88408700000C88ULL;
ad1d056da559 Mark some symbols in swscale.c as constant.
flameeyes
parents: 27704
diff changeset
251 DECLARE_ASM_CONST(8, uint64_t, ff_bgr24toYOffset) = 0x0008400000084000ULL;
ad1d056da559 Mark some symbols in swscale.c as constant.
flameeyes
parents: 27704
diff changeset
252
ad1d056da559 Mark some symbols in swscale.c as constant.
flameeyes
parents: 27704
diff changeset
253 DECLARE_ASM_CONST(8, uint64_t, ff_bgr24toUV[2][4]) = {
27529
ffb573fae5e8 Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents: 27526
diff changeset
254 {0x38380000DAC83838ULL, 0xECFFDAC80000ECFFULL, 0xF6E40000D0E3F6E4ULL, 0x3838D0E300003838ULL},
ffb573fae5e8 Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents: 27526
diff changeset
255 {0xECFF0000DAC8ECFFULL, 0x3838DAC800003838ULL, 0x38380000D0E33838ULL, 0xF6E4D0E30000F6E4ULL},
ffb573fae5e8 Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents: 27526
diff changeset
256 };
ffb573fae5e8 Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents: 27526
diff changeset
257
27705
ad1d056da559 Mark some symbols in swscale.c as constant.
flameeyes
parents: 27704
diff changeset
258 DECLARE_ASM_CONST(8, uint64_t, ff_bgr24toUVOffset)= 0x0040400000404000ULL;
27529
ffb573fae5e8 Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents: 27526
diff changeset
259
28315
82cf99fc9d2b Fix #endif comments.
diego
parents: 28309
diff changeset
260 #endif /* ARCH_X86 && CONFIG_GPL */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
261
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
262 // clipping helper table for C implementations:
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
263 static unsigned char clip_table[768];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
264
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
265 static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
266
27704
e7527860105b Mark dither_2x2_{8,4} static to swscale.c
flameeyes
parents: 27701
diff changeset
267 static const uint8_t __attribute__((aligned(8))) dither_2x2_4[2][8]={
27577
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
268 { 1, 3, 1, 3, 1, 3, 1, 3, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
269 { 2, 0, 2, 0, 2, 0, 2, 0, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
270 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
271
27704
e7527860105b Mark dither_2x2_{8,4} static to swscale.c
flameeyes
parents: 27701
diff changeset
272 static const uint8_t __attribute__((aligned(8))) dither_2x2_8[2][8]={
27577
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
273 { 6, 2, 6, 2, 6, 2, 6, 2, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
274 { 0, 4, 0, 4, 0, 4, 0, 4, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
275 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
276
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
277 const uint8_t __attribute__((aligned(8))) dither_8x8_32[8][8]={
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
278 { 17, 9, 23, 15, 16, 8, 22, 14, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
279 { 5, 29, 3, 27, 4, 28, 2, 26, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
280 { 21, 13, 19, 11, 20, 12, 18, 10, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
281 { 0, 24, 6, 30, 1, 25, 7, 31, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
282 { 16, 8, 22, 14, 17, 9, 23, 15, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
283 { 4, 28, 2, 26, 5, 29, 3, 27, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
284 { 20, 12, 18, 10, 21, 13, 19, 11, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
285 { 1, 25, 7, 31, 0, 24, 6, 30, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
286 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
287
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
288 #if 0
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
289 const uint8_t __attribute__((aligned(8))) dither_8x8_64[8][8]={
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
290 { 0, 48, 12, 60, 3, 51, 15, 63, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
291 { 32, 16, 44, 28, 35, 19, 47, 31, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
292 { 8, 56, 4, 52, 11, 59, 7, 55, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
293 { 40, 24, 36, 20, 43, 27, 39, 23, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
294 { 2, 50, 14, 62, 1, 49, 13, 61, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
295 { 34, 18, 46, 30, 33, 17, 45, 29, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
296 { 10, 58, 6, 54, 9, 57, 5, 53, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
297 { 42, 26, 38, 22, 41, 25, 37, 21, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
298 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
299 #endif
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
300
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
301 const uint8_t __attribute__((aligned(8))) dither_8x8_73[8][8]={
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
302 { 0, 55, 14, 68, 3, 58, 17, 72, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
303 { 37, 18, 50, 32, 40, 22, 54, 35, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
304 { 9, 64, 5, 59, 13, 67, 8, 63, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
305 { 46, 27, 41, 23, 49, 31, 44, 26, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
306 { 2, 57, 16, 71, 1, 56, 15, 70, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
307 { 39, 21, 52, 34, 38, 19, 51, 33, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
308 { 11, 66, 7, 62, 10, 65, 6, 60, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
309 { 48, 30, 43, 25, 47, 29, 42, 24, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
310 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
311
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
312 #if 0
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
313 const uint8_t __attribute__((aligned(8))) dither_8x8_128[8][8]={
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
314 { 68, 36, 92, 60, 66, 34, 90, 58, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
315 { 20, 116, 12, 108, 18, 114, 10, 106, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
316 { 84, 52, 76, 44, 82, 50, 74, 42, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
317 { 0, 96, 24, 120, 6, 102, 30, 126, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
318 { 64, 32, 88, 56, 70, 38, 94, 62, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
319 { 16, 112, 8, 104, 22, 118, 14, 110, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
320 { 80, 48, 72, 40, 86, 54, 78, 46, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
321 { 4, 100, 28, 124, 2, 98, 26, 122, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
322 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
323 #endif
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
324
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
325 #if 1
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
326 const uint8_t __attribute__((aligned(8))) dither_8x8_220[8][8]={
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
327 {117, 62, 158, 103, 113, 58, 155, 100, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
328 { 34, 199, 21, 186, 31, 196, 17, 182, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
329 {144, 89, 131, 76, 141, 86, 127, 72, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
330 { 0, 165, 41, 206, 10, 175, 52, 217, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
331 {110, 55, 151, 96, 120, 65, 162, 107, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
332 { 28, 193, 14, 179, 38, 203, 24, 189, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
333 {138, 83, 124, 69, 148, 93, 134, 79, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
334 { 7, 172, 48, 213, 3, 168, 45, 210, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
335 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
336 #elif 1
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
337 // tries to correct a gamma of 1.5
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
338 const uint8_t __attribute__((aligned(8))) dither_8x8_220[8][8]={
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
339 { 0, 143, 18, 200, 2, 156, 25, 215, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
340 { 78, 28, 125, 64, 89, 36, 138, 74, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
341 { 10, 180, 3, 161, 16, 195, 8, 175, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
342 {109, 51, 93, 38, 121, 60, 105, 47, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
343 { 1, 152, 23, 210, 0, 147, 20, 205, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
344 { 85, 33, 134, 71, 81, 30, 130, 67, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
345 { 14, 190, 6, 171, 12, 185, 5, 166, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
346 {117, 57, 101, 44, 113, 54, 97, 41, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
347 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
348 #elif 1
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
349 // tries to correct a gamma of 2.0
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
350 const uint8_t __attribute__((aligned(8))) dither_8x8_220[8][8]={
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
351 { 0, 124, 8, 193, 0, 140, 12, 213, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
352 { 55, 14, 104, 42, 66, 19, 119, 52, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
353 { 3, 168, 1, 145, 6, 187, 3, 162, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
354 { 86, 31, 70, 21, 99, 39, 82, 28, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
355 { 0, 134, 11, 206, 0, 129, 9, 200, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
356 { 62, 17, 114, 48, 58, 16, 109, 45, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
357 { 5, 181, 2, 157, 4, 175, 1, 151, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
358 { 95, 36, 78, 26, 90, 34, 74, 24, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
359 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
360 #else
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
361 // tries to correct a gamma of 2.5
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
362 const uint8_t __attribute__((aligned(8))) dither_8x8_220[8][8]={
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
363 { 0, 107, 3, 187, 0, 125, 6, 212, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
364 { 39, 7, 86, 28, 49, 11, 102, 36, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
365 { 1, 158, 0, 131, 3, 180, 1, 151, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
366 { 68, 19, 52, 12, 81, 25, 64, 17, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
367 { 0, 119, 5, 203, 0, 113, 4, 195, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
368 { 45, 9, 96, 33, 42, 8, 91, 30, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
369 { 2, 172, 1, 144, 2, 165, 0, 137, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
370 { 77, 23, 60, 15, 72, 21, 56, 14, },
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
371 };
1270a4919d4b Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents: 27567
diff changeset
372 #endif
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
373
26151
5884743208b6 change sws_format_name to return const char*, supress many warnings
bcoudurier
parents: 26150
diff changeset
374 const 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
375 {
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
376 switch (format) {
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
377 case PIX_FMT_YUV420P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
378 return "yuv420p";
24581
a7fe1ee84511 add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents: 24289
diff changeset
379 case PIX_FMT_YUVA420P:
a7fe1ee84511 add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents: 24289
diff changeset
380 return "yuva420p";
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
381 case PIX_FMT_YUYV422:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
382 return "yuyv422";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
383 case PIX_FMT_RGB24:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
384 return "rgb24";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
385 case PIX_FMT_BGR24:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
386 return "bgr24";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
387 case PIX_FMT_YUV422P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
388 return "yuv422p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
389 case PIX_FMT_YUV444P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
390 return "yuv444p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
391 case PIX_FMT_RGB32:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
392 return "rgb32";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
393 case PIX_FMT_YUV410P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
394 return "yuv410p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
395 case PIX_FMT_YUV411P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
396 return "yuv411p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
397 case PIX_FMT_RGB565:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
398 return "rgb565";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
399 case PIX_FMT_RGB555:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
400 return "rgb555";
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
401 case PIX_FMT_GRAY16BE:
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
402 return "gray16be";
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
403 case PIX_FMT_GRAY16LE:
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
404 return "gray16le";
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
405 case PIX_FMT_GRAY8:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
406 return "gray8";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
407 case PIX_FMT_MONOWHITE:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
408 return "mono white";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
409 case PIX_FMT_MONOBLACK:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
410 return "mono black";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
411 case PIX_FMT_PAL8:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
412 return "Palette";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
413 case PIX_FMT_YUVJ420P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
414 return "yuvj420p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
415 case PIX_FMT_YUVJ422P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
416 return "yuvj422p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
417 case PIX_FMT_YUVJ444P:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
418 return "yuvj444p";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
419 case PIX_FMT_XVMC_MPEG2_MC:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
420 return "xvmc_mpeg2_mc";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
421 case PIX_FMT_XVMC_MPEG2_IDCT:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
422 return "xvmc_mpeg2_idct";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
423 case PIX_FMT_UYVY422:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
424 return "uyvy422";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
425 case PIX_FMT_UYYVYY411:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
426 return "uyyvyy411";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
427 case PIX_FMT_RGB32_1:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
428 return "rgb32x";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
429 case PIX_FMT_BGR32_1:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
430 return "bgr32x";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
431 case PIX_FMT_BGR32:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
432 return "bgr32";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
433 case PIX_FMT_BGR565:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
434 return "bgr565";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
435 case PIX_FMT_BGR555:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
436 return "bgr555";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
437 case PIX_FMT_BGR8:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
438 return "bgr8";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
439 case PIX_FMT_BGR4:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
440 return "bgr4";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
441 case PIX_FMT_BGR4_BYTE:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
442 return "bgr4 byte";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
443 case PIX_FMT_RGB8:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
444 return "rgb8";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
445 case PIX_FMT_RGB4:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
446 return "rgb4";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
447 case PIX_FMT_RGB4_BYTE:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
448 return "rgb4 byte";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
449 case PIX_FMT_NV12:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
450 return "nv12";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
451 case PIX_FMT_NV21:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
452 return "nv21";
23791
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
453 case PIX_FMT_YUV440P:
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
454 return "yuv440p";
28246
881b453ccc20 Add PIX_FMT_VDPAU_H264.
cehoyos
parents: 28159
diff changeset
455 case PIX_FMT_VDPAU_H264:
881b453ccc20 Add PIX_FMT_VDPAU_H264.
cehoyos
parents: 28159
diff changeset
456 return "vdpau_h264";
28287
dbebb78dda3c Add VDPAU hardware accelerated decoding for MPEG1 and MPEG2 which will
cehoyos
parents: 28276
diff changeset
457 case PIX_FMT_VDPAU_MPEG1:
dbebb78dda3c Add VDPAU hardware accelerated decoding for MPEG1 and MPEG2 which will
cehoyos
parents: 28276
diff changeset
458 return "vdpau_mpeg1";
dbebb78dda3c Add VDPAU hardware accelerated decoding for MPEG1 and MPEG2 which will
cehoyos
parents: 28276
diff changeset
459 case PIX_FMT_VDPAU_MPEG2:
dbebb78dda3c Add VDPAU hardware accelerated decoding for MPEG1 and MPEG2 which will
cehoyos
parents: 28276
diff changeset
460 return "vdpau_mpeg2";
28309
234e0dc81bf6 Add PIX_FMT_VDPAU_WMV3 and PIX_FMT_VDPAU_VC1.
cehoyos
parents: 28287
diff changeset
461 case PIX_FMT_VDPAU_WMV3:
234e0dc81bf6 Add PIX_FMT_VDPAU_WMV3 and PIX_FMT_VDPAU_VC1.
cehoyos
parents: 28287
diff changeset
462 return "vdpau_wmv3";
234e0dc81bf6 Add PIX_FMT_VDPAU_WMV3 and PIX_FMT_VDPAU_VC1.
cehoyos
parents: 28287
diff changeset
463 case PIX_FMT_VDPAU_VC1:
234e0dc81bf6 Add PIX_FMT_VDPAU_WMV3 and PIX_FMT_VDPAU_VC1.
cehoyos
parents: 28287
diff changeset
464 return "vdpau_vc1";
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
465 default:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
466 return "Unknown format";
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19869
diff changeset
467 }
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
468 }
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
469
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
470 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
471 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
472 uint8_t *dest, uint8_t *uDest, uint8_t *vDest, int dstW, int chrDstW)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
473 {
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
474 //FIXME Optimize (just quickly written not optimized..)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
475 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
476 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
477 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
478 int val=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
479 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
480 for (j=0; j<lumFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
481 val += lumSrc[j][i] * lumFilter[j];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
482
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
483 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
484 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
485
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
486 if (uDest)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
487 for (i=0; i<chrDstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
488 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
489 int u=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
490 int v=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
491 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
492 for (j=0; j<chrFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
493 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
494 u += chrSrc[j][i] * chrFilter[j];
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
495 v += chrSrc[j][i + VOFW] * chrFilter[j];
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
496 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
497
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
498 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
499 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
500 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
501 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
502
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
503 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
504 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
505 uint8_t *dest, uint8_t *uDest, int dstW, int chrDstW, int dstFormat)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
506 {
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
507 //FIXME Optimize (just quickly written not optimized..)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
508 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
509 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
510 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
511 int val=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
512 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
513 for (j=0; j<lumFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
514 val += lumSrc[j][i] * lumFilter[j];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
515
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
516 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
517 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
518
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
519 if (!uDest)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
520 return;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
521
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
522 if (dstFormat == PIX_FMT_NV12)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
523 for (i=0; i<chrDstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
524 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
525 int u=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
526 int v=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
527 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
528 for (j=0; j<chrFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
529 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
530 u += chrSrc[j][i] * chrFilter[j];
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
531 v += chrSrc[j][i + VOFW] * chrFilter[j];
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
532 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
533
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
534 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
535 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
536 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
537 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
538 for (i=0; i<chrDstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
539 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
540 int u=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
541 int v=1<<18;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
542 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
543 for (j=0; j<chrFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
544 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
545 u += chrSrc[j][i] * chrFilter[j];
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
546 v += chrSrc[j][i + VOFW] * chrFilter[j];
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
547 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
548
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
549 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
550 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
551 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
552 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
553
27547
a917f63f61d3 Do not do unneeded clipping in YSCALE_YUV_2_PACKEDX_C.
michael
parents: 27546
diff changeset
554 #define YSCALE_YUV_2_PACKEDX_NOCLIP_C(type) \
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
555 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
556 int j;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
557 int Y1 = 1<<18;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
558 int Y2 = 1<<18;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
559 int U = 1<<18;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
560 int V = 1<<18;\
23400
16cce5d6ff9f rename attribute_unused to av_unused as it is declared in common.h
benoit
parents: 23382
diff changeset
561 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
562 const int i2= 2*i;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
563 \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
564 for (j=0; j<lumFilterSize; j++)\
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 Y1 += lumSrc[j][i2] * lumFilter[j];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
567 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
568 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
569 for (j=0; j<chrFilterSize; j++)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
570 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
571 U += chrSrc[j][i] * chrFilter[j];\
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
572 V += chrSrc[j][i+VOFW] * chrFilter[j];\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
573 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
574 Y1>>=19;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
575 Y2>>=19;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
576 U >>=19;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
577 V >>=19;\
27547
a917f63f61d3 Do not do unneeded clipping in YSCALE_YUV_2_PACKEDX_C.
michael
parents: 27546
diff changeset
578
a917f63f61d3 Do not do unneeded clipping in YSCALE_YUV_2_PACKEDX_C.
michael
parents: 27546
diff changeset
579 #define YSCALE_YUV_2_PACKEDX_C(type) \
a917f63f61d3 Do not do unneeded clipping in YSCALE_YUV_2_PACKEDX_C.
michael
parents: 27546
diff changeset
580 YSCALE_YUV_2_PACKEDX_NOCLIP_C(type)\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
581 if ((Y1|Y2|U|V)&256)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
582 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
583 if (Y1>255) Y1=255; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
584 else if (Y1<0)Y1=0; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
585 if (Y2>255) Y2=255; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
586 else if (Y2<0)Y2=0; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
587 if (U>255) U=255; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
588 else if (U<0) U=0; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
589 if (V>255) V=255; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
590 else if (V<0) V=0; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
591 }
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
592
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
593 #define YSCALE_YUV_2_PACKEDX_FULL_C \
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
594 for (i=0; i<dstW; i++){\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
595 int j;\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
596 int Y = 0;\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
597 int U = -128<<19;\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
598 int V = -128<<19;\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
599 int R,G,B;\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
600 \
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
601 for (j=0; j<lumFilterSize; j++){\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
602 Y += lumSrc[j][i ] * lumFilter[j];\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
603 }\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
604 for (j=0; j<chrFilterSize; j++){\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
605 U += chrSrc[j][i ] * chrFilter[j];\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
606 V += chrSrc[j][i+VOFW] * chrFilter[j];\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
607 }\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
608 Y >>=10;\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
609 U >>=10;\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
610 V >>=10;\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
611
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
612 #define YSCALE_YUV_2_RGBX_FULL_C(rnd) \
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
613 YSCALE_YUV_2_PACKEDX_FULL_C\
27567
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
614 Y-= c->yuv2rgb_y_offset;\
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
615 Y*= c->yuv2rgb_y_coeff;\
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
616 Y+= rnd;\
27567
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
617 R= Y + V*c->yuv2rgb_v2r_coeff;\
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
618 G= Y + V*c->yuv2rgb_v2g_coeff + U*c->yuv2rgb_u2g_coeff;\
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
619 B= Y + U*c->yuv2rgb_u2b_coeff;\
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
620 if ((R|G|B)&(0xC0000000)){\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
621 if (R>=(256<<22)) R=(256<<22)-1; \
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
622 else if (R<0)R=0; \
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
623 if (G>=(256<<22)) G=(256<<22)-1; \
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
624 else if (G<0)G=0; \
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
625 if (B>=(256<<22)) B=(256<<22)-1; \
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
626 else if (B<0)B=0; \
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
627 }\
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
628
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
629
27546
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
630 #define YSCALE_YUV_2_GRAY16_C \
27492
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
631 for (i=0; i<(dstW>>1); i++){\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
632 int j;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
633 int Y1 = 1<<18;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
634 int Y2 = 1<<18;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
635 int U = 1<<18;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
636 int V = 1<<18;\
27546
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
637 \
27492
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
638 const int i2= 2*i;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
639 \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
640 for (j=0; j<lumFilterSize; j++)\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
641 {\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
642 Y1 += lumSrc[j][i2] * lumFilter[j];\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
643 Y2 += lumSrc[j][i2+1] * lumFilter[j];\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
644 }\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
645 Y1>>=11;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
646 Y2>>=11;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
647 if ((Y1|Y2|U|V)&65536)\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
648 {\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
649 if (Y1>65535) Y1=65535; \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
650 else if (Y1<0)Y1=0; \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
651 if (Y2>65535) Y2=65535; \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
652 else if (Y2<0)Y2=0; \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
653 }
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
654
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
655 #define YSCALE_YUV_2_RGBX_C(type) \
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
656 YSCALE_YUV_2_PACKEDX_C(type) /* FIXME fix tables so that clipping is not needed and then use _NOCLIP*/\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
657 r = (type *)c->table_rV[V]; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
658 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
659 b = (type *)c->table_bU[U]; \
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
660
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
661 #define YSCALE_YUV_2_PACKED2_C \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
662 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
663 const int i2= 2*i; \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
664 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
665 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
666 int U= (uvbuf0[i ]*uvalpha1+uvbuf1[i ]*uvalpha)>>19; \
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
667 int V= (uvbuf0[i+VOFW]*uvalpha1+uvbuf1[i+VOFW]*uvalpha)>>19; \
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
668
27492
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
669 #define YSCALE_YUV_2_GRAY16_2_C \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
670 for (i=0; i<(dstW>>1); i++){ \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
671 const int i2= 2*i; \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
672 int Y1= (buf0[i2 ]*yalpha1+buf1[i2 ]*yalpha)>>11; \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
673 int Y2= (buf0[i2+1]*yalpha1+buf1[i2+1]*yalpha)>>11; \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
674
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
675 #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
676 YSCALE_YUV_2_PACKED2_C\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
677 type *r, *b, *g;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
678 r = (type *)c->table_rV[V];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
679 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
680 b = (type *)c->table_bU[U];\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
681
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
682 #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
683 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
684 const int i2= 2*i;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
685 int Y1= buf0[i2 ]>>7;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
686 int Y2= buf0[i2+1]>>7;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
687 int U= (uvbuf1[i ])>>7;\
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
688 int V= (uvbuf1[i+VOFW])>>7;\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
689
27492
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
690 #define YSCALE_YUV_2_GRAY16_1_C \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
691 for (i=0; i<(dstW>>1); i++){\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
692 const int i2= 2*i;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
693 int Y1= buf0[i2 ]<<1;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
694 int Y2= buf0[i2+1]<<1;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
695
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
696 #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
697 YSCALE_YUV_2_PACKED1_C\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
698 type *r, *b, *g;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
699 r = (type *)c->table_rV[V];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
700 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
701 b = (type *)c->table_bU[U];\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
702
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
703 #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
704 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
705 const int i2= 2*i;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
706 int Y1= buf0[i2 ]>>7;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
707 int Y2= buf0[i2+1]>>7;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
708 int U= (uvbuf0[i ] + uvbuf1[i ])>>8;\
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
709 int V= (uvbuf0[i+VOFW] + uvbuf1[i+VOFW])>>8;\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
710
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
711 #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
712 YSCALE_YUV_2_PACKED1B_C\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
713 type *r, *b, *g;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
714 r = (type *)c->table_rV[V];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
715 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
716 b = (type *)c->table_bU[U];\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
717
27554
021a1889cc26 Add support for PIX_FMT_MONOWHITE as output format.
michael
parents: 27553
diff changeset
718 #define YSCALE_YUV_2_MONO2_C \
27546
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
719 const uint8_t * const d128=dither_8x8_220[y&7];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
720 uint8_t *g= c->table_gU[128] + c->table_gV[128];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
721 for (i=0; i<dstW-7; i+=8){\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
722 int acc;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
723 acc = g[((buf0[i ]*yalpha1+buf1[i ]*yalpha)>>19) + d128[0]];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
724 acc+= acc + g[((buf0[i+1]*yalpha1+buf1[i+1]*yalpha)>>19) + d128[1]];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
725 acc+= acc + g[((buf0[i+2]*yalpha1+buf1[i+2]*yalpha)>>19) + d128[2]];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
726 acc+= acc + g[((buf0[i+3]*yalpha1+buf1[i+3]*yalpha)>>19) + d128[3]];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
727 acc+= acc + g[((buf0[i+4]*yalpha1+buf1[i+4]*yalpha)>>19) + d128[4]];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
728 acc+= acc + g[((buf0[i+5]*yalpha1+buf1[i+5]*yalpha)>>19) + d128[5]];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
729 acc+= acc + g[((buf0[i+6]*yalpha1+buf1[i+6]*yalpha)>>19) + d128[6]];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
730 acc+= acc + g[((buf0[i+7]*yalpha1+buf1[i+7]*yalpha)>>19) + d128[7]];\
27554
021a1889cc26 Add support for PIX_FMT_MONOWHITE as output format.
michael
parents: 27553
diff changeset
731 ((uint8_t*)dest)[0]= c->dstFormat == PIX_FMT_MONOBLACK ? acc : ~acc;\
27546
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
732 dest++;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
733 }\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
734
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
735
27554
021a1889cc26 Add support for PIX_FMT_MONOWHITE as output format.
michael
parents: 27553
diff changeset
736 #define YSCALE_YUV_2_MONOX_C \
27546
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
737 const uint8_t * const d128=dither_8x8_220[y&7];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
738 uint8_t *g= c->table_gU[128] + c->table_gV[128];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
739 int acc=0;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
740 for (i=0; i<dstW-1; i+=2){\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
741 int j;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
742 int Y1=1<<18;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
743 int Y2=1<<18;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
744 \
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
745 for (j=0; j<lumFilterSize; j++)\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
746 {\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
747 Y1 += lumSrc[j][i] * lumFilter[j];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
748 Y2 += lumSrc[j][i+1] * lumFilter[j];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
749 }\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
750 Y1>>=19;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
751 Y2>>=19;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
752 if ((Y1|Y2)&256)\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
753 {\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
754 if (Y1>255) Y1=255;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
755 else if (Y1<0)Y1=0;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
756 if (Y2>255) Y2=255;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
757 else if (Y2<0)Y2=0;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
758 }\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
759 acc+= acc + g[Y1+d128[(i+0)&7]];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
760 acc+= acc + g[Y2+d128[(i+1)&7]];\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
761 if ((i&7)==6){\
27554
021a1889cc26 Add support for PIX_FMT_MONOWHITE as output format.
michael
parents: 27553
diff changeset
762 ((uint8_t*)dest)[0]= c->dstFormat == PIX_FMT_MONOBLACK ? acc : ~acc;\
27546
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
763 dest++;\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
764 }\
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
765 }
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
766
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
767
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
768 #define YSCALE_YUV_2_ANYRGB_C(func, func2, func_g16, func_monoblack)\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
769 switch(c->dstFormat)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
770 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
771 case PIX_FMT_RGB32:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
772 case PIX_FMT_BGR32:\
27490
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
773 case PIX_FMT_RGB32_1:\
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
774 case PIX_FMT_BGR32_1:\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
775 func(uint32_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
776 ((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
777 ((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
778 } \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
779 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
780 case PIX_FMT_RGB24:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
781 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
782 ((uint8_t*)dest)[0]= r[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
783 ((uint8_t*)dest)[1]= g[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
784 ((uint8_t*)dest)[2]= b[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
785 ((uint8_t*)dest)[3]= r[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
786 ((uint8_t*)dest)[4]= g[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
787 ((uint8_t*)dest)[5]= b[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
788 dest+=6;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
789 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
790 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
791 case PIX_FMT_BGR24:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
792 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
793 ((uint8_t*)dest)[0]= b[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
794 ((uint8_t*)dest)[1]= g[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
795 ((uint8_t*)dest)[2]= r[Y1];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
796 ((uint8_t*)dest)[3]= b[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
797 ((uint8_t*)dest)[4]= g[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
798 ((uint8_t*)dest)[5]= r[Y2];\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
799 dest+=6;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
800 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
801 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
802 case PIX_FMT_RGB565:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
803 case PIX_FMT_BGR565:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
804 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
805 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
806 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
807 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
808 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
809 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
810 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
811 func(uint16_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
812 ((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
813 ((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
814 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
815 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
816 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
817 case PIX_FMT_RGB555:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
818 case PIX_FMT_BGR555:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
819 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
820 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
821 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
822 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
823 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
824 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
825 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
826 func(uint16_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
827 ((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
828 ((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
829 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
830 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
831 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
832 case PIX_FMT_RGB8:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
833 case PIX_FMT_BGR8:\
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 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
836 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
837 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
838 ((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
839 ((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
840 }\
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 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
843 case PIX_FMT_RGB4:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
844 case PIX_FMT_BGR4:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
845 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
846 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
847 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
848 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
849 ((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
850 + ((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
851 }\
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 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
854 case PIX_FMT_RGB4_BYTE:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
855 case PIX_FMT_BGR4_BYTE:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
856 {\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
857 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
858 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
859 func(uint8_t)\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
860 ((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
861 ((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
862 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
863 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
864 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
865 case PIX_FMT_MONOBLACK:\
27554
021a1889cc26 Add support for PIX_FMT_MONOWHITE as output format.
michael
parents: 27553
diff changeset
866 case PIX_FMT_MONOWHITE:\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
867 {\
27546
77ff4ab4ddfc Factorize yuv2packedXinC().
michael
parents: 27545
diff changeset
868 func_monoblack\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
869 }\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
870 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
871 case PIX_FMT_YUYV422:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
872 func2\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
873 ((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
874 ((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
875 ((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
876 ((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
877 } \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
878 break;\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
879 case PIX_FMT_UYVY422:\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
880 func2\
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
881 ((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
882 ((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
883 ((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
884 ((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
885 } \
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
886 break;\
27492
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
887 case PIX_FMT_GRAY16BE:\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
888 func_g16\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
889 ((uint8_t*)dest)[2*i2+0]= Y1>>8;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
890 ((uint8_t*)dest)[2*i2+1]= Y1;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
891 ((uint8_t*)dest)[2*i2+2]= Y2>>8;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
892 ((uint8_t*)dest)[2*i2+3]= Y2;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
893 } \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
894 break;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
895 case PIX_FMT_GRAY16LE:\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
896 func_g16\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
897 ((uint8_t*)dest)[2*i2+0]= Y1;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
898 ((uint8_t*)dest)[2*i2+1]= Y1>>8;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
899 ((uint8_t*)dest)[2*i2+2]= Y2;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
900 ((uint8_t*)dest)[2*i2+3]= Y2>>8;\
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
901 } \
a219635ccfa7 Make 16bit grayscale output work.
michael
parents: 27491
diff changeset
902 break;\
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
903 }\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
904
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
905
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
906 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
907 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
908 uint8_t *dest, int dstW, int y)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
909 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
910 int i;
27554
021a1889cc26 Add support for PIX_FMT_MONOWHITE as output format.
michael
parents: 27553
diff changeset
911 YSCALE_YUV_2_ANYRGB_C(YSCALE_YUV_2_RGBX_C, YSCALE_YUV_2_PACKEDX_C(void), YSCALE_YUV_2_GRAY16_C, YSCALE_YUV_2_MONOX_C)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
912 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
913
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
914 static inline void yuv2rgbXinC_full(SwsContext *c, int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
915 int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
916 uint8_t *dest, int dstW, int y)
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
917 {
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
918 int i;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
919 int step= fmt_depth(c->dstFormat)/8;
27596
33b8ad99fbcb Fix segfault with rgb24 and full_internal_chroma due to non-existing alpha
michael
parents: 27580
diff changeset
920 int aidx= 3;
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
921
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
922 switch(c->dstFormat){
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
923 case PIX_FMT_ARGB:
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
924 dest++;
28790
b747efa600d8 Fix bug introduced by me in r28756
sdrik
parents: 28721
diff changeset
925 aidx= 0;
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
926 case PIX_FMT_RGB24:
27596
33b8ad99fbcb Fix segfault with rgb24 and full_internal_chroma due to non-existing alpha
michael
parents: 27580
diff changeset
927 aidx--;
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
928 case PIX_FMT_RGBA:
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
929 YSCALE_YUV_2_RGBX_FULL_C(1<<21)
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28711
diff changeset
930 dest[aidx]= 255;
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
931 dest[0]= R>>22;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
932 dest[1]= G>>22;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
933 dest[2]= B>>22;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
934 dest+= step;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
935 }
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
936 break;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
937 case PIX_FMT_ABGR:
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
938 dest++;
28790
b747efa600d8 Fix bug introduced by me in r28756
sdrik
parents: 28721
diff changeset
939 aidx= 0;
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
940 case PIX_FMT_BGR24:
27596
33b8ad99fbcb Fix segfault with rgb24 and full_internal_chroma due to non-existing alpha
michael
parents: 27580
diff changeset
941 aidx--;
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
942 case PIX_FMT_BGRA:
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
943 YSCALE_YUV_2_RGBX_FULL_C(1<<21)
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28711
diff changeset
944 dest[aidx]= 255;
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
945 dest[0]= B>>22;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
946 dest[1]= G>>22;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
947 dest[2]= R>>22;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
948 dest+= step;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
949 }
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
950 break;
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
951 default:
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
952 assert(0);
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
953 }
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
954 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
955
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
956 //Note: we have C, X86, MMX, MMX2, 3DNOW versions, there is no 3DNOW+MMX2 one
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
957 //Plain C versions
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
958 #if !HAVE_MMX || defined (RUNTIME_CPUDETECT) || !CONFIG_GPL
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
959 #define COMPILE_C
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
960 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
961
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
962 #if ARCH_PPC
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
963 #if (HAVE_ALTIVEC || defined (RUNTIME_CPUDETECT)) && CONFIG_GPL
28317
78e355443da9 Disable C code when compiling AltiVec code, fixes the warning:
diego
parents: 28316
diff changeset
964 #undef COMPILE_C
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
965 #define COMPILE_ALTIVEC
28315
82cf99fc9d2b Fix #endif comments.
diego
parents: 28309
diff changeset
966 #endif
28159
8f2d9ed4929d consistency cosmetics: Rename POWERPC identifiers to PPC.
diego
parents: 27803
diff changeset
967 #endif //ARCH_PPC
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
968
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
969 #if ARCH_X86
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
970
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
971 #if ((HAVE_MMX && !HAVE_AMD3DNOW && !HAVE_MMX2) || defined (RUNTIME_CPUDETECT)) && CONFIG_GPL
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
972 #define COMPILE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
973 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
974
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
975 #if (HAVE_MMX2 || defined (RUNTIME_CPUDETECT)) && CONFIG_GPL
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
976 #define COMPILE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
977 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
978
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
979 #if ((HAVE_AMD3DNOW && !HAVE_MMX2) || defined (RUNTIME_CPUDETECT)) && CONFIG_GPL
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
980 #define COMPILE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
981 #endif
28315
82cf99fc9d2b Fix #endif comments.
diego
parents: 28309
diff changeset
982 #endif //ARCH_X86
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
983
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
984 #undef HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
985 #undef HAVE_MMX2
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
986 #undef HAVE_AMD3DNOW
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
987 #undef HAVE_ALTIVEC
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
988 #define HAVE_MMX 0
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
989 #define HAVE_MMX2 0
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
990 #define HAVE_AMD3DNOW 0
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
991 #define HAVE_ALTIVEC 0
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
992
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
993 #ifdef COMPILE_C
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
994 #define RENAME(a) a ## _C
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
995 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
996 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
997
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
998 #ifdef COMPILE_ALTIVEC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
999 #undef RENAME
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1000 #undef HAVE_ALTIVEC
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1001 #define HAVE_ALTIVEC 1
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1002 #define RENAME(a) a ## _altivec
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1003 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1004 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1005
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1006 #if ARCH_X86
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1007
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1008 //x86 versions
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1009 /*
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1010 #undef RENAME
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1011 #undef HAVE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1012 #undef HAVE_MMX2
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
1013 #undef HAVE_AMD3DNOW
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1014 #define ARCH_X86
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1015 #define RENAME(a) a ## _X86
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1016 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1017 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1018 //MMX versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1019 #ifdef COMPILE_MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1020 #undef RENAME
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1021 #undef HAVE_MMX
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1022 #undef HAVE_MMX2
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
1023 #undef HAVE_AMD3DNOW
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1024 #define HAVE_MMX 1
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1025 #define HAVE_MMX2 0
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
1026 #define HAVE_AMD3DNOW 0
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1027 #define RENAME(a) a ## _MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1028 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1029 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1030
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1031 //MMX2 versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1032 #ifdef COMPILE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1033 #undef RENAME
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1034 #undef HAVE_MMX
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1035 #undef HAVE_MMX2
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
1036 #undef HAVE_AMD3DNOW
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1037 #define HAVE_MMX 1
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1038 #define HAVE_MMX2 1
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
1039 #define HAVE_AMD3DNOW 0
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1040 #define RENAME(a) a ## _MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1041 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1042 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1043
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1044 //3DNOW versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1045 #ifdef COMPILE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1046 #undef RENAME
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1047 #undef HAVE_MMX
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1048 #undef HAVE_MMX2
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
1049 #undef HAVE_AMD3DNOW
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1050 #define HAVE_MMX 1
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1051 #define HAVE_MMX2 0
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
1052 #define HAVE_AMD3DNOW 1
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1053 #define RENAME(a) a ## _3DNow
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1054 #include "swscale_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1055 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1056
28315
82cf99fc9d2b Fix #endif comments.
diego
parents: 28309
diff changeset
1057 #endif //ARCH_X86
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1058
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1059 // minor note: the HAVE_xyz are messed up after this line so don't use them
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1060
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1061 static double getSplineCoeff(double a, double b, double c, double d, double dist)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1062 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1063 // 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
1064 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
1065 else return getSplineCoeff( 0.0,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1066 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
1067 c + 3.0*d,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1068 -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
1069 dist-1.0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1070 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1071
19172
bae6c99a99cc vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents: 19169
diff changeset
1072 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
1073 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
1074 SwsVector *srcFilter, SwsVector *dstFilter, double param[2])
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1075 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1076 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1077 int filterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1078 int filter2Size;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1079 int minFilterSize;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1080 int64_t *filter=NULL;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1081 int64_t *filter2=NULL;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1082 const int64_t fone= 1LL<<54;
27300
181f489ead9d fix memleak
michael
parents: 27299
diff changeset
1083 int ret= -1;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1084 #if ARCH_X86
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1085 if (flags & SWS_CPU_CAPS_MMX)
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27705
diff changeset
1086 __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
1087 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1088
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1089 // NOTE: the +1 is for the MMX scaler which reads over the end
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1090 *filterPos = av_malloc((dstW+1)*sizeof(int16_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1091
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1092 if (FFABS(xInc - 0x10000) <10) // unscaled
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 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1095 filterSize= 1;
27579
cd952ef4ad31 Avoid some explicit types in sizeof().
michael
parents: 27578
diff changeset
1096 filter= av_mallocz(dstW*sizeof(*filter)*filterSize);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1097
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1098 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1099 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1100 filter[i*filterSize]= fone;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1101 (*filterPos)[i]=i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1102 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1103
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1104 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1105 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
1106 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1107 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1108 int xDstInSrc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1109 filterSize= 1;
27579
cd952ef4ad31 Avoid some explicit types in sizeof().
michael
parents: 27578
diff changeset
1110 filter= av_malloc(dstW*sizeof(*filter)*filterSize);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1111
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1112 xDstInSrc= xInc/2 - 0x8000;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1113 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1114 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1115 int xx= (xDstInSrc - ((filterSize-1)<<15) + (1<<15))>>16;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1116
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1117 (*filterPos)[i]= xx;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1118 filter[i]= fone;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1119 xDstInSrc+= xInc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1120 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1121 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1122 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
1123 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1124 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1125 int xDstInSrc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1126 if (flags&SWS_BICUBIC) filterSize= 4;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1127 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
1128 else filterSize= 2; // SWS_BILINEAR / SWS_AREA
27579
cd952ef4ad31 Avoid some explicit types in sizeof().
michael
parents: 27578
diff changeset
1129 filter= av_malloc(dstW*sizeof(*filter)*filterSize);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1130
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1131 xDstInSrc= xInc/2 - 0x8000;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1132 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1133 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1134 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
1135 int j;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1136
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1137 (*filterPos)[i]= xx;
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1138 //bilinear upscale / linear interpolate / area averaging
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1139 for (j=0; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1140 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1141 int64_t coeff= fone - FFABS((xx<<16) - xDstInSrc)*(fone>>16);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1142 if (coeff<0) coeff=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1143 filter[i*filterSize + j]= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1144 xx++;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1145 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1146 xDstInSrc+= xInc;
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 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1149 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1150 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1151 int xDstInSrc;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1152 int sizeFactor;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1153
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1154 if (flags&SWS_BICUBIC) sizeFactor= 4;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1155 else if (flags&SWS_X) sizeFactor= 8;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1156 else if (flags&SWS_AREA) sizeFactor= 1; //downscale only, for upscale it is bilinear
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1157 else if (flags&SWS_GAUSS) sizeFactor= 8; // infinite ;)
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1158 else if (flags&SWS_LANCZOS) sizeFactor= param[0] != SWS_PARAM_DEFAULT ? ceil(2*param[0]) : 6;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1159 else if (flags&SWS_SINC) sizeFactor= 20; // infinite ;)
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1160 else if (flags&SWS_SPLINE) sizeFactor= 20; // infinite ;)
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1161 else if (flags&SWS_BILINEAR) sizeFactor= 2;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1162 else {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1163 sizeFactor= 0; //GCC warning killer
27182
f7b6d1014b6b Remove ASSERT() macro. SoC Patch from Keiji Costantini
lu_zero
parents: 27181
diff changeset
1164 assert(0);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1165 }
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1166
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1167 if (xInc <= 1<<16) filterSize= 1 + sizeFactor; // upscale
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1168 else filterSize= 1 + (sizeFactor*srcW + dstW - 1)/ dstW;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1169
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1170 if (filterSize > srcW-2) filterSize=srcW-2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1171
27579
cd952ef4ad31 Avoid some explicit types in sizeof().
michael
parents: 27578
diff changeset
1172 filter= av_malloc(dstW*sizeof(*filter)*filterSize);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1173
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1174 xDstInSrc= xInc - 0x10000;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1175 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1176 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1177 int xx= (xDstInSrc - ((filterSize-2)<<16)) / (1<<17);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1178 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1179 (*filterPos)[i]= xx;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1180 for (j=0; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1181 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1182 int64_t d= ((int64_t)FFABS((xx<<17) - xDstInSrc))<<13;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1183 double floatd;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1184 int64_t coeff;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1185
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1186 if (xInc > 1<<16)
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1187 d= d*dstW/srcW;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1188 floatd= d * (1.0/(1<<30));
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1189
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1190 if (flags & SWS_BICUBIC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1191 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1192 int64_t B= (param[0] != SWS_PARAM_DEFAULT ? param[0] : 0) * (1<<24);
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1193 int64_t C= (param[1] != SWS_PARAM_DEFAULT ? param[1] : 0.6) * (1<<24);
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1194 int64_t dd = ( d*d)>>30;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1195 int64_t ddd= (dd*d)>>30;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1196
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1197 if (d < 1LL<<30)
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1198 coeff = (12*(1<<24)-9*B-6*C)*ddd + (-18*(1<<24)+12*B+6*C)*dd + (6*(1<<24)-2*B)*(1<<30);
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1199 else if (d < 1LL<<31)
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1200 coeff = (-B-6*C)*ddd + (6*B+30*C)*dd + (-12*B-48*C)*d + (8*B+24*C)*(1<<30);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1201 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1202 coeff=0.0;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1203 coeff *= fone>>(30+24);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1204 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1205 /* else if (flags & SWS_X)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1206 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1207 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
1208 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
1209 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
1210 }*/
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1211 else if (flags & SWS_X)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1212 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1213 double A= param[0] != SWS_PARAM_DEFAULT ? param[0] : 1.0;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1214 double c;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1215
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1216 if (floatd<1.0)
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1217 c = cos(floatd*PI);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1218 else
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1219 c=-1.0;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1220 if (c<0.0) c= -pow(-c, A);
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1221 else c= pow( c, A);
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1222 coeff= (c*0.5 + 0.5)*fone;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1223 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1224 else if (flags & SWS_AREA)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1225 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1226 int64_t d2= d - (1<<29);
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1227 if (d2*xInc < -(1LL<<(29+16))) coeff= 1.0 * (1LL<<(30+16));
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1228 else if (d2*xInc < (1LL<<(29+16))) coeff= -d2*xInc + (1LL<<(29+16));
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1229 else coeff=0.0;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1230 coeff *= fone>>(30+16);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1231 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1232 else if (flags & SWS_GAUSS)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1233 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1234 double p= param[0] != SWS_PARAM_DEFAULT ? param[0] : 3.0;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1235 coeff = (pow(2.0, - p*floatd*floatd))*fone;
23155
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 else if (flags & SWS_SINC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1238 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1239 coeff = (d ? sin(floatd*PI)/(floatd*PI) : 1.0)*fone;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1240 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1241 else if (flags & SWS_LANCZOS)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1242 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1243 double p= param[0] != SWS_PARAM_DEFAULT ? param[0] : 3.0;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1244 coeff = (d ? sin(floatd*PI)*sin(floatd*PI/p)/(floatd*floatd*PI*PI/p) : 1.0)*fone;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1245 if (floatd>p) coeff=0;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1246 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1247 else if (flags & SWS_BILINEAR)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1248 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1249 coeff= (1<<30) - d;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1250 if (coeff<0) coeff=0;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1251 coeff *= fone >> 30;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1252 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1253 else if (flags & SWS_SPLINE)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1254 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1255 double p=-2.196152422706632;
27637
5abf906c09c8 Fix infinite loop with spline, bug was introduced in r27612 by me.
michael
parents: 27596
diff changeset
1256 coeff = getSplineCoeff(1.0, 0.0, p, -p-1.0, floatd) * fone;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1257 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1258 else {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1259 coeff= 0.0; //GCC warning killer
27182
f7b6d1014b6b Remove ASSERT() macro. SoC Patch from Keiji Costantini
lu_zero
parents: 27181
diff changeset
1260 assert(0);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1261 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1262
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1263 filter[i*filterSize + j]= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1264 xx++;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1265 }
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1266 xDstInSrc+= 2*xInc;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1267 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1268 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1269
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1270 /* 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
1271 av_free(filter);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1272 */
27182
f7b6d1014b6b Remove ASSERT() macro. SoC Patch from Keiji Costantini
lu_zero
parents: 27181
diff changeset
1273 assert(filterSize>0);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1274 filter2Size= filterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1275 if (srcFilter) filter2Size+= srcFilter->length - 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1276 if (dstFilter) filter2Size+= dstFilter->length - 1;
27182
f7b6d1014b6b Remove ASSERT() macro. SoC Patch from Keiji Costantini
lu_zero
parents: 27181
diff changeset
1277 assert(filter2Size>0);
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1278 filter2= av_mallocz(filter2Size*dstW*sizeof(*filter2));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1279
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1280 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1281 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1282 int j, k;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1283
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1284 if(srcFilter){
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1285 for (k=0; k<srcFilter->length; k++){
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1286 for (j=0; j<filterSize; j++)
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1287 filter2[i*filter2Size + k + j] += srcFilter->coeff[k]*filter[i*filterSize + j];
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1288 }
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1289 }else{
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1290 for (j=0; j<filterSize; j++)
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1291 filter2[i*filter2Size + j]= filter[i*filterSize + j];
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1292 }
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1293 //FIXME dstFilter
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1294
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1295 (*filterPos)[i]+= (filterSize-1)/2 - (filter2Size-1)/2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1296 }
27299
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
1297 av_freep(&filter);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1298
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1299 /* try to reduce the filter-size (step1 find size and shift left) */
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
1300 // 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
1301 minFilterSize= 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1302 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
1303 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1304 int min= filter2Size;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1305 int j;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1306 int64_t cutOff=0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1307
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1308 /* 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
1309 for (j=0; j<filter2Size; j++)
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 k;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1312 cutOff += FFABS(filter2[i*filter2Size]);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1313
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1314 if (cutOff > SWS_MAX_REDUCE_CUTOFF*fone) break;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1315
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
1316 /* 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
1317 if (i<dstW-1 && (*filterPos)[i] >= (*filterPos)[i+1]) break;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1318
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1319 // move filter coefficients left
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1320 for (k=1; k<filter2Size; k++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1321 filter2[i*filter2Size + k - 1]= filter2[i*filter2Size + k];
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1322 filter2[i*filter2Size + k - 1]= 0;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1323 (*filterPos)[i]++;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1324 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1325
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1326 cutOff=0;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1327 /* count near zeros on the right */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1328 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
1329 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1330 cutOff += FFABS(filter2[i*filter2Size + j]);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1331
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1332 if (cutOff > SWS_MAX_REDUCE_CUTOFF*fone) break;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1333 min--;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1334 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1335
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1336 if (min>minFilterSize) minFilterSize= min;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1337 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1338
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1339 if (flags & SWS_CPU_CAPS_ALTIVEC) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1340 // 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
1341 // 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
1342 if (minFilterSize < 5)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1343 filterAlign = 4;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1344
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1345 // We really don't want to waste our time
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1346 // doing useless computation, so fall back on
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1347 // the scalar C code for very small filters.
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1348 // Vectorizing is worth it only if you have a
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1349 // decent-sized vector.
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1350 if (minFilterSize < 3)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1351 filterAlign = 1;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1352 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1353
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1354 if (flags & SWS_CPU_CAPS_MMX) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1355 // special case for unscaled vertical filtering
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1356 if (minFilterSize == 1 && filterAlign == 2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1357 filterAlign= 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1358 }
19172
bae6c99a99cc vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents: 19169
diff changeset
1359
27182
f7b6d1014b6b Remove ASSERT() macro. SoC Patch from Keiji Costantini
lu_zero
parents: 27181
diff changeset
1360 assert(minFilterSize > 0);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1361 filterSize= (minFilterSize +(filterAlign-1)) & (~(filterAlign-1));
27182
f7b6d1014b6b Remove ASSERT() macro. SoC Patch from Keiji Costantini
lu_zero
parents: 27181
diff changeset
1362 assert(filterSize > 0);
27579
cd952ef4ad31 Avoid some explicit types in sizeof().
michael
parents: 27578
diff changeset
1363 filter= av_malloc(filterSize*dstW*sizeof(*filter));
27513
2550d0c5bcb6 Fix accurate rounding mode on x86_64.
michael
parents: 27511
diff changeset
1364 if (filterSize >= MAX_FILTER_SIZE*16/((flags&SWS_ACCURATE_RND) ? APCK_SIZE : 16) || !filter)
27300
181f489ead9d fix memleak
michael
parents: 27299
diff changeset
1365 goto error;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1366 *outFilterSize= filterSize;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1367
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1368 if (flags&SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1369 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
1370 /* 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
1371 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1372 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1373 int j;
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 for (j=0; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1376 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1377 if (j>=filter2Size) filter[i*filterSize + j]= 0;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1378 else filter[i*filterSize + j]= filter2[i*filter2Size + j];
27563
39c8d234b98e Ensure that additional filter coeffs that exist due to alignment
michael
parents: 27562
diff changeset
1379 if((flags & SWS_BITEXACT) && j>=minFilterSize)
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1380 filter[i*filterSize + j]= 0;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1381 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1382 }
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1383
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1384
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1385 //FIXME try to align filterPos if possible
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1386
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1387 //fix borders
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1388 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1389 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1390 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1391 if ((*filterPos)[i] < 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1392 {
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1393 // move filter coefficients left to compensate for filterPos
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1394 for (j=1; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1395 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1396 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
1397 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
1398 filter[i*filterSize + j]=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1399 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1400 (*filterPos)[i]= 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1401 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1402
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1403 if ((*filterPos)[i] + filterSize > srcW)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1404 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1405 int shift= (*filterPos)[i] + filterSize - srcW;
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1406 // move filter coefficients right to compensate for filterPos
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1407 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
1408 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1409 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
1410 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
1411 filter[i*filterSize +j]=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1412 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1413 (*filterPos)[i]= srcW - filterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1414 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1415 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1416
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1417 // Note the +1 is for the MMX scaler which reads over the end
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1418 /* 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
1419 *outFilter= av_mallocz(*outFilterSize*(dstW+1)*sizeof(int16_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1420
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
1421 /* normalize & store in outFilter */
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1422 for (i=0; i<dstW; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1423 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1424 int j;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1425 int64_t error=0;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1426 int64_t sum=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1427
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1428 for (j=0; j<filterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1429 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1430 sum+= filter[i*filterSize + j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1431 }
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1432 sum= (sum + one/2)/ one;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1433 for (j=0; j<*outFilterSize; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1434 {
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1435 int64_t v= filter[i*filterSize + j] + error;
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1436 int intV= ROUNDED_DIV(v, sum);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1437 (*outFilter)[i*(*outFilterSize) + j]= intV;
27580
9ff7a64a51fa Avoid using floating point for calculating filter coefficients.
michael
parents: 27579
diff changeset
1438 error= v - intV*sum;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1439 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1440 }
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1441
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1442 (*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
1443 for (i=0; i<*outFilterSize; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1444 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1445 int j= dstW*(*outFilterSize);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1446 (*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
1447 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1448
27300
181f489ead9d fix memleak
michael
parents: 27299
diff changeset
1449 ret=0;
181f489ead9d fix memleak
michael
parents: 27299
diff changeset
1450 error:
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1451 av_free(filter);
27300
181f489ead9d fix memleak
michael
parents: 27299
diff changeset
1452 av_free(filter2);
181f489ead9d fix memleak
michael
parents: 27299
diff changeset
1453 return ret;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1454 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1455
19368
eb51949c73eb Use COMPILE_MMX2 instead of HAVE_MMX2 to determine whether to compile
uau
parents: 19336
diff changeset
1456 #ifdef COMPILE_MMX2
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1457 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
1458 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1459 uint8_t *fragmentA;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1460 long imm8OfPShufW1A;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1461 long imm8OfPShufW2A;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1462 long fragmentLengthA;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1463 uint8_t *fragmentB;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1464 long imm8OfPShufW1B;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1465 long imm8OfPShufW2B;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1466 long fragmentLengthB;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1467 int fragmentPos;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1468
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1469 int xpos, i;
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 // create an optimized horizontal scaling routine
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1472
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1473 //code fragment
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1474
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27705
diff changeset
1475 __asm__ volatile(
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1476 "jmp 9f \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1477 // Begin
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1478 "0: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1479 "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
1480 "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
1481 "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
1482 "punpcklbw %%mm7, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1483 "punpcklbw %%mm7, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1484 "pshufw $0xFF, %%mm1, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1485 "1: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1486 "pshufw $0xFF, %%mm0, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1487 "2: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1488 "psubw %%mm1, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1489 "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
1490 "pmullw %%mm3, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1491 "psllw $7, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1492 "paddw %%mm1, %%mm0 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1493
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1494 "movq %%mm0, (%%"REG_D", %%"REG_a") \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1495
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1496 "add $8, %%"REG_a" \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1497 // End
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1498 "9: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1499 // "int $3 \n\t"
26238
726b915c2b45 Fix 64 bit shared library compilation with MMX2 by properly using PIC mangling.
diego
parents: 26232
diff changeset
1500 "lea " LOCAL_MANGLE(0b) ", %0 \n\t"
726b915c2b45 Fix 64 bit shared library compilation with MMX2 by properly using PIC mangling.
diego
parents: 26232
diff changeset
1501 "lea " LOCAL_MANGLE(1b) ", %1 \n\t"
726b915c2b45 Fix 64 bit shared library compilation with MMX2 by properly using PIC mangling.
diego
parents: 26232
diff changeset
1502 "lea " LOCAL_MANGLE(2b) ", %2 \n\t"
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1503 "dec %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1504 "dec %2 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1505 "sub %0, %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1506 "sub %0, %2 \n\t"
26238
726b915c2b45 Fix 64 bit shared library compilation with MMX2 by properly using PIC mangling.
diego
parents: 26232
diff changeset
1507 "lea " LOCAL_MANGLE(9b) ", %3 \n\t"
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1508 "sub %0, %3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1509
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1510
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1511 :"=r" (fragmentA), "=r" (imm8OfPShufW1A), "=r" (imm8OfPShufW2A),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1512 "=r" (fragmentLengthA)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1513 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1514
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27705
diff changeset
1515 __asm__ volatile(
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1516 "jmp 9f \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1517 // Begin
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1518 "0: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1519 "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
1520 "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
1521 "punpcklbw %%mm7, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1522 "pshufw $0xFF, %%mm0, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1523 "1: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1524 "pshufw $0xFF, %%mm0, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1525 "2: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1526 "psubw %%mm1, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1527 "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
1528 "pmullw %%mm3, %%mm0 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1529 "psllw $7, %%mm1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1530 "paddw %%mm1, %%mm0 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1531
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1532 "movq %%mm0, (%%"REG_D", %%"REG_a") \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1533
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1534 "add $8, %%"REG_a" \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1535 // End
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1536 "9: \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1537 // "int $3 \n\t"
26238
726b915c2b45 Fix 64 bit shared library compilation with MMX2 by properly using PIC mangling.
diego
parents: 26232
diff changeset
1538 "lea " LOCAL_MANGLE(0b) ", %0 \n\t"
726b915c2b45 Fix 64 bit shared library compilation with MMX2 by properly using PIC mangling.
diego
parents: 26232
diff changeset
1539 "lea " LOCAL_MANGLE(1b) ", %1 \n\t"
726b915c2b45 Fix 64 bit shared library compilation with MMX2 by properly using PIC mangling.
diego
parents: 26232
diff changeset
1540 "lea " LOCAL_MANGLE(2b) ", %2 \n\t"
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1541 "dec %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1542 "dec %2 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1543 "sub %0, %1 \n\t"
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1544 "sub %0, %2 \n\t"
26238
726b915c2b45 Fix 64 bit shared library compilation with MMX2 by properly using PIC mangling.
diego
parents: 26232
diff changeset
1545 "lea " LOCAL_MANGLE(9b) ", %3 \n\t"
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1546 "sub %0, %3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1547
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1548
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1549 :"=r" (fragmentB), "=r" (imm8OfPShufW1B), "=r" (imm8OfPShufW2B),
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1550 "=r" (fragmentLengthB)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1551 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1552
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1553 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
1554 fragmentPos=0;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1555
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1556 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
1557 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1558 int xx=xpos>>16;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1559
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1560 if ((i&3) == 0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1561 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1562 int a=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1563 int b=((xpos+xInc)>>16) - xx;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1564 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
1565 int d=((xpos+xInc*3)>>16) - xx;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1566
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1567 filter[i ] = (( xpos & 0xFFFF) ^ 0xFFFF)>>9;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1568 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
1569 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
1570 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
1571 filterPos[i/2]= xx;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1572
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1573 if (d+1<4)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1574 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1575 int maxShift= 3-(d+1);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1576 int shift=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1577
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1578 memcpy(funnyCode + fragmentPos, fragmentB, fragmentLengthB);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1579
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1580 funnyCode[fragmentPos + imm8OfPShufW1B]=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1581 (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
1582 funnyCode[fragmentPos + imm8OfPShufW2B]=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1583 a | (b<<2) | (c<<4) | (d<<6);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1584
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1585 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
1586 else if ((filterPos[i/2]&3) <= maxShift) shift=filterPos[i/2]&3; //Align
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1587
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1588 if (shift && i>=shift)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1589 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1590 funnyCode[fragmentPos + imm8OfPShufW1B]+= 0x55*shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1591 funnyCode[fragmentPos + imm8OfPShufW2B]+= 0x55*shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1592 filterPos[i/2]-=shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1593 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1594
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1595 fragmentPos+= fragmentLengthB;
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 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1598 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1599 int maxShift= 3-d;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1600 int shift=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1601
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1602 memcpy(funnyCode + fragmentPos, fragmentA, fragmentLengthA);
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 funnyCode[fragmentPos + imm8OfPShufW1A]=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1605 funnyCode[fragmentPos + imm8OfPShufW2A]=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1606 a | (b<<2) | (c<<4) | (d<<6);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1607
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1608 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
1609 else if ((filterPos[i/2]&3) <= maxShift) shift=filterPos[i/2]&3; //partial align
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 if (shift && i>=shift)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1612 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1613 funnyCode[fragmentPos + imm8OfPShufW1A]+= 0x55*shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1614 funnyCode[fragmentPos + imm8OfPShufW2A]+= 0x55*shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1615 filterPos[i/2]-=shift;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1616 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1617
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1618 fragmentPos+= fragmentLengthA;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1619 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1620
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1621 funnyCode[fragmentPos]= RET;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1622 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1623 xpos+=xInc;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1624 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1625 filterPos[i/2]= xpos>>16; // needed to jump to the next part
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1626 }
19368
eb51949c73eb Use COMPILE_MMX2 instead of HAVE_MMX2 to determine whether to compile
uau
parents: 19336
diff changeset
1627 #endif /* COMPILE_MMX2 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1628
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1629 static void globalInit(void){
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1630 // generating tables:
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1631 int i;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1632 for (i=0; i<768; i++){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1633 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
1634 clip_table[i]=c;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1635 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1636 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1637
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1638 static SwsFunc getSwsFunc(int flags){
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
1639
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1640 #if defined(RUNTIME_CPUDETECT) && CONFIG_GPL
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1641 #if ARCH_X86
25801
8b23a7370abb Fix typo in comment
reimar
parents: 25752
diff changeset
1642 // ordered per speed fastest first
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1643 if (flags & SWS_CPU_CAPS_MMX2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1644 return swScale_MMX2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1645 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
1646 return swScale_3DNow;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1647 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
1648 return swScale_MMX;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1649 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1650 return swScale_C;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1651
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1652 #else
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1653 #if ARCH_PPC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1654 if (flags & SWS_CPU_CAPS_ALTIVEC)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1655 return swScale_altivec;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1656 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1657 return swScale_C;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1658 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1659 return swScale_C;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1660 #endif /* ARCH_X86 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1661 #else //RUNTIME_CPUDETECT
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1662 #if HAVE_MMX2
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1663 return swScale_MMX2;
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
1664 #elif HAVE_AMD3DNOW
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1665 return swScale_3DNow;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1666 #elif HAVE_MMX
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1667 return swScale_MMX;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
1668 #elif HAVE_ALTIVEC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1669 return swScale_altivec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1670 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1671 return swScale_C;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1672 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1673 #endif //!RUNTIME_CPUDETECT
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1674 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1675
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1676 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
1677 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
1678 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
1679 /* Copy Y plane */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1680 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
1681 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
1682 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1683 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1684 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1685 uint8_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1686 uint8_t *dstPtr= dst;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1687 for (i=0; i<srcSliceH; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1688 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1689 memcpy(dstPtr, srcPtr, c->srcW);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1690 srcPtr+= srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1691 dstPtr+= dstStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1692 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1693 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1694 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
1695 if (c->dstFormat == PIX_FMT_NV12)
25750
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 25749
diff changeset
1696 interleaveBytes(src[1], src[2], dst, c->srcW/2, srcSliceH/2, srcStride[1], srcStride[2], dstStride[0]);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1697 else
25750
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 25749
diff changeset
1698 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
1699
23155
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 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
1704 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
1705 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1706
25750
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 25749
diff changeset
1707 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
1708
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1709 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1710 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1711
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1712 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
1713 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
1714 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1715
25750
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 25749
diff changeset
1716 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
1717
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1718 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1719 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1720
27495
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1721 static int YUV422PToYuy2Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1722 int srcSliceH, uint8_t* dstParam[], int dstStride[]){
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1723 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1724
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1725 yuv422ptoyuy2(src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0]);
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1726
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1727 return srcSliceH;
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1728 }
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1729
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1730 static int YUV422PToUyvyWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1731 int srcSliceH, uint8_t* dstParam[], int dstStride[]){
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1732 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY;
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1733
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1734 yuv422ptouyvy(src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0]);
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1735
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1736 return srcSliceH;
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1737 }
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
1738
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1739 static int pal2rgbWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1740 int srcSliceH, uint8_t* dst[], int dstStride[]){
27701
5916162c1bd3 Change variable types from int to enum PixelFormat.
cehoyos
parents: 27699
diff changeset
1741 const enum PixelFormat srcFormat= c->srcFormat;
5916162c1bd3 Change variable types from int to enum PixelFormat.
cehoyos
parents: 27699
diff changeset
1742 const enum PixelFormat dstFormat= c->dstFormat;
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1743 void (*conv)(const uint8_t *src, uint8_t *dst, long num_pixels,
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1744 const uint8_t *palette)=NULL;
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1745 int i;
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1746 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1747 uint8_t *srcPtr= src[0];
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1748
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1749 if (!usePal(srcFormat))
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1750 av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1751 sws_format_name(srcFormat), sws_format_name(dstFormat));
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1752
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1753 switch(dstFormat){
27783
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
1754 case PIX_FMT_RGB32 : conv = palette8topacked32; break;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
1755 case PIX_FMT_BGR32 : conv = palette8topacked32; break;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
1756 case PIX_FMT_BGR32_1: conv = palette8topacked32; break;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
1757 case PIX_FMT_RGB32_1: conv = palette8topacked32; break;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
1758 case PIX_FMT_RGB24 : conv = palette8topacked24; break;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
1759 case PIX_FMT_BGR24 : conv = palette8topacked24; break;
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1760 default: av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1761 sws_format_name(srcFormat), sws_format_name(dstFormat)); break;
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1762 }
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1763
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1764
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1765 for (i=0; i<srcSliceH; i++) {
27800
3c2c696294f1 Silence the following GCC warning:
vitor
parents: 27792
diff changeset
1766 conv(srcPtr, dstPtr, c->srcW, (uint8_t *) c->pal_rgb);
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1767 srcPtr+= srcStride[0];
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1768 dstPtr+= dstStride[0];
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1769 }
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1770
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1771 return srcSliceH;
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1772 }
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
1773
27490
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
1774 /* {RGB,BGR}{15,16,24,32,32_1} -> {RGB,BGR}{15,16,24,32} */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1775 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
1776 int srcSliceH, uint8_t* dst[], int dstStride[]){
27695
9cf6c7c5c7cd Change variable types from int to enum PixelFormat.
cehoyos
parents: 27686
diff changeset
1777 const enum PixelFormat srcFormat= c->srcFormat;
9cf6c7c5c7cd Change variable types from int to enum PixelFormat.
cehoyos
parents: 27686
diff changeset
1778 const enum PixelFormat dstFormat= c->dstFormat;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1779 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
1780 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
1781 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
1782 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
1783 void (*conv)(const uint8_t *src, uint8_t *dst, long src_size)=NULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1784
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1785 /* BGR -> BGR */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1786 if ( (isBGR(srcFormat) && isBGR(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1787 || (isRGB(srcFormat) && isRGB(dstFormat))){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1788 switch(srcId | (dstId<<4)){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1789 case 0x34: conv= rgb16to15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1790 case 0x36: conv= rgb24to15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1791 case 0x38: conv= rgb32to15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1792 case 0x43: conv= rgb15to16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1793 case 0x46: conv= rgb24to16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1794 case 0x48: conv= rgb32to16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1795 case 0x63: conv= rgb15to24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1796 case 0x64: conv= rgb16to24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1797 case 0x68: conv= rgb32to24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1798 case 0x83: conv= rgb15to32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1799 case 0x84: conv= rgb16to32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1800 case 0x86: conv= rgb24to32; break;
26175
b62cfba8df31 Remove redundant swScaler: output from places where av_log()
diego
parents: 26151
diff changeset
1801 default: av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1802 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
1803 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1804 }else if ( (isBGR(srcFormat) && isRGB(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1805 || (isRGB(srcFormat) && isBGR(dstFormat))){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1806 switch(srcId | (dstId<<4)){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1807 case 0x33: conv= rgb15tobgr15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1808 case 0x34: conv= rgb16tobgr15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1809 case 0x36: conv= rgb24tobgr15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1810 case 0x38: conv= rgb32tobgr15; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1811 case 0x43: conv= rgb15tobgr16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1812 case 0x44: conv= rgb16tobgr16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1813 case 0x46: conv= rgb24tobgr16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1814 case 0x48: conv= rgb32tobgr16; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1815 case 0x63: conv= rgb15tobgr24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1816 case 0x64: conv= rgb16tobgr24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1817 case 0x66: conv= rgb24tobgr24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1818 case 0x68: conv= rgb32tobgr24; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1819 case 0x83: conv= rgb15tobgr32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1820 case 0x84: conv= rgb16tobgr32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1821 case 0x86: conv= rgb24tobgr32; break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1822 case 0x88: conv= rgb32tobgr32; break;
26175
b62cfba8df31 Remove redundant swScaler: output from places where av_log()
diego
parents: 26151
diff changeset
1823 default: av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1824 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
1825 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1826 }else{
26175
b62cfba8df31 Remove redundant swScaler: output from places where av_log()
diego
parents: 26151
diff changeset
1827 av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n",
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1828 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
1829 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1830
23188
6431b46104b7 test if color conv fonction exists prior to using it
benoit
parents: 23155
diff changeset
1831 if(conv)
6431b46104b7 test if color conv fonction exists prior to using it
benoit
parents: 23155
diff changeset
1832 {
27490
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
1833 uint8_t *srcPtr= src[0];
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
1834 if(srcFormat == PIX_FMT_RGB32_1 || srcFormat == PIX_FMT_BGR32_1)
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
1835 srcPtr += ALT32_CORR;
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
1836
25439
17098467fc9b Make sure strides have positive values before converting.
benoit
parents: 24607
diff changeset
1837 if (dstStride[0]*srcBpp == srcStride[0]*dstBpp && srcStride[0] > 0)
27490
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
1838 conv(srcPtr, dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]);
23189
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1839 else
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1840 {
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1841 int i;
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1842 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1843
23189
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1844 for (i=0; i<srcSliceH; i++)
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1845 {
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1846 conv(srcPtr, dstPtr, c->srcW*srcBpp);
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1847 srcPtr+= srcStride[0];
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1848 dstPtr+= dstStride[0];
9eeca842d5b1 cosmetics: indentation after previous patch
benoit
parents: 23188
diff changeset
1849 }
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1850 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1851 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1852 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1853 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1854
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1855 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
1856 int srcSliceH, uint8_t* dst[], int dstStride[]){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1857
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1858 rgb24toyv12(
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1859 src[0],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1860 dst[0]+ srcSliceY *dstStride[0],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1861 dst[1]+(srcSliceY>>1)*dstStride[1],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1862 dst[2]+(srcSliceY>>1)*dstStride[2],
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1863 c->srcW, srcSliceH,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1864 dstStride[0], dstStride[1], srcStride[0]);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1865 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1866 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1867
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1868 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
1869 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
1870 int i;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1871
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1872 /* copy Y */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1873 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
1874 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
1875 else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1876 uint8_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1877 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1878
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1879 for (i=0; i<srcSliceH; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1880 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1881 memcpy(dstPtr, srcPtr, c->srcW);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1882 srcPtr+= srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1883 dstPtr+= dstStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1884 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1885 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1886
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1887 if (c->dstFormat==PIX_FMT_YUV420P){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1888 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
1889 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
1890 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1891 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
1892 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
1893 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1894 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1895 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1896
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1897 /* unscaled copy like stuff (assumes nearly identical formats) */
27180
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
1898 static int packedCopy(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1899 int srcSliceH, uint8_t* dst[], int dstStride[])
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1900 {
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1901 if (dstStride[0]==srcStride[0] && srcStride[0] > 0)
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1902 memcpy(dst[0] + dstStride[0]*srcSliceY, src[0], srcSliceH*dstStride[0]);
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1903 else
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1904 {
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1905 int i;
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1906 uint8_t *srcPtr= src[0];
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1907 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY;
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1908 int length=0;
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1909
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1910 /* universal length finder */
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1911 while(length+c->srcW <= FFABS(dstStride[0])
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1912 && length+c->srcW <= FFABS(srcStride[0])) length+= c->srcW;
27182
f7b6d1014b6b Remove ASSERT() macro. SoC Patch from Keiji Costantini
lu_zero
parents: 27181
diff changeset
1913 assert(length!=0);
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1914
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1915 for (i=0; i<srcSliceH; i++)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1916 {
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1917 memcpy(dstPtr, srcPtr, length);
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1918 srcPtr+= srcStride[0];
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1919 dstPtr+= dstStride[0];
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1920 }
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1921 }
27180
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
1922 return srcSliceH;
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
1923 }
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1924
27180
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
1925 static int planarCopy(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
1926 int srcSliceH, uint8_t* dst[], int dstStride[])
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
1927 {
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1928 int plane;
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1929 for (plane=0; plane<3; plane++)
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1930 {
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1931 int length= plane==0 ? c->srcW : -((-c->srcW )>>c->chrDstHSubSample);
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1932 int y= plane==0 ? srcSliceY: -((-srcSliceY)>>c->chrDstVSubSample);
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1933 int height= plane==0 ? srcSliceH: -((-srcSliceH)>>c->chrDstVSubSample);
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1934
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1935 if ((isGray(c->srcFormat) || isGray(c->dstFormat)) && plane>0)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1936 {
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1937 if (!isGray(c->dstFormat))
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1938 memset(dst[plane], 128, dstStride[plane]*height);
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1939 }
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1940 else
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1941 {
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1942 if (dstStride[plane]==srcStride[plane] && srcStride[plane] > 0)
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1943 memcpy(dst[plane] + dstStride[plane]*y, src[plane], height*dstStride[plane]);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1944 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1945 {
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1946 int i;
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1947 uint8_t *srcPtr= src[plane];
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1948 uint8_t *dstPtr= dst[plane] + dstStride[plane]*y;
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1949 for (i=0; i<height; i++)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1950 {
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1951 memcpy(dstPtr, srcPtr, length);
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1952 srcPtr+= srcStride[plane];
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1953 dstPtr+= dstStride[plane];
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1954 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1955 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1956 }
27181
a6ca10caead4 Reindent. SoC Patch from Keiji Costantini
lu_zero
parents: 27180
diff changeset
1957 }
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1958 return srcSliceH;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1959 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1960
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1961 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
1962 int srcSliceH, uint8_t* dst[], int dstStride[]){
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1963
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1964 int length= c->srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1965 int y= srcSliceY;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1966 int height= srcSliceH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1967 int i, j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1968 uint8_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1969 uint8_t *dstPtr= dst[0] + dstStride[0]*y;
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1970
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1971 if (!isGray(c->dstFormat)){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1972 int height= -((-srcSliceH)>>c->chrDstVSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1973 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
1974 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
1975 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1976 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
1977 for (i=0; i<height; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1978 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1979 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
1980 srcPtr+= srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1981 dstPtr+= dstStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1982 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1983 return srcSliceH;
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1984 }
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1985
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1986 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
1987 int srcSliceH, uint8_t* dst[], int dstStride[]){
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
1988
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1989 int length= c->srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1990 int y= srcSliceY;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1991 int height= srcSliceH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1992 int i, j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1993 uint8_t *srcPtr= src[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1994 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
1995 for (i=0; i<height; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1996 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1997 for (j=0; j<length; j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1998 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
1999 dstPtr[j<<1] = srcPtr[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2000 dstPtr[(j<<1)+1] = srcPtr[j];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2001 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2002 srcPtr+= srcStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2003 dstPtr+= dstStride[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2004 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2005 return srcSliceH;
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
2006 }
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
2007
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
2008 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
2009 int srcSliceH, uint8_t* dst[], int dstStride[]){
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
2010
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2011 int length= c->srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2012 int y= srcSliceY;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2013 int height= srcSliceH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2014 int i, j;
26915
0348d37f5933 cast to correct type, suppress warning
bcoudurier
parents: 26913
diff changeset
2015 uint16_t *srcPtr= (uint16_t*)src[0];
26917
4c8ad45769c7 cast to correct type, suppress warnings
bcoudurier
parents: 26916
diff changeset
2016 uint16_t *dstPtr= (uint16_t*)(dst[0] + dstStride[0]*y/2);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2017 for (i=0; i<height; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2018 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2019 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
2020 srcPtr+= srcStride[0]/2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2021 dstPtr+= dstStride[0]/2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2022 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2023 return srcSliceH;
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
2024 }
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
2025
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
2026
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2027 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
2028 switch(format){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2029 case PIX_FMT_UYVY422:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2030 case PIX_FMT_YUYV422:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2031 *h=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2032 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2033 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2034 case PIX_FMT_YUV420P:
24581
a7fe1ee84511 add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents: 24289
diff changeset
2035 case PIX_FMT_YUVA420P:
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2036 case PIX_FMT_GRAY16BE:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2037 case PIX_FMT_GRAY16LE:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2038 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
2039 case PIX_FMT_NV12:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2040 case PIX_FMT_NV21:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2041 *h=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2042 *v=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2043 break;
23791
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2044 case PIX_FMT_YUV440P:
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2045 *h=0;
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2046 *v=1;
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2047 break;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2048 case PIX_FMT_YUV410P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2049 *h=2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2050 *v=2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2051 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2052 case PIX_FMT_YUV444P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2053 *h=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2054 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2055 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2056 case PIX_FMT_YUV422P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2057 *h=1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2058 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2059 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2060 case PIX_FMT_YUV411P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2061 *h=2;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2062 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2063 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2064 default:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2065 *h=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2066 *v=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2067 break;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2068 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2069 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2070
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2071 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
2072 int r= (f + (1<<15))>>16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2073 if (r<-0x7FFF) return 0x8000;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2074 else if (r> 0x7FFF) return 0x7FFF;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2075 else return r;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2076 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2077
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2078 /**
28460
12c0dfccf149 Give better name to Inverse_Table_6_9
kostya
parents: 28457
diff changeset
2079 * @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x]
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
2080 * @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
2081 * @return -1 if not supported
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2082 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2083 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
2084 int64_t crv = inv_table[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2085 int64_t cbu = inv_table[1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2086 int64_t cgu = -inv_table[2];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2087 int64_t cgv = -inv_table[3];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2088 int64_t cy = 1<<16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2089 int64_t oy = 0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2090
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2091 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
2092 memcpy(c->dstColorspaceTable, table, sizeof(int)*4);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2093
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2094 c->brightness= brightness;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2095 c->contrast = contrast;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2096 c->saturation= saturation;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2097 c->srcRange = srcRange;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2098 c->dstRange = dstRange;
27515
9355343a7721 Fix jpeg yuv.
michael
parents: 27513
diff changeset
2099 if (isYUV(c->dstFormat) || isGray(c->dstFormat)) return 0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2100
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2101 c->uOffset= 0x0400040004000400LL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2102 c->vOffset= 0x0400040004000400LL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2103
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2104 if (!srcRange){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2105 cy= (cy*255) / 219;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2106 oy= 16<<16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2107 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2108 crv= (crv*224) / 255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2109 cbu= (cbu*224) / 255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2110 cgu= (cgu*224) / 255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2111 cgv= (cgv*224) / 255;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2112 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2113
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2114 cy = (cy *contrast )>>16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2115 crv= (crv*contrast * saturation)>>32;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2116 cbu= (cbu*contrast * saturation)>>32;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2117 cgu= (cgu*contrast * saturation)>>32;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2118 cgv= (cgv*contrast * saturation)>>32;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2119
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2120 oy -= 256*brightness;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2121
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2122 c->yCoeff= roundToInt16(cy *8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2123 c->vrCoeff= roundToInt16(crv*8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2124 c->ubCoeff= roundToInt16(cbu*8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2125 c->vgCoeff= roundToInt16(cgv*8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2126 c->ugCoeff= roundToInt16(cgu*8192) * 0x0001000100010001ULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2127 c->yOffset= roundToInt16(oy * 8) * 0x0001000100010001ULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2128
27567
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
2129 c->yuv2rgb_y_coeff = (int16_t)roundToInt16(cy <<13);
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
2130 c->yuv2rgb_y_offset = (int16_t)roundToInt16(oy << 9);
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
2131 c->yuv2rgb_v2r_coeff= (int16_t)roundToInt16(crv<<13);
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
2132 c->yuv2rgb_v2g_coeff= (int16_t)roundToInt16(cgv<<13);
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
2133 c->yuv2rgb_u2g_coeff= (int16_t)roundToInt16(cgu<<13);
203ac2c7f613 Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents: 27563
diff changeset
2134 c->yuv2rgb_u2b_coeff= (int16_t)roundToInt16(cbu<<13);
27548
78da4c8b2293 Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents: 27547
diff changeset
2135
28461
75586eb0750d Prefix visible YUV2RGB functions with sws_
kostya
parents: 28460
diff changeset
2136 sws_yuv2rgb_c_init_tables(c, inv_table, srcRange, brightness, contrast, saturation);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2137 //FIXME factorize
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2138
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2139 #ifdef COMPILE_ALTIVEC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2140 if (c->flags & SWS_CPU_CAPS_ALTIVEC)
28461
75586eb0750d Prefix visible YUV2RGB functions with sws_
kostya
parents: 28460
diff changeset
2141 sws_yuv2rgb_altivec_init_tables (c, inv_table, brightness, contrast, saturation);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2142 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2143 return 0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2144 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2145
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2146 /**
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2147 * @return -1 if not supported
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2148 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2149 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
2150 if (isYUV(c->dstFormat) || isGray(c->dstFormat)) return -1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2151
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2152 *inv_table = c->srcColorspaceTable;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2153 *table = c->dstColorspaceTable;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2154 *srcRange = c->srcRange;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2155 *dstRange = c->dstRange;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2156 *brightness= c->brightness;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2157 *contrast = c->contrast;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2158 *saturation= c->saturation;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2159
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2160 return 0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2161 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2162
27696
0c2dc440984b Change one more variable type from int to enum PixelFormat.
aurel
parents: 27695
diff changeset
2163 static int handle_jpeg(enum PixelFormat *format)
19987
f00912e9480b Add support for YUVJ formats
lucabe
parents: 19872
diff changeset
2164 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2165 switch (*format) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2166 case PIX_FMT_YUVJ420P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2167 *format = PIX_FMT_YUV420P;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2168 return 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2169 case PIX_FMT_YUVJ422P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2170 *format = PIX_FMT_YUV422P;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2171 return 1;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2172 case PIX_FMT_YUVJ444P:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2173 *format = PIX_FMT_YUV444P;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2174 return 1;
23791
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2175 case PIX_FMT_YUVJ440P:
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2176 *format = PIX_FMT_YUV440P;
e4138d991107 use YUV440P in swscale
benoit
parents: 23702
diff changeset
2177 return 1;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2178 default:
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2179 return 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2180 }
19987
f00912e9480b Add support for YUVJ formats
lucabe
parents: 19872
diff changeset
2181 }
f00912e9480b Add support for YUVJ formats
lucabe
parents: 19872
diff changeset
2182
27695
9cf6c7c5c7cd Change variable types from int to enum PixelFormat.
cehoyos
parents: 27686
diff changeset
2183 SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat, int dstW, int dstH, enum PixelFormat dstFormat, int flags,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2184 SwsFilter *srcFilter, SwsFilter *dstFilter, double *param){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2185
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2186 SwsContext *c;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2187 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2188 int usesVFilter, usesHFilter;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2189 int unscaled, needsDither;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2190 int srcRange, dstRange;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2191 SwsFilter dummyFilter= {NULL, NULL, NULL, NULL};
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
2192 #if ARCH_X86
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2193 if (flags & SWS_CPU_CAPS_MMX)
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27705
diff changeset
2194 __asm__ volatile("emms\n\t"::: "memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2195 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2196
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
2197 #if !defined(RUNTIME_CPUDETECT) || !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
2198 flags &= ~(SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2|SWS_CPU_CAPS_3DNOW|SWS_CPU_CAPS_ALTIVEC|SWS_CPU_CAPS_BFIN);
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
2199 #if HAVE_MMX2
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2200 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2;
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28317
diff changeset
2201 #elif HAVE_AMD3DNOW
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2202 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_3DNOW;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
2203 #elif HAVE_MMX
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2204 flags |= SWS_CPU_CAPS_MMX;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
2205 #elif HAVE_ALTIVEC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2206 flags |= SWS_CPU_CAPS_ALTIVEC;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
2207 #elif ARCH_BFIN
23289
786823779b67 Blackfin optimized YUV420 to RGB CSC Color Space Converters.
gpoirier
parents: 23278
diff changeset
2208 flags |= SWS_CPU_CAPS_BFIN;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2209 #endif
19206
c629606a0702 Comment some #endif lines.
diego
parents: 19181
diff changeset
2210 #endif /* RUNTIME_CPUDETECT */
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2211 if (clip_table[512] != 255) globalInit();
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
2212 if (!rgb15to16) sws_rgb2rgb_init(flags);
18861
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 unscaled = (srcW == dstW && srcH == dstH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2215 needsDither= (isBGR(dstFormat) || isRGB(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2216 && (fmt_depth(dstFormat))<24
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2217 && ((fmt_depth(dstFormat))<(fmt_depth(srcFormat)) || (!(isRGB(srcFormat) || isBGR(srcFormat))));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2218
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2219 srcRange = handle_jpeg(&srcFormat);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2220 dstRange = handle_jpeg(&dstFormat);
19987
f00912e9480b Add support for YUVJ formats
lucabe
parents: 19872
diff changeset
2221
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2222 if (!isSupportedIn(srcFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2223 {
25967
87331ea89425 More explicit unsupported pixel format error messages.
benoit
parents: 25935
diff changeset
2224 av_log(NULL, AV_LOG_ERROR, "swScaler: %s is not supported as input pixel format\n", sws_format_name(srcFormat));
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2225 return NULL;
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 (!isSupportedOut(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2228 {
25967
87331ea89425 More explicit unsupported pixel format error messages.
benoit
parents: 25935
diff changeset
2229 av_log(NULL, AV_LOG_ERROR, "swScaler: %s is not supported as output pixel format\n", sws_format_name(dstFormat));
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2230 return NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2231 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2232
27285
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2233 i= flags & ( SWS_POINT
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2234 |SWS_AREA
27286
26d7759b977d 10l forgot SWS_BILINEAR
michael
parents: 27285
diff changeset
2235 |SWS_BILINEAR
27285
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2236 |SWS_FAST_BILINEAR
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2237 |SWS_BICUBIC
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2238 |SWS_X
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2239 |SWS_GAUSS
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2240 |SWS_LANCZOS
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2241 |SWS_SINC
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2242 |SWS_SPLINE
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2243 |SWS_BICUBLIN);
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2244 if(!i || (i & (i-1)))
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2245 {
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2246 av_log(NULL, AV_LOG_ERROR, "swScaler: Exactly one scaler algorithm must be chosen\n");
27285
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2247 return NULL;
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2248 }
99a489828840 Ensure that exactly one scaler algo is used.
michael
parents: 27212
diff changeset
2249
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2250 /* sanity check */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2251 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
2252 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2253 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
2254 srcW, srcH, dstW, dstH);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2255 return NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2256 }
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
2257 if(srcW > VOFW || dstW > VOFW){
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2258 av_log(NULL, AV_LOG_ERROR, "swScaler: Compile-time maximum width is "AV_STRINGIFY(VOFW)" change VOF/VOFW and recompile\n");
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
2259 return NULL;
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
2260 }
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 if (!dstFilter) dstFilter= &dummyFilter;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2263 if (!srcFilter) srcFilter= &dummyFilter;
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 c= av_mallocz(sizeof(SwsContext));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2266
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2267 c->av_class = &sws_context_class;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2268 c->srcW= srcW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2269 c->srcH= srcH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2270 c->dstW= dstW;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2271 c->dstH= dstH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2272 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
2273 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
2274 c->flags= flags;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2275 c->dstFormat= dstFormat;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2276 c->srcFormat= srcFormat;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2277 c->vRounder= 4* 0x0001000100010001ULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2278
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2279 usesHFilter= usesVFilter= 0;
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
2280 if (dstFilter->lumV && dstFilter->lumV->length>1) usesVFilter=1;
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
2281 if (dstFilter->lumH && dstFilter->lumH->length>1) usesHFilter=1;
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
2282 if (dstFilter->chrV && dstFilter->chrV->length>1) usesVFilter=1;
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
2283 if (dstFilter->chrH && dstFilter->chrH->length>1) usesHFilter=1;
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
2284 if (srcFilter->lumV && srcFilter->lumV->length>1) usesVFilter=1;
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
2285 if (srcFilter->lumH && srcFilter->lumH->length>1) usesHFilter=1;
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
2286 if (srcFilter->chrV && srcFilter->chrV->length>1) usesVFilter=1;
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
2287 if (srcFilter->chrH && srcFilter->chrH->length>1) usesHFilter=1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2288
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2289 getSubSampleFactors(&c->chrSrcHSubSample, &c->chrSrcVSubSample, srcFormat);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2290 getSubSampleFactors(&c->chrDstHSubSample, &c->chrDstVSubSample, dstFormat);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2291
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2292 // reuse chroma for 2 pixels RGB/BGR unless user wants full chroma interpolation
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2293 if ((isBGR(dstFormat) || isRGB(dstFormat)) && !(flags&SWS_FULL_CHR_H_INT)) c->chrDstHSubSample=1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2294
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2295 // 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
2296 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
2297 c->chrSrcVSubSample+= c->vChrDrop;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2298
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2299 // drop every other pixel for chroma calculation unless user wants full chroma
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2300 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
2301 && 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
2302 && srcFormat!=PIX_FMT_RGB4 && srcFormat!=PIX_FMT_BGR4
27529
ffb573fae5e8 Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents: 27526
diff changeset
2303 && srcFormat!=PIX_FMT_RGB4_BYTE && srcFormat!=PIX_FMT_BGR4_BYTE
27532
1ecce17e826f Make SWS_FULL_CHR_H_INP work.
michael
parents: 27530
diff changeset
2304 && ((dstW>>c->chrDstHSubSample) <= (srcW>>1) || (flags&(SWS_FAST_BILINEAR|SWS_POINT))))
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2305 c->chrSrcHSubSample=1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2306
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2307 if (param){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2308 c->param[0] = param[0];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2309 c->param[1] = param[1];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2310 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2311 c->param[0] =
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2312 c->param[1] = SWS_PARAM_DEFAULT;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2313 }
18861
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->chrIntHSubSample= c->chrDstHSubSample;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2316 c->chrIntVSubSample= c->chrSrcVSubSample;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2317
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2318 // 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
2319 c->chrSrcW= -((-srcW) >> c->chrSrcHSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2320 c->chrSrcH= -((-srcH) >> c->chrSrcVSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2321 c->chrDstW= -((-dstW) >> c->chrDstHSubSample);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2322 c->chrDstH= -((-dstH) >> c->chrDstVSubSample);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2323
28460
12c0dfccf149 Give better name to Inverse_Table_6_9
kostya
parents: 28457
diff changeset
2324 sws_setColorspaceDetails(c, ff_yuv2rgb_coeffs[SWS_CS_DEFAULT], srcRange, ff_yuv2rgb_coeffs[SWS_CS_DEFAULT] /* FIXME*/, dstRange, 0, 1<<16, 1<<16);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2325
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2326 /* unscaled special cases */
27515
9355343a7721 Fix jpeg yuv.
michael
parents: 27513
diff changeset
2327 if (unscaled && !usesHFilter && !usesVFilter && (srcRange == dstRange || isBGR(dstFormat) || isRGB(dstFormat)))
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2328 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2329 /* yv12_to_nv12 */
28711
5669ee1ebe39 Use YUV420P code path for YUVA420P where appropriate
sdrik
parents: 28665
diff changeset
2330 if ((srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) && (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21))
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2331 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2332 c->swScale= PlanarToNV12Wrapper;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2333 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2334 /* yuv2bgr */
28711
5669ee1ebe39 Use YUV420P code path for YUVA420P where appropriate
sdrik
parents: 28665
diff changeset
2335 if ((srcFormat==PIX_FMT_YUV420P || srcFormat==PIX_FMT_YUV422P || srcFormat==PIX_FMT_YUVA420P) && (isBGR(dstFormat) || isRGB(dstFormat))
27792
3ebf88c5eb3d Do not attempt to use the unscaled yuv2rgb converter when height is odd because
michael
parents: 27784
diff changeset
2336 && !(flags & SWS_ACCURATE_RND) && !(dstH&1))
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2337 {
28461
75586eb0750d Prefix visible YUV2RGB functions with sws_
kostya
parents: 28460
diff changeset
2338 c->swScale= sws_yuv2rgb_get_func_ptr(c);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2339 }
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2340
27562
dec58ca745b2 yvu9toyv12Wrapper is not bitexact so disable it when the user wants
michael
parents: 27559
diff changeset
2341 if (srcFormat==PIX_FMT_YUV410P && dstFormat==PIX_FMT_YUV420P && !(flags & SWS_BITEXACT))
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2342 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2343 c->swScale= yvu9toyv12Wrapper;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2344 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2345
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2346 /* bgr24toYV12 */
27553
be05ce1c011e rgb24toyv12 is not accurately rounding, so disable it as well when the
michael
parents: 27552
diff changeset
2347 if (srcFormat==PIX_FMT_BGR24 && dstFormat==PIX_FMT_YUV420P && !(flags & SWS_ACCURATE_RND))
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2348 c->swScale= bgr24toyv12Wrapper;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2349
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2350 /* RGB/BGR -> RGB/BGR (no dither needed forms) */
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2351 if ( (isBGR(srcFormat) || isRGB(srcFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2352 && (isBGR(dstFormat) || isRGB(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2353 && 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
2354 && 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
2355 && 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
2356 && 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
2357 && 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
2358 && 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
2359 && srcFormat != PIX_FMT_MONOBLACK && dstFormat != PIX_FMT_MONOBLACK
27554
021a1889cc26 Add support for PIX_FMT_MONOWHITE as output format.
michael
parents: 27553
diff changeset
2360 && srcFormat != PIX_FMT_MONOWHITE && dstFormat != PIX_FMT_MONOWHITE
27490
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
2361 && dstFormat != PIX_FMT_RGB32_1
651ebfa4b7db Support PIX_FMT_RGB32_1 and PIX_FMT_BGR32_1.
michael
parents: 27489
diff changeset
2362 && dstFormat != PIX_FMT_BGR32_1
27491
bb75465dc12a Fix SWS_FAST_BILINEAR and SWS_POINT with some unscaled rgb<->bgr converters.
michael
parents: 27490
diff changeset
2363 && (!needsDither || (c->flags&(SWS_FAST_BILINEAR|SWS_POINT))))
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2364 c->swScale= rgb2rgbWrapper;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2365
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
2366 if ((usePal(srcFormat) && (
27784
a57f38e92ed5 Cosmetics: alignment
vitor
parents: 27783
diff changeset
2367 dstFormat == PIX_FMT_RGB32 ||
27783
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2368 dstFormat == PIX_FMT_RGB32_1 ||
27784
a57f38e92ed5 Cosmetics: alignment
vitor
parents: 27783
diff changeset
2369 dstFormat == PIX_FMT_RGB24 ||
a57f38e92ed5 Cosmetics: alignment
vitor
parents: 27783
diff changeset
2370 dstFormat == PIX_FMT_BGR32 ||
27783
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2371 dstFormat == PIX_FMT_BGR32_1 ||
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
2372 dstFormat == PIX_FMT_BGR24)))
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
2373 c->swScale= pal2rgbWrapper;
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
2374
27495
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
2375 if (srcFormat == PIX_FMT_YUV422P)
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
2376 {
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
2377 if (dstFormat == PIX_FMT_YUYV422)
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
2378 c->swScale= YUV422PToYuy2Wrapper;
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
2379 else if (dstFormat == PIX_FMT_UYVY422)
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
2380 c->swScale= YUV422PToUyvyWrapper;
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
2381 }
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27492
diff changeset
2382
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2383 /* 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
2384 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
2385 /* yv12_to_yuy2 */
28711
5669ee1ebe39 Use YUV420P code path for YUVA420P where appropriate
sdrik
parents: 28665
diff changeset
2386 if (srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2387 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2388 if (dstFormat == PIX_FMT_YUYV422)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2389 c->swScale= PlanarToYuy2Wrapper;
27496
e95a1c3904a3 simplify function selection code
bcoudurier
parents: 27495
diff changeset
2390 else if (dstFormat == PIX_FMT_UYVY422)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2391 c->swScale= PlanarToUyvyWrapper;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2392 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2393 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2394
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2395 #ifdef COMPILE_ALTIVEC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2396 if ((c->flags & SWS_CPU_CAPS_ALTIVEC) &&
28520
6cdce79a0b9a Some AltiVec functions in SwScaler produce different output than their
kostya
parents: 28493
diff changeset
2397 !(c->flags & SWS_BITEXACT) &&
27496
e95a1c3904a3 simplify function selection code
bcoudurier
parents: 27495
diff changeset
2398 srcFormat == PIX_FMT_YUV420P) {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2399 // 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
2400 if (dstFormat == PIX_FMT_YUYV422)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2401 c->swScale= yv12toyuy2_unscaled_altivec;
27496
e95a1c3904a3 simplify function selection code
bcoudurier
parents: 27495
diff changeset
2402 else if (dstFormat == PIX_FMT_UYVY422)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2403 c->swScale= yv12touyvy_unscaled_altivec;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2404 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2405 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2406
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2407 /* simple copy */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2408 if ( srcFormat == dstFormat
28711
5669ee1ebe39 Use YUV420P code path for YUVA420P where appropriate
sdrik
parents: 28665
diff changeset
2409 || (srcFormat == PIX_FMT_YUVA420P && dstFormat == PIX_FMT_YUV420P)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2410 || (isPlanarYUV(srcFormat) && isGray(dstFormat))
25749
8d082a234a6d Remove non cosmetic spaces inside parentheses.
benoit
parents: 25748
diff changeset
2411 || (isPlanarYUV(dstFormat) && isGray(srcFormat)))
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2412 {
27180
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
2413 if (isPacked(c->srcFormat))
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
2414 c->swScale= packedCopy;
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
2415 else /* Planar YUV or gray */
1a35c35a631e Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents: 26917
diff changeset
2416 c->swScale= planarCopy;
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2417 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2418
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2419 /* gray16{le,be} conversions */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2420 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
2421 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2422 c->swScale= gray16togray;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2423 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2424 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
2425 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2426 c->swScale= graytogray16;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2427 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2428 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
2429 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2430 c->swScale= gray16swap;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2431 }
20411
208c6a5b8665 16-bit grayscale support
kostya
parents: 20163
diff changeset
2432
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
2433 #if ARCH_BFIN
23585
d3ae6979d3df integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents: 23536
diff changeset
2434 if (flags & SWS_CPU_CAPS_BFIN)
d3ae6979d3df integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents: 23536
diff changeset
2435 ff_bfin_get_unscaled_swscale (c);
d3ae6979d3df integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents: 23536
diff changeset
2436 #endif
d3ae6979d3df integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents: 23536
diff changeset
2437
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2438 if (c->swScale){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2439 if (flags&SWS_PRINT_INFO)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2440 av_log(c, AV_LOG_INFO, "using unscaled %s -> %s special converter\n",
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2441 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
2442 return c;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2443 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2444 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2445
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2446 if (flags & SWS_CPU_CAPS_MMX2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2447 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2448 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
2449 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
2450 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2451 if (flags&SWS_PRINT_INFO)
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2452 av_log(c, AV_LOG_INFO, "output width is not a multiple of 32 -> no MMX2 scaler\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2453 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2454 if (usesHFilter) c->canMMX2BeUsed=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2455 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2456 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2457 c->canMMX2BeUsed=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2458
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2459 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
2460 c->chrYInc= ((c->chrSrcH<<16) + (c->chrDstH>>1))/c->chrDstH;
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 // 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
2463 // 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
2464 // n-2 is the last chrominance sample available
23536
ab4c0bba8f22 misc spelling fixes
diego
parents: 23400
diff changeset
2465 // 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
2466 // 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
2467 // first and last pixel
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2468 if (flags&SWS_FAST_BILINEAR)
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 if (c->canMMX2BeUsed)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2471 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2472 c->lumXInc+= 20;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2473 c->chrXInc+= 20;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2474 }
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2475 //we don't use the x86 asm scaler if MMX is available
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2476 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
2477 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2478 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
2479 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
2480 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2481 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2482
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2483 /* precalculate horizontal scaler filter coefficients */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2484 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2485 const int filterAlign=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2486 (flags & SWS_CPU_CAPS_MMX) ? 4 :
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2487 (flags & SWS_CPU_CAPS_ALTIVEC) ? 8 :
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2488 1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2489
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2490 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
2491 srcW , dstW, filterAlign, 1<<14,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2492 (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
2493 srcFilter->lumH, dstFilter->lumH, c->param);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2494 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
2495 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
2496 (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
2497 srcFilter->chrH, dstFilter->chrH, c->param);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2498
19333
4f5e2e0529b1 Do not assemble MMX, MMX2 or 3DNOW code unconditionally on X86 and X86_64.
diego
parents: 19270
diff changeset
2499 #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
2500 #if defined(COMPILE_MMX2)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2501 // can't downscale !!!
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2502 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
2503 {
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2504 #ifdef MAP_ANONYMOUS
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2505 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
2506 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
2507 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2508 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
2509 c->funnyUVCode = av_malloc(MAX_FUNNY_CODE_SIZE);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2510 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2511
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2512 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
2513 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
2514 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
2515 c->chrMmx2FilterPos= av_malloc((c->chrDstW/2/4+8)*sizeof(int32_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2516
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2517 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
2518 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
2519 }
19368
eb51949c73eb Use COMPILE_MMX2 instead of HAVE_MMX2 to determine whether to compile
uau
parents: 19336
diff changeset
2520 #endif /* defined(COMPILE_MMX2) */
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2521 } // initialize horizontal stuff
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2522
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2523
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2524
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2525 /* precalculate vertical scaler filter coefficients */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2526 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2527 const int filterAlign=
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2528 (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
2529 (flags & SWS_CPU_CAPS_ALTIVEC) ? 8 :
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2530 1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2531
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2532 initFilter(&c->vLumFilter, &c->vLumFilterPos, &c->vLumFilterSize, c->lumYInc,
27543
1e0b48b2b253 Correct normalization constant for the vertical filter.
michael
parents: 27536
diff changeset
2533 srcH , dstH, filterAlign, (1<<12),
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2534 (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
2535 srcFilter->lumV, dstFilter->lumV, c->param);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2536 initFilter(&c->vChrFilter, &c->vChrFilterPos, &c->vChrFilterSize, c->chrYInc,
27543
1e0b48b2b253 Correct normalization constant for the vertical filter.
michael
parents: 27536
diff changeset
2537 c->chrSrcH, c->chrDstH, filterAlign, (1<<12),
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2538 (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
2539 srcFilter->chrV, dstFilter->chrV, c->param);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2540
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
2541 #if HAVE_ALTIVEC
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2542 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
2543 c->vCCoeffsBank = av_malloc(sizeof (vector signed short)*c->vChrFilterSize*c->chrDstH);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2544
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2545 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
2546 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2547 short *p = (short *)&c->vYCoeffsBank[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2548 for (j=0;j<8;j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2549 p[j] = c->vLumFilter[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2550 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2551
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2552 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
2553 int j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2554 short *p = (short *)&c->vCCoeffsBank[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2555 for (j=0;j<8;j++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2556 p[j] = c->vChrFilter[i];
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2557 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2558 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2559 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2560
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2561 // calculate buffer sizes so that they won't run out while handling these damn slices
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2562 c->vLumBufSize= c->vLumFilterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2563 c->vChrBufSize= c->vChrFilterSize;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2564 for (i=0; i<dstH; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2565 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2566 int chrI= i*c->chrDstH / dstH;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2567 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
2568 ((c->vChrFilterPos[chrI] + c->vChrFilterSize - 1)<<c->chrSrcVSubSample));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2569
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2570 nextSlice>>= c->chrSrcVSubSample;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2571 nextSlice<<= c->chrSrcVSubSample;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2572 if (c->vLumFilterPos[i ] + c->vLumBufSize < nextSlice)
25749
8d082a234a6d Remove non cosmetic spaces inside parentheses.
benoit
parents: 25748
diff changeset
2573 c->vLumBufSize= nextSlice - c->vLumFilterPos[i];
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2574 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
2575 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
2576 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2577
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2578 // 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
2579 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
2580 c->chrPixBuf= av_malloc(c->vChrBufSize*2*sizeof(int16_t*));
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2581 //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)
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2582 /* align at 16 bytes for AltiVec */
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2583 for (i=0; i<c->vLumBufSize; i++)
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
2584 c->lumPixBuf[i]= c->lumPixBuf[i+c->vLumBufSize]= av_mallocz(VOF+1);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2585 for (i=0; i<c->vChrBufSize; i++)
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
2586 c->chrPixBuf[i]= c->chrPixBuf[i+c->vChrBufSize]= av_malloc((VOF+1)*2);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2587
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2588 //try to avoid drawing green stuff between the right end and the stride end
26133
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
2589 for (i=0; i<c->vChrBufSize; i++) memset(c->chrPixBuf[i], 64, (VOF+1)*2);
94cc4bac8cd0 Turn ancient V offset numerical constants into named ones.
michael
parents: 26028
diff changeset
2590
26225
aa1dee3df0c2 Fix a typo that causes an assertion to always fail.
zuxy
parents: 26196
diff changeset
2591 assert(2*VOFW == VOF);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2592
27182
f7b6d1014b6b Remove ASSERT() macro. SoC Patch from Keiji Costantini
lu_zero
parents: 27181
diff changeset
2593 assert(c->chrDstH <= dstH);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2594
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2595 if (flags&SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2596 {
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2597 #ifdef DITHER1XBPP
26913
2ef7839deae2 add const, suppress warnings
bcoudurier
parents: 26674
diff changeset
2598 const char *dither= " dithered";
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2599 #else
26913
2ef7839deae2 add const, suppress warnings
bcoudurier
parents: 26674
diff changeset
2600 const char *dither= "";
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2601 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2602 if (flags&SWS_FAST_BILINEAR)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2603 av_log(c, AV_LOG_INFO, "FAST_BILINEAR scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2604 else if (flags&SWS_BILINEAR)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2605 av_log(c, AV_LOG_INFO, "BILINEAR scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2606 else if (flags&SWS_BICUBIC)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2607 av_log(c, AV_LOG_INFO, "BICUBIC scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2608 else if (flags&SWS_X)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2609 av_log(c, AV_LOG_INFO, "Experimental scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2610 else if (flags&SWS_POINT)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2611 av_log(c, AV_LOG_INFO, "Nearest Neighbor / POINT scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2612 else if (flags&SWS_AREA)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2613 av_log(c, AV_LOG_INFO, "Area Averageing scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2614 else if (flags&SWS_BICUBLIN)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2615 av_log(c, AV_LOG_INFO, "luma BICUBIC / chroma BILINEAR scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2616 else if (flags&SWS_GAUSS)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2617 av_log(c, AV_LOG_INFO, "Gaussian scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2618 else if (flags&SWS_SINC)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2619 av_log(c, AV_LOG_INFO, "Sinc scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2620 else if (flags&SWS_LANCZOS)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2621 av_log(c, AV_LOG_INFO, "Lanczos scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2622 else if (flags&SWS_SPLINE)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2623 av_log(c, AV_LOG_INFO, "Bicubic spline scaler, ");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2624 else
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2625 av_log(c, AV_LOG_INFO, "ehh flags invalid?! ");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2626
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2627 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
2628 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
2629 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
2630 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2631 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
2632 sws_format_name(srcFormat), sws_format_name(dstFormat));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2633
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2634 if (flags & SWS_CPU_CAPS_MMX2)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2635 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
2636 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
2637 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
2638 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
2639 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
2640 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
2641 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
2642 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2643 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
2644 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2645
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2646 if (flags & SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2647 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2648 if (flags & SWS_CPU_CAPS_MMX)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2649 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2650 if (c->canMMX2BeUsed && (flags&SWS_FAST_BILINEAR))
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2651 av_log(c, AV_LOG_VERBOSE, "using FAST_BILINEAR MMX2 scaler for horizontal scaling\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2652 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2653 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2654 if (c->hLumFilterSize==4)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2655 av_log(c, AV_LOG_VERBOSE, "using 4-tap MMX scaler for horizontal luminance scaling\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2656 else if (c->hLumFilterSize==8)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2657 av_log(c, AV_LOG_VERBOSE, "using 8-tap MMX scaler for horizontal luminance scaling\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2658 else
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2659 av_log(c, AV_LOG_VERBOSE, "using n-tap MMX scaler for horizontal luminance scaling\n");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2660
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2661 if (c->hChrFilterSize==4)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2662 av_log(c, AV_LOG_VERBOSE, "using 4-tap MMX scaler for horizontal chrominance scaling\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2663 else if (c->hChrFilterSize==8)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2664 av_log(c, AV_LOG_VERBOSE, "using 8-tap MMX scaler for horizontal chrominance scaling\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2665 else
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2666 av_log(c, AV_LOG_VERBOSE, "using n-tap MMX scaler for horizontal chrominance scaling\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2667 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2668 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2669 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2670 {
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
2671 #if ARCH_X86
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2672 av_log(c, AV_LOG_VERBOSE, "using x86 asm scaler for horizontal scaling\n");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2673 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2674 if (flags & SWS_FAST_BILINEAR)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2675 av_log(c, AV_LOG_VERBOSE, "using FAST_BILINEAR C scaler for horizontal scaling\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2676 else
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2677 av_log(c, AV_LOG_VERBOSE, "using C scaler for horizontal scaling\n");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2678 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2679 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2680 if (isPlanarYUV(dstFormat))
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2681 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2682 if (c->vLumFilterSize==1)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2683 av_log(c, AV_LOG_VERBOSE, "using 1-tap %s \"scaler\" for vertical scaling (YV12 like)\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2684 else
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2685 av_log(c, AV_LOG_VERBOSE, "using n-tap %s scaler for vertical scaling (YV12 like)\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2686 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2687 else
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2688 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2689 if (c->vLumFilterSize==1 && c->vChrFilterSize==2)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2690 av_log(c, AV_LOG_VERBOSE, "using 1-tap %s \"scaler\" for vertical luminance scaling (BGR)\n"
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2691 " 2-tap scaler for vertical chrominance scaling (BGR)\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2692 else if (c->vLumFilterSize==2 && c->vChrFilterSize==2)
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2693 av_log(c, AV_LOG_VERBOSE, "using 2-tap linear %s scaler for vertical scaling (BGR)\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2694 else
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2695 av_log(c, AV_LOG_VERBOSE, "using n-tap %s scaler for vertical scaling (BGR)\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2696 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2697
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2698 if (dstFormat==PIX_FMT_BGR24)
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2699 av_log(c, AV_LOG_VERBOSE, "using %s YV12->BGR24 converter\n",
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2700 (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
2701 else if (dstFormat==PIX_FMT_RGB32)
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2702 av_log(c, AV_LOG_VERBOSE, "using %s YV12->BGR32 converter\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2703 else if (dstFormat==PIX_FMT_BGR565)
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2704 av_log(c, AV_LOG_VERBOSE, "using %s YV12->BGR16 converter\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2705 else if (dstFormat==PIX_FMT_BGR555)
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2706 av_log(c, AV_LOG_VERBOSE, "using %s YV12->BGR15 converter\n", (flags & SWS_CPU_CAPS_MMX) ? "MMX" : "C");
26150
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2707
1df4a811aa9c remove redundant SwScaler text since av_log uses AVClass context
bcoudurier
parents: 26134
diff changeset
2708 av_log(c, AV_LOG_VERBOSE, "%dx%d -> %dx%d\n", srcW, srcH, dstW, dstH);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2709 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2710 if (flags & SWS_PRINT_INFO)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2711 {
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2712 av_log(c, AV_LOG_DEBUG, "lum srcW=%d srcH=%d dstW=%d dstH=%d xInc=%d yInc=%d\n",
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2713 c->srcW, c->srcH, c->dstW, c->dstH, c->lumXInc, c->lumYInc);
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2714 av_log(c, AV_LOG_DEBUG, "chr srcW=%d srcH=%d dstW=%d dstH=%d xInc=%d yInc=%d\n",
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2715 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
2716 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2717
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2718 c->swScale= getSwsFunc(flags);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2719 return c;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2720 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2721
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2722 /**
25457
0926055fe5b8 comment typo fixes
diego
parents: 25439
diff changeset
2723 * swscale wrapper, so we don't need to export the SwsContext.
28316
da307fb1c239 spelling/grammar cosmetics
diego
parents: 28315
diff changeset
2724 * Assumes planar YUV to be in YUV order instead of YVU.
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2725 */
21869
99c7b02c4edb Add "support for both orderings of the slices (top->down / bottom->up)"
lucabe
parents: 21817
diff changeset
2726 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
2727 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
2728 int i;
28833
04cc20101f70 Let the 4th plane reach the swScale function
sdrik
parents: 28790
diff changeset
2729 uint8_t* src2[4]= {src[0], src[1], src[2], src[3]};
27489
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2730
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2731 if (c->sliceDir == 0 && srcSliceY != 0 && srcSliceY + srcSliceH != c->srcH) {
26175
b62cfba8df31 Remove redundant swScaler: output from places where av_log()
diego
parents: 26151
diff changeset
2732 av_log(c, AV_LOG_ERROR, "Slices start in the middle!\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2733 return 0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2734 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2735 if (c->sliceDir == 0) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2736 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
2737 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2738
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
2739 if (usePal(c->srcFormat)){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2740 for (i=0; i<256; i++){
27489
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2741 int p, r, g, b,y,u,v;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2742 if(c->srcFormat == PIX_FMT_PAL8){
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2743 p=((uint32_t*)(src[1]))[i];
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2744 r= (p>>16)&0xFF;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2745 g= (p>> 8)&0xFF;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2746 b= p &0xFF;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2747 }else if(c->srcFormat == PIX_FMT_RGB8){
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2748 r= (i>>5 )*36;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2749 g= ((i>>2)&7)*36;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2750 b= (i&3 )*85;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2751 }else if(c->srcFormat == PIX_FMT_BGR8){
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2752 b= (i>>6 )*85;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2753 g= ((i>>3)&7)*36;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2754 r= (i&7 )*36;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2755 }else if(c->srcFormat == PIX_FMT_RGB4_BYTE){
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2756 r= (i>>3 )*255;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2757 g= ((i>>1)&3)*85;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2758 b= (i&1 )*255;
27803
e6997a81f8cc Silence GCC warnings:
vitor
parents: 27800
diff changeset
2759 }else {
e6997a81f8cc Silence GCC warnings:
vitor
parents: 27800
diff changeset
2760 assert(c->srcFormat == PIX_FMT_BGR4_BYTE);
27489
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2761 b= (i>>3 )*255;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2762 g= ((i>>1)&3)*85;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2763 r= (i&1 )*255;
1ef12885a1e4 Fix 4 and 8 bit RGB/BGR input.
michael
parents: 27460
diff changeset
2764 }
27530
dbdc77f8b041 More accurate rounding for 8bit inputs.
michael
parents: 27529
diff changeset
2765 y= av_clip_uint8((RY*r + GY*g + BY*b + ( 33<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT);
dbdc77f8b041 More accurate rounding for 8bit inputs.
michael
parents: 27529
diff changeset
2766 u= av_clip_uint8((RU*r + GU*g + BU*b + (257<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT);
dbdc77f8b041 More accurate rounding for 8bit inputs.
michael
parents: 27529
diff changeset
2767 v= av_clip_uint8((RV*r + GV*g + BV*b + (257<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT);
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
2768 c->pal_yuv[i]= y + (u<<8) + (v<<16);
27783
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2769
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2770
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2771 switch(c->dstFormat) {
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2772 case PIX_FMT_BGR32:
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2773 #ifndef WORDS_BIGENDIAN
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2774 case PIX_FMT_RGB24:
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2775 #endif
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2776 c->pal_rgb[i]= r + (g<<8) + (b<<16);
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2777 break;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2778 case PIX_FMT_BGR32_1:
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2779 #ifdef WORDS_BIGENDIAN
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2780 case PIX_FMT_BGR24:
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2781 #endif
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2782 c->pal_rgb[i]= (r + (g<<8) + (b<<16)) << 8;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2783 break;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2784 case PIX_FMT_RGB32_1:
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2785 #ifdef WORDS_BIGENDIAN
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2786 case PIX_FMT_RGB24:
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2787 #endif
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2788 c->pal_rgb[i]= (b + (g<<8) + (r<<16)) << 8;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2789 break;
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2790 case PIX_FMT_RGB32:
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2791 #ifndef WORDS_BIGENDIAN
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2792 case PIX_FMT_BGR24:
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2793 #endif
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2794 default:
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2795 c->pal_rgb[i]= b + (g<<8) + (r<<16);
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27744
diff changeset
2796 }
22975
c91bb8f1cd85 convert palette to yuv instead of converting each pixel after pal->rgb
michael
parents: 22914
diff changeset
2797 }
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2798 }
22975
c91bb8f1cd85 convert palette to yuv instead of converting each pixel after pal->rgb
michael
parents: 22914
diff changeset
2799
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2800 // 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
2801 if (c->sliceDir == 1) {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2802 // slices go from top to bottom
28833
04cc20101f70 Let the 4th plane reach the swScale function
sdrik
parents: 28790
diff changeset
2803 int srcStride2[4]= {srcStride[0], srcStride[1], srcStride[2], srcStride[3]};
04cc20101f70 Let the 4th plane reach the swScale function
sdrik
parents: 28790
diff changeset
2804 int dstStride2[4]= {dstStride[0], dstStride[1], dstStride[2], dstStride[3]};
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2805 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
2806 } else {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2807 // 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
2808 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
2809 dst[1] + ((c->dstH>>c->chrDstVSubSample)-1)*dstStride[1],
28833
04cc20101f70 Let the 4th plane reach the swScale function
sdrik
parents: 28790
diff changeset
2810 dst[2] + ((c->dstH>>c->chrDstVSubSample)-1)*dstStride[2],
04cc20101f70 Let the 4th plane reach the swScale function
sdrik
parents: 28790
diff changeset
2811 dst[3] + (c->dstH-1)*dstStride[3]};
04cc20101f70 Let the 4th plane reach the swScale function
sdrik
parents: 28790
diff changeset
2812 int srcStride2[4]= {-srcStride[0], -srcStride[1], -srcStride[2], -srcStride[3]};
04cc20101f70 Let the 4th plane reach the swScale function
sdrik
parents: 28790
diff changeset
2813 int dstStride2[4]= {-dstStride[0], -dstStride[1], -dstStride[2], -dstStride[3]};
22975
c91bb8f1cd85 convert palette to yuv instead of converting each pixel after pal->rgb
michael
parents: 22914
diff changeset
2814
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2815 src2[0] += (srcSliceH-1)*srcStride[0];
27698
2b4929069763 Add a new unscaled PAL8 -> RGB converter.
vitor
parents: 27696
diff changeset
2816 if (!usePal(c->srcFormat))
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2817 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
2818 src2[2] += ((srcSliceH>>c->chrSrcVSubSample)-1)*srcStride[2];
28833
04cc20101f70 Let the 4th plane reach the swScale function
sdrik
parents: 28790
diff changeset
2819 src2[3] += (srcSliceH-1)*srcStride[3];
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2820
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2821 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
2822 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2823 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2824
28457
7d49f24cc18f Drop the deprecated sws_scale_ordered() at the next major version
stefano
parents: 28323
diff changeset
2825 #if LIBSWSCALE_VERSION_MAJOR < 1
21869
99c7b02c4edb Add "support for both orderings of the slices (top->down / bottom->up)"
lucabe
parents: 21817
diff changeset
2826 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
2827 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
2828 return sws_scale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2829 }
28457
7d49f24cc18f Drop the deprecated sws_scale_ordered() at the next major version
stefano
parents: 28323
diff changeset
2830 #endif
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2831
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22976
diff changeset
2832 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
2833 float lumaSharpen, float chromaSharpen,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2834 float chromaHShift, float chromaVShift,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2835 int verbose)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2836 {
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2837 SwsFilter *filter= av_malloc(sizeof(SwsFilter));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2838
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2839 if (lumaGBlur!=0.0){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2840 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
2841 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
2842 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2843 filter->lumH= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2844 filter->lumV= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2845 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2846
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2847 if (chromaGBlur!=0.0){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2848 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
2849 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
2850 }else{
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2851 filter->chrH= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2852 filter->chrV= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2853 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2854
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2855 if (chromaSharpen!=0.0){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2856 SwsVector *id= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2857 sws_scaleVec(filter->chrH, -chromaSharpen);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2858 sws_scaleVec(filter->chrV, -chromaSharpen);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2859 sws_addVec(filter->chrH, id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2860 sws_addVec(filter->chrV, id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2861 sws_freeVec(id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2862 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2863
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2864 if (lumaSharpen!=0.0){
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2865 SwsVector *id= sws_getIdentityVec();
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2866 sws_scaleVec(filter->lumH, -lumaSharpen);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2867 sws_scaleVec(filter->lumV, -lumaSharpen);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2868 sws_addVec(filter->lumH, id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2869 sws_addVec(filter->lumV, id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2870 sws_freeVec(id);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2871 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2872
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2873 if (chromaHShift != 0.0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2874 sws_shiftVec(filter->chrH, (int)(chromaHShift+0.5));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2875
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2876 if (chromaVShift != 0.0)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2877 sws_shiftVec(filter->chrV, (int)(chromaVShift+0.5));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2878
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2879 sws_normalizeVec(filter->chrH, 1.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2880 sws_normalizeVec(filter->chrV, 1.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2881 sws_normalizeVec(filter->lumH, 1.0);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2882 sws_normalizeVec(filter->lumV, 1.0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2883
28532
e5a0c2f38f96 Use sws_printVec2() instead of the deprecated sws_printVec().
stefano
parents: 28531
diff changeset
2884 if (verbose) sws_printVec2(filter->chrH, NULL, AV_LOG_DEBUG);
e5a0c2f38f96 Use sws_printVec2() instead of the deprecated sws_printVec().
stefano
parents: 28531
diff changeset
2885 if (verbose) sws_printVec2(filter->lumH, NULL, AV_LOG_DEBUG);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2886
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2887 return filter;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2888 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2889
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2890 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
2891 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
2892 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2893 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
2894 double middle= (length-1)*0.5;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2895 SwsVector *vec= av_malloc(sizeof(SwsVector));
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 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2898 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2899
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2900 for (i=0; i<length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2901 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2902 double dist= i-middle;
25749
8d082a234a6d Remove non cosmetic spaces inside parentheses.
benoit
parents: 25748
diff changeset
2903 coeff[i]= exp(-dist*dist/(2*variance*variance)) / sqrt(2*variance*PI);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2904 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2905
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2906 sws_normalizeVec(vec, 1.0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2907
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2908 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2909 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2910
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2911 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
2912 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2913 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
2914 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2915
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2916 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2917 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2918
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2919 for (i=0; i<length; i++)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2920 coeff[i]= c;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2921
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2922 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2923 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2924
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2925
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2926 SwsVector *sws_getIdentityVec(void){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2927 return sws_getConstVec(1.0, 1);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2928 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2929
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2930 double sws_dcVec(SwsVector *a){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2931 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2932 double sum=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2933
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2934 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
2935 sum+= a->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2936
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2937 return sum;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2938 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2939
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2940 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
2941 int i;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2942
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2943 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
2944 a->coeff[i]*= scalar;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2945 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2946
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2947 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
2948 sws_scaleVec(a, height/sws_dcVec(a));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2949 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2950
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2951 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
2952 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
2953 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
2954 int i, j;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2955 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2956
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2957 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2958 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2959
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2960 for (i=0; i<length; i++) coeff[i]= 0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2961
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2962 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
2963 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2964 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
2965 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2966 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
2967 }
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2968 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2969
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2970 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2971 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2972
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2973 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
2974 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
2975 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
2976 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2977 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2978
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2979 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2980 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2981
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2982 for (i=0; i<length; i++) coeff[i]= 0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2983
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2984 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
2985 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
2986
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2987 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2988 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2989
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2990 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
2991 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
2992 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
2993 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2994 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2995
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2996 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2997 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2998
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
2999 for (i=0; i<length; i++) coeff[i]= 0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3000
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3001 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
3002 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
3003
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3004 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3005 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3006
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3007 /* shift left / or right if "shift" is negative */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3008 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
3009 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
3010 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
3011 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3012 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3013
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3014 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3015 vec->length= length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3016
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3017 for (i=0; i<length; i++) coeff[i]= 0.0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3018
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3019 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
3020 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3021 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
3022 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3023
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3024 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3025 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3026
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3027 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
3028 SwsVector *shifted= sws_getShiftedVec(a, shift);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3029 av_free(a->coeff);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3030 a->coeff= shifted->coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3031 a->length= shifted->length;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3032 av_free(shifted);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3033 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3034
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3035 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
3036 SwsVector *sum= sws_sumVec(a, b);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3037 av_free(a->coeff);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3038 a->coeff= sum->coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3039 a->length= sum->length;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3040 av_free(sum);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3041 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3042
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3043 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
3044 SwsVector *diff= sws_diffVec(a, b);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3045 av_free(a->coeff);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3046 a->coeff= diff->coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3047 a->length= diff->length;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3048 av_free(diff);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3049 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3050
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3051 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
3052 SwsVector *conv= sws_getConvVec(a, b);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3053 av_free(a->coeff);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3054 a->coeff= conv->coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3055 a->length= conv->length;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3056 av_free(conv);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3057 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3058
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3059 SwsVector *sws_cloneVec(SwsVector *a){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3060 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
3061 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3062 SwsVector *vec= av_malloc(sizeof(SwsVector));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3063
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3064 vec->coeff= coeff;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3065 vec->length= a->length;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3066
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3067 for (i=0; i<a->length; i++) coeff[i]= a->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3068
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3069 return vec;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3070 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3071
28531
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3072 void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3073 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3074 double max=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3075 double min=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3076 double range;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3077
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3078 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
3079 if (a->coeff[i]>max) max= a->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3080
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3081 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
3082 if (a->coeff[i]<min) min= a->coeff[i];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3083
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3084 range= max - min;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3085
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3086 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
3087 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3088 int x= (int)((a->coeff[i]-min)*60.0/range +0.5);
28531
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3089 av_log(log_ctx, log_level, "%1.3f ", a->coeff[i]);
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3090 for (;x>0; x--) av_log(log_ctx, log_level, " ");
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3091 av_log(log_ctx, log_level, "|\n");
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3092 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3093 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3094
28531
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3095 #if LIBSWSCALE_VERSION_MAJOR < 1
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3096 void sws_printVec(SwsVector *a){
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3097 sws_printVec2(a, NULL, AV_LOG_DEBUG);
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3098 }
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3099 #endif
a14b65e14dc9 Implement sws_printVec2() and deprecate sws_printVec().
stefano
parents: 28520
diff changeset
3100
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3101 void sws_freeVec(SwsVector *a){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3102 if (!a) return;
27299
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3103 av_freep(&a->coeff);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3104 a->length=0;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3105 av_free(a);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3106 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3107
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3108 void sws_freeFilter(SwsFilter *filter){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3109 if (!filter) return;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3110
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3111 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
3112 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
3113 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
3114 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
3115 av_free(filter);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3116 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3117
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3118
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3119 void sws_freeContext(SwsContext *c){
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3120 int i;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3121 if (!c) return;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3122
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3123 if (c->lumPixBuf)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3124 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3125 for (i=0; i<c->vLumBufSize; i++)
27299
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3126 av_freep(&c->lumPixBuf[i]);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3127 av_freep(&c->lumPixBuf);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3128 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3129
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3130 if (c->chrPixBuf)
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3131 {
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3132 for (i=0; i<c->vChrBufSize; i++)
27299
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3133 av_freep(&c->chrPixBuf[i]);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3134 av_freep(&c->chrPixBuf);
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3135 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3136
27299
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3137 av_freep(&c->vLumFilter);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3138 av_freep(&c->vChrFilter);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3139 av_freep(&c->hLumFilter);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3140 av_freep(&c->hChrFilter);
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
3141 #if HAVE_ALTIVEC
27299
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3142 av_freep(&c->vYCoeffsBank);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3143 av_freep(&c->vCCoeffsBank);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3144 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3145
27299
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3146 av_freep(&c->vLumFilterPos);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3147 av_freep(&c->vChrFilterPos);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3148 av_freep(&c->hLumFilterPos);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3149 av_freep(&c->hChrFilterPos);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3150
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28246
diff changeset
3151 #if ARCH_X86 && CONFIG_GPL
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3152 #ifdef MAP_ANONYMOUS
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3153 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
3154 if (c->funnyUVCode) munmap(c->funnyUVCode, MAX_FUNNY_CODE_SIZE);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3155 #else
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3156 av_free(c->funnyYCode);
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3157 av_free(c->funnyUVCode);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3158 #endif
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3159 c->funnyYCode=NULL;
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3160 c->funnyUVCode=NULL;
28315
82cf99fc9d2b Fix #endif comments.
diego
parents: 28309
diff changeset
3161 #endif /* ARCH_X86 && CONFIG_GPL */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3162
27299
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3163 av_freep(&c->lumMmx2Filter);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3164 av_freep(&c->chrMmx2Filter);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3165 av_freep(&c->lumMmx2FilterPos);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3166 av_freep(&c->chrMmx2FilterPos);
4e57d47ee5db Cleanup, use av_freep() instead of av_free(x); x=NULL
michael
parents: 27286
diff changeset
3167 av_freep(&c->yuvTable);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3168
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3169 av_free(c);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3170 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3171
19661
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3172 struct SwsContext *sws_getCachedContext(struct SwsContext *context,
27695
9cf6c7c5c7cd Change variable types from int to enum PixelFormat.
cehoyos
parents: 27686
diff changeset
3173 int srcW, int srcH, enum PixelFormat srcFormat,
9cf6c7c5c7cd Change variable types from int to enum PixelFormat.
cehoyos
parents: 27686
diff changeset
3174 int dstW, int dstH, enum PixelFormat dstFormat, int flags,
23155
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3175 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
3176 {
25747
12970064a271 Check param in sws_getCachedContext().
benoit
parents: 25457
diff changeset
3177 static const double default_param[2] = {SWS_PARAM_DEFAULT, SWS_PARAM_DEFAULT};
12970064a271 Check param in sws_getCachedContext().
benoit
parents: 25457
diff changeset
3178
12970064a271 Check param in sws_getCachedContext().
benoit
parents: 25457
diff changeset
3179 if (!param)
12970064a271 Check param in sws_getCachedContext().
benoit
parents: 25457
diff changeset
3180 param = default_param;
12970064a271 Check param in sws_getCachedContext().
benoit
parents: 25457
diff changeset
3181
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
3182 if (context) {
25748
28a006b3d912 Description: remove superfluous parentheses.
benoit
parents: 25747
diff changeset
3183 if (context->srcW != srcW || context->srcH != srcH ||
28a006b3d912 Description: remove superfluous parentheses.
benoit
parents: 25747
diff changeset
3184 context->srcFormat != srcFormat ||
28a006b3d912 Description: remove superfluous parentheses.
benoit
parents: 25747
diff changeset
3185 context->dstW != dstW || context->dstH != dstH ||
28a006b3d912 Description: remove superfluous parentheses.
benoit
parents: 25747
diff changeset
3186 context->dstFormat != dstFormat || context->flags != flags ||
28a006b3d912 Description: remove superfluous parentheses.
benoit
parents: 25747
diff changeset
3187 context->param[0] != param[0] || context->param[1] != param[1])
19661
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3188 {
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3189 sws_freeContext(context);
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3190 context = NULL;
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3191 }
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3192 }
25752
559b0e9d47fb Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents: 25750
diff changeset
3193 if (!context) {
19661
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3194 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
3195 dstW, dstH, dstFormat, flags,
1befc8d767cd cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
3196 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
3197 }
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3198 return context;
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3199 }
7b24faac56fd Add sws_getCachedContext(), which checks if context is valid or reallocs a new one instead.
gpoirier
parents: 19594
diff changeset
3200