annotate libswscale/yuv2rgb.c @ 23028:57f56d8e182e

Add shift_[xy] (vector that is added to the glyph before transformation) to bitmap glyph key. Result of rotation depends on them because of perspective transformation. They are only set when some rotation take place.
author eugeni
date Fri, 20 Apr 2007 23:19:23 +0000
parents f37a3ef2685e
children 9528d1ebe68f
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
21976
8aac0a59f9c7 Fix license headers and FSF postal address.
diego
parents: 21759
diff changeset
25 * along with mpeg2dec; if not, write to the Free Software
8aac0a59f9c7 Fix license headers and FSF postal address.
diego
parents: 21759
diff changeset
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18861
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]; \
21758
bb3212f8b1fe Add some explicit casts to avoid "assignment from incompatible pointer type"
lucabe
parents: 21757
diff changeset
216 r = (void *)c->table_rV[V]; \
bb3212f8b1fe Add some explicit casts to avoid "assignment from incompatible pointer type"
lucabe
parents: 21757
diff changeset
217 g = (void *)(c->table_gU[U] + c->table_gV[V]); \
bb3212f8b1fe Add some explicit casts to avoid "assignment from incompatible pointer type"
lucabe
parents: 21757
diff changeset
218 b = (void *)c->table_bU[U];
18861
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]);\
21759
8e1f3387d864 Mark some variables as possibly unused to avoid warnings
lucabe
parents: 21758
diff changeset
268 dst_type attribute_unused *r, *b;\
8e1f3387d864 Mark some variables as possibly unused to avoid warnings
lucabe
parents: 21758
diff changeset
269 dst_type *g;\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
270 uint8_t *py_1= src[0] + y*srcStride[0];\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
271 uint8_t *py_2= py_1 + srcStride[0];\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
272 uint8_t *pu= src[1] + (y>>1)*srcStride[1];\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
273 uint8_t *pv= src[2] + (y>>1)*srcStride[2];\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
274 unsigned int h_size= c->dstW>>3;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
275 while (h_size--) {\
21759
8e1f3387d864 Mark some variables as possibly unused to avoid warnings
lucabe
parents: 21758
diff changeset
276 int attribute_unused U, V;\
8e1f3387d864 Mark some variables as possibly unused to avoid warnings
lucabe
parents: 21758
diff changeset
277 int Y;\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
278
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
279 #define EPILOG(dst_delta)\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
280 pu += 4;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
281 pv += 4;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
282 py_1 += 8;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
283 py_2 += 8;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
284 dst_1 += dst_delta;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
285 dst_2 += dst_delta;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
286 }\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
287 }\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
288 return srcSliceH;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
289 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
290
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
291 PROLOG(yuv2rgb_c_32, uint32_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
292 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
293 DST1(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
294 DST2(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
295
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
296 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
297 DST2(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
298 DST1(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
299
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
300 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
301 DST1(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
302 DST2(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
303
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
304 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
305 DST2(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
306 DST1(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
307 EPILOG(8)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
308
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
309 PROLOG(yuv2rgb_c_24_rgb, uint8_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
310 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
311 DST1RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
312 DST2RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
313
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
314 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
315 DST2RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
316 DST1RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
317
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
318 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
319 DST1RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
320 DST2RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
321
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
322 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
323 DST2RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
324 DST1RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
325 EPILOG(24)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
326
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
327 // only trivial mods from yuv2rgb_c_24_rgb
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
328 PROLOG(yuv2rgb_c_24_bgr, uint8_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
329 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
330 DST1BGR(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
331 DST2BGR(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
332
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
333 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
334 DST2BGR(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
335 DST1BGR(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
336
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
337 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
338 DST1BGR(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
339 DST2BGR(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
340
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
341 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
342 DST2BGR(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
343 DST1BGR(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
344 EPILOG(24)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
345
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
346 // This is exactly the same code as yuv2rgb_c_32 except for the types of
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
347 // r, g, b, dst_1, dst_2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
348 PROLOG(yuv2rgb_c_16, uint16_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
349 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
350 DST1(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
351 DST2(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
352
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
353 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
354 DST2(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
355 DST1(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
356
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
357 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
358 DST1(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
359 DST2(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
360
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
361 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
362 DST2(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
363 DST1(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
364 EPILOG(8)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
365
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
366 // This is exactly the same code as yuv2rgb_c_32 except for the types of
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
367 // r, g, b, dst_1, dst_2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
368 PROLOG(yuv2rgb_c_8, uint8_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
369 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
370 DST1(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
371 DST2(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
372
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
373 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
374 DST2(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
375 DST1(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
376
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
377 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
378 DST1(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
379 DST2(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
380
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
381 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
382 DST2(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
383 DST1(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
384 EPILOG(8)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
385
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
386 // r, g, b, dst_1, dst_2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
387 PROLOG(yuv2rgb_c_8_ordered_dither, uint8_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
388 const uint8_t *d32= dither_8x8_32[y&7];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
389 const uint8_t *d64= dither_8x8_73[y&7];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
390 #define DST1bpp8(i,o) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
391 Y = py_1[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
392 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
393 Y = py_1[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
394 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
395
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
396 #define DST2bpp8(i,o) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
397 Y = py_2[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
398 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
399 Y = py_2[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
400 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
401
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
402
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
403 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
404 DST1bpp8(0,0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
405 DST2bpp8(0,0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
406
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
407 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
408 DST2bpp8(1,2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
409 DST1bpp8(1,2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
410
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
411 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
412 DST1bpp8(2,4);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
413 DST2bpp8(2,4);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
414
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
415 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
416 DST2bpp8(3,6);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
417 DST1bpp8(3,6);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
418 EPILOG(8)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
419
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
420
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
421 // This is exactly the same code as yuv2rgb_c_32 except for the types of
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
422 // r, g, b, dst_1, dst_2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
423 PROLOG(yuv2rgb_c_4, uint8_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
424 int acc;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
425 #define DST1_4(i) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
426 Y = py_1[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
427 acc = r[Y] + g[Y] + b[Y]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
428 Y = py_1[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
429 acc |= (r[Y] + g[Y] + b[Y])<<4;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
430 dst_1[i] = acc;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
431
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
432 #define DST2_4(i) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
433 Y = py_2[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
434 acc = r[Y] + g[Y] + b[Y]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
435 Y = py_2[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
436 acc |= (r[Y] + g[Y] + b[Y])<<4;\
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
437 dst_2[i] = acc;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
438
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
439 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
440 DST1_4(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
441 DST2_4(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
442
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
443 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
444 DST2_4(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
445 DST1_4(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
446
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
447 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
448 DST1_4(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
449 DST2_4(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
450
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
451 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
452 DST2_4(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
453 DST1_4(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
454 EPILOG(4)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
455
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
456 PROLOG(yuv2rgb_c_4_ordered_dither, uint8_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
457 const uint8_t *d64= dither_8x8_73[y&7];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
458 const uint8_t *d128=dither_8x8_220[y&7];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
459 int acc;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
460
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
461 #define DST1bpp4(i,o) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
462 Y = py_1[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
463 acc = r[Y+d128[0+o]] + g[Y+d64[0+o]] + b[Y+d128[0+o]]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
464 Y = py_1[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
465 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
466 dst_1[i]= acc;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
467
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
468 #define DST2bpp4(i,o) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
469 Y = py_2[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
470 acc = r[Y+d128[8+o]] + g[Y+d64[8+o]] + b[Y+d128[8+o]]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
471 Y = py_2[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
472 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
473 dst_2[i]= acc;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
474
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
475
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
476 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
477 DST1bpp4(0,0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
478 DST2bpp4(0,0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
479
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
480 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
481 DST2bpp4(1,2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
482 DST1bpp4(1,2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
483
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
484 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
485 DST1bpp4(2,4);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
486 DST2bpp4(2,4);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
487
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
488 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
489 DST2bpp4(3,6);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
490 DST1bpp4(3,6);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
491 EPILOG(4)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
492
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
493 // This is exactly the same code as yuv2rgb_c_32 except for the types of
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
494 // r, g, b, dst_1, dst_2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
495 PROLOG(yuv2rgb_c_4b, uint8_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
496 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
497 DST1(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
498 DST2(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
499
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
500 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
501 DST2(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
502 DST1(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
503
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
504 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
505 DST1(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
506 DST2(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
507
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
508 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
509 DST2(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
510 DST1(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
511 EPILOG(8)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
512
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
513 PROLOG(yuv2rgb_c_4b_ordered_dither, uint8_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
514 const uint8_t *d64= dither_8x8_73[y&7];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
515 const uint8_t *d128=dither_8x8_220[y&7];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
516
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
517 #define DST1bpp4b(i,o) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
518 Y = py_1[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
519 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
520 Y = py_1[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
521 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
522
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
523 #define DST2bpp4b(i,o) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
524 Y = py_2[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
525 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
526 Y = py_2[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
527 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
528
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
529
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
530 RGB(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
531 DST1bpp4b(0,0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
532 DST2bpp4b(0,0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
533
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
534 RGB(1);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
535 DST2bpp4b(1,2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
536 DST1bpp4b(1,2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
537
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
538 RGB(2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
539 DST1bpp4b(2,4);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
540 DST2bpp4b(2,4);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
541
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
542 RGB(3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
543 DST2bpp4b(3,6);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
544 DST1bpp4b(3,6);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
545 EPILOG(8)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
546
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
547 PROLOG(yuv2rgb_c_1_ordered_dither, uint8_t)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
548 const uint8_t *d128=dither_8x8_220[y&7];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
549 char out_1=0, out_2=0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
550 g= c->table_gU[128] + c->table_gV[128];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
551
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
552 #define DST1bpp1(i,o) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
553 Y = py_1[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
554 out_1+= out_1 + g[Y+d128[0+o]]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
555 Y = py_1[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
556 out_1+= out_1 + g[Y+d128[1+o]];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
557
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
558 #define DST2bpp1(i,o) \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
559 Y = py_2[2*i]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
560 out_2+= out_2 + g[Y+d128[8+o]]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
561 Y = py_2[2*i+1]; \
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
562 out_2+= out_2 + g[Y+d128[9+o]];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
563
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
564 DST1bpp1(0,0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
565 DST2bpp1(0,0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
566
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
567 DST2bpp1(1,2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
568 DST1bpp1(1,2);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
569
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
570 DST1bpp1(2,4);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
571 DST2bpp1(2,4);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
572
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
573 DST2bpp1(3,6);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
574 DST1bpp1(3,6);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
575
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
576 dst_1[0]= out_1;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
577 dst_2[0]= out_2;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
578 EPILOG(1)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
579
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
580 SwsFunc yuv2rgb_get_func_ptr (SwsContext *c)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
581 {
19333
4f5e2e0529b1 Do not assemble MMX, MMX2 or 3DNOW code unconditionally on X86 and X86_64.
diego
parents: 19206
diff changeset
582 #if defined(HAVE_MMX2) || defined(HAVE_MMX)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
583 if(c->flags & SWS_CPU_CAPS_MMX2){
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
584 switch(c->dstFormat){
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
585 case PIX_FMT_RGB32: return yuv420_rgb32_MMX2;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
586 case PIX_FMT_BGR24: return yuv420_rgb24_MMX2;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
587 case PIX_FMT_BGR565: return yuv420_rgb16_MMX2;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
588 case PIX_FMT_BGR555: return yuv420_rgb15_MMX2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
589 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
590 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
591 if(c->flags & SWS_CPU_CAPS_MMX){
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
592 switch(c->dstFormat){
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
593 case PIX_FMT_RGB32: return yuv420_rgb32_MMX;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
594 case PIX_FMT_BGR24: return yuv420_rgb24_MMX;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
595 case PIX_FMT_BGR565: return yuv420_rgb16_MMX;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
596 case PIX_FMT_BGR555: return yuv420_rgb15_MMX;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
597 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
598 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
599 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
600 #ifdef HAVE_MLIB
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
601 {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
602 SwsFunc t= yuv2rgb_init_mlib(c);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
603 if(t) return t;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
604 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
605 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
606 #ifdef HAVE_ALTIVEC
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
607 if (c->flags & SWS_CPU_CAPS_ALTIVEC)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
608 {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
609 SwsFunc t = yuv2rgb_init_altivec(c);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
610 if(t) return t;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
611 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
612 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
613
21981
a14ddab18acd Pass a context to av_log(), when possible
lucabe
parents: 21976
diff changeset
614 av_log(c, AV_LOG_WARNING, "No accelerated colorspace conversion found\n");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
615
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
616 switch(c->dstFormat){
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
617 case PIX_FMT_BGR32:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
618 case PIX_FMT_RGB32: return yuv2rgb_c_32;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
619 case PIX_FMT_RGB24: return yuv2rgb_c_24_rgb;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
620 case PIX_FMT_BGR24: return yuv2rgb_c_24_bgr;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
621 case PIX_FMT_RGB565:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
622 case PIX_FMT_BGR565:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
623 case PIX_FMT_RGB555:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
624 case PIX_FMT_BGR555: return yuv2rgb_c_16;
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
625 case PIX_FMT_RGB8:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
626 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
627 case PIX_FMT_RGB4:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
628 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
629 case PIX_FMT_RGB4_BYTE:
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
630 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
631 case PIX_FMT_MONOBLACK: return yuv2rgb_c_1_ordered_dither;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
632 default:
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
633 assert(0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
634 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
635 return NULL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
636 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
637
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
638 static int div_round (int dividend, int divisor)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
639 {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
640 if (dividend > 0)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
641 return (dividend + (divisor>>1)) / divisor;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
642 else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
643 return -((-dividend + (divisor>>1)) / divisor);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
644 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
645
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
646 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
647 {
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
648 const int isRgb = isBGR(c->dstFormat);
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 19431
diff changeset
649 const int bpp = fmt_depth(c->dstFormat);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
650 int i;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
651 uint8_t table_Y[1024];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
652 uint32_t *table_32 = 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
653 uint16_t *table_16 = 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
654 uint8_t *table_8 = 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
655 uint8_t *table_332 = 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
656 uint8_t *table_121 = 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
657 uint8_t *table_1 = 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
658 int entry_size = 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
659 void *table_r = 0, *table_g = 0, *table_b = 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
660 void *table_start;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
661
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
662 int64_t crv = inv_table[0];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
663 int64_t cbu = inv_table[1];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
664 int64_t cgu = -inv_table[2];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
665 int64_t cgv = -inv_table[3];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
666 int64_t cy = 1<<16;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
667 int64_t oy = 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
668
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
669 //printf("%lld %lld %lld %lld %lld\n", cy, crv, cbu, cgu, cgv);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
670 if(!fullRange){
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
671 cy= (cy*255) / 219;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
672 oy= 16<<16;
22695
f37a3ef2685e fix full range (jpeg yuv) chroma
michael
parents: 21981
diff changeset
673 }else{
f37a3ef2685e fix full range (jpeg yuv) chroma
michael
parents: 21981
diff changeset
674 crv= (crv*224) / 255;
f37a3ef2685e fix full range (jpeg yuv) chroma
michael
parents: 21981
diff changeset
675 cbu= (cbu*224) / 255;
f37a3ef2685e fix full range (jpeg yuv) chroma
michael
parents: 21981
diff changeset
676 cgu= (cgu*224) / 255;
f37a3ef2685e fix full range (jpeg yuv) chroma
michael
parents: 21981
diff changeset
677 cgv= (cgv*224) / 255;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
678 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
679
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
680 cy = (cy *contrast )>>16;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
681 crv= (crv*contrast * saturation)>>32;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
682 cbu= (cbu*contrast * saturation)>>32;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
683 cgu= (cgu*contrast * saturation)>>32;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
684 cgv= (cgv*contrast * saturation)>>32;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
685 //printf("%lld %lld %lld %lld %lld\n", cy, crv, cbu, cgu, cgv);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
686 oy -= 256*brightness;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
687
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
688 for (i = 0; i < 1024; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
689 int j;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
690
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
691 j= (cy*(((i - 384)<<16) - oy) + (1<<31))>>32;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
692 j = (j < 0) ? 0 : ((j > 255) ? 255 : j);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
693 table_Y[i] = j;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
694 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
695
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
696 switch (bpp) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
697 case 32:
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
698 table_start= table_32 = av_malloc ((197 + 2*682 + 256 + 132) * sizeof (uint32_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
699
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
700 entry_size = sizeof (uint32_t);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
701 table_r = table_32 + 197;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
702 table_b = table_32 + 197 + 685;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
703 table_g = table_32 + 197 + 2*682;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
704
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
705 for (i = -197; i < 256+197; i++)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
706 ((uint32_t *)table_r)[i] = table_Y[i+384] << (isRgb ? 16 : 0);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
707 for (i = -132; i < 256+132; i++)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
708 ((uint32_t *)table_g)[i] = table_Y[i+384] << 8;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
709 for (i = -232; i < 256+232; i++)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
710 ((uint32_t *)table_b)[i] = table_Y[i+384] << (isRgb ? 0 : 16);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
711 break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
712
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
713 case 24:
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
714 table_start= table_8 = av_malloc ((256 + 2*232) * sizeof (uint8_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
715
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
716 entry_size = sizeof (uint8_t);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
717 table_r = table_g = table_b = table_8 + 232;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
718
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
719 for (i = -232; i < 256+232; i++)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
720 ((uint8_t * )table_b)[i] = table_Y[i+384];
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
721 break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
722
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
723 case 15:
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
724 case 16:
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
725 table_start= table_16 = av_malloc ((197 + 2*682 + 256 + 132) * sizeof (uint16_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
726
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
727 entry_size = sizeof (uint16_t);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
728 table_r = table_16 + 197;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
729 table_b = table_16 + 197 + 685;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
730 table_g = table_16 + 197 + 2*682;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
731
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
732 for (i = -197; i < 256+197; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
733 int j = table_Y[i+384] >> 3;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
734
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
735 if (isRgb)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
736 j <<= ((bpp==16) ? 11 : 10);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
737
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
738 ((uint16_t *)table_r)[i] = j;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
739 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
740 for (i = -132; i < 256+132; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
741 int j = table_Y[i+384] >> ((bpp==16) ? 2 : 3);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
742
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
743 ((uint16_t *)table_g)[i] = j << 5;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
744 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
745 for (i = -232; i < 256+232; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
746 int j = table_Y[i+384] >> 3;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
747
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
748 if (!isRgb)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
749 j <<= ((bpp==16) ? 11 : 10);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
750
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
751 ((uint16_t *)table_b)[i] = j;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
752 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
753 break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
754
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
755 case 8:
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
756 table_start= table_332 = av_malloc ((197 + 2*682 + 256 + 132) * sizeof (uint8_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
757
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
758 entry_size = sizeof (uint8_t);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
759 table_r = table_332 + 197;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
760 table_b = table_332 + 197 + 685;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
761 table_g = table_332 + 197 + 2*682;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
762
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
763 for (i = -197; i < 256+197; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
764 int j = (table_Y[i+384 - 16] + 18)/36;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
765
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
766 if (isRgb)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
767 j <<= 5;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
768
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
769 ((uint8_t *)table_r)[i] = j;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
770 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
771 for (i = -132; i < 256+132; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
772 int j = (table_Y[i+384 - 16] + 18)/36;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
773
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
774 if (!isRgb)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
775 j <<= 1;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
776
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
777 ((uint8_t *)table_g)[i] = j << 2;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
778 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
779 for (i = -232; i < 256+232; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
780 int j = (table_Y[i+384 - 37] + 43)/85;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
781
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
782 if (!isRgb)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
783 j <<= 6;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
784
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
785 ((uint8_t *)table_b)[i] = j;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
786 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
787 break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
788 case 4:
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
789 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
790 table_start= table_121 = av_malloc ((197 + 2*682 + 256 + 132) * sizeof (uint8_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
791
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
792 entry_size = sizeof (uint8_t);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
793 table_r = table_121 + 197;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
794 table_b = table_121 + 197 + 685;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
795 table_g = table_121 + 197 + 2*682;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
796
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
797 for (i = -197; i < 256+197; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
798 int j = table_Y[i+384 - 110] >> 7;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
799
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
800 if (isRgb)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
801 j <<= 3;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
802
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
803 ((uint8_t *)table_r)[i] = j;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
804 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
805 for (i = -132; i < 256+132; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
806 int j = (table_Y[i+384 - 37]+ 43)/85;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
807
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
808 ((uint8_t *)table_g)[i] = j << 1;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
809 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
810 for (i = -232; i < 256+232; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
811 int j =table_Y[i+384 - 110] >> 7;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
812
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
813 if (!isRgb)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
814 j <<= 3;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
815
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
816 ((uint8_t *)table_b)[i] = j;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
817 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
818 break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
819
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
820 case 1:
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
821 table_start= table_1 = av_malloc (256*2 * sizeof (uint8_t));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
822
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
823 entry_size = sizeof (uint8_t);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
824 table_g = table_1;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
825 table_r = table_b = NULL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
826
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
827 for (i = 0; i < 256+256; i++) {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
828 int j = table_Y[i + 384 - 110]>>7;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
829
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
830 ((uint8_t *)table_g)[i] = j;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
831 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
832 break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
833
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
834 default:
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
835 table_start= NULL;
21981
a14ddab18acd Pass a context to av_log(), when possible
lucabe
parents: 21976
diff changeset
836 av_log(c, AV_LOG_ERROR, "%ibpp not supported by yuv2rgb\n", bpp);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
837 //free mem?
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
838 return -1;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
839 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
840
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
841 for (i = 0; i < 256; i++) {
21757
51f84ed3251b Add some other casts, to remove void pointers arithmetic
lucabe
parents: 20576
diff changeset
842 c->table_rV[i] = (uint8_t *)table_r + entry_size * div_round (crv * (i-128), 76309);
51f84ed3251b Add some other casts, to remove void pointers arithmetic
lucabe
parents: 20576
diff changeset
843 c->table_gU[i] = (uint8_t *)table_g + entry_size * div_round (cgu * (i-128), 76309);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
844 c->table_gV[i] = entry_size * div_round (cgv * (i-128), 76309);
21757
51f84ed3251b Add some other casts, to remove void pointers arithmetic
lucabe
parents: 20576
diff changeset
845 c->table_bU[i] = (uint8_t *)table_b + entry_size * div_round (cbu * (i-128), 76309);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
846 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
847
19143
c4dac777b44c Use libavutil in libswscale, and allow it to be built out of the mplayer tree
lucabe
parents: 18861
diff changeset
848 av_free(c->yuvTable);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
849 c->yuvTable= table_start;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
850 return 0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
851 }