annotate postproc/rgb2rgb.c @ 5574:bdfd4b72244a

fixing vertical scaling on non mobility cards, this might have overflowed into the horizontal stuff, so perhaps it fixes the horizontal stuff too
author michael
date Fri, 12 Apr 2002 12:29:12 +0000
parents 2819346c6049
children 21bd4b32abb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
1 /*
2538
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
2 *
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
3 * rgb2rgb.c, Software RGB to RGB convertor
2732
ae79207a3055 Move yuv2rgb to postprocess
nick
parents: 2725
diff changeset
4 * pluralize by Software PAL8 to RGB convertor
ae79207a3055 Move yuv2rgb to postprocess
nick
parents: 2725
diff changeset
5 * Software YUV to YUV convertor
ae79207a3055 Move yuv2rgb to postprocess
nick
parents: 2725
diff changeset
6 * Software YUV to RGB convertor
2538
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
7 * Written by Nick Kurshev.
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
8 * palette & yuv & runtime cpu stuff by Michael (michaelni@gmx.at) (under GPL)
2538
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
9 */
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents:
diff changeset
10 #include <inttypes.h>
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents:
diff changeset
11 #include "../config.h"
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents:
diff changeset
12 #include "rgb2rgb.h"
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
13 #include "../cpudetect.h"
4923
3cc0f4938be1 add mangling
atmos4
parents: 4622
diff changeset
14 #include "../mangle.h"
2538
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
15
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
16 #ifdef ARCH_X86
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
17 #define CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
18 #endif
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
19
4622
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
20 #define FAST_BGR2YV12 // use 7 bit coeffs instead of 15bit
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
21
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
22 #ifdef CAN_COMPILE_X86_ASM
2755
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
23 static const uint64_t mask32b __attribute__((aligned(8))) = 0x000000FF000000FFULL;
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
24 static const uint64_t mask32g __attribute__((aligned(8))) = 0x0000FF000000FF00ULL;
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
25 static const uint64_t mask32r __attribute__((aligned(8))) = 0x00FF000000FF0000ULL;
2538
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
26 static const uint64_t mask32 __attribute__((aligned(8))) = 0x00FFFFFF00FFFFFFULL;
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
27 static const uint64_t mask24l __attribute__((aligned(8))) = 0x0000000000FFFFFFULL;
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
28 static const uint64_t mask24h __attribute__((aligned(8))) = 0x0000FFFFFF000000ULL;
2746
dece635a28e3 Minor speedup of rgb32to24. (performance is not successful)
nick
parents: 2741
diff changeset
29 static const uint64_t mask24hh __attribute__((aligned(8))) = 0xffff000000000000ULL;
dece635a28e3 Minor speedup of rgb32to24. (performance is not successful)
nick
parents: 2741
diff changeset
30 static const uint64_t mask24hhh __attribute__((aligned(8))) = 0xffffffff00000000ULL;
dece635a28e3 Minor speedup of rgb32to24. (performance is not successful)
nick
parents: 2741
diff changeset
31 static const uint64_t mask24hhhh __attribute__((aligned(8))) = 0xffffffffffff0000ULL;
2538
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
32 static const uint64_t mask15b __attribute__((aligned(8))) = 0x001F001F001F001FULL; /* 00000000 00011111 xxB */
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
33 static const uint64_t mask15rg __attribute__((aligned(8))) = 0x7FE07FE07FE07FE0ULL; /* 01111111 11100000 RGx */
2698
22652c028692 faster 15to16 bit rgb (the mmx routine is limited by memory speed so there is no difference ): but the c routine is faster
michael
parents: 2697
diff changeset
34 static const uint64_t mask15s __attribute__((aligned(8))) = 0xFFE0FFE0FFE0FFE0ULL;
2741
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
35 static const uint64_t red_16mask __attribute__((aligned(8))) = 0x0000f8000000f800ULL;
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
36 static const uint64_t green_16mask __attribute__((aligned(8)))= 0x000007e0000007e0ULL;
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
37 static const uint64_t blue_16mask __attribute__((aligned(8))) = 0x0000001f0000001fULL;
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
38 static const uint64_t red_15mask __attribute__((aligned(8))) = 0x00007c000000f800ULL;
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
39 static const uint64_t green_15mask __attribute__((aligned(8)))= 0x000003e0000007e0ULL;
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
40 static const uint64_t blue_15mask __attribute__((aligned(8))) = 0x0000001f0000001fULL;
4622
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
41
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
42 #ifdef FAST_BGR2YV12
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
43 static const uint64_t bgr2YCoeff __attribute__((aligned(8))) = 0x000000210041000DULL;
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
44 static const uint64_t bgr2UCoeff __attribute__((aligned(8))) = 0x0000FFEEFFDC0038ULL;
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
45 static const uint64_t bgr2VCoeff __attribute__((aligned(8))) = 0x00000038FFD2FFF8ULL;
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
46 #else
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
47 static const uint64_t bgr2YCoeff __attribute__((aligned(8))) = 0x000020E540830C8BULL;
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
48 static const uint64_t bgr2UCoeff __attribute__((aligned(8))) = 0x0000ED0FDAC23831ULL;
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
49 static const uint64_t bgr2VCoeff __attribute__((aligned(8))) = 0x00003831D0E6F6EAULL;
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
50 #endif
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
51 static const uint64_t bgr2YOffset __attribute__((aligned(8))) = 0x1010101010101010ULL;
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
52 static const uint64_t bgr2UVOffset __attribute__((aligned(8)))= 0x8080808080808080ULL;
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
53 static const uint64_t w1111 __attribute__((aligned(8))) = 0x0001000100010001ULL;
e3a9fae516e4 rgb24toyv12 in MMX (untested)
michael
parents: 3132
diff changeset
54
2755
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
55 #if 0
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
56 static volatile uint64_t __attribute__((aligned(8))) b5Dither;
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
57 static volatile uint64_t __attribute__((aligned(8))) g5Dither;
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
58 static volatile uint64_t __attribute__((aligned(8))) g6Dither;
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
59 static volatile uint64_t __attribute__((aligned(8))) r5Dither;
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
60
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
61 static uint64_t __attribute__((aligned(8))) dither4[2]={
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
62 0x0103010301030103LL,
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
63 0x0200020002000200LL,};
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
64
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
65 static uint64_t __attribute__((aligned(8))) dither8[2]={
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
66 0x0602060206020602LL,
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
67 0x0004000400040004LL,};
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
68 #endif
2535
b44113f46c96 cant compile on non x86 bugfix
michael
parents: 2517
diff changeset
69 #endif
2513
nick
parents: 2512
diff changeset
70
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
71 #define RGB2YUV_SHIFT 8
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
72 #define BY ((int)( 0.098*(1<<RGB2YUV_SHIFT)+0.5))
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
73 #define BV ((int)(-0.071*(1<<RGB2YUV_SHIFT)+0.5))
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
74 #define BU ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
75 #define GY ((int)( 0.504*(1<<RGB2YUV_SHIFT)+0.5))
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
76 #define GV ((int)(-0.368*(1<<RGB2YUV_SHIFT)+0.5))
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
77 #define GU ((int)(-0.291*(1<<RGB2YUV_SHIFT)+0.5))
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
78 #define RY ((int)( 0.257*(1<<RGB2YUV_SHIFT)+0.5))
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
79 #define RV ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
80 #define RU ((int)(-0.148*(1<<RGB2YUV_SHIFT)+0.5))
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
81
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
82 //Note: we have C, MMX, MMX2, 3DNOW version therse no 3DNOW+MMX2 one
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
83 //Plain C versions
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
84 #undef HAVE_MMX
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
85 #undef HAVE_MMX2
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
86 #undef HAVE_3DNOW
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
87 #undef ARCH_X86
5338
michael
parents: 5337
diff changeset
88 #undef HAVE_SSE2
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
89 #define RENAME(a) a ## _C
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
90 #include "rgb2rgb_template.c"
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
91
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
92 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
93
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
94 //MMX versions
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
95 #undef RENAME
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
96 #define HAVE_MMX
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
97 #undef HAVE_MMX2
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
98 #undef HAVE_3DNOW
5338
michael
parents: 5337
diff changeset
99 #undef HAVE_SSE2
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
100 #define ARCH_X86
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
101 #define RENAME(a) a ## _MMX
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
102 #include "rgb2rgb_template.c"
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
103
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
104 //MMX2 versions
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
105 #undef RENAME
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
106 #define HAVE_MMX
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
107 #define HAVE_MMX2
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
108 #undef HAVE_3DNOW
5338
michael
parents: 5337
diff changeset
109 #undef HAVE_SSE2
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
110 #define ARCH_X86
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
111 #define RENAME(a) a ## _MMX2
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
112 #include "rgb2rgb_template.c"
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
113
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
114 //3DNOW versions
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
115 #undef RENAME
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
116 #define HAVE_MMX
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
117 #undef HAVE_MMX2
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
118 #define HAVE_3DNOW
5338
michael
parents: 5337
diff changeset
119 #undef HAVE_SSE2
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
120 #define ARCH_X86
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
121 #define RENAME(a) a ## _3DNow
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
122 #include "rgb2rgb_template.c"
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
123
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
124 #endif //CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
125
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
126 void rgb24to32(const uint8_t *src,uint8_t *dst,unsigned src_size)
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents:
diff changeset
127 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
128 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
129 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
130 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
131 rgb24to32_MMX2(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
132 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
133 rgb24to32_3DNow(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
134 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
135 rgb24to32_MMX(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
136 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
137 rgb24to32_C(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
138 #else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
139 rgb24to32_C(src, dst, src_size);
2510
42e1ae2c8f5f mmx optimized 24to32
nick
parents: 2508
diff changeset
140 #endif
2504
13e1c5ab417a vo_vesa: rgb2rgb support
nick
parents:
diff changeset
141 }
2505
2aaa11d22f91 vo_vesa: more rgb2rgb support
nick
parents: 2504
diff changeset
142
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
143 void rgb32to24(const uint8_t *src,uint8_t *dst,unsigned src_size)
2505
2aaa11d22f91 vo_vesa: more rgb2rgb support
nick
parents: 2504
diff changeset
144 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
145 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
146 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
147 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
148 rgb32to24_MMX2(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
149 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
150 rgb32to24_3DNow(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
151 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
152 rgb32to24_MMX(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
153 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
154 rgb32to24_C(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
155 #else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
156 rgb32to24_C(src, dst, src_size);
2517
3d507ef1e3ed 32to24: MMX, MMX2, 3DNOW optimization
nick
parents: 2516
diff changeset
157 #endif
2505
2aaa11d22f91 vo_vesa: more rgb2rgb support
nick
parents: 2504
diff changeset
158 }
2506
501752469c39 vo_vesa: more rgb2rgb support
nick
parents: 2505
diff changeset
159
2538
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
160 /*
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
161 Original by Strepto/Astral
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
162 ported to gcc & bugfixed : A'rpi
2564
3d04a0991dce cosmetic
nick
parents: 2538
diff changeset
163 MMX2, 3DNOW optimization by Nick Kurshev
2698
22652c028692 faster 15to16 bit rgb (the mmx routine is limited by memory speed so there is no difference ): but the c routine is faster
michael
parents: 2697
diff changeset
164 32bit c version, and and&add trick by Michael Niedermayer
2538
71320898b333 Finish mmx2, 3dnow optimiz. 15to16 should be tested. Better fix of can't compile
nick
parents: 2535
diff changeset
165 */
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
166 void rgb15to16(const uint8_t *src,uint8_t *dst,unsigned src_size)
2506
501752469c39 vo_vesa: more rgb2rgb support
nick
parents: 2505
diff changeset
167 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
168 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
169 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
170 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
171 rgb15to16_MMX2(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
172 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
173 rgb15to16_3DNow(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
174 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
175 rgb15to16_MMX(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
176 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
177 rgb15to16_C(src, dst, src_size);
2506
501752469c39 vo_vesa: more rgb2rgb support
nick
parents: 2505
diff changeset
178 #else
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
179 rgb15to16_C(src, dst, src_size);
2506
501752469c39 vo_vesa: more rgb2rgb support
nick
parents: 2505
diff changeset
180 #endif
501752469c39 vo_vesa: more rgb2rgb support
nick
parents: 2505
diff changeset
181 }
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
182
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
183 /**
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
184 * Pallete is assumed to contain bgr32
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
185 */
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
186 void palette8torgb32(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette)
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
187 {
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
188 unsigned i;
2702
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
189 for(i=0; i<num_pixels; i++)
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
190 ((unsigned *)dst)[i] = ((unsigned *)palette)[ src[i] ];
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
191 }
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
192
2697
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
193 /**
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
194 * Pallete is assumed to contain bgr32
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
195 */
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
196 void palette8torgb24(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette)
2697
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
197 {
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
198 unsigned i;
2697
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
199 /*
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
200 writes 1 byte o much and might cause alignment issues on some architectures?
2702
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
201 for(i=0; i<num_pixels; i++)
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
202 ((unsigned *)(&dst[i*3])) = ((unsigned *)palette)[ src[i] ];
2697
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
203 */
2702
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
204 for(i=0; i<num_pixels; i++)
2697
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
205 {
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
206 //FIXME slow?
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
207 dst[0]= palette[ src[i]*4+0 ];
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
208 dst[1]= palette[ src[i]*4+1 ];
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
209 dst[2]= palette[ src[i]*4+2 ];
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
210 dst+= 3;
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
211 }
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
212 }
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
213
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
214 void rgb32to16(const uint8_t *src, uint8_t *dst, unsigned src_size)
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
215 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
216 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
217 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
218 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
219 rgb32to16_MMX2(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
220 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
221 rgb32to16_3DNow(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
222 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
223 rgb32to16_MMX(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
224 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
225 rgb32to16_C(src, dst, src_size);
2741
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
226 #else
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
227 rgb32to16_C(src, dst, src_size);
2741
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
228 #endif
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
229 }
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
230
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
231 void rgb32to15(const uint8_t *src, uint8_t *dst, unsigned src_size)
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
232 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
233 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
234 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
235 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
236 rgb32to15_MMX2(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
237 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
238 rgb32to15_3DNow(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
239 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
240 rgb32to15_MMX(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
241 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
242 rgb32to15_C(src, dst, src_size);
2741
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
243 #else
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
244 rgb32to15_C(src, dst, src_size);
2741
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
245 #endif
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
246 }
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
247
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
248 void rgb24to16(const uint8_t *src, uint8_t *dst, unsigned src_size)
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
249 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
250 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
251 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
252 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
253 rgb24to16_MMX2(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
254 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
255 rgb24to16_3DNow(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
256 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
257 rgb24to16_MMX(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
258 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
259 rgb24to16_C(src, dst, src_size);
2740
1583214489a2 optimized rgb24to16 stuff
nick
parents: 2738
diff changeset
260 #else
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
261 rgb24to16_C(src, dst, src_size);
2740
1583214489a2 optimized rgb24to16 stuff
nick
parents: 2738
diff changeset
262 #endif
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
263 }
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
264
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
265 void rgb24to15(const uint8_t *src, uint8_t *dst, unsigned src_size)
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
266 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
267 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
268 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
269 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
270 rgb24to15_MMX2(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
271 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
272 rgb24to15_3DNow(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
273 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
274 rgb24to15_MMX(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
275 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
276 rgb24to15_C(src, dst, src_size);
2741
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
277 #else
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
278 rgb24to15_C(src, dst, src_size);
2741
b8a692c59b64 MMX2, 3DNOW, MMX optimized rgb32(24)to16(15) stuff
nick
parents: 2740
diff changeset
279 #endif
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
280 }
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
281
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
282 /**
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
283 * Palette is assumed to contain bgr16, see rgb32to16 to convert the palette
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
284 */
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
285 void palette8torgb16(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette)
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
286 {
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
287 unsigned i;
2702
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
288 for(i=0; i<num_pixels; i++)
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
289 ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ];
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
290 }
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
291
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
292 /**
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
293 * Pallete is assumed to contain bgr15, see rgb32to15 to convert the palette
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
294 */
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
295 void palette8torgb15(const uint8_t *src, uint8_t *dst, unsigned num_pixels, const uint8_t *palette)
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
296 {
2718
9c5e64493742 Well - old algorithms and new stuff rgb24to16(15)
nick
parents: 2711
diff changeset
297 unsigned i;
2702
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
298 for(i=0; i<num_pixels; i++)
2694
2924350d92ed bgr32to16, bgr32to15 (needed for palette stuff)
michael
parents: 2677
diff changeset
299 ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ];
2697
1eaf3f89e49f palette to bgr24
michael
parents: 2694
diff changeset
300 }
2755
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
301
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
302 void rgb32tobgr32(const uint8_t *src, uint8_t *dst, unsigned int src_size)
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
303 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
304 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
305 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
306 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
307 rgb32tobgr32_MMX2(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
308 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
309 rgb32tobgr32_3DNow(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
310 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
311 rgb32tobgr32_MMX(src, dst, src_size);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
312 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
313 rgb32tobgr32_C(src, dst, src_size);
2755
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
314 #else
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
315 rgb32tobgr32_C(src, dst, src_size);
2755
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
316 #endif
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
317 }
2f93f4351765 rgb32tobgr32 / bgr32torgb32
michael
parents: 2746
diff changeset
318
2702
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
319 /**
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
320 *
2724
c08b7af26782 yuy2toyv12 fixed and speedup
michael
parents: 2723
diff changeset
321 * height should be a multiple of 2 and width should be a multiple of 16 (if this is a
c08b7af26782 yuy2toyv12 fixed and speedup
michael
parents: 2723
diff changeset
322 * problem for anyone then tell me, and ill fix it)
2702
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
323 */
2723
22aba8af94af fixed yv12toyuy2
michael
parents: 2720
diff changeset
324 void yv12toyuy2(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
2725
5bba527c9a4c unsigned stuff
michael
parents: 2724
diff changeset
325 unsigned int width, unsigned int height,
5bba527c9a4c unsigned stuff
michael
parents: 2724
diff changeset
326 unsigned int lumStride, unsigned int chromStride, unsigned int dstStride)
2701
9b47bc409083 yv12 <-> yuy2 in C
michael
parents: 2698
diff changeset
327 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
328 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
329 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
330 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
331 yv12toyuy2_MMX2(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
332 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
333 yv12toyuy2_3DNow(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
334 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
335 yv12toyuy2_MMX(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
336 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
337 yv12toyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
2702
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
338 #else
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
339 yv12toyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
2702
440312d953a8 yv12toyuy2 in MMX
michael
parents: 2701
diff changeset
340 #endif
2701
9b47bc409083 yv12 <-> yuy2 in C
michael
parents: 2698
diff changeset
341 }
9b47bc409083 yv12 <-> yuy2 in C
michael
parents: 2698
diff changeset
342
2724
c08b7af26782 yuy2toyv12 fixed and speedup
michael
parents: 2723
diff changeset
343 /**
c08b7af26782 yuy2toyv12 fixed and speedup
michael
parents: 2723
diff changeset
344 *
c08b7af26782 yuy2toyv12 fixed and speedup
michael
parents: 2723
diff changeset
345 * height should be a multiple of 2 and width should be a multiple of 16 (if this is a
c08b7af26782 yuy2toyv12 fixed and speedup
michael
parents: 2723
diff changeset
346 * problem for anyone then tell me, and ill fix it)
c08b7af26782 yuy2toyv12 fixed and speedup
michael
parents: 2723
diff changeset
347 */
c08b7af26782 yuy2toyv12 fixed and speedup
michael
parents: 2723
diff changeset
348 void yuy2toyv12(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
2725
5bba527c9a4c unsigned stuff
michael
parents: 2724
diff changeset
349 unsigned int width, unsigned int height,
5bba527c9a4c unsigned stuff
michael
parents: 2724
diff changeset
350 unsigned int lumStride, unsigned int chromStride, unsigned int srcStride)
2701
9b47bc409083 yv12 <-> yuy2 in C
michael
parents: 2698
diff changeset
351 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
352 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
353 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
354 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
355 yuy2toyv12_MMX2(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
356 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
357 yuy2toyv12_3DNow(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
358 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
359 yuy2toyv12_MMX(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
360 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
361 yuy2toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
2704
b4c6699d3893 yuy2toyv12 in MMX
michael
parents: 2702
diff changeset
362 #else
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
363 yuy2toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
2704
b4c6699d3893 yuy2toyv12 in MMX
michael
parents: 2702
diff changeset
364 #endif
2723
22aba8af94af fixed yv12toyuy2
michael
parents: 2720
diff changeset
365 }
2801
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
366
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
367 /**
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
368 *
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
369 * height should be a multiple of 2 and width should be a multiple of 16 (if this is a
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
370 * problem for anyone then tell me, and ill fix it)
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
371 * chrominance data is only taken from every secound line others are ignored FIXME write HQ version
2801
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
372 */
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
373 void uyvytoyv12(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
374 unsigned int width, unsigned int height,
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
375 unsigned int lumStride, unsigned int chromStride, unsigned int srcStride)
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
376 {
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
377 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
378 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
379 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
380 uyvytoyv12_MMX2(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
381 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
382 uyvytoyv12_3DNow(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
383 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
384 uyvytoyv12_MMX(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
385 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
386 uyvytoyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
2847
1d92268eb8fc uyvytoyv12 in MMX (untested)
michael
parents: 2806
diff changeset
387 #else
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
388 uyvytoyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
2847
1d92268eb8fc uyvytoyv12 in MMX (untested)
michael
parents: 2806
diff changeset
389 #endif
2801
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
390 }
318c240363c7 uyvy->uv12 added
arpi
parents: 2800
diff changeset
391
3132
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
392 /**
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
393 *
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
394 * height should be a multiple of 2 and width should be a multiple of 2 (if this is a
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
395 * problem for anyone then tell me, and ill fix it)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
396 * chrominance data is only taken from every secound line others are ignored FIXME write HQ version
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
397 */
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
398 void rgb24toyv12(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
399 unsigned int width, unsigned int height,
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
400 unsigned int lumStride, unsigned int chromStride, unsigned int srcStride)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
401 {
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
402 #ifdef CAN_COMPILE_X86_ASM
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
403 // ordered per speed fasterst first
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
404 if(gCpuCaps.hasMMX2)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
405 rgb24toyv12_MMX2(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
406 else if(gCpuCaps.has3DNow)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
407 rgb24toyv12_3DNow(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
408 else if(gCpuCaps.hasMMX)
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
409 rgb24toyv12_MMX(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
410 else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
411 rgb24toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
412 #else
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
413 rgb24toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride);
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
414 #endif
ab67556586fa runtime cpu detection
michael
parents: 2847
diff changeset
415 }
5337
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
416
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
417 void interleaveBytes(uint8_t *src1, uint8_t *src2, uint8_t *dst,
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
418 int width, int height, int src1Stride, int src2Stride, int dstStride)
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
419 {
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
420 #ifdef CAN_COMPILE_X86_ASM
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
421 // ordered per speed fasterst first
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
422 if(gCpuCaps.hasMMX2)
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
423 interleaveBytes_MMX2(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride);
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
424 else if(gCpuCaps.has3DNow)
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
425 interleaveBytes_3DNow(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride);
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
426 else if(gCpuCaps.hasMMX)
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
427 interleaveBytes_MMX(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride);
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
428 else
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
429 interleaveBytes_C(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride);
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
430 #else
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
431 interleaveBytes_C(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride);
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
432 #endif
0bd1c35aa42c byte interleaving for mga
michael
parents: 4923
diff changeset
433 }