Mercurial > mplayer.hg
comparison postproc/rgb2rgb.c @ 6492:e7635c03910f
sync with mplayer xp
- partial yvu9 support (copy only)
- rgb 15/16 -> 24/32 converters
- int->unsigned changes
author | arpi |
---|---|
date | Sat, 22 Jun 2002 08:49:45 +0000 |
parents | c5cf988c6d6f |
children | f98313dcd428 |
comparison
equal
deleted
inserted
replaced
6491:920796b6c7b1 | 6492:e7635c03910f |
---|---|
18 #endif | 18 #endif |
19 | 19 |
20 #define FAST_BGR2YV12 // use 7 bit coeffs instead of 15bit | 20 #define FAST_BGR2YV12 // use 7 bit coeffs instead of 15bit |
21 | 21 |
22 #ifdef CAN_COMPILE_X86_ASM | 22 #ifdef CAN_COMPILE_X86_ASM |
23 static const uint64_t mmx_null __attribute__((aligned(8))) = 0x0000000000000000ULL; | |
24 static const uint64_t mmx_one __attribute__((aligned(8))) = 0xFFFFFFFFFFFFFFFFULL; | |
23 static const uint64_t mask32b __attribute__((aligned(8))) = 0x000000FF000000FFULL; | 25 static const uint64_t mask32b __attribute__((aligned(8))) = 0x000000FF000000FFULL; |
24 static const uint64_t mask32g __attribute__((aligned(8))) = 0x0000FF000000FF00ULL; | 26 static const uint64_t mask32g __attribute__((aligned(8))) = 0x0000FF000000FF00ULL; |
25 static const uint64_t mask32r __attribute__((aligned(8))) = 0x00FF000000FF0000ULL; | 27 static const uint64_t mask32r __attribute__((aligned(8))) = 0x00FF000000FF0000ULL; |
26 static const uint64_t mask32 __attribute__((aligned(8))) = 0x00FFFFFF00FFFFFFULL; | 28 static const uint64_t mask32 __attribute__((aligned(8))) = 0x00FFFFFF00FFFFFFULL; |
27 static const uint64_t mask24b __attribute__((aligned(8))) = 0x00FF0000FF0000FFULL; | 29 static const uint64_t mask24b __attribute__((aligned(8))) = 0x00FF0000FF0000FFULL; |
33 static const uint64_t mask24hhh __attribute__((aligned(8))) = 0xffffffff00000000ULL; | 35 static const uint64_t mask24hhh __attribute__((aligned(8))) = 0xffffffff00000000ULL; |
34 static const uint64_t mask24hhhh __attribute__((aligned(8))) = 0xffffffffffff0000ULL; | 36 static const uint64_t mask24hhhh __attribute__((aligned(8))) = 0xffffffffffff0000ULL; |
35 static const uint64_t mask15b __attribute__((aligned(8))) = 0x001F001F001F001FULL; /* 00000000 00011111 xxB */ | 37 static const uint64_t mask15b __attribute__((aligned(8))) = 0x001F001F001F001FULL; /* 00000000 00011111 xxB */ |
36 static const uint64_t mask15rg __attribute__((aligned(8))) = 0x7FE07FE07FE07FE0ULL; /* 01111111 11100000 RGx */ | 38 static const uint64_t mask15rg __attribute__((aligned(8))) = 0x7FE07FE07FE07FE0ULL; /* 01111111 11100000 RGx */ |
37 static const uint64_t mask15s __attribute__((aligned(8))) = 0xFFE0FFE0FFE0FFE0ULL; | 39 static const uint64_t mask15s __attribute__((aligned(8))) = 0xFFE0FFE0FFE0FFE0ULL; |
40 static const uint64_t mask15g __attribute__((aligned(8))) = 0x03E003E003E003E0ULL; | |
41 static const uint64_t mask15r __attribute__((aligned(8))) = 0x7C007C007C007C00ULL; | |
42 #define mask16b mask15b | |
43 static const uint64_t mask16g __attribute__((aligned(8))) = 0x07E007E007E007E0ULL; | |
44 static const uint64_t mask16r __attribute__((aligned(8))) = 0xF800F800F800F800ULL; | |
38 static const uint64_t red_16mask __attribute__((aligned(8))) = 0x0000f8000000f800ULL; | 45 static const uint64_t red_16mask __attribute__((aligned(8))) = 0x0000f8000000f800ULL; |
39 static const uint64_t green_16mask __attribute__((aligned(8)))= 0x000007e0000007e0ULL; | 46 static const uint64_t green_16mask __attribute__((aligned(8)))= 0x000007e0000007e0ULL; |
40 static const uint64_t blue_16mask __attribute__((aligned(8))) = 0x0000001f0000001fULL; | 47 static const uint64_t blue_16mask __attribute__((aligned(8))) = 0x0000001f0000001fULL; |
41 static const uint64_t red_15mask __attribute__((aligned(8))) = 0x00007c000000f800ULL; | 48 static const uint64_t red_15mask __attribute__((aligned(8))) = 0x00007c000000f800ULL; |
42 static const uint64_t green_15mask __attribute__((aligned(8)))= 0x000003e0000007e0ULL; | 49 static const uint64_t green_15mask __attribute__((aligned(8)))= 0x000003e0000007e0ULL; |
135 else if(gCpuCaps.has3DNow) | 142 else if(gCpuCaps.has3DNow) |
136 rgb24to32_3DNow(src, dst, src_size); | 143 rgb24to32_3DNow(src, dst, src_size); |
137 else if(gCpuCaps.hasMMX) | 144 else if(gCpuCaps.hasMMX) |
138 rgb24to32_MMX(src, dst, src_size); | 145 rgb24to32_MMX(src, dst, src_size); |
139 else | 146 else |
147 #endif | |
140 rgb24to32_C(src, dst, src_size); | 148 rgb24to32_C(src, dst, src_size); |
141 #else | 149 } |
142 rgb24to32_C(src, dst, src_size); | 150 |
143 #endif | 151 void rgb15to24(const uint8_t *src,uint8_t *dst,unsigned src_size) |
152 { | |
153 #ifdef CAN_COMPILE_X86_ASM | |
154 // ordered per speed fasterst first | |
155 if(gCpuCaps.hasMMX2) | |
156 rgb15to24_MMX2(src, dst, src_size); | |
157 else if(gCpuCaps.has3DNow) | |
158 rgb15to24_3DNow(src, dst, src_size); | |
159 else if(gCpuCaps.hasMMX) | |
160 rgb15to24_MMX(src, dst, src_size); | |
161 else | |
162 #endif | |
163 rgb15to24_C(src, dst, src_size); | |
164 } | |
165 | |
166 void rgb16to24(const uint8_t *src,uint8_t *dst,unsigned src_size) | |
167 { | |
168 #ifdef CAN_COMPILE_X86_ASM | |
169 // ordered per speed fasterst first | |
170 if(gCpuCaps.hasMMX2) | |
171 rgb16to24_MMX2(src, dst, src_size); | |
172 else if(gCpuCaps.has3DNow) | |
173 rgb16to24_3DNow(src, dst, src_size); | |
174 else if(gCpuCaps.hasMMX) | |
175 rgb16to24_MMX(src, dst, src_size); | |
176 else | |
177 #endif | |
178 rgb16to24_C(src, dst, src_size); | |
179 } | |
180 | |
181 void rgb15to32(const uint8_t *src,uint8_t *dst,unsigned src_size) | |
182 { | |
183 #ifdef CAN_COMPILE_X86_ASM | |
184 // ordered per speed fasterst first | |
185 if(gCpuCaps.hasMMX2) | |
186 rgb15to32_MMX2(src, dst, src_size); | |
187 else if(gCpuCaps.has3DNow) | |
188 rgb15to32_3DNow(src, dst, src_size); | |
189 else if(gCpuCaps.hasMMX) | |
190 rgb15to32_MMX(src, dst, src_size); | |
191 else | |
192 #endif | |
193 rgb15to32_C(src, dst, src_size); | |
194 } | |
195 | |
196 void rgb16to32(const uint8_t *src,uint8_t *dst,unsigned src_size) | |
197 { | |
198 #ifdef CAN_COMPILE_X86_ASM | |
199 // ordered per speed fasterst first | |
200 if(gCpuCaps.hasMMX2) | |
201 rgb16to32_MMX2(src, dst, src_size); | |
202 else if(gCpuCaps.has3DNow) | |
203 rgb16to32_3DNow(src, dst, src_size); | |
204 else if(gCpuCaps.hasMMX) | |
205 rgb16to32_MMX(src, dst, src_size); | |
206 else | |
207 #endif | |
208 rgb16to32_C(src, dst, src_size); | |
144 } | 209 } |
145 | 210 |
146 void rgb32to24(const uint8_t *src,uint8_t *dst,unsigned src_size) | 211 void rgb32to24(const uint8_t *src,uint8_t *dst,unsigned src_size) |
147 { | 212 { |
148 #ifdef CAN_COMPILE_X86_ASM | 213 #ifdef CAN_COMPILE_X86_ASM |
152 else if(gCpuCaps.has3DNow) | 217 else if(gCpuCaps.has3DNow) |
153 rgb32to24_3DNow(src, dst, src_size); | 218 rgb32to24_3DNow(src, dst, src_size); |
154 else if(gCpuCaps.hasMMX) | 219 else if(gCpuCaps.hasMMX) |
155 rgb32to24_MMX(src, dst, src_size); | 220 rgb32to24_MMX(src, dst, src_size); |
156 else | 221 else |
222 #endif | |
157 rgb32to24_C(src, dst, src_size); | 223 rgb32to24_C(src, dst, src_size); |
158 #else | |
159 rgb32to24_C(src, dst, src_size); | |
160 #endif | |
161 } | 224 } |
162 | 225 |
163 /* | 226 /* |
164 Original by Strepto/Astral | 227 Original by Strepto/Astral |
165 ported to gcc & bugfixed : A'rpi | 228 ported to gcc & bugfixed : A'rpi |
175 else if(gCpuCaps.has3DNow) | 238 else if(gCpuCaps.has3DNow) |
176 rgb15to16_3DNow(src, dst, src_size); | 239 rgb15to16_3DNow(src, dst, src_size); |
177 else if(gCpuCaps.hasMMX) | 240 else if(gCpuCaps.hasMMX) |
178 rgb15to16_MMX(src, dst, src_size); | 241 rgb15to16_MMX(src, dst, src_size); |
179 else | 242 else |
243 #endif | |
180 rgb15to16_C(src, dst, src_size); | 244 rgb15to16_C(src, dst, src_size); |
181 #else | |
182 rgb15to16_C(src, dst, src_size); | |
183 #endif | |
184 } | 245 } |
185 | 246 |
186 /** | 247 /** |
187 * Pallete is assumed to contain bgr32 | 248 * Pallete is assumed to contain bgr32 |
188 */ | 249 */ |
240 else if(gCpuCaps.has3DNow) | 301 else if(gCpuCaps.has3DNow) |
241 rgb32to16_3DNow(src, dst, src_size); | 302 rgb32to16_3DNow(src, dst, src_size); |
242 else if(gCpuCaps.hasMMX) | 303 else if(gCpuCaps.hasMMX) |
243 rgb32to16_MMX(src, dst, src_size); | 304 rgb32to16_MMX(src, dst, src_size); |
244 else | 305 else |
306 #endif | |
245 rgb32to16_C(src, dst, src_size); | 307 rgb32to16_C(src, dst, src_size); |
246 #else | |
247 rgb32to16_C(src, dst, src_size); | |
248 #endif | |
249 } | 308 } |
250 | 309 |
251 void rgb32to15(const uint8_t *src, uint8_t *dst, unsigned src_size) | 310 void rgb32to15(const uint8_t *src, uint8_t *dst, unsigned src_size) |
252 { | 311 { |
253 #ifdef CAN_COMPILE_X86_ASM | 312 #ifdef CAN_COMPILE_X86_ASM |
257 else if(gCpuCaps.has3DNow) | 316 else if(gCpuCaps.has3DNow) |
258 rgb32to15_3DNow(src, dst, src_size); | 317 rgb32to15_3DNow(src, dst, src_size); |
259 else if(gCpuCaps.hasMMX) | 318 else if(gCpuCaps.hasMMX) |
260 rgb32to15_MMX(src, dst, src_size); | 319 rgb32to15_MMX(src, dst, src_size); |
261 else | 320 else |
321 #endif | |
262 rgb32to15_C(src, dst, src_size); | 322 rgb32to15_C(src, dst, src_size); |
263 #else | |
264 rgb32to15_C(src, dst, src_size); | |
265 #endif | |
266 } | 323 } |
267 | 324 |
268 void rgb24to16(const uint8_t *src, uint8_t *dst, unsigned src_size) | 325 void rgb24to16(const uint8_t *src, uint8_t *dst, unsigned src_size) |
269 { | 326 { |
270 #ifdef CAN_COMPILE_X86_ASM | 327 #ifdef CAN_COMPILE_X86_ASM |
274 else if(gCpuCaps.has3DNow) | 331 else if(gCpuCaps.has3DNow) |
275 rgb24to16_3DNow(src, dst, src_size); | 332 rgb24to16_3DNow(src, dst, src_size); |
276 else if(gCpuCaps.hasMMX) | 333 else if(gCpuCaps.hasMMX) |
277 rgb24to16_MMX(src, dst, src_size); | 334 rgb24to16_MMX(src, dst, src_size); |
278 else | 335 else |
336 #endif | |
279 rgb24to16_C(src, dst, src_size); | 337 rgb24to16_C(src, dst, src_size); |
280 #else | |
281 rgb24to16_C(src, dst, src_size); | |
282 #endif | |
283 } | 338 } |
284 | 339 |
285 void rgb24to15(const uint8_t *src, uint8_t *dst, unsigned src_size) | 340 void rgb24to15(const uint8_t *src, uint8_t *dst, unsigned src_size) |
286 { | 341 { |
287 #ifdef CAN_COMPILE_X86_ASM | 342 #ifdef CAN_COMPILE_X86_ASM |
291 else if(gCpuCaps.has3DNow) | 346 else if(gCpuCaps.has3DNow) |
292 rgb24to15_3DNow(src, dst, src_size); | 347 rgb24to15_3DNow(src, dst, src_size); |
293 else if(gCpuCaps.hasMMX) | 348 else if(gCpuCaps.hasMMX) |
294 rgb24to15_MMX(src, dst, src_size); | 349 rgb24to15_MMX(src, dst, src_size); |
295 else | 350 else |
351 #endif | |
296 rgb24to15_C(src, dst, src_size); | 352 rgb24to15_C(src, dst, src_size); |
297 #else | |
298 rgb24to15_C(src, dst, src_size); | |
299 #endif | |
300 } | 353 } |
301 | 354 |
302 /** | 355 /** |
303 * Palette is assumed to contain bgr16, see rgb32to16 to convert the palette | 356 * Palette is assumed to contain bgr16, see rgb32to16 to convert the palette |
304 */ | 357 */ |
328 else if(gCpuCaps.has3DNow) | 381 else if(gCpuCaps.has3DNow) |
329 rgb32tobgr32_3DNow(src, dst, src_size); | 382 rgb32tobgr32_3DNow(src, dst, src_size); |
330 else if(gCpuCaps.hasMMX) | 383 else if(gCpuCaps.hasMMX) |
331 rgb32tobgr32_MMX(src, dst, src_size); | 384 rgb32tobgr32_MMX(src, dst, src_size); |
332 else | 385 else |
386 #endif | |
333 rgb32tobgr32_C(src, dst, src_size); | 387 rgb32tobgr32_C(src, dst, src_size); |
334 #else | |
335 rgb32tobgr32_C(src, dst, src_size); | |
336 #endif | |
337 } | 388 } |
338 | 389 |
339 void rgb24tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) | 390 void rgb24tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) |
340 { | 391 { |
341 #ifdef CAN_COMPILE_X86_ASM | 392 #ifdef CAN_COMPILE_X86_ASM |
345 else if(gCpuCaps.has3DNow) | 396 else if(gCpuCaps.has3DNow) |
346 rgb24tobgr24_3DNow(src, dst, src_size); | 397 rgb24tobgr24_3DNow(src, dst, src_size); |
347 else if(gCpuCaps.hasMMX) | 398 else if(gCpuCaps.hasMMX) |
348 rgb24tobgr24_MMX(src, dst, src_size); | 399 rgb24tobgr24_MMX(src, dst, src_size); |
349 else | 400 else |
401 #endif | |
350 rgb24tobgr24_C(src, dst, src_size); | 402 rgb24tobgr24_C(src, dst, src_size); |
351 #else | |
352 rgb24tobgr24_C(src, dst, src_size); | |
353 #endif | |
354 } | 403 } |
355 | 404 |
356 /** | 405 /** |
357 * | 406 * |
358 * height should be a multiple of 2 and width should be a multiple of 16 (if this is a | 407 * height should be a multiple of 2 and width should be a multiple of 16 (if this is a |
369 else if(gCpuCaps.has3DNow) | 418 else if(gCpuCaps.has3DNow) |
370 yv12toyuy2_3DNow(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); | 419 yv12toyuy2_3DNow(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); |
371 else if(gCpuCaps.hasMMX) | 420 else if(gCpuCaps.hasMMX) |
372 yv12toyuy2_MMX(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); | 421 yv12toyuy2_MMX(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); |
373 else | 422 else |
423 #endif | |
374 yv12toyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); | 424 yv12toyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); |
375 #else | |
376 yv12toyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); | |
377 #endif | |
378 } | 425 } |
379 | 426 |
380 /** | 427 /** |
381 * | 428 * |
382 * width should be a multiple of 16 | 429 * width should be a multiple of 16 |
392 else if(gCpuCaps.has3DNow) | 439 else if(gCpuCaps.has3DNow) |
393 yuv422ptoyuy2_3DNow(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); | 440 yuv422ptoyuy2_3DNow(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); |
394 else if(gCpuCaps.hasMMX) | 441 else if(gCpuCaps.hasMMX) |
395 yuv422ptoyuy2_MMX(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); | 442 yuv422ptoyuy2_MMX(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); |
396 else | 443 else |
444 #endif | |
397 yuv422ptoyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); | 445 yuv422ptoyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); |
398 #else | |
399 yuv422ptoyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride); | |
400 #endif | |
401 } | 446 } |
402 | 447 |
403 /** | 448 /** |
404 * | 449 * |
405 * height should be a multiple of 2 and width should be a multiple of 16 (if this is a | 450 * height should be a multiple of 2 and width should be a multiple of 16 (if this is a |
416 else if(gCpuCaps.has3DNow) | 461 else if(gCpuCaps.has3DNow) |
417 yuy2toyv12_3DNow(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); | 462 yuy2toyv12_3DNow(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); |
418 else if(gCpuCaps.hasMMX) | 463 else if(gCpuCaps.hasMMX) |
419 yuy2toyv12_MMX(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); | 464 yuy2toyv12_MMX(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); |
420 else | 465 else |
466 #endif | |
421 yuy2toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); | 467 yuy2toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); |
422 #else | |
423 yuy2toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); | |
424 #endif | |
425 } | 468 } |
426 | 469 |
427 /** | 470 /** |
428 * | 471 * |
429 * height should be a multiple of 2 and width should be a multiple of 16 (if this is a | 472 * height should be a multiple of 2 and width should be a multiple of 16 (if this is a |
486 else if(gCpuCaps.has3DNow) | 529 else if(gCpuCaps.has3DNow) |
487 rgb24toyv12_3DNow(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); | 530 rgb24toyv12_3DNow(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); |
488 else if(gCpuCaps.hasMMX) | 531 else if(gCpuCaps.hasMMX) |
489 rgb24toyv12_MMX(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); | 532 rgb24toyv12_MMX(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); |
490 else | 533 else |
534 #endif | |
491 rgb24toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); | 535 rgb24toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); |
492 #else | |
493 rgb24toyv12_C(src, ydst, udst, vdst, width, height, lumStride, chromStride, srcStride); | |
494 #endif | |
495 } | 536 } |
496 | 537 |
497 void interleaveBytes(uint8_t *src1, uint8_t *src2, uint8_t *dst, | 538 void interleaveBytes(uint8_t *src1, uint8_t *src2, uint8_t *dst, |
498 int width, int height, int src1Stride, int src2Stride, int dstStride) | 539 unsigned width, unsigned height, unsigned src1Stride, |
540 unsigned src2Stride, unsigned dstStride) | |
499 { | 541 { |
500 #ifdef CAN_COMPILE_X86_ASM | 542 #ifdef CAN_COMPILE_X86_ASM |
501 // ordered per speed fasterst first | 543 // ordered per speed fasterst first |
502 if(gCpuCaps.hasMMX2) | 544 if(gCpuCaps.hasMMX2) |
503 interleaveBytes_MMX2(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride); | 545 interleaveBytes_MMX2(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride); |
504 else if(gCpuCaps.has3DNow) | 546 else if(gCpuCaps.has3DNow) |
505 interleaveBytes_3DNow(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride); | 547 interleaveBytes_3DNow(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride); |
506 else if(gCpuCaps.hasMMX) | 548 else if(gCpuCaps.hasMMX) |
507 interleaveBytes_MMX(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride); | 549 interleaveBytes_MMX(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride); |
508 else | 550 else |
551 #endif | |
509 interleaveBytes_C(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride); | 552 interleaveBytes_C(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride); |
510 #else | 553 } |
511 interleaveBytes_C(src1, src2, dst, width, height, src1Stride, src2Stride, dstStride); | |
512 #endif | |
513 } |