annotate libswscale/yuv2rgb.c @ 21033:087cad309e9c

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