annotate libswscale/rgb2rgb.c @ 32617:1baaacf00bbb

Improve speex codec pts handling, make audio timestamps work reasonably even with the native demuxer as long as seeking is not done.
author reimar
date Sun, 12 Dec 2010 12:36:56 +0000
parents aae5b14d959a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1 /*
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
2 * software RGB to RGB converter
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
3 * pluralize by software PAL8 to RGB converter
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
4 * software YUV to YUV converter
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
5 * software YUV to RGB converter
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
6 * Written by Nick Kurshev.
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
7 * palette & YUV & runtime CPU stuff by Michael (michaelni@gmx.at)
19703
ad7f49a1ba95 Add official GPL header to make license explicit as discussed on ffmpeg-devel.
diego
parents: 19361
diff changeset
8 *
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19703
diff changeset
9 * This file is part of FFmpeg.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19703
diff changeset
10 *
30923
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
11 * FFmpeg is free software; you can redistribute it and/or
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
12 * modify it under the terms of the GNU Lesser General Public
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
13 * License as published by the Free Software Foundation; either
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
14 * version 2.1 of the License, or (at your option) any later version.
19703
ad7f49a1ba95 Add official GPL header to make license explicit as discussed on ffmpeg-devel.
diego
parents: 19361
diff changeset
15 *
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19703
diff changeset
16 * FFmpeg is distributed in the hope that it will be useful,
19703
ad7f49a1ba95 Add official GPL header to make license explicit as discussed on ffmpeg-devel.
diego
parents: 19361
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
30923
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
19 * Lesser General Public License for more details.
19703
ad7f49a1ba95 Add official GPL header to make license explicit as discussed on ffmpeg-devel.
diego
parents: 19361
diff changeset
20 *
30923
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
21 * You should have received a copy of the GNU Lesser General Public
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
22 * License along with FFmpeg; if not, write to the Free Software
23702
5159b5f8784e license header consistency cosmetics
diego
parents: 23382
diff changeset
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
24 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
25 #include <inttypes.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
26 #include "config.h"
26670
e6774798e913 Use full path for #includes from another directory.
diego
parents: 25882
diff changeset
27 #include "libavutil/x86_cpu.h"
e6774798e913 Use full path for #includes from another directory.
diego
parents: 25882
diff changeset
28 #include "libavutil/bswap.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
29 #include "rgb2rgb.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
30 #include "swscale.h"
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
31 #include "swscale_internal.h"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
32
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
33 #define FAST_BGR2YV12 // use 7-bit instead of 15-bit coefficients
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
34
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
35 void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, long src_size);
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
36 void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, long src_size);
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
37 void (*rgb24tobgr15)(const uint8_t *src, uint8_t *dst, long src_size);
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
38 void (*rgb32tobgr24)(const uint8_t *src, uint8_t *dst, long src_size);
25750
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 23702
diff changeset
39 void (*rgb32to16)(const uint8_t *src, uint8_t *dst, long src_size);
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 23702
diff changeset
40 void (*rgb32to15)(const uint8_t *src, uint8_t *dst, long src_size);
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 23702
diff changeset
41 void (*rgb15to16)(const uint8_t *src, uint8_t *dst, long src_size);
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
42 void (*rgb15tobgr24)(const uint8_t *src, uint8_t *dst, long src_size);
25750
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 23702
diff changeset
43 void (*rgb15to32)(const uint8_t *src, uint8_t *dst, long src_size);
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 23702
diff changeset
44 void (*rgb16to15)(const uint8_t *src, uint8_t *dst, long src_size);
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
45 void (*rgb16tobgr24)(const uint8_t *src, uint8_t *dst, long src_size);
25750
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 23702
diff changeset
46 void (*rgb16to32)(const uint8_t *src, uint8_t *dst, long src_size);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
47 void (*rgb24tobgr24)(const uint8_t *src, uint8_t *dst, long src_size);
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
48 void (*rgb24to16)(const uint8_t *src, uint8_t *dst, long src_size);
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
49 void (*rgb24to15)(const uint8_t *src, uint8_t *dst, long src_size);
32106
67f44db4fee9 rgb2rgb: replace shuffle_bytes_2103() by optimized rgb32tobgr32()
ramiro
parents: 31984
diff changeset
50 void (*shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, long src_size);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
51 void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, long src_size);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
52 void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, long src_size);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
53
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
54 void (*yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
55 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
56 long lumStride, long chromStride, long dstStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
57 void (*yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
58 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
59 long lumStride, long chromStride, long dstStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
60 void (*yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
61 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
62 long lumStride, long chromStride, long dstStride);
27495
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27487
diff changeset
63 void (*yuv422ptouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27487
diff changeset
64 long width, long height,
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27487
diff changeset
65 long lumStride, long chromStride, long dstStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
66 void (*yuy2toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
67 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
68 long lumStride, long chromStride, long srcStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
69 void (*rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
70 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
71 long lumStride, long chromStride, long srcStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
72 void (*planar2x)(const uint8_t *src, uint8_t *dst, long width, long height,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
73 long srcStride, long dstStride);
30264
1032ff2e83f1 Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents: 29612
diff changeset
74 void (*interleaveBytes)(const uint8_t *src1, const uint8_t *src2, uint8_t *dst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
75 long width, long height, long src1Stride,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
76 long src2Stride, long dstStride);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
77 void (*vu9_to_vu12)(const uint8_t *src1, const uint8_t *src2,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
78 uint8_t *dst1, uint8_t *dst2,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
79 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
80 long srcStride1, long srcStride2,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
81 long dstStride1, long dstStride2);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
82 void (*yvu9_to_yuy2)(const uint8_t *src1, const uint8_t *src2, const uint8_t *src3,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
83 uint8_t *dst,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
84 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
85 long srcStride1, long srcStride2,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
86 long srcStride3, long dstStride);
28962
a7e795e068ad Unscaled converters for
michael
parents: 28721
diff changeset
87 void (*uyvytoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29397
diff changeset
88 long width, long height,
a4d8dee13834 Indent libswscale:
ramiro
parents: 29397
diff changeset
89 long lumStride, long chromStride, long srcStride);
28962
a7e795e068ad Unscaled converters for
michael
parents: 28721
diff changeset
90 void (*uyvytoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29397
diff changeset
91 long width, long height,
a4d8dee13834 Indent libswscale:
ramiro
parents: 29397
diff changeset
92 long lumStride, long chromStride, long srcStride);
28962
a7e795e068ad Unscaled converters for
michael
parents: 28721
diff changeset
93 void (*yuyvtoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29397
diff changeset
94 long width, long height,
a4d8dee13834 Indent libswscale:
ramiro
parents: 29397
diff changeset
95 long lumStride, long chromStride, long srcStride);
28962
a7e795e068ad Unscaled converters for
michael
parents: 28721
diff changeset
96 void (*yuyvtoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29397
diff changeset
97 long width, long height,
a4d8dee13834 Indent libswscale:
ramiro
parents: 29397
diff changeset
98 long lumStride, long chromStride, long srcStride);
28962
a7e795e068ad Unscaled converters for
michael
parents: 28721
diff changeset
99
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
100
30923
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
101 #if ARCH_X86
32137
b7d5e57af959 swscale: avoid reading prior to the source buffer in planar2x() MMX2
ramiro
parents: 32106
diff changeset
102 DECLARE_ASM_CONST(8, uint64_t, mmx_ff) = 0x00000000000000FFULL;
25875
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
103 DECLARE_ASM_CONST(8, uint64_t, mmx_null) = 0x0000000000000000ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
104 DECLARE_ASM_CONST(8, uint64_t, mmx_one) = 0xFFFFFFFFFFFFFFFFULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
105 DECLARE_ASM_CONST(8, uint64_t, mask32b) = 0x000000FF000000FFULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
106 DECLARE_ASM_CONST(8, uint64_t, mask32g) = 0x0000FF000000FF00ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
107 DECLARE_ASM_CONST(8, uint64_t, mask32r) = 0x00FF000000FF0000ULL;
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
108 DECLARE_ASM_CONST(8, uint64_t, mask32a) = 0xFF000000FF000000ULL;
25875
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
109 DECLARE_ASM_CONST(8, uint64_t, mask32) = 0x00FFFFFF00FFFFFFULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
110 DECLARE_ASM_CONST(8, uint64_t, mask3216br) = 0x00F800F800F800F8ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
111 DECLARE_ASM_CONST(8, uint64_t, mask3216g) = 0x0000FC000000FC00ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
112 DECLARE_ASM_CONST(8, uint64_t, mask3215g) = 0x0000F8000000F800ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
113 DECLARE_ASM_CONST(8, uint64_t, mul3216) = 0x2000000420000004ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
114 DECLARE_ASM_CONST(8, uint64_t, mul3215) = 0x2000000820000008ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
115 DECLARE_ASM_CONST(8, uint64_t, mask24b) = 0x00FF0000FF0000FFULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
116 DECLARE_ASM_CONST(8, uint64_t, mask24g) = 0xFF0000FF0000FF00ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
117 DECLARE_ASM_CONST(8, uint64_t, mask24r) = 0x0000FF0000FF0000ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
118 DECLARE_ASM_CONST(8, uint64_t, mask24l) = 0x0000000000FFFFFFULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
119 DECLARE_ASM_CONST(8, uint64_t, mask24h) = 0x0000FFFFFF000000ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
120 DECLARE_ASM_CONST(8, uint64_t, mask24hh) = 0xffff000000000000ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
121 DECLARE_ASM_CONST(8, uint64_t, mask24hhh) = 0xffffffff00000000ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
122 DECLARE_ASM_CONST(8, uint64_t, mask24hhhh) = 0xffffffffffff0000ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
123 DECLARE_ASM_CONST(8, uint64_t, mask15b) = 0x001F001F001F001FULL; /* 00000000 00011111 xxB */
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
124 DECLARE_ASM_CONST(8, uint64_t, mask15rg) = 0x7FE07FE07FE07FE0ULL; /* 01111111 11100000 RGx */
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
125 DECLARE_ASM_CONST(8, uint64_t, mask15s) = 0xFFE0FFE0FFE0FFE0ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
126 DECLARE_ASM_CONST(8, uint64_t, mask15g) = 0x03E003E003E003E0ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
127 DECLARE_ASM_CONST(8, uint64_t, mask15r) = 0x7C007C007C007C00ULL;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
128 #define mask16b mask15b
25875
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
129 DECLARE_ASM_CONST(8, uint64_t, mask16g) = 0x07E007E007E007E0ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
130 DECLARE_ASM_CONST(8, uint64_t, mask16r) = 0xF800F800F800F800ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
131 DECLARE_ASM_CONST(8, uint64_t, red_16mask) = 0x0000f8000000f800ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
132 DECLARE_ASM_CONST(8, uint64_t, green_16mask) = 0x000007e0000007e0ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
133 DECLARE_ASM_CONST(8, uint64_t, blue_16mask) = 0x0000001f0000001fULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
134 DECLARE_ASM_CONST(8, uint64_t, red_15mask) = 0x00007c0000007c00ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
135 DECLARE_ASM_CONST(8, uint64_t, green_15mask) = 0x000003e0000003e0ULL;
2356fe5b7596 Use DECLARE_ASM_CONST where possible in libswscale code
reimar
parents: 25750
diff changeset
136 DECLARE_ASM_CONST(8, uint64_t, blue_15mask) = 0x0000001f0000001fULL;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28024
diff changeset
137 #endif /* ARCH_X86 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
138
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
139 #define RGB2YUV_SHIFT 8
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
140 #define BY ((int)( 0.098*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
141 #define BV ((int)(-0.071*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
142 #define BU ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
143 #define GY ((int)( 0.504*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
144 #define GV ((int)(-0.368*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
145 #define GU ((int)(-0.291*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
146 #define RY ((int)( 0.257*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
147 #define RV ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
148 #define RU ((int)(-0.148*(1<<RGB2YUV_SHIFT)+0.5))
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
149
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
150 //Note: We have C, MMX, MMX2, 3DNOW versions, there is no 3DNOW + MMX2 one.
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
151 //plain C versions
32157
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
152 #define COMPILE_TEMPLATE_MMX 0
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
153 #define COMPILE_TEMPLATE_MMX2 0
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
154 #define COMPILE_TEMPLATE_AMD3DNOW 0
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
155 #define COMPILE_TEMPLATE_SSE2 0
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
156 #define RENAME(a) a ## _C
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
157 #include "rgb2rgb_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
158
30923
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
159 #if ARCH_X86
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
160
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
161 //MMX versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
162 #undef RENAME
32157
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
163 #undef COMPILE_TEMPLATE_MMX
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
164 #define COMPILE_TEMPLATE_MMX 1
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
165 #define RENAME(a) a ## _MMX
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
166 #include "rgb2rgb_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
167
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
168 //MMX2 versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
169 #undef RENAME
32157
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
170 #undef COMPILE_TEMPLATE_MMX2
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
171 #define COMPILE_TEMPLATE_MMX2 1
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
172 #define RENAME(a) a ## _MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
173 #include "rgb2rgb_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
174
31984
2aa88c36f9fc rgb2rgb: build SSE2 codepath
ramiro
parents: 31613
diff changeset
175 //SSE2 versions
2aa88c36f9fc rgb2rgb: build SSE2 codepath
ramiro
parents: 31613
diff changeset
176 #undef RENAME
32157
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
177 #undef COMPILE_TEMPLATE_SSE2
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
178 #define COMPILE_TEMPLATE_SSE2 1
31984
2aa88c36f9fc rgb2rgb: build SSE2 codepath
ramiro
parents: 31613
diff changeset
179 #define RENAME(a) a ## _SSE2
2aa88c36f9fc rgb2rgb: build SSE2 codepath
ramiro
parents: 31613
diff changeset
180 #include "rgb2rgb_template.c"
2aa88c36f9fc rgb2rgb: build SSE2 codepath
ramiro
parents: 31613
diff changeset
181
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
182 //3DNOW versions
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
183 #undef RENAME
32157
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
184 #undef COMPILE_TEMPLATE_MMX2
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
185 #undef COMPILE_TEMPLATE_SSE2
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
186 #undef COMPILE_TEMPLATE_AMD3DNOW
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
187 #define COMPILE_TEMPLATE_MMX2 0
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
188 #define COMPILE_TEMPLATE_SSE2 1
aae5b14d959a rgb2rgb: don't misuse HAVE_* defines
ramiro
parents: 32137
diff changeset
189 #define COMPILE_TEMPLATE_AMD3DNOW 1
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
190 #define RENAME(a) a ## _3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
191 #include "rgb2rgb_template.c"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
192
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
193 #endif //ARCH_X86 || ARCH_X86_64
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
194
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
195 /*
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
196 RGB15->RGB16 original by Strepto/Astral
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
197 ported to gcc & bugfixed : A'rpi
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
198 MMX2, 3DNOW optimization by Nick Kurshev
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
199 32-bit C version, and and&add trick by Michael Niedermayer
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
200 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
201
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
202 void sws_rgb2rgb_init(int flags)
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
203 {
30923
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30459
diff changeset
204 #if HAVE_MMX2 || HAVE_AMD3DNOW || HAVE_MMX
31984
2aa88c36f9fc rgb2rgb: build SSE2 codepath
ramiro
parents: 31613
diff changeset
205 if (flags & SWS_CPU_CAPS_SSE2)
2aa88c36f9fc rgb2rgb: build SSE2 codepath
ramiro
parents: 31613
diff changeset
206 rgb2rgb_init_SSE2();
2aa88c36f9fc rgb2rgb: build SSE2 codepath
ramiro
parents: 31613
diff changeset
207 else if (flags & SWS_CPU_CAPS_MMX2)
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
208 rgb2rgb_init_MMX2();
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
209 else if (flags & SWS_CPU_CAPS_3DNOW)
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
210 rgb2rgb_init_3DNOW();
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
211 else if (flags & SWS_CPU_CAPS_MMX)
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
212 rgb2rgb_init_MMX();
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
213 else
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28276
diff changeset
214 #endif /* HAVE_MMX2 || HAVE_AMD3DNOW || HAVE_MMX */
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
215 rgb2rgb_init_C();
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
216 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
217
31235
661755507236 deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents: 31232
diff changeset
218 #if LIBSWSCALE_VERSION_MAJOR < 1
27783
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27495
diff changeset
219 void palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
220 {
31235
661755507236 deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents: 31232
diff changeset
221 sws_convertPalette8ToPacked32(src, dst, num_pixels, palette);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
222 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
223
27783
3a18c8bdb555 Fix broken palette8to*.
vitor
parents: 27495
diff changeset
224 void palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
225 {
31235
661755507236 deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents: 31232
diff changeset
226 sws_convertPalette8ToPacked24(src, dst, num_pixels, palette);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
227 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
228
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
229 /**
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26912
diff changeset
230 * Palette is assumed to contain BGR16, see rgb32to16 to convert the palette.
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
231 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
232 void palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
233 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
234 long i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
235 for (i=0; i<num_pixels; i++)
26911
0a4d4fb456cd add const, suppress warnings
bcoudurier
parents: 26670
diff changeset
236 ((uint16_t *)dst)[i] = ((const uint16_t *)palette)[src[i]];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
237 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
238 void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
239 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
240 long i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
241 for (i=0; i<num_pixels; i++)
31613
55abf5e08172 Add av_ prefix to bswap macros
mru
parents: 31235
diff changeset
242 ((uint16_t *)dst)[i] = av_bswap16(((const uint16_t *)palette)[src[i]]);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
243 }
31235
661755507236 deprecate palette8topacked32 in favor of public API functions sws_convertPalette8ToPacked32 and -24
siretart
parents: 31232
diff changeset
244 #endif
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
245
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
246 void rgb32to24(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
247 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
248 long i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
249 long num_pixels = src_size >> 2;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
250 for (i=0; i<num_pixels; i++) {
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
251 #if HAVE_BIGENDIAN
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
252 /* RGB32 (= A,B,G,R) -> BGR24 (= B,G,R) */
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
253 dst[3*i + 0] = src[4*i + 1];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
254 dst[3*i + 1] = src[4*i + 2];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
255 dst[3*i + 2] = src[4*i + 3];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
256 #else
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
257 dst[3*i + 0] = src[4*i + 2];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
258 dst[3*i + 1] = src[4*i + 1];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
259 dst[3*i + 2] = src[4*i + 0];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
260 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
261 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
262 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
263
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
264 void rgb24to32(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
265 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
266 long i;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
267 for (i=0; 3*i<src_size; i++) {
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
268 #if HAVE_BIGENDIAN
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
269 /* RGB24 (= R,G,B) -> BGR32 (= A,R,G,B) */
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
270 dst[4*i + 0] = 255;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
271 dst[4*i + 1] = src[3*i + 0];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
272 dst[4*i + 2] = src[3*i + 1];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
273 dst[4*i + 3] = src[3*i + 2];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
274 #else
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
275 dst[4*i + 0] = src[3*i + 2];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
276 dst[4*i + 1] = src[3*i + 1];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
277 dst[4*i + 2] = src[3*i + 0];
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
278 dst[4*i + 3] = 255;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
279 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
280 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
281 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
282
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
283 void rgb16tobgr32(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
284 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
285 const uint16_t *end;
26912
794c8b614799 remove useless casts
bcoudurier
parents: 26911
diff changeset
286 uint8_t *d = dst;
26911
0a4d4fb456cd add const, suppress warnings
bcoudurier
parents: 26670
diff changeset
287 const uint16_t *s = (const uint16_t *)src;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
288 end = s + src_size/2;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
289 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
290 register uint16_t bgr;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
291 bgr = *s++;
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
292 #if HAVE_BIGENDIAN
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
293 *d++ = 255;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
294 *d++ = (bgr&0x1F)<<3;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
295 *d++ = (bgr&0x7E0)>>3;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
296 *d++ = (bgr&0xF800)>>8;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
297 #else
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
298 *d++ = (bgr&0xF800)>>8;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
299 *d++ = (bgr&0x7E0)>>3;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
300 *d++ = (bgr&0x1F)<<3;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
301 *d++ = 255;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
302 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
303 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
304 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
305
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
306 void rgb16to24(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
307 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
308 const uint16_t *end;
26912
794c8b614799 remove useless casts
bcoudurier
parents: 26911
diff changeset
309 uint8_t *d = dst;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
310 const uint16_t *s = (const uint16_t *)src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
311 end = s + src_size/2;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
312 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
313 register uint16_t bgr;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
314 bgr = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
315 *d++ = (bgr&0xF800)>>8;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
316 *d++ = (bgr&0x7E0)>>3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
317 *d++ = (bgr&0x1F)<<3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
318 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
319 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
320
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
321 void rgb16tobgr16(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
322 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
323 long i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
324 long num_pixels = src_size >> 1;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23003
diff changeset
325
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
326 for (i=0; i<num_pixels; i++) {
27487
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
327 unsigned rgb = ((const uint16_t*)src)[i];
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
328 ((uint16_t*)dst)[i] = (rgb>>11) | (rgb&0x7E0) | (rgb<<11);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
329 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
330 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
331
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
332 void rgb16tobgr15(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
333 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
334 long i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
335 long num_pixels = src_size >> 1;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23003
diff changeset
336
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
337 for (i=0; i<num_pixels; i++) {
27487
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
338 unsigned rgb = ((const uint16_t*)src)[i];
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
339 ((uint16_t*)dst)[i] = (rgb>>11) | ((rgb&0x7C0)>>1) | ((rgb&0x1F)<<10);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
340 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
341 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
342
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
343 void rgb15tobgr32(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
344 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
345 const uint16_t *end;
26912
794c8b614799 remove useless casts
bcoudurier
parents: 26911
diff changeset
346 uint8_t *d = dst;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
347 const uint16_t *s = (const uint16_t *)src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
348 end = s + src_size/2;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
349 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
350 register uint16_t bgr;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
351 bgr = *s++;
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
352 #if HAVE_BIGENDIAN
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
353 *d++ = 255;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
354 *d++ = (bgr&0x1F)<<3;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
355 *d++ = (bgr&0x3E0)>>2;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
356 *d++ = (bgr&0x7C00)>>7;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
357 #else
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
358 *d++ = (bgr&0x7C00)>>7;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
359 *d++ = (bgr&0x3E0)>>2;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
360 *d++ = (bgr&0x1F)<<3;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
361 *d++ = 255;
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
362 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
363 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
364 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
365
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
366 void rgb15to24(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
367 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
368 const uint16_t *end;
26912
794c8b614799 remove useless casts
bcoudurier
parents: 26911
diff changeset
369 uint8_t *d = dst;
26911
0a4d4fb456cd add const, suppress warnings
bcoudurier
parents: 26670
diff changeset
370 const uint16_t *s = (const uint16_t *)src;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
371 end = s + src_size/2;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
372 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
373 register uint16_t bgr;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
374 bgr = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
375 *d++ = (bgr&0x7C00)>>7;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
376 *d++ = (bgr&0x3E0)>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
377 *d++ = (bgr&0x1F)<<3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
378 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
379 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
380
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
381 void rgb15tobgr16(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
382 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
383 long i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
384 long num_pixels = src_size >> 1;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23003
diff changeset
385
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
386 for (i=0; i<num_pixels; i++) {
27487
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
387 unsigned rgb = ((const uint16_t*)src)[i];
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
388 ((uint16_t*)dst)[i] = ((rgb&0x7C00)>>10) | ((rgb&0x3E0)<<1) | (rgb<<11);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
389 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
390 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
391
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
392 void rgb15tobgr15(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
393 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
394 long i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
395 long num_pixels = src_size >> 1;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23003
diff changeset
396
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
397 for (i=0; i<num_pixels; i++) {
27487
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
398 unsigned br;
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
399 unsigned rgb = ((const uint16_t*)src)[i];
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
400 br = rgb&0x7c1F;
31ac930fd1d4 Fix 4 of the unscaled rgb15/16 converters, each of these contained
michael
parents: 27486
diff changeset
401 ((uint16_t*)dst)[i] = (br>>10) | (rgb&0x3E0) | (br<<10);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
402 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
403 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
404
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
405 void bgr8torgb8(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
406 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
407 long i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
408 long num_pixels = src_size;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
409 for (i=0; i<num_pixels; i++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
410 unsigned b,g,r;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
411 register uint8_t rgb;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
412 rgb = src[i];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
413 r = (rgb&0x07);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
414 g = (rgb&0x38)>>3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
415 b = (rgb&0xC0)>>6;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
416 dst[i] = ((b<<1)&0x07) | ((g&0x07)<<3) | ((r&0x03)<<6);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
417 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
418 }
30459
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
419
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
420 #define DEFINE_SHUFFLE_BYTES(a, b, c, d) \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
421 void shuffle_bytes_##a##b##c##d(const uint8_t *src, uint8_t *dst, long src_size) \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
422 { \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
423 long i; \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
424 \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
425 for (i = 0; i < src_size; i+=4) { \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
426 dst[i + 0] = src[i + a]; \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
427 dst[i + 1] = src[i + b]; \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
428 dst[i + 2] = src[i + c]; \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
429 dst[i + 3] = src[i + d]; \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
430 } \
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
431 }
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
432
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
433 DEFINE_SHUFFLE_BYTES(0, 3, 2, 1);
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
434 DEFINE_SHUFFLE_BYTES(1, 2, 3, 0);
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
435 DEFINE_SHUFFLE_BYTES(3, 0, 1, 2);
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
436 DEFINE_SHUFFLE_BYTES(3, 2, 1, 0);
9bb2ebbb52be Implement shuffle_bytes_abcd() functions and use them for shuffling
stefano
parents: 30264
diff changeset
437