annotate postproc/yuv2rgb.c @ 18715:30d7ddf08889

Fix window position when changing videos while in fullscreen and for window managers that modify position on Map. Oked by Alexander Strasser.
author reimar
date Thu, 15 Jun 2006 08:00:37 +0000
parents 08cac43f1e38
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
1 /*
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
2 * yuv2rgb.c, Software YUV to RGB coverter
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
3 *
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
4 * Copyright (C) 1999, Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
5 * All Rights Reserved.
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
6 *
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
7 * Functions broken out from display_x11.c and several new modes
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
8 * added by Håkan Hjort <d95hjort@dtek.chalmers.se>
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
9 *
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
10 * 15 & 16 bpp support by Franck Sicard <Franck.Sicard@solsoft.fr>
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
11 *
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
12 * This file is part of mpeg2dec, a free MPEG-2 video decoder
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
13 *
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
14 * mpeg2dec is free software; you can redistribute it and/or modify
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
15 * it under the terms of the GNU General Public License as published by
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
16 * the Free Software Foundation; either version 2, or (at your option)
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
17 * any later version.
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
18 *
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
19 * mpeg2dec is distributed in the hope that it will be useful,
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
22 * GNU General Public License for more details.
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
23 *
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
24 * You should have received a copy of the GNU General Public License
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
25 * along with GNU Make; see the file COPYING. If not, write to
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
26 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
27 *
3143
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
28 * MMX/MMX2 Template stuff from Michael Niedermayer (michaelni@gmx.at) (needed for fast movntq support)
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
29 * 1,4,8bpp support by Michael Niedermayer (michaelni@gmx.at)
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
30 * context / deglobalize stuff by Michael Niedermayer
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
31 */
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
32
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
33 #include <stdio.h>
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
34 #include <stdlib.h>
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
35 #include <inttypes.h>
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
36 #include <assert.h>
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
37
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
38 #include "config.h"
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
39 //#include "video_out.h"
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
40 #include "rgb2rgb.h"
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
41 #include "swscale.h"
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
42 #include "swscale_internal.h"
16985
08cac43f1e38 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13720
diff changeset
43 #include "mangle.h"
08cac43f1e38 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13720
diff changeset
44 #include "libvo/img_format.h" //FIXME try to reduce dependency of such stuff
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
45
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
46 #ifdef HAVE_MLIB
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
47 #include "yuv2rgb_mlib.c"
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
48 #endif
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
49
3143
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
50 #define DITHER1XBPP // only for mmx
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
51
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
52 const uint8_t __attribute__((aligned(8))) dither_2x2_4[2][8]={
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
53 { 1, 3, 1, 3, 1, 3, 1, 3, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
54 { 2, 0, 2, 0, 2, 0, 2, 0, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
55 };
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
56
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
57 const uint8_t __attribute__((aligned(8))) dither_2x2_8[2][8]={
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
58 { 6, 2, 6, 2, 6, 2, 6, 2, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
59 { 0, 4, 0, 4, 0, 4, 0, 4, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
60 };
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
61
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
62 const uint8_t __attribute__((aligned(8))) dither_8x8_32[8][8]={
6458
michael
parents: 6456
diff changeset
63 { 17, 9, 23, 15, 16, 8, 22, 14, },
michael
parents: 6456
diff changeset
64 { 5, 29, 3, 27, 4, 28, 2, 26, },
michael
parents: 6456
diff changeset
65 { 21, 13, 19, 11, 20, 12, 18, 10, },
michael
parents: 6456
diff changeset
66 { 0, 24, 6, 30, 1, 25, 7, 31, },
michael
parents: 6456
diff changeset
67 { 16, 8, 22, 14, 17, 9, 23, 15, },
michael
parents: 6456
diff changeset
68 { 4, 28, 2, 26, 5, 29, 3, 27, },
michael
parents: 6456
diff changeset
69 { 20, 12, 18, 10, 21, 13, 19, 11, },
michael
parents: 6456
diff changeset
70 { 1, 25, 7, 31, 0, 24, 6, 30, },
michael
parents: 6456
diff changeset
71 };
michael
parents: 6456
diff changeset
72
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
73 #if 0
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
74 const uint8_t __attribute__((aligned(8))) dither_8x8_64[8][8]={
6458
michael
parents: 6456
diff changeset
75 { 0, 48, 12, 60, 3, 51, 15, 63, },
michael
parents: 6456
diff changeset
76 { 32, 16, 44, 28, 35, 19, 47, 31, },
michael
parents: 6456
diff changeset
77 { 8, 56, 4, 52, 11, 59, 7, 55, },
michael
parents: 6456
diff changeset
78 { 40, 24, 36, 20, 43, 27, 39, 23, },
michael
parents: 6456
diff changeset
79 { 2, 50, 14, 62, 1, 49, 13, 61, },
michael
parents: 6456
diff changeset
80 { 34, 18, 46, 30, 33, 17, 45, 29, },
michael
parents: 6456
diff changeset
81 { 10, 58, 6, 54, 9, 57, 5, 53, },
michael
parents: 6456
diff changeset
82 { 42, 26, 38, 22, 41, 25, 37, 21, },
michael
parents: 6456
diff changeset
83 };
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
84 #endif
6458
michael
parents: 6456
diff changeset
85
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
86 const uint8_t __attribute__((aligned(8))) dither_8x8_73[8][8]={
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
87 { 0, 55, 14, 68, 3, 58, 17, 72, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
88 { 37, 18, 50, 32, 40, 22, 54, 35, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
89 { 9, 64, 5, 59, 13, 67, 8, 63, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
90 { 46, 27, 41, 23, 49, 31, 44, 26, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
91 { 2, 57, 16, 71, 1, 56, 15, 70, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
92 { 39, 21, 52, 34, 38, 19, 51, 33, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
93 { 11, 66, 7, 62, 10, 65, 6, 60, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
94 { 48, 30, 43, 25, 47, 29, 42, 24, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
95 };
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
96
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
97 #if 0
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
98 const uint8_t __attribute__((aligned(8))) dither_8x8_128[8][8]={
6458
michael
parents: 6456
diff changeset
99 { 68, 36, 92, 60, 66, 34, 90, 58, },
michael
parents: 6456
diff changeset
100 { 20, 116, 12, 108, 18, 114, 10, 106, },
michael
parents: 6456
diff changeset
101 { 84, 52, 76, 44, 82, 50, 74, 42, },
michael
parents: 6456
diff changeset
102 { 0, 96, 24, 120, 6, 102, 30, 126, },
michael
parents: 6456
diff changeset
103 { 64, 32, 88, 56, 70, 38, 94, 62, },
michael
parents: 6456
diff changeset
104 { 16, 112, 8, 104, 22, 118, 14, 110, },
michael
parents: 6456
diff changeset
105 { 80, 48, 72, 40, 86, 54, 78, 46, },
michael
parents: 6456
diff changeset
106 { 4, 100, 28, 124, 2, 98, 26, 122, },
michael
parents: 6456
diff changeset
107 };
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
108 #endif
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
109
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
110 #if 1
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
111 const uint8_t __attribute__((aligned(8))) dither_8x8_220[8][8]={
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
112 {117, 62, 158, 103, 113, 58, 155, 100, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
113 { 34, 199, 21, 186, 31, 196, 17, 182, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
114 {144, 89, 131, 76, 141, 86, 127, 72, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
115 { 0, 165, 41, 206, 10, 175, 52, 217, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
116 {110, 55, 151, 96, 120, 65, 162, 107, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
117 { 28, 193, 14, 179, 38, 203, 24, 189, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
118 {138, 83, 124, 69, 148, 93, 134, 79, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
119 { 7, 172, 48, 213, 3, 168, 45, 210, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
120 };
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
121 #elif 1
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
122 // tries to correct a gamma of 1.5
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
123 const uint8_t __attribute__((aligned(8))) dither_8x8_220[8][8]={
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
124 { 0, 143, 18, 200, 2, 156, 25, 215, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
125 { 78, 28, 125, 64, 89, 36, 138, 74, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
126 { 10, 180, 3, 161, 16, 195, 8, 175, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
127 {109, 51, 93, 38, 121, 60, 105, 47, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
128 { 1, 152, 23, 210, 0, 147, 20, 205, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
129 { 85, 33, 134, 71, 81, 30, 130, 67, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
130 { 14, 190, 6, 171, 12, 185, 5, 166, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
131 {117, 57, 101, 44, 113, 54, 97, 41, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
132 };
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
133 #elif 1
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
134 // tries to correct a gamma of 2.0
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
135 const uint8_t __attribute__((aligned(8))) dither_8x8_220[8][8]={
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
136 { 0, 124, 8, 193, 0, 140, 12, 213, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
137 { 55, 14, 104, 42, 66, 19, 119, 52, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
138 { 3, 168, 1, 145, 6, 187, 3, 162, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
139 { 86, 31, 70, 21, 99, 39, 82, 28, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
140 { 0, 134, 11, 206, 0, 129, 9, 200, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
141 { 62, 17, 114, 48, 58, 16, 109, 45, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
142 { 5, 181, 2, 157, 4, 175, 1, 151, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
143 { 95, 36, 78, 26, 90, 34, 74, 24, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
144 };
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
145 #else
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
146 // tries to correct a gamma of 2.5
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
147 const uint8_t __attribute__((aligned(8))) dither_8x8_220[8][8]={
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
148 { 0, 107, 3, 187, 0, 125, 6, 212, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
149 { 39, 7, 86, 28, 49, 11, 102, 36, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
150 { 1, 158, 0, 131, 3, 180, 1, 151, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
151 { 68, 19, 52, 12, 81, 25, 64, 17, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
152 { 0, 119, 5, 203, 0, 113, 4, 195, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
153 { 45, 9, 96, 33, 42, 8, 91, 30, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
154 { 2, 172, 1, 144, 2, 165, 0, 137, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
155 { 77, 23, 60, 15, 72, 21, 56, 14, },
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
156 };
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
157 #endif
6458
michael
parents: 6456
diff changeset
158
13720
821f464b4d90 adapting existing mmx/mmx2/sse/3dnow optimizations so they work on x86_64
aurel
parents: 12698
diff changeset
159 #if defined(ARCH_X86) || defined(ARCH_X86_64)
3143
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
160
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
161 /* hope these constant values are cache line aligned */
12301
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
162 uint64_t attribute_used __attribute__((aligned(8))) mmx_00ffw = 0x00ff00ff00ff00ffULL;
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
163 uint64_t attribute_used __attribute__((aligned(8))) mmx_redmask = 0xf8f8f8f8f8f8f8f8ULL;
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
164 uint64_t attribute_used __attribute__((aligned(8))) mmx_grnmask = 0xfcfcfcfcfcfcfcfcULL;
3143
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
165
12301
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
166 uint64_t attribute_used __attribute__((aligned(8))) M24A= 0x00FF0000FF0000FFULL;
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
167 uint64_t attribute_used __attribute__((aligned(8))) M24B= 0xFF0000FF0000FF00ULL;
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
168 uint64_t attribute_used __attribute__((aligned(8))) M24C= 0x0000FF0000FF0000ULL;
3143
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
169
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
170 // the volatile is required because gcc otherwise optimizes some writes away not knowing that these
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
171 // are read in the asm block
12301
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
172 volatile uint64_t attribute_used __attribute__((aligned(8))) b5Dither;
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
173 volatile uint64_t attribute_used __attribute__((aligned(8))) g5Dither;
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
174 volatile uint64_t attribute_used __attribute__((aligned(8))) g6Dither;
b80f95e24c96 attribute_used patch by (matthieu castet <castet.matthieu at free dot fr>)
michael
parents: 12124
diff changeset
175 volatile uint64_t attribute_used __attribute__((aligned(8))) r5Dither;
3143
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
176
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
177 uint64_t __attribute__((aligned(8))) dither4[2]={
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
178 0x0103010301030103LL,
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
179 0x0200020002000200LL,};
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
180
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
181 uint64_t __attribute__((aligned(8))) dither8[2]={
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
182 0x0602060206020602LL,
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
183 0x0004000400040004LL,};
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
184
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
185 #undef HAVE_MMX
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
186
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
187 //MMX versions
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
188 #undef RENAME
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
189 #define HAVE_MMX
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
190 #undef HAVE_MMX2
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
191 #undef HAVE_3DNOW
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
192 #define RENAME(a) a ## _MMX
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
193 #include "yuv2rgb_template.c"
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
194
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
195 //MMX2 versions
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
196 #undef RENAME
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
197 #define HAVE_MMX
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
198 #define HAVE_MMX2
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
199 #undef HAVE_3DNOW
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
200 #define RENAME(a) a ## _MMX2
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
201 #include "yuv2rgb_template.c"
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
202
86910f54c391 runtime cpu detection
michael
parents: 2732
diff changeset
203 #endif // CAN_COMPILE_X86_ASM
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
204
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
205 const int32_t Inverse_Table_6_9[8][4] = {
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
206 {117504, 138453, 13954, 34903}, /* no sequence_display_extension */
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
207 {117504, 138453, 13954, 34903}, /* ITU-R Rec. 709 (1990) */
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
208 {104597, 132201, 25675, 53279}, /* unspecified */
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
209 {104597, 132201, 25675, 53279}, /* reserved */
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
210 {104448, 132798, 24759, 53109}, /* FCC */
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
211 {104597, 132201, 25675, 53279}, /* ITU-R Rec. 624-4 System B, G */
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
212 {104597, 132201, 25675, 53279}, /* SMPTE 170M */
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
213 {117579, 136230, 16907, 35559} /* SMPTE 240M (1987) */
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
214 };
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
215
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
216 #define RGB(i) \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
217 U = pu[i]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
218 V = pv[i]; \
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
219 r = c->table_rV[V]; \
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
220 g = c->table_gU[U] + c->table_gV[V]; \
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
221 b = c->table_bU[U];
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
222
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
223 #define DST1(i) \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
224 Y = py_1[2*i]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
225 dst_1[2*i] = r[Y] + g[Y] + b[Y]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
226 Y = py_1[2*i+1]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
227 dst_1[2*i+1] = r[Y] + g[Y] + b[Y];
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
228
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
229 #define DST2(i) \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
230 Y = py_2[2*i]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
231 dst_2[2*i] = r[Y] + g[Y] + b[Y]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
232 Y = py_2[2*i+1]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
233 dst_2[2*i+1] = r[Y] + g[Y] + b[Y];
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
234
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
235 #define DST1RGB(i) \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
236 Y = py_1[2*i]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
237 dst_1[6*i] = r[Y]; dst_1[6*i+1] = g[Y]; dst_1[6*i+2] = b[Y]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
238 Y = py_1[2*i+1]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
239 dst_1[6*i+3] = r[Y]; dst_1[6*i+4] = g[Y]; dst_1[6*i+5] = b[Y];
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
240
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
241 #define DST2RGB(i) \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
242 Y = py_2[2*i]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
243 dst_2[6*i] = r[Y]; dst_2[6*i+1] = g[Y]; dst_2[6*i+2] = b[Y]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
244 Y = py_2[2*i+1]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
245 dst_2[6*i+3] = r[Y]; dst_2[6*i+4] = g[Y]; dst_2[6*i+5] = b[Y];
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
246
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
247 #define DST1BGR(i) \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
248 Y = py_1[2*i]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
249 dst_1[6*i] = b[Y]; dst_1[6*i+1] = g[Y]; dst_1[6*i+2] = r[Y]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
250 Y = py_1[2*i+1]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
251 dst_1[6*i+3] = b[Y]; dst_1[6*i+4] = g[Y]; dst_1[6*i+5] = r[Y];
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
252
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
253 #define DST2BGR(i) \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
254 Y = py_2[2*i]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
255 dst_2[6*i] = b[Y]; dst_2[6*i+1] = g[Y]; dst_2[6*i+2] = r[Y]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
256 Y = py_2[2*i+1]; \
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
257 dst_2[6*i+3] = b[Y]; dst_2[6*i+4] = g[Y]; dst_2[6*i+5] = r[Y];
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
258
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
259 #define PROLOG(func_name, dst_type) \
9499
bc5b87370cd1 cleanup
michael
parents: 9494
diff changeset
260 static int func_name(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, \
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
261 int srcSliceH, uint8_t* dst[], int dstStride[]){\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
262 int y;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
263 \
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
264 if(c->srcFormat == IMGFMT_422P){\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
265 srcStride[1] *= 2;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
266 srcStride[2] *= 2;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
267 }\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
268 for(y=0; y<srcSliceH; y+=2){\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
269 dst_type *dst_1= (dst_type*)(dst[0] + (y+srcSliceY )*dstStride[0]);\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
270 dst_type *dst_2= (dst_type*)(dst[0] + (y+srcSliceY+1)*dstStride[0]);\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
271 dst_type *r, *g, *b;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
272 uint8_t *py_1= src[0] + y*srcStride[0];\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
273 uint8_t *py_2= py_1 + srcStride[0];\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
274 uint8_t *pu= src[1] + (y>>1)*srcStride[1];\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
275 uint8_t *pv= src[2] + (y>>1)*srcStride[2];\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
276 unsigned int h_size= c->dstW>>3;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
277 while (h_size--) {\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
278 int U, V, Y;\
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
279
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
280 #define EPILOG(dst_delta)\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
281 pu += 4;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
282 pv += 4;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
283 py_1 += 8;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
284 py_2 += 8;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
285 dst_1 += dst_delta;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
286 dst_2 += dst_delta;\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
287 }\
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
288 }\
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9477
diff changeset
289 return srcSliceH;\
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
290 }
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
291
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
292 PROLOG(yuv2rgb_c_32, uint32_t)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
293 RGB(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
294 DST1(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
295 DST2(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
296
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
297 RGB(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
298 DST2(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
299 DST1(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
300
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
301 RGB(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
302 DST1(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
303 DST2(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
304
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
305 RGB(3);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
306 DST2(3);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
307 DST1(3);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
308 EPILOG(8)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
309
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
310 PROLOG(yuv2rgb_c_24_rgb, uint8_t)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
311 RGB(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
312 DST1RGB(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
313 DST2RGB(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
314
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
315 RGB(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
316 DST2RGB(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
317 DST1RGB(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
318
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
319 RGB(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
320 DST1RGB(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
321 DST2RGB(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
322
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
323 RGB(3);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
324 DST2RGB(3);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
325 DST1RGB(3);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
326 EPILOG(24)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
327
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
328 // only trivial mods from yuv2rgb_c_24_rgb
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
329 PROLOG(yuv2rgb_c_24_bgr, uint8_t)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
330 RGB(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
331 DST1BGR(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
332 DST2BGR(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
333
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
334 RGB(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
335 DST2BGR(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
336 DST1BGR(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
337
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
338 RGB(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
339 DST1BGR(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
340 DST2BGR(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
341
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
342 RGB(3);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
343 DST2BGR(3);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
344 DST1BGR(3);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
345 EPILOG(24)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
346
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
347 // This is exactly the same code as yuv2rgb_c_32 except for the types of
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
348 // r, g, b, dst_1, dst_2
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
349 PROLOG(yuv2rgb_c_16, uint16_t)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
350 RGB(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
351 DST1(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
352 DST2(0);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
353
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
354 RGB(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
355 DST2(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
356 DST1(1);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
357
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
358 RGB(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
359 DST1(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
360 DST2(2);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
361
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
362 RGB(3);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
363 DST2(3);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
364 DST1(3);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
365 EPILOG(8)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
366
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
367 // This is exactly the same code as yuv2rgb_c_32 except for the types of
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
368 // r, g, b, dst_1, dst_2
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
369 PROLOG(yuv2rgb_c_8, uint8_t)
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
370 RGB(0);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
371 DST1(0);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
372 DST2(0);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
373
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
374 RGB(1);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
375 DST2(1);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
376 DST1(1);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
377
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
378 RGB(2);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
379 DST1(2);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
380 DST2(2);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
381
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
382 RGB(3);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
383 DST2(3);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
384 DST1(3);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
385 EPILOG(8)
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
386
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
387 // r, g, b, dst_1, dst_2
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
388 PROLOG(yuv2rgb_c_8_ordered_dither, uint8_t)
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
389 const uint8_t *d32= dither_8x8_32[y&7];
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
390 const uint8_t *d64= dither_8x8_73[y&7];
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
391 #define DST1bpp8(i,o) \
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
392 Y = py_1[2*i]; \
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
393 dst_1[2*i] = r[Y+d32[0+o]] + g[Y+d32[0+o]] + b[Y+d64[0+o]]; \
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
394 Y = py_1[2*i+1]; \
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
395 dst_1[2*i+1] = r[Y+d32[1+o]] + g[Y+d32[1+o]] + b[Y+d64[1+o]];
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
396
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
397 #define DST2bpp8(i,o) \
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
398 Y = py_2[2*i]; \
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
399 dst_2[2*i] = r[Y+d32[8+o]] + g[Y+d32[8+o]] + b[Y+d64[8+o]]; \
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
400 Y = py_2[2*i+1]; \
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
401 dst_2[2*i+1] = r[Y+d32[9+o]] + g[Y+d32[9+o]] + b[Y+d64[9+o]];
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
402
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
403
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
404 RGB(0);
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
405 DST1bpp8(0,0);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
406 DST2bpp8(0,0);
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
407
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
408 RGB(1);
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
409 DST2bpp8(1,2);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
410 DST1bpp8(1,2);
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
411
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
412 RGB(2);
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
413 DST1bpp8(2,4);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
414 DST2bpp8(2,4);
6452
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
415
dae4143c636b ordered dither for 8bpp
michael
parents: 6451
diff changeset
416 RGB(3);
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
417 DST2bpp8(3,6);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
418 DST1bpp8(3,6);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
419 EPILOG(8)
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
420
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
421
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
422 // This is exactly the same code as yuv2rgb_c_32 except for the types of
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
423 // r, g, b, dst_1, dst_2
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
424 PROLOG(yuv2rgb_c_4, uint8_t)
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
425 int acc;
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
426 #define DST1_4(i) \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
427 Y = py_1[2*i]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
428 acc = r[Y] + g[Y] + b[Y]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
429 Y = py_1[2*i+1]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
430 acc |= (r[Y] + g[Y] + b[Y])<<4;\
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
431 dst_1[i] = acc;
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
432
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
433 #define DST2_4(i) \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
434 Y = py_2[2*i]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
435 acc = r[Y] + g[Y] + b[Y]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
436 Y = py_2[2*i+1]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
437 acc |= (r[Y] + g[Y] + b[Y])<<4;\
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
438 dst_2[i] = acc;
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
439
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
440 RGB(0);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
441 DST1_4(0);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
442 DST2_4(0);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
443
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
444 RGB(1);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
445 DST2_4(1);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
446 DST1_4(1);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
447
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
448 RGB(2);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
449 DST1_4(2);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
450 DST2_4(2);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
451
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
452 RGB(3);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
453 DST2_4(3);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
454 DST1_4(3);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
455 EPILOG(4)
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
456
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
457 PROLOG(yuv2rgb_c_4_ordered_dither, uint8_t)
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
458 const uint8_t *d64= dither_8x8_73[y&7];
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
459 const uint8_t *d128=dither_8x8_220[y&7];
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
460 int acc;
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
461
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
462 #define DST1bpp4(i,o) \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
463 Y = py_1[2*i]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
464 acc = r[Y+d128[0+o]] + g[Y+d64[0+o]] + b[Y+d128[0+o]]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
465 Y = py_1[2*i+1]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
466 acc |= (r[Y+d128[1+o]] + g[Y+d64[1+o]] + b[Y+d128[1+o]])<<4;\
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
467 dst_1[i]= acc;
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
468
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
469 #define DST2bpp4(i,o) \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
470 Y = py_2[2*i]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
471 acc = r[Y+d128[8+o]] + g[Y+d64[8+o]] + b[Y+d128[8+o]]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
472 Y = py_2[2*i+1]; \
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
473 acc |= (r[Y+d128[9+o]] + g[Y+d64[9+o]] + b[Y+d128[9+o]])<<4;\
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
474 dst_2[i]= acc;
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
475
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
476
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
477 RGB(0);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
478 DST1bpp4(0,0);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
479 DST2bpp4(0,0);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
480
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
481 RGB(1);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
482 DST2bpp4(1,2);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
483 DST1bpp4(1,2);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
484
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
485 RGB(2);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
486 DST1bpp4(2,4);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
487 DST2bpp4(2,4);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
488
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
489 RGB(3);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
490 DST2bpp4(3,6);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
491 DST1bpp4(3,6);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
492 EPILOG(4)
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
493
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
494 // This is exactly the same code as yuv2rgb_c_32 except for the types of
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
495 // r, g, b, dst_1, dst_2
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
496 PROLOG(yuv2rgb_c_4b, uint8_t)
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
497 RGB(0);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
498 DST1(0);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
499 DST2(0);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
500
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
501 RGB(1);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
502 DST2(1);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
503 DST1(1);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
504
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
505 RGB(2);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
506 DST1(2);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
507 DST2(2);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
508
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
509 RGB(3);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
510 DST2(3);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
511 DST1(3);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
512 EPILOG(8)
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
513
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
514 PROLOG(yuv2rgb_c_4b_ordered_dither, uint8_t)
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
515 const uint8_t *d64= dither_8x8_73[y&7];
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
516 const uint8_t *d128=dither_8x8_220[y&7];
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
517
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
518 #define DST1bpp4b(i,o) \
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
519 Y = py_1[2*i]; \
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
520 dst_1[2*i] = r[Y+d128[0+o]] + g[Y+d64[0+o]] + b[Y+d128[0+o]]; \
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
521 Y = py_1[2*i+1]; \
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
522 dst_1[2*i+1] = r[Y+d128[1+o]] + g[Y+d64[1+o]] + b[Y+d128[1+o]];
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
523
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
524 #define DST2bpp4b(i,o) \
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
525 Y = py_2[2*i]; \
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
526 dst_2[2*i] = r[Y+d128[8+o]] + g[Y+d64[8+o]] + b[Y+d128[8+o]]; \
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
527 Y = py_2[2*i+1]; \
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
528 dst_2[2*i+1] = r[Y+d128[9+o]] + g[Y+d64[9+o]] + b[Y+d128[9+o]];
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
529
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
530
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
531 RGB(0);
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
532 DST1bpp4b(0,0);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
533 DST2bpp4b(0,0);
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
534
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
535 RGB(1);
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
536 DST2bpp4b(1,2);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
537 DST1bpp4b(1,2);
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
538
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
539 RGB(2);
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
540 DST1bpp4b(2,4);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
541 DST2bpp4b(2,4);
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
542
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
543 RGB(3);
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
544 DST2bpp4b(3,6);
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
545 DST1bpp4b(3,6);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
546 EPILOG(8)
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
547
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
548 PROLOG(yuv2rgb_c_1_ordered_dither, uint8_t)
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
549 const uint8_t *d128=dither_8x8_220[y&7];
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
550 char out_1=0, out_2=0;
9477
fd4d38aa0e08 100l (gcc 3.2 .....)
michael
parents: 9476
diff changeset
551 g= c->table_gU[128] + c->table_gV[128];
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
552
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
553 #define DST1bpp1(i,o) \
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
554 Y = py_1[2*i]; \
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
555 out_1+= out_1 + g[Y+d128[0+o]]; \
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
556 Y = py_1[2*i+1]; \
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
557 out_1+= out_1 + g[Y+d128[1+o]];
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
558
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
559 #define DST2bpp1(i,o) \
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
560 Y = py_2[2*i]; \
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
561 out_2+= out_2 + g[Y+d128[8+o]]; \
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
562 Y = py_2[2*i+1]; \
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
563 out_2+= out_2 + g[Y+d128[9+o]];
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
564
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
565 DST1bpp1(0,0);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
566 DST2bpp1(0,0);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
567
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
568 DST2bpp1(1,2);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
569 DST1bpp1(1,2);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
570
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
571 DST1bpp1(2,4);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
572 DST2bpp1(2,4);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
573
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
574 DST2bpp1(3,6);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
575 DST1bpp1(3,6);
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
576
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
577 dst_1[0]= out_1;
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
578 dst_2[0]= out_2;
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
579 EPILOG(1)
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
580
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
581 SwsFunc yuv2rgb_get_func_ptr (SwsContext *c)
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
582 {
13720
821f464b4d90 adapting existing mmx/mmx2/sse/3dnow optimizations so they work on x86_64
aurel
parents: 12698
diff changeset
583 #if defined(ARCH_X86) || defined(ARCH_X86_64)
9987
988c2ffc5bc1 remove remaining cpudetect dependancy
michael
parents: 9499
diff changeset
584 if(c->flags & SWS_CPU_CAPS_MMX2){
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
585 switch(c->dstFormat){
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
586 case IMGFMT_BGR32: return yuv420_rgb32_MMX2;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
587 case IMGFMT_BGR24: return yuv420_rgb24_MMX2;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
588 case IMGFMT_BGR16: return yuv420_rgb16_MMX2;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
589 case IMGFMT_BGR15: return yuv420_rgb15_MMX2;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
590 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
591 }
9987
988c2ffc5bc1 remove remaining cpudetect dependancy
michael
parents: 9499
diff changeset
592 if(c->flags & SWS_CPU_CAPS_MMX){
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
593 switch(c->dstFormat){
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
594 case IMGFMT_BGR32: return yuv420_rgb32_MMX;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
595 case IMGFMT_BGR24: return yuv420_rgb24_MMX;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
596 case IMGFMT_BGR16: return yuv420_rgb16_MMX;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
597 case IMGFMT_BGR15: return yuv420_rgb15_MMX;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
598 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
599 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
600 #endif
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
601 #ifdef HAVE_MLIB
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
602 {
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
603 SwsFunc t= yuv2rgb_init_mlib(c);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
604 if(t) return t;
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
605 }
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
606 #endif
12698
d2aef091743c altivec yuv->rgb converter
michael
parents: 12657
diff changeset
607 #ifdef HAVE_ALTIVEC
d2aef091743c altivec yuv->rgb converter
michael
parents: 12657
diff changeset
608 if (c->flags & SWS_CPU_CAPS_ALTIVEC)
d2aef091743c altivec yuv->rgb converter
michael
parents: 12657
diff changeset
609 {
d2aef091743c altivec yuv->rgb converter
michael
parents: 12657
diff changeset
610 SwsFunc t = yuv2rgb_init_altivec(c);
d2aef091743c altivec yuv->rgb converter
michael
parents: 12657
diff changeset
611 if(t) return t;
d2aef091743c altivec yuv->rgb converter
michael
parents: 12657
diff changeset
612 }
d2aef091743c altivec yuv->rgb converter
michael
parents: 12657
diff changeset
613 #endif
d2aef091743c altivec yuv->rgb converter
michael
parents: 12657
diff changeset
614
10046
99aec27d3618 removed the last mp_msg :)
alex
parents: 9987
diff changeset
615 MSG_WARN("No accelerated colorspace conversion found\n");
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
616
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
617 switch(c->dstFormat){
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
618 case IMGFMT_RGB32:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
619 case IMGFMT_BGR32: return yuv2rgb_c_32;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
620 case IMGFMT_RGB24: return yuv2rgb_c_24_rgb;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
621 case IMGFMT_BGR24: return yuv2rgb_c_24_bgr;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
622 case IMGFMT_RGB16:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
623 case IMGFMT_BGR16:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
624 case IMGFMT_RGB15:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
625 case IMGFMT_BGR15: return yuv2rgb_c_16;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
626 case IMGFMT_RGB8:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
627 case IMGFMT_BGR8: return yuv2rgb_c_8_ordered_dither;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
628 case IMGFMT_RGB4:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
629 case IMGFMT_BGR4: return yuv2rgb_c_4_ordered_dither;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
630 case IMGFMT_RG4B:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
631 case IMGFMT_BG4B: return yuv2rgb_c_4b_ordered_dither;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
632 case IMGFMT_RGB1:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
633 case IMGFMT_BGR1: return yuv2rgb_c_1_ordered_dither;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
634 default:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
635 assert(0);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
636 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
637 return NULL;
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
638 }
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
639
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
640 static int div_round (int dividend, int divisor)
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
641 {
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
642 if (dividend > 0)
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
643 return (dividend + (divisor>>1)) / divisor;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
644 else
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
645 return -((-dividend + (divisor>>1)) / divisor);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
646 }
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
647
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
648 int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
649 {
12657
9b8d635d53cc bigendian fix
alex
parents: 12301
diff changeset
650 const int isRgb = IMGFMT_IS_BGR(c->dstFormat);
11691
30c8b8be44e1 correct C init tables
alex
parents: 10046
diff changeset
651 const int bpp = isRgb?IMGFMT_RGB_DEPTH(c->dstFormat):IMGFMT_BGR_DEPTH(c->dstFormat);
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
652 int i;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
653 uint8_t table_Y[1024];
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
654 uint32_t *table_32 = 0;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
655 uint16_t *table_16 = 0;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
656 uint8_t *table_8 = 0;
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
657 uint8_t *table_332 = 0;
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
658 uint8_t *table_121 = 0;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
659 uint8_t *table_1 = 0;
6140
44dcc49a0d80 64bit incompatibility bug, patch by Artur Grabowski <art@blahonga.org>
arpi
parents: 5937
diff changeset
660 int entry_size = 0;
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
661 void *table_r = 0, *table_g = 0, *table_b = 0;
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
662 void *table_start;
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
663
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
664 int64_t crv = inv_table[0];
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
665 int64_t cbu = inv_table[1];
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
666 int64_t cgu = -inv_table[2];
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
667 int64_t cgv = -inv_table[3];
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
668 int64_t cy = 1<<16;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
669 int64_t oy = 0;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
670
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
671 //printf("%lld %lld %lld %lld %lld\n", cy, crv, cbu, cgu, cgv);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
672 if(!fullRange){
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
673 cy= (cy*255) / 219;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
674 oy= 16<<16;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
675 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
676
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
677 cy = (cy *contrast )>>16;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
678 crv= (crv*contrast * saturation)>>32;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
679 cbu= (cbu*contrast * saturation)>>32;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
680 cgu= (cgu*contrast * saturation)>>32;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
681 cgv= (cgv*contrast * saturation)>>32;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
682 //printf("%lld %lld %lld %lld %lld\n", cy, crv, cbu, cgu, cgv);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
683 oy -= 256*brightness;
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
684
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
685 for (i = 0; i < 1024; i++) {
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
686 int j;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
687
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
688 j= (cy*(((i - 384)<<16) - oy) + (1<<31))>>32;
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
689 j = (j < 0) ? 0 : ((j > 255) ? 255 : j);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
690 table_Y[i] = j;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
691 }
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
692
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
693 switch (bpp) {
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
694 case 32:
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
695 table_start= table_32 = malloc ((197 + 2*682 + 256 + 132) * sizeof (uint32_t));
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
696
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
697 entry_size = sizeof (uint32_t);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
698 table_r = table_32 + 197;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
699 table_b = table_32 + 197 + 685;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
700 table_g = table_32 + 197 + 2*682;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
701
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
702 for (i = -197; i < 256+197; i++)
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
703 ((uint32_t *)table_r)[i] = table_Y[i+384] << (isRgb ? 16 : 0);
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
704 for (i = -132; i < 256+132; i++)
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
705 ((uint32_t *)table_g)[i] = table_Y[i+384] << 8;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
706 for (i = -232; i < 256+232; i++)
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
707 ((uint32_t *)table_b)[i] = table_Y[i+384] << (isRgb ? 0 : 16);
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
708 break;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
709
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
710 case 24:
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
711 table_start= table_8 = malloc ((256 + 2*232) * sizeof (uint8_t));
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
712
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
713 entry_size = sizeof (uint8_t);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
714 table_r = table_g = table_b = table_8 + 232;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
715
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
716 for (i = -232; i < 256+232; i++)
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
717 ((uint8_t * )table_b)[i] = table_Y[i+384];
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
718 break;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
719
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
720 case 15:
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
721 case 16:
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
722 table_start= table_16 = malloc ((197 + 2*682 + 256 + 132) * sizeof (uint16_t));
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
723
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
724 entry_size = sizeof (uint16_t);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
725 table_r = table_16 + 197;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
726 table_b = table_16 + 197 + 685;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
727 table_g = table_16 + 197 + 2*682;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
728
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
729 for (i = -197; i < 256+197; i++) {
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
730 int j = table_Y[i+384] >> 3;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
731
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
732 if (isRgb)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
733 j <<= ((bpp==16) ? 11 : 10);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
734
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
735 ((uint16_t *)table_r)[i] = j;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
736 }
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
737 for (i = -132; i < 256+132; i++) {
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
738 int j = table_Y[i+384] >> ((bpp==16) ? 2 : 3);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
739
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
740 ((uint16_t *)table_g)[i] = j << 5;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
741 }
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
742 for (i = -232; i < 256+232; i++) {
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
743 int j = table_Y[i+384] >> 3;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
744
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
745 if (!isRgb)
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
746 j <<= ((bpp==16) ? 11 : 10);
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
747
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
748 ((uint16_t *)table_b)[i] = j;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
749 }
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
750 break;
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
751
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
752 case 8:
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
753 table_start= table_332 = malloc ((197 + 2*682 + 256 + 132) * sizeof (uint8_t));
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
754
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
755 entry_size = sizeof (uint8_t);
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
756 table_r = table_332 + 197;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
757 table_b = table_332 + 197 + 685;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
758 table_g = table_332 + 197 + 2*682;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
759
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
760 for (i = -197; i < 256+197; i++) {
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
761 int j = (table_Y[i+384 - 16] + 18)/36;
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
762
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
763 if (isRgb)
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
764 j <<= 5;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
765
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
766 ((uint8_t *)table_r)[i] = j;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
767 }
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
768 for (i = -132; i < 256+132; i++) {
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
769 int j = (table_Y[i+384 - 16] + 18)/36;
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
770
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
771 if (!isRgb)
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
772 j <<= 1;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
773
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
774 ((uint8_t *)table_g)[i] = j << 2;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
775 }
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
776 for (i = -232; i < 256+232; i++) {
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
777 int j = (table_Y[i+384 - 37] + 43)/85;
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
778
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
779 if (!isRgb)
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
780 j <<= 6;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
781
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
782 ((uint8_t *)table_b)[i] = j;
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
783 }
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
784 break;
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
785 case 4:
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 7769
diff changeset
786 case 4|128:
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
787 table_start= table_121 = malloc ((197 + 2*682 + 256 + 132) * sizeof (uint8_t));
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
788
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
789 entry_size = sizeof (uint8_t);
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
790 table_r = table_121 + 197;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
791 table_b = table_121 + 197 + 685;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
792 table_g = table_121 + 197 + 2*682;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
793
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
794 for (i = -197; i < 256+197; i++) {
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
795 int j = table_Y[i+384 - 110] >> 7;
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
796
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
797 if (isRgb)
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
798 j <<= 3;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
799
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
800 ((uint8_t *)table_r)[i] = j;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
801 }
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
802 for (i = -132; i < 256+132; i++) {
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
803 int j = (table_Y[i+384 - 37]+ 43)/85;
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
804
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
805 ((uint8_t *)table_g)[i] = j << 1;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
806 }
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
807 for (i = -232; i < 256+232; i++) {
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
808 int j =table_Y[i+384 - 110] >> 7;
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
809
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
810 if (!isRgb)
6453
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
811 j <<= 3;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
812
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
813 ((uint8_t *)table_b)[i] = j;
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
814 }
7f06ef0d58a6 8bpp bugfixes (brightness, contrast ...)
michael
parents: 6452
diff changeset
815 break;
6451
ed906af317da 8bpp support (no dithering yet, use -vop noise for now)
michael
parents: 6140
diff changeset
816
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
817 case 1:
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
818 table_start= table_1 = malloc (256*2 * sizeof (uint8_t));
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
819
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
820 entry_size = sizeof (uint8_t);
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
821 table_g = table_1;
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
822 table_r = table_b = NULL;
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
823
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
824 for (i = 0; i < 256+256; i++) {
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
825 int j = table_Y[i + 384 - 110]>>7;
6456
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
826
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
827 ((uint8_t *)table_g)[i] = j;
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
828 }
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
829 break;
f0b64210ce97 1bpp support
michael
parents: 6453
diff changeset
830
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
831 default:
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
832 table_start= NULL;
10046
99aec27d3618 removed the last mp_msg :)
alex
parents: 9987
diff changeset
833 MSG_ERR("%ibpp not supported by yuv2rgb\n", bpp);
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
834 //free mem?
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
835 return -1;
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
836 }
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
837
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
838 for (i = 0; i < 256; i++) {
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
839 c->table_rV[i] = table_r + entry_size * div_round (crv * (i-128), 76309);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
840 c->table_gU[i] = table_g + entry_size * div_round (cgu * (i-128), 76309);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
841 c->table_gV[i] = entry_size * div_round (cgv * (i-128), 76309);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
842 c->table_bU[i] = table_b + entry_size * div_round (cbu * (i-128), 76309);
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
843 }
6577
aad616b63bed fixing scaling/contrast for 1/4/8 bpp
michael
parents: 6492
diff changeset
844
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
845 if(c->yuvTable) free(c->yuvTable);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
846 c->yuvTable= table_start;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9171
diff changeset
847 return 0;
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents:
diff changeset
848 }