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