Mercurial > mplayer.hg
annotate libswscale/swscale.c @ 31597:1eb8dc8f96fa
Make subdelay handling work the same way for all subtitle types and also allow
changing subtitle delay to work better with vobsubs.
This probably breaks vobsub behaviour with timestamp wrapping though.
author | reimar |
---|---|
date | Sat, 10 Jul 2010 12:53:05 +0000 |
parents | 3ce8c7b9b925 |
children | 55abf5e08172 |
rev | line source |
---|---|
18861 | 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 * |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
6 * FFmpeg is free software; you can redistribute it and/or |
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
7 * modify it under the terms of the GNU Lesser General Public |
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
8 * License as published by the Free Software Foundation; either |
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
9 * version 2.1 of the License, or (at your option) any later version. |
20094
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
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 |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
14 * Lesser General Public License for more details. |
20094
aca9e9783f67
Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents:
19987
diff
changeset
|
15 * |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
16 * You should have received a copy of the GNU Lesser General Public |
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
17 * License along with FFmpeg; if not, write to the Free Software |
23702 | 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 */ |
18861 | 20 |
21 /* | |
27490 | 22 supported Input formats: YV12, I420/IYUV, YUY2, UYVY, BGR32, BGR32_1, BGR24, BGR16, BGR15, RGB32, RGB32_1, RGB24, Y8/Y800, YVU9/IF09, PAL8 |
18861 | 23 supported output formats: YV12, I420/IYUV, YUY2, UYVY, {BGR,RGB}{1,4,8,15,16,24,32}, Y8/Y800, YVU9/IF09 |
24 {BGR,RGB}{1,4,8,15,16} support dithering | |
23129 | 25 |
18861 | 26 unscaled special converters (YV12=I420=IYUV, Y800=Y8) |
30799
76f3878f34fd
libswscale: Extend the unaccelerated path of the unscaled yuv2rgb special
benoit
parents:
30798
diff
changeset
|
27 YV12 -> {BGR,RGB}{1,4,8,12,15,16,24,32} |
18861 | 28 x -> x |
29 YUV9 -> YV12 | |
30 YUV9/YV12 -> Y800 | |
31 Y800 -> YUV9/YV12 | |
32 BGR24 -> BGR32 & RGB24 -> RGB32 | |
33 BGR32 -> BGR24 & RGB32 -> RGB24 | |
34 BGR15 -> BGR16 | |
35 */ | |
36 | |
23129 | 37 /* |
26196 | 38 tested special converters (most are tested actually, but I did not write it down ...) |
30892
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
39 YV12 -> BGR12/BGR16 |
18861 | 40 YV12 -> YV12 |
41 BGR15 -> BGR16 | |
42 BGR16 -> BGR16 | |
43 YVU9 -> YV12 | |
44 | |
45 untested special converters | |
28316 | 46 YV12/I420 -> BGR15/BGR24/BGR32 (it is the yuv2rgb stuff, so it should be OK) |
18861 | 47 YV12/I420 -> YV12/I420 |
48 YUY2/BGR15/BGR24/BGR32/RGB24/RGB32 -> same format | |
49 BGR24 -> BGR32 & RGB24 -> RGB32 | |
50 BGR32 -> BGR24 & RGB32 -> RGB24 | |
51 BGR24 -> YV12 | |
52 */ | |
53 | |
54 #include <inttypes.h> | |
55 #include <string.h> | |
56 #include <math.h> | |
57 #include <stdio.h> | |
58 #include "config.h" | |
59 #include <assert.h> | |
60 #include "swscale.h" | |
61 #include "swscale_internal.h" | |
62 #include "rgb2rgb.h" | |
29475 | 63 #include "libavutil/intreadwrite.h" |
26670
e6774798e913
Use full path for #includes from another directory.
diego
parents:
26238
diff
changeset
|
64 #include "libavutil/x86_cpu.h" |
29542 | 65 #include "libavutil/avutil.h" |
31128 | 66 #include "libavutil/mathematics.h" |
26670
e6774798e913
Use full path for #includes from another directory.
diego
parents:
26238
diff
changeset
|
67 #include "libavutil/bswap.h" |
29926
916134a82d74
Make sws_format_name() use av_pix_fmt_descriptors.
stefano
parents:
29890
diff
changeset
|
68 #include "libavutil/pixdesc.h" |
18861 | 69 |
70 #undef MOVNTQ | |
71 #undef PAVGB | |
72 | |
73 //#undef HAVE_MMX2 | |
28323
99c49467ebbc
HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents:
28317
diff
changeset
|
74 //#define HAVE_AMD3DNOW |
18861 | 75 //#undef HAVE_MMX |
76 //#undef ARCH_X86 | |
77 #define DITHER1XBPP | |
78 | |
28316 | 79 #define FAST_BGR2YV12 // use 7 bit coefficients instead of 15 bit |
80 | |
23278 | 81 #define isPacked(x) ( \ |
82 (x)==PIX_FMT_PAL8 \ | |
83 || (x)==PIX_FMT_YUYV422 \ | |
84 || (x)==PIX_FMT_UYVY422 \ | |
30393 | 85 || isAnyRGB(x) \ |
23278 | 86 ) |
18861 | 87 |
27536
dded40ae9728
Change RGB2YUV_SHIFT from 16 to 15 to make it able to work
michael
parents:
27532
diff
changeset
|
88 #define RGB2YUV_SHIFT 15 |
27545
cd5855b269df
Set rgb2yuv constants more accurately, makes no real difference though.
michael
parents:
27543
diff
changeset
|
89 #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
|
90 #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
|
91 #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
|
92 #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
|
93 #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
|
94 #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
|
95 #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
|
96 #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
|
97 #define RU (-(int)(0.169*224/255*(1<<RGB2YUV_SHIFT)+0.5)) |
18861 | 98 |
27526 | 99 static const double rgb2yuv_table[8][9]={ |
100 {0.7152, 0.0722, 0.2126, -0.386, 0.5, -0.115, -0.454, -0.046, 0.5}, | |
101 {0.7152, 0.0722, 0.2126, -0.386, 0.5, -0.115, -0.454, -0.046, 0.5}, | |
102 {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, | |
103 {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, | |
104 {0.59 , 0.11 , 0.30 , -0.331, 0.5, -0.169, -0.421, -0.079, 0.5}, //FCC | |
105 {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, | |
106 {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //SMPTE 170M | |
107 {0.701 , 0.087 , 0.212 , -0.384, 0.5 -0.116, -0.445, -0.055, 0.5}, //SMPTE 240M | |
108 }; | |
109 | |
18861 | 110 /* |
111 NOTES | |
112 Special versions: fast Y 1:1 scaling (no interpolation in y direction) | |
113 | |
114 TODO | |
23869 | 115 more intelligent misalignment avoidance for the horizontal scaler |
18861 | 116 write special vertical cubic upscale version |
28316 | 117 optimize C code (YV12 / minmax) |
118 add support for packed pixel YUV input & output | |
18861 | 119 add support for Y8 output |
28316 | 120 optimize BGR24 & BGR32 |
18861 | 121 add BGR4 output support |
122 write special BGR->BGR scaler | |
123 */ | |
124 | |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
125 #if ARCH_X86 |
25875
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
126 DECLARE_ASM_CONST(8, uint64_t, bF8)= 0xF8F8F8F8F8F8F8F8LL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
127 DECLARE_ASM_CONST(8, uint64_t, bFC)= 0xFCFCFCFCFCFCFCFCLL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
128 DECLARE_ASM_CONST(8, uint64_t, w10)= 0x0010001000100010LL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
129 DECLARE_ASM_CONST(8, uint64_t, w02)= 0x0002000200020002LL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
130 DECLARE_ASM_CONST(8, uint64_t, bm00001111)=0x00000000FFFFFFFFLL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
131 DECLARE_ASM_CONST(8, uint64_t, bm00000111)=0x0000000000FFFFFFLL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
132 DECLARE_ASM_CONST(8, uint64_t, bm11111000)=0xFFFFFFFFFF000000LL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
133 DECLARE_ASM_CONST(8, uint64_t, bm01010101)=0x00FF00FF00FF00FFLL; |
18861 | 134 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
135 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
|
136 0x0103010301030103LL, |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
137 0x0200020002000200LL,}; |
18861 | 138 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
139 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
|
140 0x0602060206020602LL, |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
141 0x0004000400040004LL,}; |
18861 | 142 |
25875
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
143 DECLARE_ASM_CONST(8, uint64_t, b16Mask)= 0x001F001F001F001FLL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
144 DECLARE_ASM_CONST(8, uint64_t, g16Mask)= 0x07E007E007E007E0LL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
145 DECLARE_ASM_CONST(8, uint64_t, r16Mask)= 0xF800F800F800F800LL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
146 DECLARE_ASM_CONST(8, uint64_t, b15Mask)= 0x001F001F001F001FLL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
147 DECLARE_ASM_CONST(8, uint64_t, g15Mask)= 0x03E003E003E003E0LL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
148 DECLARE_ASM_CONST(8, uint64_t, r15Mask)= 0x7C007C007C007C00LL; |
2356fe5b7596
Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents:
25801
diff
changeset
|
149 |
25882
2ad528dd42a0
Make some assembler constants global instead of declaring them multiple times.
reimar
parents:
25875
diff
changeset
|
150 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
|
151 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
|
152 DECLARE_ALIGNED(8, const uint64_t, ff_M24C) = 0x0000FF0000FF0000LL; |
18861 | 153 |
154 #ifdef FAST_BGR2YV12 | |
25882
2ad528dd42a0
Make some assembler constants global instead of declaring them multiple times.
reimar
parents:
25875
diff
changeset
|
155 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
|
156 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
|
157 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2VCoeff) = 0x00000038FFD2FFF8ULL; |
18861 | 158 #else |
25882
2ad528dd42a0
Make some assembler constants global instead of declaring them multiple times.
reimar
parents:
25875
diff
changeset
|
159 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
|
160 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
|
161 DECLARE_ALIGNED(8, const uint64_t, ff_bgr2VCoeff) = 0x00003831D0E6F6EAULL; |
19206 | 162 #endif /* FAST_BGR2YV12 */ |
25882
2ad528dd42a0
Make some assembler constants global instead of declaring them multiple times.
reimar
parents:
25875
diff
changeset
|
163 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
|
164 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
|
165 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
|
166 |
27705 | 167 DECLARE_ASM_CONST(8, uint64_t, ff_bgr24toY1Coeff) = 0x0C88000040870C88ULL; |
168 DECLARE_ASM_CONST(8, uint64_t, ff_bgr24toY2Coeff) = 0x20DE4087000020DEULL; | |
169 DECLARE_ASM_CONST(8, uint64_t, ff_rgb24toY1Coeff) = 0x20DE0000408720DEULL; | |
170 DECLARE_ASM_CONST(8, uint64_t, ff_rgb24toY2Coeff) = 0x0C88408700000C88ULL; | |
171 DECLARE_ASM_CONST(8, uint64_t, ff_bgr24toYOffset) = 0x0008400000084000ULL; | |
172 | |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
173 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
|
174 {0x38380000DAC83838ULL, 0xECFFDAC80000ECFFULL, 0xF6E40000D0E3F6E4ULL, 0x3838D0E300003838ULL}, |
ffb573fae5e8
Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents:
27526
diff
changeset
|
175 {0xECFF0000DAC8ECFFULL, 0x3838DAC800003838ULL, 0x38380000D0E33838ULL, 0xF6E4D0E30000F6E4ULL}, |
ffb573fae5e8
Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents:
27526
diff
changeset
|
176 }; |
ffb573fae5e8
Rewrite bgr24->yuv mmx code, the new code is cleaner, more accurate,
michael
parents:
27526
diff
changeset
|
177 |
27705 | 178 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
|
179 |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
180 #endif /* ARCH_X86 */ |
18861 | 181 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
182 DECLARE_ALIGNED(8, static const uint8_t, 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
|
183 { 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
|
184 { 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
|
185 }; |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
186 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
187 DECLARE_ALIGNED(8, static const uint8_t, 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
|
188 { 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
|
189 { 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
|
190 }; |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
191 |
30799
76f3878f34fd
libswscale: Extend the unaccelerated path of the unscaled yuv2rgb special
benoit
parents:
30798
diff
changeset
|
192 DECLARE_ALIGNED(8, const uint8_t, dither_4x4_16)[4][8]={ |
76f3878f34fd
libswscale: Extend the unaccelerated path of the unscaled yuv2rgb special
benoit
parents:
30798
diff
changeset
|
193 { 8, 4, 11, 7, 8, 4, 11, 7, }, |
76f3878f34fd
libswscale: Extend the unaccelerated path of the unscaled yuv2rgb special
benoit
parents:
30798
diff
changeset
|
194 { 2, 14, 1, 13, 2, 14, 1, 13, }, |
76f3878f34fd
libswscale: Extend the unaccelerated path of the unscaled yuv2rgb special
benoit
parents:
30798
diff
changeset
|
195 { 10, 6, 9, 5, 10, 6, 9, 5, }, |
76f3878f34fd
libswscale: Extend the unaccelerated path of the unscaled yuv2rgb special
benoit
parents:
30798
diff
changeset
|
196 { 0, 12, 3, 15, 0, 12, 3, 15, }, |
76f3878f34fd
libswscale: Extend the unaccelerated path of the unscaled yuv2rgb special
benoit
parents:
30798
diff
changeset
|
197 }; |
76f3878f34fd
libswscale: Extend the unaccelerated path of the unscaled yuv2rgb special
benoit
parents:
30798
diff
changeset
|
198 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
199 DECLARE_ALIGNED(8, const uint8_t, dither_8x8_32)[8][8]={ |
27577
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
200 { 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
|
201 { 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
|
202 { 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
|
203 { 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
|
204 { 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
|
205 { 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
|
206 { 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
|
207 { 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
|
208 }; |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
209 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
210 DECLARE_ALIGNED(8, const uint8_t, dither_8x8_73)[8][8]={ |
27577
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
211 { 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
|
212 { 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
|
213 { 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
|
214 { 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
|
215 { 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
|
216 { 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
|
217 { 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
|
218 { 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
|
219 }; |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
220 |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
221 #if 1 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
222 DECLARE_ALIGNED(8, const uint8_t, dither_8x8_220)[8][8]={ |
27577
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
223 {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
|
224 { 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
|
225 {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
|
226 { 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
|
227 {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
|
228 { 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
|
229 {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
|
230 { 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
|
231 }; |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
232 #elif 1 |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
233 // tries to correct a gamma of 1.5 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
234 DECLARE_ALIGNED(8, const uint8_t, dither_8x8_220)[8][8]={ |
27577
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
235 { 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
|
236 { 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
|
237 { 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
|
238 {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
|
239 { 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
|
240 { 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
|
241 { 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
|
242 {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
|
243 }; |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
244 #elif 1 |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
245 // tries to correct a gamma of 2.0 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
246 DECLARE_ALIGNED(8, const uint8_t, dither_8x8_220)[8][8]={ |
27577
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
247 { 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
|
248 { 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
|
249 { 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
|
250 { 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
|
251 { 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
|
252 { 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
|
253 { 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
|
254 { 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
|
255 }; |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
256 #else |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
257 // tries to correct a gamma of 2.5 |
30343
4d50825554ee
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
30339
diff
changeset
|
258 DECLARE_ALIGNED(8, const uint8_t, dither_8x8_220)[8][8]={ |
27577
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
259 { 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
|
260 { 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
|
261 { 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
|
262 { 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
|
263 { 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
|
264 { 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
|
265 { 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
|
266 { 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
|
267 }; |
1270a4919d4b
Move dither tables from yuv2rgb to swscale, they have been written by me and
michael
parents:
27567
diff
changeset
|
268 #endif |
18861 | 269 |
29475 | 270 static av_always_inline void yuv2yuvX16inC_template(const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, |
271 const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, | |
272 const int16_t **alpSrc, uint16_t *dest, uint16_t *uDest, uint16_t *vDest, uint16_t *aDest, | |
273 int dstW, int chrDstW, int big_endian) | |
274 { | |
275 //FIXME Optimize (just quickly written not optimized..) | |
276 int i; | |
277 | |
278 for (i = 0; i < dstW; i++) { | |
279 int val = 1 << 10; | |
280 int j; | |
281 | |
282 for (j = 0; j < lumFilterSize; j++) | |
283 val += lumSrc[j][i] * lumFilter[j]; | |
284 | |
285 if (big_endian) { | |
286 AV_WB16(&dest[i], av_clip_uint16(val >> 11)); | |
287 } else { | |
288 AV_WL16(&dest[i], av_clip_uint16(val >> 11)); | |
289 } | |
290 } | |
291 | |
292 if (uDest) { | |
293 for (i = 0; i < chrDstW; i++) { | |
294 int u = 1 << 10; | |
295 int v = 1 << 10; | |
296 int j; | |
297 | |
298 for (j = 0; j < chrFilterSize; j++) { | |
299 u += chrSrc[j][i ] * chrFilter[j]; | |
300 v += chrSrc[j][i + VOFW] * chrFilter[j]; | |
301 } | |
302 | |
303 if (big_endian) { | |
304 AV_WB16(&uDest[i], av_clip_uint16(u >> 11)); | |
305 AV_WB16(&vDest[i], av_clip_uint16(v >> 11)); | |
306 } else { | |
307 AV_WL16(&uDest[i], av_clip_uint16(u >> 11)); | |
308 AV_WL16(&vDest[i], av_clip_uint16(v >> 11)); | |
309 } | |
310 } | |
311 } | |
312 | |
313 if (CONFIG_SWSCALE_ALPHA && aDest) { | |
314 for (i = 0; i < dstW; i++) { | |
315 int val = 1 << 10; | |
316 int j; | |
317 | |
318 for (j = 0; j < lumFilterSize; j++) | |
319 val += alpSrc[j][i] * lumFilter[j]; | |
320 | |
321 if (big_endian) { | |
322 AV_WB16(&aDest[i], av_clip_uint16(val >> 11)); | |
323 } else { | |
324 AV_WL16(&aDest[i], av_clip_uint16(val >> 11)); | |
325 } | |
326 } | |
327 } | |
328 } | |
329 | |
330 static inline void yuv2yuvX16inC(const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, | |
331 const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, | |
332 const int16_t **alpSrc, uint16_t *dest, uint16_t *uDest, uint16_t *vDest, uint16_t *aDest, int dstW, int chrDstW, | |
333 enum PixelFormat dstFormat) | |
334 { | |
335 if (isBE(dstFormat)) { | |
336 yuv2yuvX16inC_template(lumFilter, lumSrc, lumFilterSize, | |
337 chrFilter, chrSrc, chrFilterSize, | |
338 alpSrc, | |
339 dest, uDest, vDest, aDest, | |
340 dstW, chrDstW, 1); | |
341 } else { | |
342 yuv2yuvX16inC_template(lumFilter, lumSrc, lumFilterSize, | |
343 chrFilter, chrSrc, chrFilterSize, | |
344 alpSrc, | |
345 dest, uDest, vDest, aDest, | |
346 dstW, chrDstW, 0); | |
347 } | |
348 } | |
349 | |
29103
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
350 static inline void yuv2yuvXinC(const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, |
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
351 const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, |
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
352 const int16_t **alpSrc, uint8_t *dest, uint8_t *uDest, uint8_t *vDest, uint8_t *aDest, int dstW, int chrDstW) |
18861 | 353 { |
28316 | 354 //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
|
355 int i; |
29481 | 356 for (i=0; i<dstW; i++) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
357 int val=1<<18; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
358 int j; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
359 for (j=0; j<lumFilterSize; j++) |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
360 val += lumSrc[j][i] * lumFilter[j]; |
18861 | 361 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
362 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
|
363 } |
18861 | 364 |
25752
559b0e9d47fb
Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents:
25750
diff
changeset
|
365 if (uDest) |
29481 | 366 for (i=0; i<chrDstW; i++) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
367 int u=1<<18; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
368 int v=1<<18; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
369 int j; |
29481 | 370 for (j=0; j<chrFilterSize; j++) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
371 u += chrSrc[j][i] * chrFilter[j]; |
26133
94cc4bac8cd0
Turn ancient V offset numerical constants into named ones.
michael
parents:
26028
diff
changeset
|
372 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
|
373 } |
18861 | 374 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
375 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
|
376 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
|
377 } |
28976 | 378 |
379 if (CONFIG_SWSCALE_ALPHA && aDest) | |
29481 | 380 for (i=0; i<dstW; i++) { |
28976 | 381 int val=1<<18; |
382 int j; | |
383 for (j=0; j<lumFilterSize; j++) | |
384 val += alpSrc[j][i] * lumFilter[j]; | |
385 | |
386 aDest[i]= av_clip_uint8(val>>19); | |
387 } | |
388 | |
18861 | 389 } |
390 | |
29103
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
391 static inline void yuv2nv12XinC(const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, |
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
392 const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
393 uint8_t *dest, uint8_t *uDest, int dstW, int chrDstW, int dstFormat) |
18861 | 394 { |
28316 | 395 //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
|
396 int i; |
29481 | 397 for (i=0; i<dstW; i++) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
398 int val=1<<18; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
399 int j; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
400 for (j=0; j<lumFilterSize; j++) |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
401 val += lumSrc[j][i] * lumFilter[j]; |
18861 | 402 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
403 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
|
404 } |
18861 | 405 |
25752
559b0e9d47fb
Change (a == NULL) condition to (!a) and (a != NULL) condition to (a).
benoit
parents:
25750
diff
changeset
|
406 if (!uDest) |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
407 return; |
18861 | 408 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
409 if (dstFormat == PIX_FMT_NV12) |
29481 | 410 for (i=0; i<chrDstW; i++) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
411 int u=1<<18; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
412 int v=1<<18; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
413 int j; |
29481 | 414 for (j=0; j<chrFilterSize; j++) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
415 u += chrSrc[j][i] * chrFilter[j]; |
26133
94cc4bac8cd0
Turn ancient V offset numerical constants into named ones.
michael
parents:
26028
diff
changeset
|
416 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
|
417 } |
18861 | 418 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
419 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
|
420 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
|
421 } |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
422 else |
29481 | 423 for (i=0; i<chrDstW; i++) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
424 int u=1<<18; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
425 int v=1<<18; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
426 int j; |
29481 | 427 for (j=0; j<chrFilterSize; j++) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
428 u += chrSrc[j][i] * chrFilter[j]; |
26133
94cc4bac8cd0
Turn ancient V offset numerical constants into named ones.
michael
parents:
26028
diff
changeset
|
429 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
|
430 } |
18861 | 431 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
432 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
|
433 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
|
434 } |
18861 | 435 } |
436 | |
28976 | 437 #define YSCALE_YUV_2_PACKEDX_NOCLIP_C(type,alpha) \ |
29481 | 438 for (i=0; i<(dstW>>1); i++) {\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
439 int j;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
440 int Y1 = 1<<18;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
441 int Y2 = 1<<18;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
442 int U = 1<<18;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
443 int V = 1<<18;\ |
28976 | 444 int av_unused A1, A2;\ |
23400
16cce5d6ff9f
rename attribute_unused to av_unused as it is declared in common.h
benoit
parents:
23382
diff
changeset
|
445 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
|
446 const int i2= 2*i;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
447 \ |
29481 | 448 for (j=0; j<lumFilterSize; j++) {\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
449 Y1 += lumSrc[j][i2] * lumFilter[j];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
450 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
|
451 }\ |
29481 | 452 for (j=0; j<chrFilterSize; j++) {\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
453 U += chrSrc[j][i] * chrFilter[j];\ |
26133
94cc4bac8cd0
Turn ancient V offset numerical constants into named ones.
michael
parents:
26028
diff
changeset
|
454 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
|
455 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
456 Y1>>=19;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
457 Y2>>=19;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
458 U >>=19;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
459 V >>=19;\ |
29481 | 460 if (alpha) {\ |
28976 | 461 A1 = 1<<18;\ |
462 A2 = 1<<18;\ | |
29481 | 463 for (j=0; j<lumFilterSize; j++) {\ |
28976 | 464 A1 += alpSrc[j][i2 ] * lumFilter[j];\ |
465 A2 += alpSrc[j][i2+1] * lumFilter[j];\ | |
466 }\ | |
467 A1>>=19;\ | |
468 A2>>=19;\ | |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
469 } |
28976 | 470 |
471 #define YSCALE_YUV_2_PACKEDX_C(type,alpha) \ | |
472 YSCALE_YUV_2_PACKEDX_NOCLIP_C(type,alpha)\ | |
29481 | 473 if ((Y1|Y2|U|V)&256) {\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
474 if (Y1>255) Y1=255; \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
475 else if (Y1<0)Y1=0; \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
476 if (Y2>255) Y2=255; \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
477 else if (Y2<0)Y2=0; \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
478 if (U>255) U=255; \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
479 else if (U<0) U=0; \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
480 if (V>255) V=255; \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
481 else if (V<0) V=0; \ |
28976 | 482 }\ |
29481 | 483 if (alpha && ((A1|A2)&256)) {\ |
28976 | 484 A1=av_clip_uint8(A1);\ |
485 A2=av_clip_uint8(A2);\ | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
486 } |
23129 | 487 |
28976 | 488 #define YSCALE_YUV_2_PACKEDX_FULL_C(rnd,alpha) \ |
29481 | 489 for (i=0; i<dstW; i++) {\ |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
490 int j;\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
491 int Y = 0;\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
492 int U = -128<<19;\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
493 int V = -128<<19;\ |
28976 | 494 int av_unused A;\ |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
495 int R,G,B;\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
496 \ |
29481 | 497 for (j=0; j<lumFilterSize; j++) {\ |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
498 Y += lumSrc[j][i ] * lumFilter[j];\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
499 }\ |
29481 | 500 for (j=0; j<chrFilterSize; j++) {\ |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
501 U += chrSrc[j][i ] * chrFilter[j];\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
502 V += chrSrc[j][i+VOFW] * chrFilter[j];\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
503 }\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
504 Y >>=10;\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
505 U >>=10;\ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
506 V >>=10;\ |
29481 | 507 if (alpha) {\ |
28976 | 508 A = rnd;\ |
509 for (j=0; j<lumFilterSize; j++)\ | |
510 A += alpSrc[j][i ] * lumFilter[j];\ | |
511 A >>=19;\ | |
512 if (A&256)\ | |
513 A = av_clip_uint8(A);\ | |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
514 } |
28976 | 515 |
516 #define YSCALE_YUV_2_RGBX_FULL_C(rnd,alpha) \ | |
517 YSCALE_YUV_2_PACKEDX_FULL_C(rnd>>3,alpha)\ | |
27567
203ac2c7f613
Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents:
27563
diff
changeset
|
518 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
|
519 Y*= c->yuv2rgb_y_coeff;\ |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
520 Y+= rnd;\ |
27567
203ac2c7f613
Rename yuv2rgb variables to avoid name clashes with the ones used by bfin asm.
michael
parents:
27563
diff
changeset
|
521 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
|
522 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
|
523 B= Y + U*c->yuv2rgb_u2b_coeff;\ |
29481 | 524 if ((R|G|B)&(0xC0000000)) {\ |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
525 if (R>=(256<<22)) R=(256<<22)-1; \ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
526 else if (R<0)R=0; \ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
527 if (G>=(256<<22)) G=(256<<22)-1; \ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
528 else if (G<0)G=0; \ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
529 if (B>=(256<<22)) B=(256<<22)-1; \ |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
530 else if (B<0)B=0; \ |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
531 } |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
532 |
27546 | 533 #define YSCALE_YUV_2_GRAY16_C \ |
29481 | 534 for (i=0; i<(dstW>>1); i++) {\ |
27492 | 535 int j;\ |
536 int Y1 = 1<<18;\ | |
537 int Y2 = 1<<18;\ | |
538 int U = 1<<18;\ | |
539 int V = 1<<18;\ | |
27546 | 540 \ |
27492 | 541 const int i2= 2*i;\ |
542 \ | |
29481 | 543 for (j=0; j<lumFilterSize; j++) {\ |
27492 | 544 Y1 += lumSrc[j][i2] * lumFilter[j];\ |
545 Y2 += lumSrc[j][i2+1] * lumFilter[j];\ | |
546 }\ | |
547 Y1>>=11;\ | |
548 Y2>>=11;\ | |
29481 | 549 if ((Y1|Y2|U|V)&65536) {\ |
27492 | 550 if (Y1>65535) Y1=65535; \ |
551 else if (Y1<0)Y1=0; \ | |
552 if (Y2>65535) Y2=65535; \ | |
553 else if (Y2<0)Y2=0; \ | |
554 } | |
555 | |
28976 | 556 #define YSCALE_YUV_2_RGBX_C(type,alpha) \ |
557 YSCALE_YUV_2_PACKEDX_C(type,alpha) /* 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
|
558 r = (type *)c->table_rV[V]; \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
559 g = (type *)(c->table_gU[U] + c->table_gV[V]); \ |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
560 b = (type *)c->table_bU[U]; |
18861 | 561 |
28976 | 562 #define YSCALE_YUV_2_PACKED2_C(type,alpha) \ |
29481 | 563 for (i=0; i<(dstW>>1); i++) { \ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
564 const int i2= 2*i; \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
565 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
|
566 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
|
567 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
|
568 int V= (uvbuf0[i+VOFW]*uvalpha1+uvbuf1[i+VOFW]*uvalpha)>>19; \ |
28976 | 569 type av_unused *r, *b, *g; \ |
570 int av_unused A1, A2; \ | |
29481 | 571 if (alpha) {\ |
28976 | 572 A1= (abuf0[i2 ]*yalpha1+abuf1[i2 ]*yalpha)>>19; \ |
573 A2= (abuf0[i2+1]*yalpha1+abuf1[i2+1]*yalpha)>>19; \ | |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
574 } |
18861 | 575 |
27492 | 576 #define YSCALE_YUV_2_GRAY16_2_C \ |
29481 | 577 for (i=0; i<(dstW>>1); i++) { \ |
27492 | 578 const int i2= 2*i; \ |
579 int Y1= (buf0[i2 ]*yalpha1+buf1[i2 ]*yalpha)>>11; \ | |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
580 int Y2= (buf0[i2+1]*yalpha1+buf1[i2+1]*yalpha)>>11; |
27492 | 581 |
28976 | 582 #define YSCALE_YUV_2_RGB2_C(type,alpha) \ |
583 YSCALE_YUV_2_PACKED2_C(type,alpha)\ | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
584 r = (type *)c->table_rV[V];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
585 g = (type *)(c->table_gU[U] + c->table_gV[V]);\ |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
586 b = (type *)c->table_bU[U]; |
18861 | 587 |
28976 | 588 #define YSCALE_YUV_2_PACKED1_C(type,alpha) \ |
29481 | 589 for (i=0; i<(dstW>>1); i++) {\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
590 const int i2= 2*i;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
591 int Y1= buf0[i2 ]>>7;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
592 int Y2= buf0[i2+1]>>7;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
593 int U= (uvbuf1[i ])>>7;\ |
26133
94cc4bac8cd0
Turn ancient V offset numerical constants into named ones.
michael
parents:
26028
diff
changeset
|
594 int V= (uvbuf1[i+VOFW])>>7;\ |
28976 | 595 type av_unused *r, *b, *g;\ |
596 int av_unused A1, A2;\ | |
29481 | 597 if (alpha) {\ |
28976 | 598 A1= abuf0[i2 ]>>7;\ |
599 A2= abuf0[i2+1]>>7;\ | |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
600 } |
18861 | 601 |
27492 | 602 #define YSCALE_YUV_2_GRAY16_1_C \ |
29481 | 603 for (i=0; i<(dstW>>1); i++) {\ |
27492 | 604 const int i2= 2*i;\ |
605 int Y1= buf0[i2 ]<<1;\ | |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
606 int Y2= buf0[i2+1]<<1; |
27492 | 607 |
28976 | 608 #define YSCALE_YUV_2_RGB1_C(type,alpha) \ |
609 YSCALE_YUV_2_PACKED1_C(type,alpha)\ | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
610 r = (type *)c->table_rV[V];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
611 g = (type *)(c->table_gU[U] + c->table_gV[V]);\ |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
612 b = (type *)c->table_bU[U]; |
18861 | 613 |
28976 | 614 #define YSCALE_YUV_2_PACKED1B_C(type,alpha) \ |
29481 | 615 for (i=0; i<(dstW>>1); i++) {\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
616 const int i2= 2*i;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
617 int Y1= buf0[i2 ]>>7;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
618 int Y2= buf0[i2+1]>>7;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
619 int U= (uvbuf0[i ] + uvbuf1[i ])>>8;\ |
26133
94cc4bac8cd0
Turn ancient V offset numerical constants into named ones.
michael
parents:
26028
diff
changeset
|
620 int V= (uvbuf0[i+VOFW] + uvbuf1[i+VOFW])>>8;\ |
28976 | 621 type av_unused *r, *b, *g;\ |
622 int av_unused A1, A2;\ | |
29481 | 623 if (alpha) {\ |
28976 | 624 A1= abuf0[i2 ]>>7;\ |
625 A2= abuf0[i2+1]>>7;\ | |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
626 } |
28976 | 627 |
628 #define YSCALE_YUV_2_RGB1B_C(type,alpha) \ | |
629 YSCALE_YUV_2_PACKED1B_C(type,alpha)\ | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
630 r = (type *)c->table_rV[V];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
631 g = (type *)(c->table_gU[U] + c->table_gV[V]);\ |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
632 b = (type *)c->table_bU[U]; |
18861 | 633 |
27554
021a1889cc26
Add support for PIX_FMT_MONOWHITE as output format.
michael
parents:
27553
diff
changeset
|
634 #define YSCALE_YUV_2_MONO2_C \ |
27546 | 635 const uint8_t * const d128=dither_8x8_220[y&7];\ |
636 uint8_t *g= c->table_gU[128] + c->table_gV[128];\ | |
29481 | 637 for (i=0; i<dstW-7; i+=8) {\ |
27546 | 638 int acc;\ |
639 acc = g[((buf0[i ]*yalpha1+buf1[i ]*yalpha)>>19) + d128[0]];\ | |
640 acc+= acc + g[((buf0[i+1]*yalpha1+buf1[i+1]*yalpha)>>19) + d128[1]];\ | |
641 acc+= acc + g[((buf0[i+2]*yalpha1+buf1[i+2]*yalpha)>>19) + d128[2]];\ | |
642 acc+= acc + g[((buf0[i+3]*yalpha1+buf1[i+3]*yalpha)>>19) + d128[3]];\ | |
643 acc+= acc + g[((buf0[i+4]*yalpha1+buf1[i+4]*yalpha)>>19) + d128[4]];\ | |
644 acc+= acc + g[((buf0[i+5]*yalpha1+buf1[i+5]*yalpha)>>19) + d128[5]];\ | |
645 acc+= acc + g[((buf0[i+6]*yalpha1+buf1[i+6]*yalpha)>>19) + d128[6]];\ | |
646 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
|
647 ((uint8_t*)dest)[0]= c->dstFormat == PIX_FMT_MONOBLACK ? acc : ~acc;\ |
27546 | 648 dest++;\ |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
649 } |
27546 | 650 |
27554
021a1889cc26
Add support for PIX_FMT_MONOWHITE as output format.
michael
parents:
27553
diff
changeset
|
651 #define YSCALE_YUV_2_MONOX_C \ |
27546 | 652 const uint8_t * const d128=dither_8x8_220[y&7];\ |
653 uint8_t *g= c->table_gU[128] + c->table_gV[128];\ | |
654 int acc=0;\ | |
29481 | 655 for (i=0; i<dstW-1; i+=2) {\ |
27546 | 656 int j;\ |
657 int Y1=1<<18;\ | |
658 int Y2=1<<18;\ | |
659 \ | |
29481 | 660 for (j=0; j<lumFilterSize; j++) {\ |
27546 | 661 Y1 += lumSrc[j][i] * lumFilter[j];\ |
662 Y2 += lumSrc[j][i+1] * lumFilter[j];\ | |
663 }\ | |
664 Y1>>=19;\ | |
665 Y2>>=19;\ | |
29481 | 666 if ((Y1|Y2)&256) {\ |
27546 | 667 if (Y1>255) Y1=255;\ |
668 else if (Y1<0)Y1=0;\ | |
669 if (Y2>255) Y2=255;\ | |
670 else if (Y2<0)Y2=0;\ | |
671 }\ | |
672 acc+= acc + g[Y1+d128[(i+0)&7]];\ | |
673 acc+= acc + g[Y2+d128[(i+1)&7]];\ | |
29481 | 674 if ((i&7)==6) {\ |
27554
021a1889cc26
Add support for PIX_FMT_MONOWHITE as output format.
michael
parents:
27553
diff
changeset
|
675 ((uint8_t*)dest)[0]= c->dstFormat == PIX_FMT_MONOBLACK ? acc : ~acc;\ |
27546 | 676 dest++;\ |
677 }\ | |
678 } | |
679 | |
680 #define YSCALE_YUV_2_ANYRGB_C(func, func2, func_g16, func_monoblack)\ | |
29481 | 681 switch(c->dstFormat) {\ |
29300 | 682 case PIX_FMT_RGB48BE:\ |
683 case PIX_FMT_RGB48LE:\ | |
684 func(uint8_t,0)\ | |
685 ((uint8_t*)dest)[ 0]= r[Y1];\ | |
686 ((uint8_t*)dest)[ 1]= r[Y1];\ | |
687 ((uint8_t*)dest)[ 2]= g[Y1];\ | |
688 ((uint8_t*)dest)[ 3]= g[Y1];\ | |
689 ((uint8_t*)dest)[ 4]= b[Y1];\ | |
690 ((uint8_t*)dest)[ 5]= b[Y1];\ | |
691 ((uint8_t*)dest)[ 6]= r[Y2];\ | |
692 ((uint8_t*)dest)[ 7]= r[Y2];\ | |
693 ((uint8_t*)dest)[ 8]= g[Y2];\ | |
694 ((uint8_t*)dest)[ 9]= g[Y2];\ | |
695 ((uint8_t*)dest)[10]= b[Y2];\ | |
696 ((uint8_t*)dest)[11]= b[Y2];\ | |
697 dest+=12;\ | |
698 }\ | |
699 break;\ | |
28976 | 700 case PIX_FMT_RGBA:\ |
701 case PIX_FMT_BGRA:\ | |
29481 | 702 if (CONFIG_SMALL) {\ |
28976 | 703 int needAlpha = CONFIG_SWSCALE_ALPHA && c->alpPixBuf;\ |
704 func(uint32_t,needAlpha)\ | |
705 ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1] + (needAlpha ? (A1<<24) : 0);\ | |
706 ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2] + (needAlpha ? (A2<<24) : 0);\ | |
707 }\ | |
29481 | 708 } else {\ |
709 if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) {\ | |
28976 | 710 func(uint32_t,1)\ |
711 ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1] + (A1<<24);\ | |
712 ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2] + (A2<<24);\ | |
713 }\ | |
29481 | 714 } else {\ |
28976 | 715 func(uint32_t,0)\ |
716 ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1];\ | |
717 ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2];\ | |
718 }\ | |
719 }\ | |
720 }\ | |
721 break;\ | |
722 case PIX_FMT_ARGB:\ | |
723 case PIX_FMT_ABGR:\ | |
29481 | 724 if (CONFIG_SMALL) {\ |
28976 | 725 int needAlpha = CONFIG_SWSCALE_ALPHA && c->alpPixBuf;\ |
726 func(uint32_t,needAlpha)\ | |
727 ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1] + (needAlpha ? A1 : 0);\ | |
728 ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2] + (needAlpha ? A2 : 0);\ | |
729 }\ | |
29481 | 730 } else {\ |
731 if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) {\ | |
28976 | 732 func(uint32_t,1)\ |
733 ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1] + A1;\ | |
734 ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2] + A2;\ | |
735 }\ | |
29481 | 736 } else {\ |
28976 | 737 func(uint32_t,0)\ |
738 ((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1];\ | |
739 ((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2];\ | |
740 }\ | |
741 }\ | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
742 } \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
743 break;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
744 case PIX_FMT_RGB24:\ |
28976 | 745 func(uint8_t,0)\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
746 ((uint8_t*)dest)[0]= r[Y1];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
747 ((uint8_t*)dest)[1]= g[Y1];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
748 ((uint8_t*)dest)[2]= b[Y1];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
749 ((uint8_t*)dest)[3]= r[Y2];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
750 ((uint8_t*)dest)[4]= g[Y2];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
751 ((uint8_t*)dest)[5]= b[Y2];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
752 dest+=6;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
753 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
754 break;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
755 case PIX_FMT_BGR24:\ |
28976 | 756 func(uint8_t,0)\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
757 ((uint8_t*)dest)[0]= b[Y1];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
758 ((uint8_t*)dest)[1]= g[Y1];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
759 ((uint8_t*)dest)[2]= r[Y1];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
760 ((uint8_t*)dest)[3]= b[Y2];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
761 ((uint8_t*)dest)[4]= g[Y2];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
762 ((uint8_t*)dest)[5]= r[Y2];\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
763 dest+=6;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
764 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
765 break;\ |
30798
91f90077acf6
Support BGR555, BGR565, RGB555 and RGB565 foreign endian output in
cehoyos
parents:
30784
diff
changeset
|
766 case PIX_FMT_RGB565BE:\ |
91f90077acf6
Support BGR555, BGR565, RGB555 and RGB565 foreign endian output in
cehoyos
parents:
30784
diff
changeset
|
767 case PIX_FMT_RGB565LE:\ |
91f90077acf6
Support BGR555, BGR565, RGB555 and RGB565 foreign endian output in
cehoyos
parents:
30784
diff
changeset
|
768 case PIX_FMT_BGR565BE:\ |
91f90077acf6
Support BGR555, BGR565, RGB555 and RGB565 foreign endian output in
cehoyos
parents:
30784
diff
changeset
|
769 case PIX_FMT_BGR565LE:\ |
23155
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 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
|
772 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
|
773 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
|
774 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
|
775 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
|
776 const int db2= dither_2x2_8[(y&1)^1][1];\ |
28976 | 777 func(uint16_t,0)\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
778 ((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
|
779 ((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
|
780 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
781 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
782 break;\ |
30798
91f90077acf6
Support BGR555, BGR565, RGB555 and RGB565 foreign endian output in
cehoyos
parents:
30784
diff
changeset
|
783 case PIX_FMT_RGB555BE:\ |
91f90077acf6
Support BGR555, BGR565, RGB555 and RGB565 foreign endian output in
cehoyos
parents:
30784
diff
changeset
|
784 case PIX_FMT_RGB555LE:\ |
91f90077acf6
Support BGR555, BGR565, RGB555 and RGB565 foreign endian output in
cehoyos
parents:
30784
diff
changeset
|
785 case PIX_FMT_BGR555BE:\ |
91f90077acf6
Support BGR555, BGR565, RGB555 and RGB565 foreign endian output in
cehoyos
parents:
30784
diff
changeset
|
786 case PIX_FMT_BGR555LE:\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
787 {\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
788 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
|
789 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
|
790 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
|
791 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
|
792 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
|
793 const int db2= dither_2x2_8[(y&1)^1][1];\ |
28976 | 794 func(uint16_t,0)\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
795 ((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
|
796 ((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
|
797 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
798 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
799 break;\ |
30892
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
800 case PIX_FMT_RGB444BE:\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
801 case PIX_FMT_RGB444LE:\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
802 case PIX_FMT_BGR444BE:\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
803 case PIX_FMT_BGR444LE:\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
804 {\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
805 const int dr1= dither_4x4_16[y&3 ][0];\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
806 const int dg1= dither_4x4_16[y&3 ][1];\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
807 const int db1= dither_4x4_16[(y&3)^3][0];\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
808 const int dr2= dither_4x4_16[y&3 ][1];\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
809 const int dg2= dither_4x4_16[y&3 ][0];\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
810 const int db2= dither_4x4_16[(y&3)^3][1];\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
811 func(uint16_t,0)\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
812 ((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
813 ((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
814 }\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
815 }\ |
e052716dcb5b
Extend the generic path of the yuv2rgb converter with support for rgb444
cehoyos
parents:
30827
diff
changeset
|
816 break;\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
817 case PIX_FMT_RGB8:\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
818 case PIX_FMT_BGR8:\ |
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 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
|
821 const uint8_t * const d32= dither_8x8_32[y&7];\ |
28976 | 822 func(uint8_t,0)\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
823 ((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
|
824 ((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
|
825 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
826 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
827 break;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
828 case PIX_FMT_RGB4:\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
829 case PIX_FMT_BGR4:\ |
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 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
|
832 const uint8_t * const d128=dither_8x8_220[y&7];\ |
28976 | 833 func(uint8_t,0)\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
834 ((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
|
835 + ((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
|
836 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
837 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
838 break;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
839 case PIX_FMT_RGB4_BYTE:\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
840 case PIX_FMT_BGR4_BYTE:\ |
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 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
|
843 const uint8_t * const d128=dither_8x8_220[y&7];\ |
28976 | 844 func(uint8_t,0)\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
845 ((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
|
846 ((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
|
847 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
848 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
849 break;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
850 case PIX_FMT_MONOBLACK:\ |
27554
021a1889cc26
Add support for PIX_FMT_MONOWHITE as output format.
michael
parents:
27553
diff
changeset
|
851 case PIX_FMT_MONOWHITE:\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
852 {\ |
27546 | 853 func_monoblack\ |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
854 }\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
855 break;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
856 case PIX_FMT_YUYV422:\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
857 func2\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
858 ((uint8_t*)dest)[2*i2+0]= Y1;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
859 ((uint8_t*)dest)[2*i2+1]= U;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
860 ((uint8_t*)dest)[2*i2+2]= Y2;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
861 ((uint8_t*)dest)[2*i2+3]= V;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
862 } \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
863 break;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
864 case PIX_FMT_UYVY422:\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
865 func2\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
866 ((uint8_t*)dest)[2*i2+0]= U;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
867 ((uint8_t*)dest)[2*i2+1]= Y1;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
868 ((uint8_t*)dest)[2*i2+2]= V;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
869 ((uint8_t*)dest)[2*i2+3]= Y2;\ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
870 } \ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
871 break;\ |
27492 | 872 case PIX_FMT_GRAY16BE:\ |
873 func_g16\ | |
874 ((uint8_t*)dest)[2*i2+0]= Y1>>8;\ | |
875 ((uint8_t*)dest)[2*i2+1]= Y1;\ | |
876 ((uint8_t*)dest)[2*i2+2]= Y2>>8;\ | |
877 ((uint8_t*)dest)[2*i2+3]= Y2;\ | |
878 } \ | |
879 break;\ | |
880 case PIX_FMT_GRAY16LE:\ | |
881 func_g16\ | |
882 ((uint8_t*)dest)[2*i2+0]= Y1;\ | |
883 ((uint8_t*)dest)[2*i2+1]= Y1>>8;\ | |
884 ((uint8_t*)dest)[2*i2+2]= Y2;\ | |
885 ((uint8_t*)dest)[2*i2+3]= Y2>>8;\ | |
886 } \ | |
887 break;\ | |
30320
90c417401f02
Remove stray '\' at the end of macro definitions.
stefano
parents:
30319
diff
changeset
|
888 } |
18861 | 889 |
29103
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
890 static inline void yuv2packedXinC(SwsContext *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, |
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
891 const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, |
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
892 const int16_t **alpSrc, uint8_t *dest, int dstW, int y) |
18861 | 893 { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
894 int i; |
28976 | 895 YSCALE_YUV_2_ANYRGB_C(YSCALE_YUV_2_RGBX_C, YSCALE_YUV_2_PACKEDX_C(void,0), YSCALE_YUV_2_GRAY16_C, YSCALE_YUV_2_MONOX_C) |
18861 | 896 } |
897 | |
29103
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
898 static inline void yuv2rgbXinC_full(SwsContext *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, |
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
899 const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, |
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
900 const int16_t **alpSrc, uint8_t *dest, int dstW, int y) |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
901 { |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
902 int i; |
30377
2eea1f09e2c5
Use av_get_bits_per_pixel() for computing the bits per pixel of the
stefano
parents:
30371
diff
changeset
|
903 int step= c->dstFormatBpp/8; |
27596
33b8ad99fbcb
Fix segfault with rgb24 and full_internal_chroma due to non-existing alpha
michael
parents:
27580
diff
changeset
|
904 int aidx= 3; |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
905 |
29481 | 906 switch(c->dstFormat) { |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
907 case PIX_FMT_ARGB: |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
908 dest++; |
28790 | 909 aidx= 0; |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
910 case PIX_FMT_RGB24: |
27596
33b8ad99fbcb
Fix segfault with rgb24 and full_internal_chroma due to non-existing alpha
michael
parents:
27580
diff
changeset
|
911 aidx--; |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
912 case PIX_FMT_RGBA: |
29481 | 913 if (CONFIG_SMALL) { |
28976 | 914 int needAlpha = CONFIG_SWSCALE_ALPHA && c->alpPixBuf; |
915 YSCALE_YUV_2_RGBX_FULL_C(1<<21, needAlpha) | |
916 dest[aidx]= needAlpha ? A : 255; | |
917 dest[0]= R>>22; | |
918 dest[1]= G>>22; | |
919 dest[2]= B>>22; | |
920 dest+= step; | |
921 } | |
29481 | 922 } else { |
923 if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) { | |
28976 | 924 YSCALE_YUV_2_RGBX_FULL_C(1<<21, 1) |
925 dest[aidx]= A; | |
926 dest[0]= R>>22; | |
927 dest[1]= G>>22; | |
928 dest[2]= B>>22; | |
929 dest+= step; | |
930 } | |
29481 | 931 } else { |
28976 | 932 YSCALE_YUV_2_RGBX_FULL_C(1<<21, 0) |
933 dest[aidx]= 255; | |
934 dest[0]= R>>22; | |
935 dest[1]= G>>22; | |
936 dest[2]= B>>22; | |
937 dest+= step; | |
938 } | |
939 } | |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
940 } |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
941 break; |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
942 case PIX_FMT_ABGR: |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
943 dest++; |
28790 | 944 aidx= 0; |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
945 case PIX_FMT_BGR24: |
27596
33b8ad99fbcb
Fix segfault with rgb24 and full_internal_chroma due to non-existing alpha
michael
parents:
27580
diff
changeset
|
946 aidx--; |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
947 case PIX_FMT_BGRA: |
29481 | 948 if (CONFIG_SMALL) { |
28976 | 949 int needAlpha = CONFIG_SWSCALE_ALPHA && c->alpPixBuf; |
950 YSCALE_YUV_2_RGBX_FULL_C(1<<21, needAlpha) | |
951 dest[aidx]= needAlpha ? A : 255; | |
952 dest[0]= B>>22; | |
953 dest[1]= G>>22; | |
954 dest[2]= R>>22; | |
955 dest+= step; | |
956 } | |
29481 | 957 } else { |
958 if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) { | |
28976 | 959 YSCALE_YUV_2_RGBX_FULL_C(1<<21, 1) |
960 dest[aidx]= A; | |
961 dest[0]= B>>22; | |
962 dest[1]= G>>22; | |
963 dest[2]= R>>22; | |
964 dest+= step; | |
965 } | |
29481 | 966 } else { |
28976 | 967 YSCALE_YUV_2_RGBX_FULL_C(1<<21, 0) |
968 dest[aidx]= 255; | |
969 dest[0]= B>>22; | |
970 dest[1]= G>>22; | |
971 dest[2]= R>>22; | |
972 dest+= step; | |
973 } | |
974 } | |
27548
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
975 } |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
976 break; |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
977 default: |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
978 assert(0); |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
979 } |
78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
michael
parents:
27547
diff
changeset
|
980 } |
18861 | 981 |
29481 | 982 static void fillPlane(uint8_t* plane, int stride, int width, int height, int y, uint8_t val) |
983 { | |
28951
788a99558cf2
Add a fillPlane function to fill a plane with one constant value
sdrik
parents:
28950
diff
changeset
|
984 int i; |
788a99558cf2
Add a fillPlane function to fill a plane with one constant value
sdrik
parents:
28950
diff
changeset
|
985 uint8_t *ptr = plane + stride*y; |
29481 | 986 for (i=0; i<height; i++) { |
28951
788a99558cf2
Add a fillPlane function to fill a plane with one constant value
sdrik
parents:
28950
diff
changeset
|
987 memset(ptr, val, width); |
788a99558cf2
Add a fillPlane function to fill a plane with one constant value
sdrik
parents:
28950
diff
changeset
|
988 ptr += stride; |
788a99558cf2
Add a fillPlane function to fill a plane with one constant value
sdrik
parents:
28950
diff
changeset
|
989 } |
788a99558cf2
Add a fillPlane function to fill a plane with one constant value
sdrik
parents:
28950
diff
changeset
|
990 } |
788a99558cf2
Add a fillPlane function to fill a plane with one constant value
sdrik
parents:
28950
diff
changeset
|
991 |
31562
3ce8c7b9b925
Fix 'assignment from incompatible pointer type' warning.
cehoyos
parents:
31235
diff
changeset
|
992 static inline void rgb48ToY(uint8_t *dst, const uint8_t *src, long width, |
30258 | 993 uint32_t *unused) |
29299
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
994 { |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
995 int i; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
996 for (i = 0; i < width; i++) { |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
997 int r = src[i*6+0]; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
998 int g = src[i*6+2]; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
999 int b = src[i*6+4]; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1000 |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1001 dst[i] = (RY*r + GY*g + BY*b + (33<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1002 } |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1003 } |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1004 |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1005 static inline void rgb48ToUV(uint8_t *dstU, uint8_t *dstV, |
30259
2c671b7d2bd4
Add const qualifier to rgb48 to YV12 functions' src.
ramiro
parents:
30258
diff
changeset
|
1006 const uint8_t *src1, const uint8_t *src2, |
31562
3ce8c7b9b925
Fix 'assignment from incompatible pointer type' warning.
cehoyos
parents:
31235
diff
changeset
|
1007 long width, uint32_t *unused) |
29299
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1008 { |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1009 int i; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1010 assert(src1==src2); |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1011 for (i = 0; i < width; i++) { |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1012 int r = src1[6*i + 0]; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1013 int g = src1[6*i + 2]; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1014 int b = src1[6*i + 4]; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1015 |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1016 dstU[i] = (RU*r + GU*g + BU*b + (257<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1017 dstV[i] = (RV*r + GV*g + BV*b + (257<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1018 } |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1019 } |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1020 |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1021 static inline void rgb48ToUV_half(uint8_t *dstU, uint8_t *dstV, |
30259
2c671b7d2bd4
Add const qualifier to rgb48 to YV12 functions' src.
ramiro
parents:
30258
diff
changeset
|
1022 const uint8_t *src1, const uint8_t *src2, |
31562
3ce8c7b9b925
Fix 'assignment from incompatible pointer type' warning.
cehoyos
parents:
31235
diff
changeset
|
1023 long width, uint32_t *unused) |
29299
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1024 { |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1025 int i; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1026 assert(src1==src2); |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1027 for (i = 0; i < width; i++) { |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1028 int r= src1[12*i + 0] + src1[12*i + 6]; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1029 int g= src1[12*i + 2] + src1[12*i + 8]; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1030 int b= src1[12*i + 4] + src1[12*i + 10]; |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1031 |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1032 dstU[i]= (RU*r + GU*g + BU*b + (257<<RGB2YUV_SHIFT)) >> (RGB2YUV_SHIFT+1); |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1033 dstV[i]= (RV*r + GV*g + BV*b + (257<<RGB2YUV_SHIFT)) >> (RGB2YUV_SHIFT+1); |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1034 } |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1035 } |
24954ec81529
Partial (low bits ignored, no direct transcoding into other RGB formats) support
kostya
parents:
29278
diff
changeset
|
1036 |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1037 #define BGR2Y(type, name, shr, shg, shb, maskr, maskg, maskb, RY, GY, BY, S)\ |
31113 | 1038 static inline void name(uint8_t *dst, const uint8_t *src, long width, uint32_t *unused)\ |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1039 {\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1040 int i;\ |
29481 | 1041 for (i=0; i<width; i++) {\ |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1042 int b= (((const type*)src)[i]>>shb)&maskb;\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1043 int g= (((const type*)src)[i]>>shg)&maskg;\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1044 int r= (((const type*)src)[i]>>shr)&maskr;\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1045 \ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1046 dst[i]= (((RY)*r + (GY)*g + (BY)*b + (33<<((S)-1)))>>(S));\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1047 }\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1048 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1049 |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1050 BGR2Y(uint32_t, bgr32ToY,16, 0, 0, 0x00FF, 0xFF00, 0x00FF, RY<< 8, GY , BY<< 8, RGB2YUV_SHIFT+8) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1051 BGR2Y(uint32_t, rgb32ToY, 0, 0,16, 0x00FF, 0xFF00, 0x00FF, RY<< 8, GY , BY<< 8, RGB2YUV_SHIFT+8) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1052 BGR2Y(uint16_t, bgr16ToY, 0, 0, 0, 0x001F, 0x07E0, 0xF800, RY<<11, GY<<5, BY , RGB2YUV_SHIFT+8) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1053 BGR2Y(uint16_t, bgr15ToY, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, RY<<10, GY<<5, BY , RGB2YUV_SHIFT+7) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1054 BGR2Y(uint16_t, rgb16ToY, 0, 0, 0, 0xF800, 0x07E0, 0x001F, RY , GY<<5, BY<<11, RGB2YUV_SHIFT+8) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1055 BGR2Y(uint16_t, rgb15ToY, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, RY , GY<<5, BY<<10, RGB2YUV_SHIFT+7) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1056 |
31113 | 1057 static inline void abgrToA(uint8_t *dst, const uint8_t *src, long width, uint32_t *unused) |
29481 | 1058 { |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1059 int i; |
29481 | 1060 for (i=0; i<width; i++) { |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1061 dst[i]= src[4*i]; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1062 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1063 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1064 |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1065 #define BGR2UV(type, name, shr, shg, shb, maska, maskr, maskg, maskb, RU, GU, BU, RV, GV, BV, S)\ |
31113 | 1066 static inline void name(uint8_t *dstU, uint8_t *dstV, const uint8_t *src, const uint8_t *dummy, long width, uint32_t *unused)\ |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1067 {\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1068 int i;\ |
29481 | 1069 for (i=0; i<width; i++) {\ |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1070 int b= (((const type*)src)[i]&maskb)>>shb;\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1071 int g= (((const type*)src)[i]&maskg)>>shg;\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1072 int r= (((const type*)src)[i]&maskr)>>shr;\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1073 \ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1074 dstU[i]= ((RU)*r + (GU)*g + (BU)*b + (257<<((S)-1)))>>(S);\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1075 dstV[i]= ((RV)*r + (GV)*g + (BV)*b + (257<<((S)-1)))>>(S);\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1076 }\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1077 }\ |
31113 | 1078 static inline void name ## _half(uint8_t *dstU, uint8_t *dstV, const uint8_t *src, const uint8_t *dummy, long width, uint32_t *unused)\ |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1079 {\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1080 int i;\ |
29481 | 1081 for (i=0; i<width; i++) {\ |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1082 int pix0= ((const type*)src)[2*i+0];\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1083 int pix1= ((const type*)src)[2*i+1];\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1084 int g= (pix0&~(maskr|maskb))+(pix1&~(maskr|maskb));\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1085 int b= ((pix0+pix1-g)&(maskb|(2*maskb)))>>shb;\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1086 int r= ((pix0+pix1-g)&(maskr|(2*maskr)))>>shr;\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1087 g&= maskg|(2*maskg);\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1088 \ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1089 g>>=shg;\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1090 \ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1091 dstU[i]= ((RU)*r + (GU)*g + (BU)*b + (257<<(S)))>>((S)+1);\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1092 dstV[i]= ((RV)*r + (GV)*g + (BV)*b + (257<<(S)))>>((S)+1);\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1093 }\ |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1094 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1095 |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1096 BGR2UV(uint32_t, bgr32ToUV,16, 0, 0, 0xFF000000, 0xFF0000, 0xFF00, 0x00FF, RU<< 8, GU , BU<< 8, RV<< 8, GV , BV<< 8, RGB2YUV_SHIFT+8) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1097 BGR2UV(uint32_t, rgb32ToUV, 0, 0,16, 0xFF000000, 0x00FF, 0xFF00, 0xFF0000, RU<< 8, GU , BU<< 8, RV<< 8, GV , BV<< 8, RGB2YUV_SHIFT+8) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1098 BGR2UV(uint16_t, bgr16ToUV, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, RU<<11, GU<<5, BU , RV<<11, GV<<5, BV , RGB2YUV_SHIFT+8) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1099 BGR2UV(uint16_t, bgr15ToUV, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, RU<<10, GU<<5, BU , RV<<10, GV<<5, BV , RGB2YUV_SHIFT+7) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1100 BGR2UV(uint16_t, rgb16ToUV, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, RU , GU<<5, BU<<11, RV , GV<<5, BV<<11, RGB2YUV_SHIFT+8) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1101 BGR2UV(uint16_t, rgb15ToUV, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, RU , GU<<5, BU<<10, RV , GV<<5, BV<<10, RGB2YUV_SHIFT+7) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1102 |
31113 | 1103 static inline void palToY(uint8_t *dst, const uint8_t *src, long width, uint32_t *pal) |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1104 { |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1105 int i; |
29481 | 1106 for (i=0; i<width; i++) { |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1107 int d= src[i]; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1108 |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1109 dst[i]= pal[d] & 0xFF; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1110 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1111 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1112 |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1113 static inline void palToUV(uint8_t *dstU, uint8_t *dstV, |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1114 const uint8_t *src1, const uint8_t *src2, |
31113 | 1115 long width, uint32_t *pal) |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1116 { |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1117 int i; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1118 assert(src1 == src2); |
29481 | 1119 for (i=0; i<width; i++) { |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1120 int p= pal[src1[i]]; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1121 |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1122 dstU[i]= p>>8; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1123 dstV[i]= p>>16; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1124 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1125 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1126 |
31113 | 1127 static inline void monowhite2Y(uint8_t *dst, const uint8_t *src, long width, uint32_t *unused) |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1128 { |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1129 int i, j; |
29481 | 1130 for (i=0; i<width/8; i++) { |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1131 int d= ~src[i]; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1132 for(j=0; j<8; j++) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1133 dst[8*i+j]= ((d>>(7-j))&1)*255; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1134 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1135 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1136 |
31113 | 1137 static inline void monoblack2Y(uint8_t *dst, const uint8_t *src, long width, uint32_t *unused) |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1138 { |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1139 int i, j; |
29481 | 1140 for (i=0; i<width/8; i++) { |
29278
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1141 int d= src[i]; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1142 for(j=0; j<8; j++) |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1143 dst[8*i+j]= ((d>>(7-j))&1)*255; |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1144 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1145 } |
fdf257026cf0
Move colorspace conversion functions implemented in pure C from template
kostya
parents:
29274
diff
changeset
|
1146 |
29109 | 1147 //Note: we have C, MMX, MMX2, 3DNOW versions, there is no 3DNOW+MMX2 one |
18861 | 1148 //Plain C versions |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
1149 #if (!HAVE_MMX && !HAVE_ALTIVEC) || CONFIG_RUNTIME_CPUDETECT |
18861 | 1150 #define COMPILE_C |
1151 #endif | |
1152 | |
28276 | 1153 #if ARCH_PPC |
30827
5b013ed452fb
Fix compilation on powerpc with --disable-altivec
siretart
parents:
30814
diff
changeset
|
1154 #if HAVE_ALTIVEC |
18861 | 1155 #define COMPILE_ALTIVEC |
28315 | 1156 #endif |
28159
8f2d9ed4929d
consistency cosmetics: Rename POWERPC identifiers to PPC.
diego
parents:
27803
diff
changeset
|
1157 #endif //ARCH_PPC |
18861 | 1158 |
28276 | 1159 #if ARCH_X86 |
1160 | |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
1161 #if (HAVE_MMX && !HAVE_AMD3DNOW && !HAVE_MMX2) || CONFIG_RUNTIME_CPUDETECT |
18861 | 1162 #define COMPILE_MMX |
1163 #endif | |
1164 | |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
1165 #if HAVE_MMX2 || CONFIG_RUNTIME_CPUDETECT |
18861 | 1166 #define COMPILE_MMX2 |
1167 #endif | |
1168 | |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
1169 #if (HAVE_AMD3DNOW && !HAVE_MMX2) || CONFIG_RUNTIME_CPUDETECT |
18861 | 1170 #define COMPILE_3DNOW |
1171 #endif | |
28315 | 1172 #endif //ARCH_X86 |
18861 | 1173 |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1174 #define COMPILE_TEMPLATE_MMX 0 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1175 #define COMPILE_TEMPLATE_MMX2 0 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1176 #define COMPILE_TEMPLATE_AMD3DNOW 0 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1177 #define COMPILE_TEMPLATE_ALTIVEC 0 |
18861 | 1178 |
1179 #ifdef COMPILE_C | |
1180 #define RENAME(a) a ## _C | |
1181 #include "swscale_template.c" | |
1182 #endif | |
1183 | |
1184 #ifdef COMPILE_ALTIVEC | |
1185 #undef RENAME | |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1186 #undef COMPILE_TEMPLATE_ALTIVEC |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1187 #define COMPILE_TEMPLATE_ALTIVEC 1 |
18861 | 1188 #define RENAME(a) a ## _altivec |
1189 #include "swscale_template.c" | |
1190 #endif | |
1191 | |
28276 | 1192 #if ARCH_X86 |
18861 | 1193 |
1194 //MMX versions | |
1195 #ifdef COMPILE_MMX | |
1196 #undef RENAME | |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1197 #undef COMPILE_TEMPLATE_MMX |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1198 #undef COMPILE_TEMPLATE_MMX2 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1199 #undef COMPILE_TEMPLATE_AMD3DNOW |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1200 #define COMPILE_TEMPLATE_MMX 1 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1201 #define COMPILE_TEMPLATE_MMX2 0 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1202 #define COMPILE_TEMPLATE_AMD3DNOW 0 |
18861 | 1203 #define RENAME(a) a ## _MMX |
1204 #include "swscale_template.c" | |
1205 #endif | |
1206 | |
1207 //MMX2 versions | |
1208 #ifdef COMPILE_MMX2 | |
1209 #undef RENAME | |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1210 #undef COMPILE_TEMPLATE_MMX |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1211 #undef COMPILE_TEMPLATE_MMX2 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1212 #undef COMPILE_TEMPLATE_AMD3DNOW |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1213 #define COMPILE_TEMPLATE_MMX 1 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1214 #define COMPILE_TEMPLATE_MMX2 1 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1215 #define COMPILE_TEMPLATE_AMD3DNOW 0 |
18861 | 1216 #define RENAME(a) a ## _MMX2 |
1217 #include "swscale_template.c" | |
1218 #endif | |
1219 | |
1220 //3DNOW versions | |
1221 #ifdef COMPILE_3DNOW | |
1222 #undef RENAME | |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1223 #undef COMPILE_TEMPLATE_MMX |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1224 #undef COMPILE_TEMPLATE_MMX2 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1225 #undef COMPILE_TEMPLATE_AMD3DNOW |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1226 #define COMPILE_TEMPLATE_MMX 1 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1227 #define COMPILE_TEMPLATE_MMX2 0 |
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1228 #define COMPILE_TEMPLATE_AMD3DNOW 1 |
18861 | 1229 #define RENAME(a) a ## _3DNow |
1230 #include "swscale_template.c" | |
1231 #endif | |
1232 | |
28315 | 1233 #endif //ARCH_X86 |
18861 | 1234 |
30369
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1235 SwsFunc ff_getSwsFunc(SwsContext *c) |
29104 | 1236 { |
29348
1ee2b495f09b
AltiVec code and runtime cpudetect do not require CONFIG_GPL.
diego
parents:
29347
diff
changeset
|
1237 #if CONFIG_RUNTIME_CPUDETECT |
29105
9502a8895e77
swscale: Use function pointers for swScale functions.
ramiro
parents:
29104
diff
changeset
|
1238 int flags = c->flags; |
23129 | 1239 |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
1240 #if ARCH_X86 |
25801 | 1241 // ordered per speed fastest first |
29104 | 1242 if (flags & SWS_CPU_CAPS_MMX2) { |
29105
9502a8895e77
swscale: Use function pointers for swScale functions.
ramiro
parents:
29104
diff
changeset
|
1243 sws_init_swScale_MMX2(c); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1244 return swScale_MMX2; |
29104 | 1245 } else if (flags & SWS_CPU_CAPS_3DNOW) { |
29105
9502a8895e77
swscale: Use function pointers for swScale functions.
ramiro
parents:
29104
diff
changeset
|
1246 sws_init_swScale_3DNow(c); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1247 return swScale_3DNow; |
29104 | 1248 } else if (flags & SWS_CPU_CAPS_MMX) { |
29105
9502a8895e77
swscale: Use function pointers for swScale functions.
ramiro
parents:
29104
diff
changeset
|
1249 sws_init_swScale_MMX(c); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1250 return swScale_MMX; |
30292 | 1251 } else { |
1252 sws_init_swScale_C(c); | |
1253 return swScale_C; | |
29104 | 1254 } |
30292 | 1255 |
18861 | 1256 #else |
30912
f91ad62a2281
AltiVec implies a PPC CPU, so there is no need to check for both.
diego
parents:
30895
diff
changeset
|
1257 #ifdef COMPILE_ALTIVEC |
29104 | 1258 if (flags & SWS_CPU_CAPS_ALTIVEC) { |
29105
9502a8895e77
swscale: Use function pointers for swScale functions.
ramiro
parents:
29104
diff
changeset
|
1259 sws_init_swScale_altivec(c); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1260 return swScale_altivec; |
30292 | 1261 } else { |
1262 sws_init_swScale_C(c); | |
1263 return swScale_C; | |
29104 | 1264 } |
18861 | 1265 #endif |
30292 | 1266 sws_init_swScale_C(c); |
1267 return swScale_C; | |
30923
0be6ed163321
libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents:
30912
diff
changeset
|
1268 #endif /* ARCH_X86 */ |
29114
06540eb5ef6a
Rename RUNTIME_CPUDETECT to CONFIG_RUNTIME_CPUDETECT and always define it.
ramiro
parents:
29109
diff
changeset
|
1269 #else //CONFIG_RUNTIME_CPUDETECT |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1270 #if COMPILE_TEMPLATE_MMX2 |
29105
9502a8895e77
swscale: Use function pointers for swScale functions.
ramiro
parents:
29104
diff
changeset
|
1271 sws_init_swScale_MMX2(c); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1272 return swScale_MMX2; |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1273 #elif COMPILE_TEMPLATE_AMD3DNOW |
29105
9502a8895e77
swscale: Use function pointers for swScale functions.
ramiro
parents:
29104
diff
changeset
|
1274 sws_init_swScale_3DNow(c); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1275 return swScale_3DNow; |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1276 #elif COMPILE_TEMPLATE_MMX |
29105
9502a8895e77
swscale: Use function pointers for swScale functions.
ramiro
parents:
29104
diff
changeset
|
1277 sws_init_swScale_MMX(c); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1278 return swScale_MMX; |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1279 #elif COMPILE_TEMPLATE_ALTIVEC |
29105
9502a8895e77
swscale: Use function pointers for swScale functions.
ramiro
parents:
29104
diff
changeset
|
1280 sws_init_swScale_altivec(c); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1281 return swScale_altivec; |
30292 | 1282 #else |
1283 sws_init_swScale_C(c); | |
1284 return swScale_C; | |
30289
2961ce981a2b
Factorize the code which calls the non optimized C functions in
stefano
parents:
30288
diff
changeset
|
1285 #endif |
2961ce981a2b
Factorize the code which calls the non optimized C functions in
stefano
parents:
30288
diff
changeset
|
1286 #endif //!CONFIG_RUNTIME_CPUDETECT |
18861 | 1287 } |
1288 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1289 static int planarToNv12Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1290 int srcSliceH, uint8_t* dstParam[], int dstStride[]) |
1291 { | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1292 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
|
1293 /* Copy Y plane */ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1294 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
|
1295 memcpy(dst, src[0], srcSliceH*dstStride[0]); |
29481 | 1296 else { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1297 int i; |
29103
06c79db43cd8
swscale: Add const to some swScale functions' parameters.
ramiro
parents:
29013
diff
changeset
|
1298 const uint8_t *srcPtr= src[0]; |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1299 uint8_t *dstPtr= dst; |
29481 | 1300 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
|
1301 memcpy(dstPtr, srcPtr, c->srcW); |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1302 srcPtr+= srcStride[0]; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1303 dstPtr+= dstStride[0]; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1304 } |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1305 } |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1306 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
|
1307 if (c->dstFormat == PIX_FMT_NV12) |
25750 | 1308 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
|
1309 else |
25750 | 1310 interleaveBytes(src[2], src[1], dst, c->srcW/2, srcSliceH/2, srcStride[2], srcStride[1], dstStride[0]); |
18861 | 1311 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1312 return srcSliceH; |
18861 | 1313 } |
1314 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1315 static int planarToYuy2Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1316 int srcSliceH, uint8_t* dstParam[], int dstStride[]) |
1317 { | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1318 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY; |
18861 | 1319 |
25750 | 1320 yv12toyuy2(src[0], src[1], src[2], dst, c->srcW, srcSliceH, srcStride[0], srcStride[1], dstStride[0]); |
18861 | 1321 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1322 return srcSliceH; |
18861 | 1323 } |
1324 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1325 static int planarToUyvyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1326 int srcSliceH, uint8_t* dstParam[], int dstStride[]) |
1327 { | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1328 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY; |
18861 | 1329 |
25750 | 1330 yv12touyvy(src[0], src[1], src[2], dst, c->srcW, srcSliceH, srcStride[0], srcStride[1], dstStride[0]); |
18861 | 1331 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1332 return srcSliceH; |
18861 | 1333 } |
1334 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1335 static int yuv422pToYuy2Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1336 int srcSliceH, uint8_t* dstParam[], int dstStride[]) |
1337 { | |
27495 | 1338 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY; |
1339 | |
1340 yuv422ptoyuy2(src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0]); | |
1341 | |
1342 return srcSliceH; | |
1343 } | |
1344 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1345 static int yuv422pToUyvyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1346 int srcSliceH, uint8_t* dstParam[], int dstStride[]) |
1347 { | |
27495 | 1348 uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY; |
1349 | |
1350 yuv422ptouyvy(src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0]); | |
1351 | |
1352 return srcSliceH; | |
1353 } | |
1354 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1355 static int yuyvToYuv420Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1356 int srcSliceH, uint8_t* dstParam[], int dstStride[]) |
1357 { | |
28962 | 1358 uint8_t *ydst=dstParam[0] + dstStride[0]*srcSliceY; |
1359 uint8_t *udst=dstParam[1] + dstStride[1]*srcSliceY/2; | |
1360 uint8_t *vdst=dstParam[2] + dstStride[2]*srcSliceY/2; | |
1361 | |
1362 yuyvtoyuv420(ydst, udst, vdst, src[0], c->srcW, srcSliceH, dstStride[0], dstStride[1], srcStride[0]); | |
1363 | |
29013
fa95462d62ca
Adds "YUYV422 to YUVA420P" and "UYVY422 to YUVA420P" unscaled convertion
sdrik
parents:
29012
diff
changeset
|
1364 if (dstParam[3]) |
fa95462d62ca
Adds "YUYV422 to YUVA420P" and "UYVY422 to YUVA420P" unscaled convertion
sdrik
parents:
29012
diff
changeset
|
1365 fillPlane(dstParam[3], dstStride[3], c->srcW, srcSliceH, srcSliceY, 255); |
fa95462d62ca
Adds "YUYV422 to YUVA420P" and "UYVY422 to YUVA420P" unscaled convertion
sdrik
parents:
29012
diff
changeset
|
1366 |
28962 | 1367 return srcSliceH; |
1368 } | |
1369 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1370 static int yuyvToYuv422Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1371 int srcSliceH, uint8_t* dstParam[], int dstStride[]) |
1372 { | |
28962 | 1373 uint8_t *ydst=dstParam[0] + dstStride[0]*srcSliceY; |
28967 | 1374 uint8_t *udst=dstParam[1] + dstStride[1]*srcSliceY; |
1375 uint8_t *vdst=dstParam[2] + dstStride[2]*srcSliceY; | |
28962 | 1376 |
1377 yuyvtoyuv422(ydst, udst, vdst, src[0], c->srcW, srcSliceH, dstStride[0], dstStride[1], srcStride[0]); | |
1378 | |
1379 return srcSliceH; | |
1380 } | |
1381 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1382 static int uyvyToYuv420Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1383 int srcSliceH, uint8_t* dstParam[], int dstStride[]) |
1384 { | |
28962 | 1385 uint8_t *ydst=dstParam[0] + dstStride[0]*srcSliceY; |
1386 uint8_t *udst=dstParam[1] + dstStride[1]*srcSliceY/2; | |
1387 uint8_t *vdst=dstParam[2] + dstStride[2]*srcSliceY/2; | |
1388 | |
1389 uyvytoyuv420(ydst, udst, vdst, src[0], c->srcW, srcSliceH, dstStride[0], dstStride[1], srcStride[0]); | |
1390 | |
29013
fa95462d62ca
Adds "YUYV422 to YUVA420P" and "UYVY422 to YUVA420P" unscaled convertion
sdrik
parents:
29012
diff
changeset
|
1391 if (dstParam[3]) |
fa95462d62ca
Adds "YUYV422 to YUVA420P" and "UYVY422 to YUVA420P" unscaled convertion
sdrik
parents:
29012
diff
changeset
|
1392 fillPlane(dstParam[3], dstStride[3], c->srcW, srcSliceH, srcSliceY, 255); |
fa95462d62ca
Adds "YUYV422 to YUVA420P" and "UYVY422 to YUVA420P" unscaled convertion
sdrik
parents:
29012
diff
changeset
|
1393 |
28962 | 1394 return srcSliceH; |
1395 } | |
1396 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1397 static int uyvyToYuv422Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1398 int srcSliceH, uint8_t* dstParam[], int dstStride[]) |
1399 { | |
28962 | 1400 uint8_t *ydst=dstParam[0] + dstStride[0]*srcSliceY; |
28967 | 1401 uint8_t *udst=dstParam[1] + dstStride[1]*srcSliceY; |
1402 uint8_t *vdst=dstParam[2] + dstStride[2]*srcSliceY; | |
28962 | 1403 |
1404 uyvytoyuv422(ydst, udst, vdst, src[0], c->srcW, srcSliceH, dstStride[0], dstStride[1], srcStride[0]); | |
1405 | |
1406 return srcSliceH; | |
1407 } | |
1408 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1409 static int palToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
30425 | 1410 int srcSliceH, uint8_t* dst[], int dstStride[]) |
29481 | 1411 { |
27701
5916162c1bd3
Change variable types from int to enum PixelFormat.
cehoyos
parents:
27699
diff
changeset
|
1412 const enum PixelFormat srcFormat= c->srcFormat; |
5916162c1bd3
Change variable types from int to enum PixelFormat.
cehoyos
parents:
27699
diff
changeset
|
1413 const enum PixelFormat dstFormat= c->dstFormat; |
27698 | 1414 void (*conv)(const uint8_t *src, uint8_t *dst, long num_pixels, |
1415 const uint8_t *palette)=NULL; | |
1416 int i; | |
1417 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; | |
30264
1032ff2e83f1
Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents:
30262
diff
changeset
|
1418 const uint8_t *srcPtr= src[0]; |
27698 | 1419 |
30318
862c1c9d733b
Factorize error message logging, log it if the converter cannot be
stefano
parents:
30317
diff
changeset
|
1420 if (usePal(srcFormat)) { |
30317 | 1421 switch (dstFormat) { |
31235
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1422 case PIX_FMT_RGB32 : conv = sws_convertPalette8ToPacked32; break; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1423 case PIX_FMT_BGR32 : conv = sws_convertPalette8ToPacked32; break; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1424 case PIX_FMT_BGR32_1: conv = sws_convertPalette8ToPacked32; break; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1425 case PIX_FMT_RGB32_1: conv = sws_convertPalette8ToPacked32; break; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1426 case PIX_FMT_RGB24 : conv = sws_convertPalette8ToPacked24; break; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1427 case PIX_FMT_BGR24 : conv = sws_convertPalette8ToPacked24; break; |
30317 | 1428 } |
30316
93e7fdf664a7
Make the pal2rgbWrapper set and use the converter in pal2rgbWrapper
stefano
parents:
30315
diff
changeset
|
1429 } |
93e7fdf664a7
Make the pal2rgbWrapper set and use the converter in pal2rgbWrapper
stefano
parents:
30315
diff
changeset
|
1430 |
30318
862c1c9d733b
Factorize error message logging, log it if the converter cannot be
stefano
parents:
30317
diff
changeset
|
1431 if (!conv) |
862c1c9d733b
Factorize error message logging, log it if the converter cannot be
stefano
parents:
30317
diff
changeset
|
1432 av_log(c, AV_LOG_ERROR, "internal error %s -> %s converter\n", |
862c1c9d733b
Factorize error message logging, log it if the converter cannot be
stefano
parents:
30317
diff
changeset
|
1433 sws_format_name(srcFormat), sws_format_name(dstFormat)); |
862c1c9d733b
Factorize error message logging, log it if the converter cannot be
stefano
parents:
30317
diff
changeset
|
1434 else { |
30317 | 1435 for (i=0; i<srcSliceH; i++) { |
1436 conv(srcPtr, dstPtr, c->srcW, (uint8_t *) c->pal_rgb); | |
1437 srcPtr+= srcStride[0]; | |
1438 dstPtr+= dstStride[0]; | |
1439 } | |
30318
862c1c9d733b
Factorize error message logging, log it if the converter cannot be
stefano
parents:
30317
diff
changeset
|
1440 } |
27698 | 1441 |
1442 return srcSliceH; | |
1443 } | |
1444 | |
30459
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1445 #define isRGBA32(x) ( \ |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1446 (x) == PIX_FMT_ARGB \ |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1447 || (x) == PIX_FMT_RGBA \ |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1448 || (x) == PIX_FMT_BGRA \ |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1449 || (x) == PIX_FMT_ABGR \ |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1450 ) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1451 |
27490 | 1452 /* {RGB,BGR}{15,16,24,32,32_1} -> {RGB,BGR}{15,16,24,32} */ |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1453 static int rgbToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
30425 | 1454 int srcSliceH, uint8_t* dst[], int dstStride[]) |
29481 | 1455 { |
27695
9cf6c7c5c7cd
Change variable types from int to enum PixelFormat.
cehoyos
parents:
27686
diff
changeset
|
1456 const enum PixelFormat srcFormat= c->srcFormat; |
9cf6c7c5c7cd
Change variable types from int to enum PixelFormat.
cehoyos
parents:
27686
diff
changeset
|
1457 const enum PixelFormat dstFormat= c->dstFormat; |
30377
2eea1f09e2c5
Use av_get_bits_per_pixel() for computing the bits per pixel of the
stefano
parents:
30371
diff
changeset
|
1458 const int srcBpp= (c->srcFormatBpp + 7) >> 3; |
2eea1f09e2c5
Use av_get_bits_per_pixel() for computing the bits per pixel of the
stefano
parents:
30371
diff
changeset
|
1459 const int dstBpp= (c->dstFormatBpp + 7) >> 3; |
2eea1f09e2c5
Use av_get_bits_per_pixel() for computing the bits per pixel of the
stefano
parents:
30371
diff
changeset
|
1460 const int srcId= c->srcFormatBpp >> 2; /* 1:0, 4:1, 8:2, 15:3, 16:4, 24:6, 32:8 */ |
2eea1f09e2c5
Use av_get_bits_per_pixel() for computing the bits per pixel of the
stefano
parents:
30371
diff
changeset
|
1461 const int dstId= c->dstFormatBpp >> 2; |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1462 void (*conv)(const uint8_t *src, uint8_t *dst, long src_size)=NULL; |
18861 | 1463 |
30459
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1464 #define CONV_IS(src, dst) (srcFormat == PIX_FMT_##src && dstFormat == PIX_FMT_##dst) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1465 |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1466 if (isRGBA32(srcFormat) && isRGBA32(dstFormat)) { |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1467 if ( CONV_IS(ABGR, RGBA) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1468 || CONV_IS(ARGB, BGRA) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1469 || CONV_IS(BGRA, ARGB) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1470 || CONV_IS(RGBA, ABGR)) conv = shuffle_bytes_3210; |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1471 else if (CONV_IS(ABGR, ARGB) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1472 || CONV_IS(ARGB, ABGR)) conv = shuffle_bytes_0321; |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1473 else if (CONV_IS(ABGR, BGRA) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1474 || CONV_IS(ARGB, RGBA)) conv = shuffle_bytes_1230; |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1475 else if (CONV_IS(BGRA, RGBA) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1476 || CONV_IS(RGBA, BGRA)) conv = shuffle_bytes_2103; |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1477 else if (CONV_IS(BGRA, ABGR) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1478 || CONV_IS(RGBA, ARGB)) conv = shuffle_bytes_3012; |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1479 } else |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1480 /* BGR -> BGR */ |
30391
2a33c1c37e6b
Rename isRGB() and isBGR() as their meaning is confusing.
michael
parents:
30389
diff
changeset
|
1481 if ( (isBGRinInt(srcFormat) && isBGRinInt(dstFormat)) |
2a33c1c37e6b
Rename isRGB() and isBGR() as their meaning is confusing.
michael
parents:
30389
diff
changeset
|
1482 || (isRGBinInt(srcFormat) && isRGBinInt(dstFormat))) { |
29481 | 1483 switch(srcId | (dstId<<4)) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1484 case 0x34: conv= rgb16to15; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1485 case 0x36: conv= rgb24to15; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1486 case 0x38: conv= rgb32to15; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1487 case 0x43: conv= rgb15to16; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1488 case 0x46: conv= rgb24to16; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1489 case 0x48: conv= rgb32to16; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1490 case 0x63: conv= rgb15to24; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1491 case 0x64: conv= rgb16to24; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1492 case 0x68: conv= rgb32to24; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1493 case 0x83: conv= rgb15to32; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1494 case 0x84: conv= rgb16to32; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1495 case 0x86: conv= rgb24to32; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1496 } |
30391
2a33c1c37e6b
Rename isRGB() and isBGR() as their meaning is confusing.
michael
parents:
30389
diff
changeset
|
1497 } else if ( (isBGRinInt(srcFormat) && isRGBinInt(dstFormat)) |
2a33c1c37e6b
Rename isRGB() and isBGR() as their meaning is confusing.
michael
parents:
30389
diff
changeset
|
1498 || (isRGBinInt(srcFormat) && isBGRinInt(dstFormat))) { |
29481 | 1499 switch(srcId | (dstId<<4)) { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1500 case 0x33: conv= rgb15tobgr15; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1501 case 0x34: conv= rgb16tobgr15; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1502 case 0x36: conv= rgb24tobgr15; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1503 case 0x38: conv= rgb32tobgr15; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1504 case 0x43: conv= rgb15tobgr16; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1505 case 0x44: conv= rgb16tobgr16; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1506 case 0x46: conv= rgb24tobgr16; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1507 case 0x48: conv= rgb32tobgr16; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1508 case 0x63: conv= rgb15tobgr24; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1509 case 0x64: conv= rgb16tobgr24; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1510 case 0x66: conv= rgb24tobgr24; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1511 case 0x68: conv= rgb32tobgr24; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1512 case 0x83: conv= rgb15tobgr32; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1513 case 0x84: conv= rgb16tobgr32; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1514 case 0x86: conv= rgb24tobgr32; break; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1515 } |
30314
a526bb14dea7
Factorize error message logging in rgb2rgbWrapper().
stefano
parents:
30308
diff
changeset
|
1516 } |
a526bb14dea7
Factorize error message logging in rgb2rgbWrapper().
stefano
parents:
30308
diff
changeset
|
1517 |
a526bb14dea7
Factorize error message logging in rgb2rgbWrapper().
stefano
parents:
30308
diff
changeset
|
1518 if (!conv) { |
26175
b62cfba8df31
Remove redundant swScaler: output from places where av_log()
diego
parents:
26151
diff
changeset
|
1519 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
|
1520 sws_format_name(srcFormat), sws_format_name(dstFormat)); |
30314
a526bb14dea7
Factorize error message logging in rgb2rgbWrapper().
stefano
parents:
30308
diff
changeset
|
1521 } else { |
30264
1032ff2e83f1
Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents:
30262
diff
changeset
|
1522 const uint8_t *srcPtr= src[0]; |
30459
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1523 uint8_t *dstPtr= dst[0]; |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1524 if ((srcFormat == PIX_FMT_RGB32_1 || srcFormat == PIX_FMT_BGR32_1) && !isRGBA32(dstFormat)) |
27490 | 1525 srcPtr += ALT32_CORR; |
1526 | |
30459
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1527 if ((dstFormat == PIX_FMT_RGB32_1 || dstFormat == PIX_FMT_BGR32_1) && !isRGBA32(srcFormat)) |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1528 dstPtr += ALT32_CORR; |
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1529 |
25439
17098467fc9b
Make sure strides have positive values before converting.
benoit
parents:
24607
diff
changeset
|
1530 if (dstStride[0]*srcBpp == srcStride[0]*dstBpp && srcStride[0] > 0) |
30459
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1531 conv(srcPtr, dstPtr + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); |
29481 | 1532 else { |
23189 | 1533 int i; |
30459
9bb2ebbb52be
Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents:
30425
diff
changeset
|
1534 dstPtr += dstStride[0]*srcSliceY; |
18861 | 1535 |
29481 | 1536 for (i=0; i<srcSliceH; i++) { |
23189 | 1537 conv(srcPtr, dstPtr, c->srcW*srcBpp); |
1538 srcPtr+= srcStride[0]; | |
1539 dstPtr+= dstStride[0]; | |
1540 } | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1541 } |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1542 } |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1543 return srcSliceH; |
18861 | 1544 } |
1545 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1546 static int bgr24ToYv12Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1547 int srcSliceH, uint8_t* dst[], int dstStride[]) |
1548 { | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1549 rgb24toyv12( |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1550 src[0], |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1551 dst[0]+ srcSliceY *dstStride[0], |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1552 dst[1]+(srcSliceY>>1)*dstStride[1], |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1553 dst[2]+(srcSliceY>>1)*dstStride[2], |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1554 c->srcW, srcSliceH, |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1555 dstStride[0], dstStride[1], srcStride[0]); |
29012
8273eda1388c
Fix some places where "non-alpha to YUVA420P" do not fill the alpha plane
sdrik
parents:
28996
diff
changeset
|
1556 if (dst[3]) |
8273eda1388c
Fix some places where "non-alpha to YUVA420P" do not fill the alpha plane
sdrik
parents:
28996
diff
changeset
|
1557 fillPlane(dst[3], dstStride[3], c->srcW, srcSliceH, srcSliceY, 255); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1558 return srcSliceH; |
18861 | 1559 } |
1560 | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1561 static int yvu9ToYv12Wrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
29481 | 1562 int srcSliceH, uint8_t* dst[], int dstStride[]) |
1563 { | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1564 int i; |
18861 | 1565 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1566 /* copy Y */ |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1567 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
|
1568 memcpy(dst[0]+ srcSliceY*dstStride[0], src[0], srcStride[0]*srcSliceH); |
29481 | 1569 else { |
30264
1032ff2e83f1
Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents:
30262
diff
changeset
|
1570 const uint8_t *srcPtr= src[0]; |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1571 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; |
18861 | 1572 |
29481 | 1573 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
|
1574 memcpy(dstPtr, srcPtr, c->srcW); |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1575 srcPtr+= srcStride[0]; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1576 dstPtr+= dstStride[0]; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1577 } |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1578 } |
18861 | 1579 |
29481 | 1580 if (c->dstFormat==PIX_FMT_YUV420P || c->dstFormat==PIX_FMT_YUVA420P) { |
29230 | 1581 planar2x(src[1], dst[1] + dstStride[1]*(srcSliceY >> 1), c->chrSrcW, |
1582 srcSliceH >> 2, srcStride[1], dstStride[1]); | |
1583 planar2x(src[2], dst[2] + dstStride[2]*(srcSliceY >> 1), c->chrSrcW, | |
1584 srcSliceH >> 2, srcStride[2], dstStride[2]); | |
29481 | 1585 } else { |
29230 | 1586 planar2x(src[1], dst[2] + dstStride[2]*(srcSliceY >> 1), c->chrSrcW, |
1587 srcSliceH >> 2, srcStride[1], dstStride[2]); | |
1588 planar2x(src[2], dst[1] + dstStride[1]*(srcSliceY >> 1), c->chrSrcW, | |
1589 srcSliceH >> 2, srcStride[2], dstStride[1]); | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1590 } |
29012
8273eda1388c
Fix some places where "non-alpha to YUVA420P" do not fill the alpha plane
sdrik
parents:
28996
diff
changeset
|
1591 if (dst[3]) |
8273eda1388c
Fix some places where "non-alpha to YUVA420P" do not fill the alpha plane
sdrik
parents:
28996
diff
changeset
|
1592 fillPlane(dst[3], dstStride[3], c->srcW, srcSliceH, srcSliceY, 255); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1593 return srcSliceH; |
18861 | 1594 } |
1595 | |
1596 /* unscaled copy like stuff (assumes nearly identical formats) */ | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1597 static int packedCopyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
30425 | 1598 int srcSliceH, uint8_t* dst[], int dstStride[]) |
27181 | 1599 { |
1600 if (dstStride[0]==srcStride[0] && srcStride[0] > 0) | |
1601 memcpy(dst[0] + dstStride[0]*srcSliceY, src[0], srcSliceH*dstStride[0]); | |
29481 | 1602 else { |
27181 | 1603 int i; |
30264
1032ff2e83f1
Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents:
30262
diff
changeset
|
1604 const uint8_t *srcPtr= src[0]; |
27181 | 1605 uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; |
1606 int length=0; | |
1607 | |
1608 /* universal length finder */ | |
1609 while(length+c->srcW <= FFABS(dstStride[0]) | |
1610 && 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
|
1611 assert(length!=0); |
27181 | 1612 |
29481 | 1613 for (i=0; i<srcSliceH; i++) { |
27181 | 1614 memcpy(dstPtr, srcPtr, length); |
1615 srcPtr+= srcStride[0]; | |
1616 dstPtr+= dstStride[0]; | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1617 } |
27181 | 1618 } |
27180
1a35c35a631e
Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents:
26917
diff
changeset
|
1619 return srcSliceH; |
1a35c35a631e
Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents:
26917
diff
changeset
|
1620 } |
27181 | 1621 |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1622 static int planarCopyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], int srcSliceY, |
30425 | 1623 int srcSliceH, uint8_t* dst[], int dstStride[]) |
27180
1a35c35a631e
Split simpleCopy into packedCopy and planarCopy. SoC Patch from Keiji Costantini
lu_zero
parents:
26917
diff
changeset
|
1624 { |
29175
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1625 int plane, i, j; |
29481 | 1626 for (plane=0; plane<4; plane++) { |
28977 | 1627 int length= (plane==0 || plane==3) ? c->srcW : -((-c->srcW )>>c->chrDstHSubSample); |
1628 int y= (plane==0 || plane==3) ? srcSliceY: -((-srcSliceY)>>c->chrDstVSubSample); | |
1629 int height= (plane==0 || plane==3) ? srcSliceH: -((-srcSliceH)>>c->chrDstVSubSample); | |
30264
1032ff2e83f1
Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents:
30262
diff
changeset
|
1630 const uint8_t *srcPtr= src[plane]; |
29175
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1631 uint8_t *dstPtr= dst[plane] + dstStride[plane]*y; |
27181 | 1632 |
28983
c187b93afdf1
Avoid crash on planarCopy to a destination without alpha.
reimar
parents:
28977
diff
changeset
|
1633 if (!dst[plane]) continue; |
28986
ced556e1595a
Fix planarCopy to ignore the GRAY8 "pseudo"-palette, fixes libavtest regression test.
reimar
parents:
28983
diff
changeset
|
1634 // ignore palette for GRAY8 |
ced556e1595a
Fix planarCopy to ignore the GRAY8 "pseudo"-palette, fixes libavtest regression test.
reimar
parents:
28983
diff
changeset
|
1635 if (plane == 1 && !dst[2]) continue; |
29481 | 1636 if (!src[plane] || (plane == 1 && !src[2])) { |
29175
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1637 if(is16BPS(c->dstFormat)) |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1638 length*=2; |
28977 | 1639 fillPlane(dst[plane], dstStride[plane], length, height, y, (plane==3) ? 255 : 128); |
29481 | 1640 } else { |
1641 if(is16BPS(c->srcFormat) && !is16BPS(c->dstFormat)) { | |
29175
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1642 if (!isBE(c->srcFormat)) srcPtr++; |
29481 | 1643 for (i=0; i<height; i++) { |
29175
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1644 for (j=0; j<length; j++) dstPtr[j] = srcPtr[j<<1]; |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1645 srcPtr+= srcStride[plane]; |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1646 dstPtr+= dstStride[plane]; |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1647 } |
29481 | 1648 } else if(!is16BPS(c->srcFormat) && is16BPS(c->dstFormat)) { |
1649 for (i=0; i<height; i++) { | |
1650 for (j=0; j<length; j++) { | |
29175
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1651 dstPtr[ j<<1 ] = srcPtr[j]; |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1652 dstPtr[(j<<1)+1] = srcPtr[j]; |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1653 } |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1654 srcPtr+= srcStride[plane]; |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1655 dstPtr+= dstStride[plane]; |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1656 } |
29481 | 1657 } else if(is16BPS(c->srcFormat) && is16BPS(c->dstFormat) |
1658 && isBE(c->srcFormat) != isBE(c->dstFormat)) { | |
1659 | |
1660 for (i=0; i<height; i++) { | |
29175
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1661 for (j=0; j<length; j++) |
30298
c37405b37538
Add a const qualifier in a cast, fix the gcc warning:
stefano
parents:
30296
diff
changeset
|
1662 ((uint16_t*)dstPtr)[j] = bswap_16(((const uint16_t*)srcPtr)[j]); |
29175
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1663 srcPtr+= srcStride[plane]; |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1664 dstPtr+= dstStride[plane]; |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1665 } |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1666 } else if (dstStride[plane]==srcStride[plane] && srcStride[plane] > 0) |
27181 | 1667 memcpy(dst[plane] + dstStride[plane]*y, src[plane], height*dstStride[plane]); |
29481 | 1668 else { |
29175
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1669 if(is16BPS(c->srcFormat) && is16BPS(c->dstFormat)) |
c8e33abc6488
Merge gray->gray converters into planarCopy(), this should also make planarCopy()
michael
parents:
29173
diff
changeset
|
1670 length*=2; |
29481 | 1671 for (i=0; i<height; i++) { |
27181 | 1672 memcpy(dstPtr, srcPtr, length); |
1673 srcPtr+= srcStride[plane]; | |
1674 dstPtr+= dstStride[plane]; | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1675 } |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1676 } |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1677 } |
27181 | 1678 } |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1679 return srcSliceH; |
18861 | 1680 } |
1681 | |
30369
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1682 int ff_hardcodedcpuflags(void) |
29481 | 1683 { |
30369
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1684 int flags = 0; |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1685 #if COMPILE_TEMPLATE_MMX2 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1686 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2; |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1687 #elif COMPILE_TEMPLATE_AMD3DNOW |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1688 flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_3DNOW; |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1689 #elif COMPILE_TEMPLATE_MMX |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1690 flags |= SWS_CPU_CAPS_MMX; |
29404
efbe0c7de351
Do not misuse HAVE_ defines. Introduce COMPILE_TEMPLATE_ defines and use them
ramiro
parents:
29397
diff
changeset
|
1691 #elif COMPILE_TEMPLATE_ALTIVEC |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1692 flags |= SWS_CPU_CAPS_ALTIVEC; |
28276 | 1693 #elif ARCH_BFIN |
23289
786823779b67
Blackfin optimized YUV420 to RGB CSC Color Space Converters.
gpoirier
parents:
23278
diff
changeset
|
1694 flags |= SWS_CPU_CAPS_BFIN; |
18861 | 1695 #endif |
30369
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1696 return flags; |
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1697 } |
18861 | 1698 |
30369
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1699 void ff_get_unscaled_swscale(SwsContext *c) |
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1700 { |
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1701 const enum PixelFormat srcFormat = c->srcFormat; |
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1702 const enum PixelFormat dstFormat = c->dstFormat; |
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1703 const int flags = c->flags; |
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1704 const int dstH = c->dstH; |
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1705 int needsDither; |
8c479cb29c7a
Split swscale.c into scaler code (swscale.c) and utility code (utils.c).
ramiro
parents:
30343
diff
changeset
|
1706 |
30393 | 1707 needsDither= isAnyRGB(dstFormat) |
30389
da75265e5b6f
Fix mis-computation of the needsDither variable erroneously introduced
stefano
parents:
30377
diff
changeset
|
1708 && c->dstFormatBpp < 24 |
30393 | 1709 && (c->dstFormatBpp < c->srcFormatBpp || (!isAnyRGB(srcFormat))); |
18861 | 1710 |
30371 | 1711 /* yv12_to_nv12 */ |
1712 if ((srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) && (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21)) { | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1713 c->swScale= planarToNv12Wrapper; |
30371 | 1714 } |
1715 /* yuv2bgr */ | |
30393 | 1716 if ((srcFormat==PIX_FMT_YUV420P || srcFormat==PIX_FMT_YUV422P || srcFormat==PIX_FMT_YUVA420P) && isAnyRGB(dstFormat) |
30371 | 1717 && !(flags & SWS_ACCURATE_RND) && !(dstH&1)) { |
1718 c->swScale= ff_yuv2rgb_get_func_ptr(c); | |
1719 } | |
23129 | 1720 |
30371 | 1721 if (srcFormat==PIX_FMT_YUV410P && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_BITEXACT)) { |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1722 c->swScale= yvu9ToYv12Wrapper; |
30371 | 1723 } |
18861 | 1724 |
30371 | 1725 /* bgr24toYV12 */ |
1726 if (srcFormat==PIX_FMT_BGR24 && (dstFormat==PIX_FMT_YUV420P || dstFormat==PIX_FMT_YUVA420P) && !(flags & SWS_ACCURATE_RND)) | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1727 c->swScale= bgr24ToYv12Wrapper; |
23129 | 1728 |
30371 | 1729 /* RGB/BGR -> RGB/BGR (no dither needed forms) */ |
30393 | 1730 if ( isAnyRGB(srcFormat) |
1731 && isAnyRGB(dstFormat) | |
30371 | 1732 && srcFormat != PIX_FMT_BGR8 && dstFormat != PIX_FMT_BGR8 |
1733 && srcFormat != PIX_FMT_RGB8 && dstFormat != PIX_FMT_RGB8 | |
1734 && srcFormat != PIX_FMT_BGR4 && dstFormat != PIX_FMT_BGR4 | |
1735 && srcFormat != PIX_FMT_RGB4 && dstFormat != PIX_FMT_RGB4 | |
1736 && srcFormat != PIX_FMT_BGR4_BYTE && dstFormat != PIX_FMT_BGR4_BYTE | |
1737 && srcFormat != PIX_FMT_RGB4_BYTE && dstFormat != PIX_FMT_RGB4_BYTE | |
1738 && srcFormat != PIX_FMT_MONOBLACK && dstFormat != PIX_FMT_MONOBLACK | |
1739 && srcFormat != PIX_FMT_MONOWHITE && dstFormat != PIX_FMT_MONOWHITE | |
1740 && srcFormat != PIX_FMT_RGB48LE && dstFormat != PIX_FMT_RGB48LE | |
1741 && srcFormat != PIX_FMT_RGB48BE && dstFormat != PIX_FMT_RGB48BE | |
1742 && (!needsDither || (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)))) | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1743 c->swScale= rgbToRgbWrapper; |
18861 | 1744 |
30371 | 1745 if ((usePal(srcFormat) && ( |
1746 dstFormat == PIX_FMT_RGB32 || | |
1747 dstFormat == PIX_FMT_RGB32_1 || | |
1748 dstFormat == PIX_FMT_RGB24 || | |
1749 dstFormat == PIX_FMT_BGR32 || | |
1750 dstFormat == PIX_FMT_BGR32_1 || | |
1751 dstFormat == PIX_FMT_BGR24))) | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1752 c->swScale= palToRgbWrapper; |
27698 | 1753 |
30371 | 1754 if (srcFormat == PIX_FMT_YUV422P) { |
1755 if (dstFormat == PIX_FMT_YUYV422) | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1756 c->swScale= yuv422pToYuy2Wrapper; |
30371 | 1757 else if (dstFormat == PIX_FMT_UYVY422) |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1758 c->swScale= yuv422pToUyvyWrapper; |
30371 | 1759 } |
27495 | 1760 |
30371 | 1761 /* LQ converters if -sws 0 or -sws 4*/ |
1762 if (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)) { | |
1763 /* yv12_to_yuy2 */ | |
1764 if (srcFormat == PIX_FMT_YUV420P || srcFormat == PIX_FMT_YUVA420P) { | |
1765 if (dstFormat == PIX_FMT_YUYV422) | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1766 c->swScale= planarToYuy2Wrapper; |
30371 | 1767 else if (dstFormat == PIX_FMT_UYVY422) |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1768 c->swScale= planarToUyvyWrapper; |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1769 } |
30371 | 1770 } |
1771 if(srcFormat == PIX_FMT_YUYV422 && (dstFormat == PIX_FMT_YUV420P || dstFormat == PIX_FMT_YUVA420P)) | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1772 c->swScale= yuyvToYuv420Wrapper; |
30371 | 1773 if(srcFormat == PIX_FMT_UYVY422 && (dstFormat == PIX_FMT_YUV420P || dstFormat == PIX_FMT_YUVA420P)) |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1774 c->swScale= uyvyToYuv420Wrapper; |
30371 | 1775 if(srcFormat == PIX_FMT_YUYV422 && dstFormat == PIX_FMT_YUV422P) |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1776 c->swScale= yuyvToYuv422Wrapper; |
30371 | 1777 if(srcFormat == PIX_FMT_UYVY422 && dstFormat == PIX_FMT_YUV422P) |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1778 c->swScale= uyvyToYuv422Wrapper; |
18861 | 1779 |
1780 #ifdef COMPILE_ALTIVEC | |
30371 | 1781 if ((c->flags & SWS_CPU_CAPS_ALTIVEC) && |
1782 !(c->flags & SWS_BITEXACT) && | |
1783 srcFormat == PIX_FMT_YUV420P) { | |
1784 // unscaled YV12 -> packed YUV, we want speed | |
1785 if (dstFormat == PIX_FMT_YUYV422) | |
1786 c->swScale= yv12toyuy2_unscaled_altivec; | |
1787 else if (dstFormat == PIX_FMT_UYVY422) | |
1788 c->swScale= yv12touyvy_unscaled_altivec; | |
1789 } | |
18861 | 1790 #endif |
1791 | |
30371 | 1792 /* simple copy */ |
1793 if ( srcFormat == dstFormat | |
1794 || (srcFormat == PIX_FMT_YUVA420P && dstFormat == PIX_FMT_YUV420P) | |
1795 || (srcFormat == PIX_FMT_YUV420P && dstFormat == PIX_FMT_YUVA420P) | |
1796 || (isPlanarYUV(srcFormat) && isGray(dstFormat)) | |
1797 || (isPlanarYUV(dstFormat) && isGray(srcFormat)) | |
1798 || (isGray(dstFormat) && isGray(srcFormat)) | |
1799 || (isPlanarYUV(srcFormat) && isPlanarYUV(dstFormat) | |
1800 && c->chrDstHSubSample == c->chrSrcHSubSample | |
1801 && c->chrDstVSubSample == c->chrSrcVSubSample | |
1802 && dstFormat != PIX_FMT_NV12 && dstFormat != PIX_FMT_NV21 | |
1803 && srcFormat != PIX_FMT_NV12 && srcFormat != PIX_FMT_NV21)) | |
1804 { | |
1805 if (isPacked(c->srcFormat)) | |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1806 c->swScale= packedCopyWrapper; |
30371 | 1807 else /* Planar YUV or gray */ |
30424
ef221b7526c5
Use a consistent convention for the names of the internal wrapper
stefano
parents:
30393
diff
changeset
|
1808 c->swScale= planarCopyWrapper; |
30371 | 1809 } |
28276 | 1810 #if ARCH_BFIN |
30371 | 1811 if (flags & SWS_CPU_CAPS_BFIN) |
1812 ff_bfin_get_unscaled_swscale (c); | |
23585
d3ae6979d3df
integrating ff_bfin_get_unscaled_swscale into the system
mhoffman
parents:
23536
diff
changeset
|
1813 #endif |
18861 | 1814 } |
1815 | |
30264
1032ff2e83f1
Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents:
30262
diff
changeset
|
1816 static void reset_ptr(const uint8_t* src[], int format) |
29481 | 1817 { |
29173
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1818 if(!isALPHA(format)) |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1819 src[3]=NULL; |
29481 | 1820 if(!isPlanarYUV(format)) { |
29173
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1821 src[3]=src[2]=NULL; |
30275
e5c5eccd8d84
Simplify reset_ptr(): employ usePal() macro rather than enumerating
stefano
parents:
30271
diff
changeset
|
1822 |
e5c5eccd8d84
Simplify reset_ptr(): employ usePal() macro rather than enumerating
stefano
parents:
30271
diff
changeset
|
1823 if (!usePal(format)) |
29173
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1824 src[1]= NULL; |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1825 } |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1826 } |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1827 |
18861 | 1828 /** |
25457 | 1829 * swscale wrapper, so we don't need to export the SwsContext. |
28316 | 1830 * Assumes planar YUV to be in YUV order instead of YVU. |
18861 | 1831 */ |
30339 | 1832 int sws_scale(SwsContext *c, const uint8_t* const src[], const int srcStride[], int srcSliceY, |
1833 int srcSliceH, uint8_t* const dst[], const int dstStride[]) | |
29481 | 1834 { |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1835 int i; |
30264
1032ff2e83f1
Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents:
30262
diff
changeset
|
1836 const uint8_t* src2[4]= {src[0], src[1], src[2], src[3]}; |
29173
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1837 uint8_t* dst2[4]= {dst[0], dst[1], dst[2], dst[3]}; |
27489 | 1838 |
30204
2b19714f79d2
Ignore 0-height slice in sws_scale, otherwise a final 0-height slice will
reimar
parents:
30194
diff
changeset
|
1839 // do not mess up sliceDir if we have a "trailing" 0-size slice |
2b19714f79d2
Ignore 0-height slice in sws_scale, otherwise a final 0-height slice will
reimar
parents:
30194
diff
changeset
|
1840 if (srcSliceH == 0) |
2b19714f79d2
Ignore 0-height slice in sws_scale, otherwise a final 0-height slice will
reimar
parents:
30194
diff
changeset
|
1841 return 0; |
2b19714f79d2
Ignore 0-height slice in sws_scale, otherwise a final 0-height slice will
reimar
parents:
30194
diff
changeset
|
1842 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1843 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
|
1844 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
|
1845 return 0; |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1846 } |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1847 if (c->sliceDir == 0) { |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1848 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
|
1849 } |
18861 | 1850 |
29481 | 1851 if (usePal(c->srcFormat)) { |
1852 for (i=0; i<256; i++) { | |
27489 | 1853 int p, r, g, b,y,u,v; |
29481 | 1854 if(c->srcFormat == PIX_FMT_PAL8) { |
30299
e054adfb8849
Add a const qualifier in a cast, fix the gcc warning:
stefano
parents:
30298
diff
changeset
|
1855 p=((const uint32_t*)(src[1]))[i]; |
27489 | 1856 r= (p>>16)&0xFF; |
1857 g= (p>> 8)&0xFF; | |
1858 b= p &0xFF; | |
29481 | 1859 } else if(c->srcFormat == PIX_FMT_RGB8) { |
27489 | 1860 r= (i>>5 )*36; |
1861 g= ((i>>2)&7)*36; | |
1862 b= (i&3 )*85; | |
29481 | 1863 } else if(c->srcFormat == PIX_FMT_BGR8) { |
27489 | 1864 b= (i>>6 )*85; |
1865 g= ((i>>3)&7)*36; | |
1866 r= (i&7 )*36; | |
29481 | 1867 } else if(c->srcFormat == PIX_FMT_RGB4_BYTE) { |
27489 | 1868 r= (i>>3 )*255; |
1869 g= ((i>>1)&3)*85; | |
1870 b= (i&1 )*255; | |
30784
7e887f9d634d
Fill the r, g, b values used for computing the c->pal_yuv table in the
stefano
parents:
30459
diff
changeset
|
1871 } else if(c->srcFormat == PIX_FMT_GRAY8) { |
7e887f9d634d
Fill the r, g, b values used for computing the c->pal_yuv table in the
stefano
parents:
30459
diff
changeset
|
1872 r = g = b = i; |
29481 | 1873 } else { |
27803 | 1874 assert(c->srcFormat == PIX_FMT_BGR4_BYTE); |
27489 | 1875 b= (i>>3 )*255; |
1876 g= ((i>>1)&3)*85; | |
1877 r= (i&1 )*255; | |
1878 } | |
27530 | 1879 y= av_clip_uint8((RY*r + GY*g + BY*b + ( 33<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT); |
1880 u= av_clip_uint8((RU*r + GU*g + BU*b + (257<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT); | |
1881 v= av_clip_uint8((RV*r + GV*g + BV*b + (257<<(RGB2YUV_SHIFT-1)))>>RGB2YUV_SHIFT); | |
27698 | 1882 c->pal_yuv[i]= y + (u<<8) + (v<<16); |
27783 | 1883 |
1884 switch(c->dstFormat) { | |
1885 case PIX_FMT_BGR32: | |
29397 | 1886 #if !HAVE_BIGENDIAN |
27783 | 1887 case PIX_FMT_RGB24: |
1888 #endif | |
1889 c->pal_rgb[i]= r + (g<<8) + (b<<16); | |
1890 break; | |
1891 case PIX_FMT_BGR32_1: | |
29397 | 1892 #if HAVE_BIGENDIAN |
27783 | 1893 case PIX_FMT_BGR24: |
1894 #endif | |
1895 c->pal_rgb[i]= (r + (g<<8) + (b<<16)) << 8; | |
1896 break; | |
1897 case PIX_FMT_RGB32_1: | |
29397 | 1898 #if HAVE_BIGENDIAN |
27783 | 1899 case PIX_FMT_RGB24: |
1900 #endif | |
1901 c->pal_rgb[i]= (b + (g<<8) + (r<<16)) << 8; | |
1902 break; | |
1903 case PIX_FMT_RGB32: | |
29397 | 1904 #if !HAVE_BIGENDIAN |
27783 | 1905 case PIX_FMT_BGR24: |
1906 #endif | |
1907 default: | |
1908 c->pal_rgb[i]= b + (g<<8) + (r<<16); | |
1909 } | |
22975
c91bb8f1cd85
convert palette to yuv instead of converting each pixel after pal->rgb
michael
parents:
22914
diff
changeset
|
1910 } |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1911 } |
22975
c91bb8f1cd85
convert palette to yuv instead of converting each pixel after pal->rgb
michael
parents:
22914
diff
changeset
|
1912 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1913 // 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
|
1914 if (c->sliceDir == 1) { |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1915 // slices go from top to bottom |
28833 | 1916 int srcStride2[4]= {srcStride[0], srcStride[1], srcStride[2], srcStride[3]}; |
1917 int dstStride2[4]= {dstStride[0], dstStride[1], dstStride[2], dstStride[3]}; | |
29173
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1918 |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1919 reset_ptr(src2, c->srcFormat); |
30264
1032ff2e83f1
Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents:
30262
diff
changeset
|
1920 reset_ptr((const uint8_t**)dst2, c->dstFormat); |
29173
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1921 |
29633 | 1922 /* reset slice direction at end of frame */ |
1923 if (srcSliceY + srcSliceH == c->srcH) | |
1924 c->sliceDir = 0; | |
1925 | |
29173
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1926 return c->swScale(c, src2, srcStride2, srcSliceY, srcSliceH, dst2, dstStride2); |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1927 } else { |
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1928 // slices go from bottom to top => we flip the image internally |
28833 | 1929 int srcStride2[4]= {-srcStride[0], -srcStride[1], -srcStride[2], -srcStride[3]}; |
1930 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
|
1931 |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1932 src2[0] += (srcSliceH-1)*srcStride[0]; |
27698 | 1933 if (!usePal(c->srcFormat)) |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1934 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
|
1935 src2[2] += ((srcSliceH>>c->chrSrcVSubSample)-1)*srcStride[2]; |
28833 | 1936 src2[3] += (srcSliceH-1)*srcStride[3]; |
29173
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1937 dst2[0] += ( c->dstH -1)*dstStride[0]; |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1938 dst2[1] += ((c->dstH>>c->chrDstVSubSample)-1)*dstStride[1]; |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1939 dst2[2] += ((c->dstH>>c->chrDstVSubSample)-1)*dstStride[2]; |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1940 dst2[3] += ( c->dstH -1)*dstStride[3]; |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1941 |
dbf9cf2438b0
Make sure src/dst are NULL when they arent used, some code uses this to
michael
parents:
29172
diff
changeset
|
1942 reset_ptr(src2, c->srcFormat); |
30264
1032ff2e83f1
Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents:
30262
diff
changeset
|
1943 reset_ptr((const uint8_t**)dst2, c->dstFormat); |
23129 | 1944 |
29633 | 1945 /* reset slice direction at end of frame */ |
1946 if (!srcSliceY) | |
1947 c->sliceDir = 0; | |
1948 | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1949 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
|
1950 } |
18861 | 1951 } |
1952 | |
28457
7d49f24cc18f
Drop the deprecated sws_scale_ordered() at the next major version
stefano
parents:
28323
diff
changeset
|
1953 #if LIBSWSCALE_VERSION_MAJOR < 1 |
30332
b4c3e12c9a08
Make const prototypes for input sources of sws_scale_* stricter.
benoit
parents:
30329
diff
changeset
|
1954 int sws_scale_ordered(SwsContext *c, const uint8_t* const src[], int srcStride[], int srcSliceY, |
29481 | 1955 int srcSliceH, uint8_t* dst[], int dstStride[]) |
1956 { | |
23155
1befc8d767cd
cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.
diego
parents:
23129
diff
changeset
|
1957 return sws_scale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride); |
18861 | 1958 } |
28457
7d49f24cc18f
Drop the deprecated sws_scale_ordered() at the next major version
stefano
parents:
28323
diff
changeset
|
1959 #endif |
31235
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1960 |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1961 /* Convert the palette to the same packed 32-bit format as the palette */ |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1962 void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1963 { |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1964 long i; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1965 |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1966 for (i=0; i<num_pixels; i++) |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1967 ((uint32_t *) dst)[i] = ((const uint32_t *) palette)[src[i]]; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1968 } |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1969 |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1970 /* Palette format: ABCD -> dst format: ABC */ |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1971 void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette) |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1972 { |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1973 long i; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1974 |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1975 for (i=0; i<num_pixels; i++) { |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1976 //FIXME slow? |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1977 dst[0]= palette[src[i]*4+0]; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1978 dst[1]= palette[src[i]*4+1]; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1979 dst[2]= palette[src[i]*4+2]; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1980 dst+= 3; |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1981 } |
661755507236
deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents:
31128
diff
changeset
|
1982 } |