1 /*****************************************************************************
2  *
3  *  XVID MPEG-4 VIDEO CODEC
4  *  - Colorspace related header  -
5  *
6  *  Copyright(C) 2001-2003 Peter Ross <pross@xvid.org>
7  *
8  *  This program is free software ; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation ; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with this program ; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  *
22  * $Id: colorspace.h 1985 2011-05-18 09:02:35Z Isibaar $
23  *
24  ****************************************************************************/
25 
26 #ifndef _COLORSPACE_H
27 #define _COLORSPACE_H
28 
29 #include "../portab.h"
30 
31 /* initialize tables */
32 
33 void colorspace_init(void);
34 
35 
36 
37 /* colorspace conversion function (encoder) */
38 
39 typedef void (packedFunc) (uint8_t * x_ptr,
40 								 int x_stride,
41 								 uint8_t * y_src,
42 								 uint8_t * v_src,
43 								 uint8_t * u_src,
44 								 int y_stride,
45 								 int uv_stride,
46 								 int width,
47 								 int height,
48 								 int vflip);
49 
50 typedef packedFunc *packedFuncPtr;
51 
52 
53 /* xxx_to_yv12 colorspace conversion functions (encoder) */
54 
55 extern packedFuncPtr rgb555_to_yv12;
56 extern packedFuncPtr rgb565_to_yv12;
57 extern packedFuncPtr rgb_to_yv12;
58 extern packedFuncPtr bgr_to_yv12;
59 extern packedFuncPtr bgra_to_yv12;
60 extern packedFuncPtr abgr_to_yv12;
61 extern packedFuncPtr rgba_to_yv12;
62 extern packedFuncPtr argb_to_yv12;
63 extern packedFuncPtr yuyv_to_yv12;
64 extern packedFuncPtr uyvy_to_yv12;
65 
66 extern packedFuncPtr rgb555i_to_yv12;
67 extern packedFuncPtr rgb565i_to_yv12;
68 extern packedFuncPtr rgbi_to_yv12;
69 extern packedFuncPtr bgri_to_yv12;
70 extern packedFuncPtr bgrai_to_yv12;
71 extern packedFuncPtr abgri_to_yv12;
72 extern packedFuncPtr rgbai_to_yv12;
73 extern packedFuncPtr argbi_to_yv12;
74 extern packedFuncPtr yuyvi_to_yv12;
75 extern packedFuncPtr uyvyi_to_yv12;
76 
77 /* plain c */
78 packedFunc rgb555_to_yv12_c;
79 packedFunc rgb565_to_yv12_c;
80 packedFunc rgb_to_yv12_c;
81 packedFunc bgr_to_yv12_c;
82 packedFunc bgra_to_yv12_c;
83 packedFunc abgr_to_yv12_c;
84 packedFunc rgba_to_yv12_c;
85 packedFunc argb_to_yv12_c;
86 packedFunc yuyv_to_yv12_c;
87 packedFunc uyvy_to_yv12_c;
88 
89 packedFunc rgb555i_to_yv12_c;
90 packedFunc rgb565i_to_yv12_c;
91 packedFunc rgbi_to_yv12_c;
92 packedFunc bgri_to_yv12_c;
93 packedFunc bgrai_to_yv12_c;
94 packedFunc abgri_to_yv12_c;
95 packedFunc rgbai_to_yv12_c;
96 packedFunc argbi_to_yv12_c;
97 packedFunc yuyvi_to_yv12_c;
98 packedFunc uyvyi_to_yv12_c;
99 
100 #if defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64)
101 /* mmx */
102 packedFunc bgr_to_yv12_mmx;
103 packedFunc rgb_to_yv12_mmx;
104 packedFunc bgra_to_yv12_mmx;
105 packedFunc rgba_to_yv12_mmx;
106 packedFunc yuyv_to_yv12_mmx;
107 packedFunc uyvy_to_yv12_mmx;
108 
109 /* 3dnow */
110 packedFunc yuyv_to_yv12_3dn;
111 packedFunc uyvy_to_yv12_3dn;
112 
113 /* xmm */
114 packedFunc yuyv_to_yv12_xmm;
115 packedFunc uyvy_to_yv12_xmm;
116 #endif
117 
118 #ifdef ARCH_IS_PPC
119 packedFunc bgra_to_yv12_altivec_c;
120 packedFunc abgr_to_yv12_altivec_c;
121 packedFunc rgba_to_yv12_altivec_c;
122 packedFunc argb_to_yv12_altivec_c;
123 
124 packedFunc yuyv_to_yv12_altivec_c;
125 packedFunc uyvy_to_yv12_altivec_c;
126 #endif
127 
128 /* yv12_to_xxx colorspace conversion functions (decoder) */
129 
130 extern packedFuncPtr yv12_to_rgb555;
131 extern packedFuncPtr yv12_to_rgb565;
132 extern packedFuncPtr yv12_to_rgb;
133 extern packedFuncPtr yv12_to_bgr;
134 extern packedFuncPtr yv12_to_bgra;
135 extern packedFuncPtr yv12_to_abgr;
136 extern packedFuncPtr yv12_to_rgba;
137 extern packedFuncPtr yv12_to_argb;
138 extern packedFuncPtr yv12_to_yuyv;
139 extern packedFuncPtr yv12_to_uyvy;
140 
141 extern packedFuncPtr yv12_to_rgb555i;
142 extern packedFuncPtr yv12_to_rgb565i;
143 extern packedFuncPtr yv12_to_rgbi;
144 extern packedFuncPtr yv12_to_bgri;
145 extern packedFuncPtr yv12_to_bgrai;
146 extern packedFuncPtr yv12_to_abgri;
147 extern packedFuncPtr yv12_to_rgbai;
148 extern packedFuncPtr yv12_to_argbi;
149 extern packedFuncPtr yv12_to_yuyvi;
150 extern packedFuncPtr yv12_to_uyvyi;
151 
152 /* plain c */
153 packedFunc yv12_to_rgb555_c;
154 packedFunc yv12_to_rgb565_c;
155 packedFunc yv12_to_rgb_c;
156 packedFunc yv12_to_bgr_c;
157 packedFunc yv12_to_bgra_c;
158 packedFunc yv12_to_abgr_c;
159 packedFunc yv12_to_rgba_c;
160 packedFunc yv12_to_argb_c;
161 packedFunc yv12_to_yuyv_c;
162 packedFunc yv12_to_uyvy_c;
163 
164 packedFunc yv12_to_rgb555i_c;
165 packedFunc yv12_to_rgb565i_c;
166 packedFunc yv12_to_rgbi_c;
167 packedFunc yv12_to_bgri_c;
168 packedFunc yv12_to_bgrai_c;
169 packedFunc yv12_to_abgri_c;
170 packedFunc yv12_to_rgbai_c;
171 packedFunc yv12_to_argbi_c;
172 packedFunc yv12_to_yuyvi_c;
173 packedFunc yv12_to_uyvyi_c;
174 
175 #if defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64)
176 /* mmx */
177 packedFunc yv12_to_bgr_mmx;
178 packedFunc yv12_to_bgra_mmx;
179 packedFunc yv12_to_yuyv_mmx;
180 packedFunc yv12_to_uyvy_mmx;
181 
182 packedFunc yv12_to_yuyvi_mmx;
183 packedFunc yv12_to_uyvyi_mmx;
184 #endif
185 
186 #ifdef ARCH_IS_PPC
187 packedFunc yv12_to_yuyv_altivec_c;
188 packedFunc yv12_to_uyvy_altivec_c;
189 #endif
190 
191 typedef void (planarFunc) (
192 				uint8_t * y_dst, uint8_t * u_dst, uint8_t * v_dst,
193 				int y_dst_stride, int uv_dst_stride,
194 				uint8_t * y_src, uint8_t * u_src, uint8_t * v_src,
195 				int y_src_stride, int uv_src_stride,
196 				int width, int height, int vflip);
197 typedef planarFunc *planarFuncPtr;
198 
199 extern planarFuncPtr yv12_to_yv12;
200 
201 planarFunc yv12_to_yv12_c;
202 
203 #if defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64)
204 planarFunc yv12_to_yv12_mmx;
205 planarFunc yv12_to_yv12_xmm;
206 #endif
207 
208 
209 #endif							/* _COLORSPACE_H_ */
210