Mercurial > mplayer.hg
comparison libswscale/swscale_template.c @ 29105:9502a8895e77
swscale: Use function pointers for swScale functions.
author | ramiro |
---|---|
date | Sat, 04 Apr 2009 22:45:02 +0000 |
parents | 06c79db43cd8 |
children | cd5d58b02153 |
comparison
equal
deleted
inserted
replaced
29104:f40ddfeeb70b | 29105:9502a8895e77 |
---|---|
1373 const uint16_t *buf1= buf0; //FIXME needed for RGB1/BGR1 | 1373 const uint16_t *buf1= buf0; //FIXME needed for RGB1/BGR1 |
1374 const int yalpha= 4096; //FIXME ... | 1374 const int yalpha= 4096; //FIXME ... |
1375 | 1375 |
1376 if (flags&SWS_FULL_CHR_H_INT) | 1376 if (flags&SWS_FULL_CHR_H_INT) |
1377 { | 1377 { |
1378 RENAME(yuv2packed2)(c, buf0, buf0, uvbuf0, uvbuf1, abuf0, abuf0, dest, dstW, 0, uvalpha, y); | 1378 c->yuv2packed2(c, buf0, buf0, uvbuf0, uvbuf1, abuf0, abuf0, dest, dstW, 0, uvalpha, y); |
1379 return; | 1379 return; |
1380 } | 1380 } |
1381 | 1381 |
1382 #if HAVE_MMX | 1382 #if HAVE_MMX |
1383 if(!(flags & SWS_BITEXACT)){ | 1383 if(!(flags & SWS_BITEXACT)){ |
2271 int32_t *mmx2FilterPos = c->lumMmx2FilterPos; | 2271 int32_t *mmx2FilterPos = c->lumMmx2FilterPos; |
2272 int16_t *mmx2Filter = c->lumMmx2Filter; | 2272 int16_t *mmx2Filter = c->lumMmx2Filter; |
2273 int canMMX2BeUsed = c->canMMX2BeUsed; | 2273 int canMMX2BeUsed = c->canMMX2BeUsed; |
2274 void *funnyYCode = c->funnyYCode; | 2274 void *funnyYCode = c->funnyYCode; |
2275 | 2275 |
2276 if (srcFormat==PIX_FMT_YUYV422 || srcFormat==PIX_FMT_GRAY16BE) | 2276 if (isAlpha) { |
2277 { | 2277 if (srcFormat == PIX_FMT_RGB32 || srcFormat == PIX_FMT_BGR32 ) |
2278 RENAME(yuy2ToY)(formatConvBuffer, src, srcW, pal); | 2278 src += 3; |
2279 src= formatConvBuffer; | 2279 } else { |
2280 } | 2280 if (srcFormat == PIX_FMT_RGB32_1 || srcFormat == PIX_FMT_BGR32_1) |
2281 else if (srcFormat==PIX_FMT_UYVY422 || srcFormat==PIX_FMT_GRAY16LE) | 2281 src += ALT32_CORR; |
2282 { | 2282 } |
2283 RENAME(uyvyToY)(formatConvBuffer, src, srcW, pal); | 2283 |
2284 src= formatConvBuffer; | 2284 if (c->hyscale_internal) { |
2285 } | 2285 c->hyscale_internal(formatConvBuffer, src, srcW, pal); |
2286 else if (srcFormat==PIX_FMT_RGB32) | |
2287 { | |
2288 if (isAlpha) | |
2289 RENAME(abgrToA)(formatConvBuffer, src+3, srcW, pal); | |
2290 else | |
2291 RENAME(bgr32ToY)(formatConvBuffer, src, srcW, pal); | |
2292 src= formatConvBuffer; | |
2293 } | |
2294 else if (srcFormat==PIX_FMT_RGB32_1) | |
2295 { | |
2296 if (isAlpha) | |
2297 RENAME(abgrToA)(formatConvBuffer, src, srcW, pal); | |
2298 else | |
2299 RENAME(bgr32ToY)(formatConvBuffer, src+ALT32_CORR, srcW, pal); | |
2300 src= formatConvBuffer; | |
2301 } | |
2302 else if (srcFormat==PIX_FMT_BGR24) | |
2303 { | |
2304 RENAME(bgr24ToY)(formatConvBuffer, src, srcW, pal); | |
2305 src= formatConvBuffer; | |
2306 } | |
2307 else if (srcFormat==PIX_FMT_BGR565) | |
2308 { | |
2309 RENAME(bgr16ToY)(formatConvBuffer, src, srcW, pal); | |
2310 src= formatConvBuffer; | |
2311 } | |
2312 else if (srcFormat==PIX_FMT_BGR555) | |
2313 { | |
2314 RENAME(bgr15ToY)(formatConvBuffer, src, srcW, pal); | |
2315 src= formatConvBuffer; | |
2316 } | |
2317 else if (srcFormat==PIX_FMT_BGR32) | |
2318 { | |
2319 if (isAlpha) | |
2320 RENAME(abgrToA)(formatConvBuffer, src+3, srcW, pal); | |
2321 else | |
2322 RENAME(rgb32ToY)(formatConvBuffer, src, srcW, pal); | |
2323 src= formatConvBuffer; | |
2324 } | |
2325 else if (srcFormat==PIX_FMT_BGR32_1) | |
2326 { | |
2327 if (isAlpha) | |
2328 RENAME(abgrToA)(formatConvBuffer, src, srcW, pal); | |
2329 else | |
2330 RENAME(rgb32ToY)(formatConvBuffer, src+ALT32_CORR, srcW, pal); | |
2331 src= formatConvBuffer; | |
2332 } | |
2333 else if (srcFormat==PIX_FMT_RGB24) | |
2334 { | |
2335 RENAME(rgb24ToY)(formatConvBuffer, src, srcW, pal); | |
2336 src= formatConvBuffer; | |
2337 } | |
2338 else if (srcFormat==PIX_FMT_RGB565) | |
2339 { | |
2340 RENAME(rgb16ToY)(formatConvBuffer, src, srcW, pal); | |
2341 src= formatConvBuffer; | |
2342 } | |
2343 else if (srcFormat==PIX_FMT_RGB555) | |
2344 { | |
2345 RENAME(rgb15ToY)(formatConvBuffer, src, srcW, pal); | |
2346 src= formatConvBuffer; | |
2347 } | |
2348 else if (srcFormat==PIX_FMT_RGB8 || srcFormat==PIX_FMT_BGR8 || srcFormat==PIX_FMT_PAL8 || srcFormat==PIX_FMT_BGR4_BYTE || srcFormat==PIX_FMT_RGB4_BYTE) | |
2349 { | |
2350 RENAME(palToY)(formatConvBuffer, src, srcW, pal); | |
2351 src= formatConvBuffer; | |
2352 } | |
2353 else if (srcFormat==PIX_FMT_MONOBLACK) | |
2354 { | |
2355 RENAME(monoblack2Y)(formatConvBuffer, src, srcW, pal); | |
2356 src= formatConvBuffer; | |
2357 } | |
2358 else if (srcFormat==PIX_FMT_MONOWHITE) | |
2359 { | |
2360 RENAME(monowhite2Y)(formatConvBuffer, src, srcW, pal); | |
2361 src= formatConvBuffer; | 2286 src= formatConvBuffer; |
2362 } | 2287 } |
2363 | 2288 |
2364 #if HAVE_MMX | 2289 #if HAVE_MMX |
2365 // Use the new MMX scaler if the MMX2 one can't be used (it is faster than the x86 ASM one). | 2290 // Use the new MMX scaler if the MMX2 one can't be used (it is faster than the x86 ASM one). |
2366 if (!(flags&SWS_FAST_BILINEAR) || (!canMMX2BeUsed)) | 2291 if (!(flags&SWS_FAST_BILINEAR) || (!canMMX2BeUsed)) |
2367 #else | 2292 #else |
2368 if (!(flags&SWS_FAST_BILINEAR)) | 2293 if (!(flags&SWS_FAST_BILINEAR)) |
2369 #endif | 2294 #endif |
2370 { | 2295 { |
2371 RENAME(hScale)(dst, dstWidth, src, srcW, xInc, hLumFilter, hLumFilterPos, hLumFilterSize); | 2296 c->hScale(dst, dstWidth, src, srcW, xInc, hLumFilter, hLumFilterPos, hLumFilterSize); |
2372 } | 2297 } |
2373 else // fast bilinear upscale / crap downscale | 2298 else // fast bilinear upscale / crap downscale |
2374 { | 2299 { |
2375 #if ARCH_X86 && CONFIG_GPL | 2300 #if ARCH_X86 && CONFIG_GPL |
2376 #if HAVE_MMX2 | 2301 #if HAVE_MMX2 |
2486 ); | 2411 ); |
2487 #if HAVE_MMX2 | 2412 #if HAVE_MMX2 |
2488 } //if MMX2 can't be used | 2413 } //if MMX2 can't be used |
2489 #endif | 2414 #endif |
2490 #else | 2415 #else |
2491 RENAME(hyscale_fast)(c, dst, dstWidth, src, srcW, xInc); | 2416 c->hyscale_fast(c, dst, dstWidth, src, srcW, xInc); |
2492 #endif /* ARCH_X86 */ | 2417 #endif /* ARCH_X86 */ |
2493 } | 2418 } |
2494 | 2419 |
2495 if(!isAlpha && c->srcRange != c->dstRange && !(isRGB(c->dstFormat) || isBGR(c->dstFormat))){ | 2420 if(!isAlpha && c->srcRange != c->dstRange && !(isRGB(c->dstFormat) || isBGR(c->dstFormat))){ |
2496 int i; | 2421 int i; |
2535 int32_t *mmx2FilterPos = c->chrMmx2FilterPos; | 2460 int32_t *mmx2FilterPos = c->chrMmx2FilterPos; |
2536 int16_t *mmx2Filter = c->chrMmx2Filter; | 2461 int16_t *mmx2Filter = c->chrMmx2Filter; |
2537 int canMMX2BeUsed = c->canMMX2BeUsed; | 2462 int canMMX2BeUsed = c->canMMX2BeUsed; |
2538 void *funnyUVCode = c->funnyUVCode; | 2463 void *funnyUVCode = c->funnyUVCode; |
2539 | 2464 |
2540 if (srcFormat==PIX_FMT_YUYV422) | 2465 if (isGray(srcFormat) || srcFormat==PIX_FMT_MONOBLACK || srcFormat==PIX_FMT_MONOWHITE) |
2541 { | |
2542 RENAME(yuy2ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2543 src1= formatConvBuffer; | |
2544 src2= formatConvBuffer+VOFW; | |
2545 } | |
2546 else if (srcFormat==PIX_FMT_UYVY422) | |
2547 { | |
2548 RENAME(uyvyToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2549 src1= formatConvBuffer; | |
2550 src2= formatConvBuffer+VOFW; | |
2551 } | |
2552 else if (srcFormat==PIX_FMT_RGB32) | |
2553 { | |
2554 if(c->chrSrcHSubSample) | |
2555 RENAME(bgr32ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2556 else | |
2557 RENAME(bgr32ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2558 src1= formatConvBuffer; | |
2559 src2= formatConvBuffer+VOFW; | |
2560 } | |
2561 else if (srcFormat==PIX_FMT_RGB32_1) | |
2562 { | |
2563 if(c->chrSrcHSubSample) | |
2564 RENAME(bgr32ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1+ALT32_CORR, src2+ALT32_CORR, srcW, pal); | |
2565 else | |
2566 RENAME(bgr32ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1+ALT32_CORR, src2+ALT32_CORR, srcW, pal); | |
2567 src1= formatConvBuffer; | |
2568 src2= formatConvBuffer+VOFW; | |
2569 } | |
2570 else if (srcFormat==PIX_FMT_BGR24) | |
2571 { | |
2572 if(c->chrSrcHSubSample) | |
2573 RENAME(bgr24ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2574 else | |
2575 RENAME(bgr24ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2576 src1= formatConvBuffer; | |
2577 src2= formatConvBuffer+VOFW; | |
2578 } | |
2579 else if (srcFormat==PIX_FMT_BGR565) | |
2580 { | |
2581 if(c->chrSrcHSubSample) | |
2582 RENAME(bgr16ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2583 else | |
2584 RENAME(bgr16ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2585 src1= formatConvBuffer; | |
2586 src2= formatConvBuffer+VOFW; | |
2587 } | |
2588 else if (srcFormat==PIX_FMT_BGR555) | |
2589 { | |
2590 if(c->chrSrcHSubSample) | |
2591 RENAME(bgr15ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2592 else | |
2593 RENAME(bgr15ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2594 src1= formatConvBuffer; | |
2595 src2= formatConvBuffer+VOFW; | |
2596 } | |
2597 else if (srcFormat==PIX_FMT_BGR32) | |
2598 { | |
2599 if(c->chrSrcHSubSample) | |
2600 RENAME(rgb32ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2601 else | |
2602 RENAME(rgb32ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2603 src1= formatConvBuffer; | |
2604 src2= formatConvBuffer+VOFW; | |
2605 } | |
2606 else if (srcFormat==PIX_FMT_BGR32_1) | |
2607 { | |
2608 if(c->chrSrcHSubSample) | |
2609 RENAME(rgb32ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1+ALT32_CORR, src2+ALT32_CORR, srcW, pal); | |
2610 else | |
2611 RENAME(rgb32ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1+ALT32_CORR, src2+ALT32_CORR, srcW, pal); | |
2612 src1= formatConvBuffer; | |
2613 src2= formatConvBuffer+VOFW; | |
2614 } | |
2615 else if (srcFormat==PIX_FMT_RGB24) | |
2616 { | |
2617 if(c->chrSrcHSubSample) | |
2618 RENAME(rgb24ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2619 else | |
2620 RENAME(rgb24ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2621 src1= formatConvBuffer; | |
2622 src2= formatConvBuffer+VOFW; | |
2623 } | |
2624 else if (srcFormat==PIX_FMT_RGB565) | |
2625 { | |
2626 if(c->chrSrcHSubSample) | |
2627 RENAME(rgb16ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2628 else | |
2629 RENAME(rgb16ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2630 src1= formatConvBuffer; | |
2631 src2= formatConvBuffer+VOFW; | |
2632 } | |
2633 else if (srcFormat==PIX_FMT_RGB555) | |
2634 { | |
2635 if(c->chrSrcHSubSample) | |
2636 RENAME(rgb15ToUV_half)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2637 else | |
2638 RENAME(rgb15ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2639 src1= formatConvBuffer; | |
2640 src2= formatConvBuffer+VOFW; | |
2641 } | |
2642 else if (isGray(srcFormat) || srcFormat==PIX_FMT_MONOBLACK || srcFormat==PIX_FMT_MONOWHITE) | |
2643 { | |
2644 return; | 2466 return; |
2645 } | 2467 |
2646 else if (srcFormat==PIX_FMT_RGB8 || srcFormat==PIX_FMT_BGR8 || srcFormat==PIX_FMT_PAL8 || srcFormat==PIX_FMT_BGR4_BYTE || srcFormat==PIX_FMT_RGB4_BYTE) | 2468 if (srcFormat==PIX_FMT_RGB32_1) { |
2647 { | 2469 src1 += ALT32_CORR; |
2648 RENAME(palToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | 2470 src2 += ALT32_CORR; |
2471 } | |
2472 | |
2473 if (c->hcscale_internal) { | |
2474 c->hcscale_internal(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | |
2649 src1= formatConvBuffer; | 2475 src1= formatConvBuffer; |
2650 src2= formatConvBuffer+VOFW; | 2476 src2= formatConvBuffer+VOFW; |
2651 } | 2477 } |
2652 | 2478 |
2653 #if HAVE_MMX | 2479 #if HAVE_MMX |
2655 if (!(flags&SWS_FAST_BILINEAR) || (!canMMX2BeUsed)) | 2481 if (!(flags&SWS_FAST_BILINEAR) || (!canMMX2BeUsed)) |
2656 #else | 2482 #else |
2657 if (!(flags&SWS_FAST_BILINEAR)) | 2483 if (!(flags&SWS_FAST_BILINEAR)) |
2658 #endif | 2484 #endif |
2659 { | 2485 { |
2660 RENAME(hScale)(dst , dstWidth, src1, srcW, xInc, hChrFilter, hChrFilterPos, hChrFilterSize); | 2486 c->hScale(dst , dstWidth, src1, srcW, xInc, hChrFilter, hChrFilterPos, hChrFilterSize); |
2661 RENAME(hScale)(dst+VOFW, dstWidth, src2, srcW, xInc, hChrFilter, hChrFilterPos, hChrFilterSize); | 2487 c->hScale(dst+VOFW, dstWidth, src2, srcW, xInc, hChrFilter, hChrFilterPos, hChrFilterSize); |
2662 } | 2488 } |
2663 else // fast bilinear upscale / crap downscale | 2489 else // fast bilinear upscale / crap downscale |
2664 { | 2490 { |
2665 #if ARCH_X86 && CONFIG_GPL | 2491 #if ARCH_X86 && CONFIG_GPL |
2666 #if HAVE_MMX2 | 2492 #if HAVE_MMX2 |
2792 ); | 2618 ); |
2793 #if HAVE_MMX2 | 2619 #if HAVE_MMX2 |
2794 } //if MMX2 can't be used | 2620 } //if MMX2 can't be used |
2795 #endif | 2621 #endif |
2796 #else | 2622 #else |
2797 RENAME(hcscale_fast)(c, dst, dstWidth, src1, src2, srcW, xInc); | 2623 c->hcscale_fast(c, dst, dstWidth, src1, src2, srcW, xInc); |
2798 #endif /* ARCH_X86 */ | 2624 #endif /* ARCH_X86 */ |
2799 } | 2625 } |
2800 if(c->srcRange != c->dstRange && !(isRGB(c->dstFormat) || isBGR(c->dstFormat))){ | 2626 if(c->srcRange != c->dstRange && !(isRGB(c->dstFormat) || isBGR(c->dstFormat))){ |
2801 int i; | 2627 int i; |
2802 //FIXME all pal and rgb srcFormats could do this convertion as well | 2628 //FIXME all pal and rgb srcFormats could do this convertion as well |
3094 } | 2920 } |
3095 #endif | 2921 #endif |
3096 if (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21){ | 2922 if (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21){ |
3097 const int chrSkipMask= (1<<c->chrDstVSubSample)-1; | 2923 const int chrSkipMask= (1<<c->chrDstVSubSample)-1; |
3098 if (dstY&chrSkipMask) uDest= NULL; //FIXME split functions in lumi / chromi | 2924 if (dstY&chrSkipMask) uDest= NULL; //FIXME split functions in lumi / chromi |
3099 RENAME(yuv2nv12X)(c, | 2925 c->yuv2nv12X(c, |
3100 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, | 2926 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, |
3101 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | 2927 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, |
3102 dest, uDest, dstW, chrDstW, dstFormat); | 2928 dest, uDest, dstW, chrDstW, dstFormat); |
3103 } | 2929 } |
3104 else if (isPlanarYUV(dstFormat) || dstFormat==PIX_FMT_GRAY8) //YV12 like | 2930 else if (isPlanarYUV(dstFormat) || dstFormat==PIX_FMT_GRAY8) //YV12 like |
3108 if (vLumFilterSize == 1 && vChrFilterSize == 1) // unscaled YV12 | 2934 if (vLumFilterSize == 1 && vChrFilterSize == 1) // unscaled YV12 |
3109 { | 2935 { |
3110 int16_t *lumBuf = lumPixBuf[0]; | 2936 int16_t *lumBuf = lumPixBuf[0]; |
3111 int16_t *chrBuf= chrPixBuf[0]; | 2937 int16_t *chrBuf= chrPixBuf[0]; |
3112 int16_t *alpBuf= (CONFIG_SWSCALE_ALPHA && alpPixBuf) ? alpPixBuf[0] : NULL; | 2938 int16_t *alpBuf= (CONFIG_SWSCALE_ALPHA && alpPixBuf) ? alpPixBuf[0] : NULL; |
3113 RENAME(yuv2yuv1)(c, lumBuf, chrBuf, alpBuf, dest, uDest, vDest, aDest, dstW, chrDstW); | 2939 c->yuv2yuv1(c, lumBuf, chrBuf, alpBuf, dest, uDest, vDest, aDest, dstW, chrDstW); |
3114 } | 2940 } |
3115 else //General YV12 | 2941 else //General YV12 |
3116 { | 2942 { |
3117 RENAME(yuv2yuvX)(c, | 2943 c->yuv2yuvX(c, |
3118 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, | 2944 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, |
3119 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | 2945 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, |
3120 alpSrcPtr, dest, uDest, vDest, aDest, dstW, chrDstW); | 2946 alpSrcPtr, dest, uDest, vDest, aDest, dstW, chrDstW); |
3121 } | 2947 } |
3122 } | 2948 } |
3131 yuv2rgbXinC_full(c, //FIXME write a packed1_full function | 2957 yuv2rgbXinC_full(c, //FIXME write a packed1_full function |
3132 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | 2958 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, |
3133 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | 2959 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, |
3134 alpSrcPtr, dest, dstW, dstY); | 2960 alpSrcPtr, dest, dstW, dstY); |
3135 }else{ | 2961 }else{ |
3136 RENAME(yuv2packed1)(c, *lumSrcPtr, *chrSrcPtr, *(chrSrcPtr+1), | 2962 c->yuv2packed1(c, *lumSrcPtr, *chrSrcPtr, *(chrSrcPtr+1), |
3137 alpPixBuf ? *alpSrcPtr : NULL, | 2963 alpPixBuf ? *alpSrcPtr : NULL, |
3138 dest, dstW, chrAlpha, dstFormat, flags, dstY); | 2964 dest, dstW, chrAlpha, dstFormat, flags, dstY); |
3139 } | 2965 } |
3140 } | 2966 } |
3141 else if (vLumFilterSize == 2 && vChrFilterSize == 2) //bilinear upscale RGB | 2967 else if (vLumFilterSize == 2 && vChrFilterSize == 2) //bilinear upscale RGB |
3150 yuv2rgbXinC_full(c, //FIXME write a packed2_full function | 2976 yuv2rgbXinC_full(c, //FIXME write a packed2_full function |
3151 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | 2977 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, |
3152 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | 2978 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, |
3153 alpSrcPtr, dest, dstW, dstY); | 2979 alpSrcPtr, dest, dstW, dstY); |
3154 }else{ | 2980 }else{ |
3155 RENAME(yuv2packed2)(c, *lumSrcPtr, *(lumSrcPtr+1), *chrSrcPtr, *(chrSrcPtr+1), | 2981 c->yuv2packed2(c, *lumSrcPtr, *(lumSrcPtr+1), *chrSrcPtr, *(chrSrcPtr+1), |
3156 alpPixBuf ? *alpSrcPtr : NULL, alpPixBuf ? *(alpSrcPtr+1) : NULL, | 2982 alpPixBuf ? *alpSrcPtr : NULL, alpPixBuf ? *(alpSrcPtr+1) : NULL, |
3157 dest, dstW, lumAlpha, chrAlpha, dstY); | 2983 dest, dstW, lumAlpha, chrAlpha, dstY); |
3158 } | 2984 } |
3159 } | 2985 } |
3160 else //general RGB | 2986 else //general RGB |
3163 yuv2rgbXinC_full(c, | 2989 yuv2rgbXinC_full(c, |
3164 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | 2990 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, |
3165 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | 2991 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, |
3166 alpSrcPtr, dest, dstW, dstY); | 2992 alpSrcPtr, dest, dstW, dstY); |
3167 }else{ | 2993 }else{ |
3168 RENAME(yuv2packedX)(c, | 2994 c->yuv2packedX(c, |
3169 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | 2995 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, |
3170 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | 2996 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, |
3171 alpSrcPtr, dest, dstW, dstY); | 2997 alpSrcPtr, dest, dstW, dstY); |
3172 } | 2998 } |
3173 } | 2999 } |
3230 c->lastInLumBuf= lastInLumBuf; | 3056 c->lastInLumBuf= lastInLumBuf; |
3231 c->lastInChrBuf= lastInChrBuf; | 3057 c->lastInChrBuf= lastInChrBuf; |
3232 | 3058 |
3233 return dstY - lastDstY; | 3059 return dstY - lastDstY; |
3234 } | 3060 } |
3061 | |
3062 static void RENAME(sws_init_swScale)(SwsContext *c) | |
3063 { | |
3064 enum PixelFormat srcFormat = c->srcFormat; | |
3065 | |
3066 c->yuv2nv12X = RENAME(yuv2nv12X ); | |
3067 c->yuv2yuv1 = RENAME(yuv2yuv1 ); | |
3068 c->yuv2yuvX = RENAME(yuv2yuvX ); | |
3069 c->yuv2packed1 = RENAME(yuv2packed1 ); | |
3070 c->yuv2packed2 = RENAME(yuv2packed2 ); | |
3071 c->yuv2packedX = RENAME(yuv2packedX ); | |
3072 | |
3073 c->hScale = RENAME(hScale ); | |
3074 | |
3075 c->hyscale_fast = RENAME(hyscale_fast); | |
3076 c->hcscale_fast = RENAME(hcscale_fast); | |
3077 | |
3078 c->hcscale_internal = NULL; | |
3079 switch(srcFormat) { | |
3080 case PIX_FMT_YUYV422 : c->hcscale_internal = RENAME(yuy2ToUV); break; | |
3081 case PIX_FMT_UYVY422 : c->hcscale_internal = RENAME(uyvyToUV); break; | |
3082 case PIX_FMT_RGB8 : | |
3083 case PIX_FMT_BGR8 : | |
3084 case PIX_FMT_PAL8 : | |
3085 case PIX_FMT_BGR4_BYTE: | |
3086 case PIX_FMT_RGB4_BYTE: c->hcscale_internal = RENAME(palToUV); break; | |
3087 } | |
3088 if (c->chrSrcHSubSample) { | |
3089 switch(srcFormat) { | |
3090 case PIX_FMT_RGB32 : | |
3091 case PIX_FMT_RGB32_1: c->hcscale_internal = RENAME(bgr32ToUV_half); break; | |
3092 case PIX_FMT_BGR24 : c->hcscale_internal = RENAME(bgr24ToUV_half); break; | |
3093 case PIX_FMT_BGR565 : c->hcscale_internal = RENAME(bgr16ToUV_half); break; | |
3094 case PIX_FMT_BGR555 : c->hcscale_internal = RENAME(bgr15ToUV_half); break; | |
3095 case PIX_FMT_BGR32 : | |
3096 case PIX_FMT_BGR32_1: c->hcscale_internal = RENAME(rgb32ToUV_half); break; | |
3097 case PIX_FMT_RGB24 : c->hcscale_internal = RENAME(rgb24ToUV_half); break; | |
3098 case PIX_FMT_RGB565 : c->hcscale_internal = RENAME(rgb16ToUV_half); break; | |
3099 case PIX_FMT_RGB555 : c->hcscale_internal = RENAME(rgb15ToUV_half); break; | |
3100 } | |
3101 } else { | |
3102 switch(srcFormat) { | |
3103 case PIX_FMT_RGB32 : | |
3104 case PIX_FMT_RGB32_1: c->hcscale_internal = RENAME(bgr32ToUV); break; | |
3105 case PIX_FMT_BGR24 : c->hcscale_internal = RENAME(bgr24ToUV); break; | |
3106 case PIX_FMT_BGR565 : c->hcscale_internal = RENAME(bgr16ToUV); break; | |
3107 case PIX_FMT_BGR555 : c->hcscale_internal = RENAME(bgr15ToUV); break; | |
3108 case PIX_FMT_BGR32 : | |
3109 case PIX_FMT_BGR32_1: c->hcscale_internal = RENAME(rgb32ToUV); break; | |
3110 case PIX_FMT_RGB24 : c->hcscale_internal = RENAME(rgb24ToUV); break; | |
3111 case PIX_FMT_RGB565 : c->hcscale_internal = RENAME(rgb16ToUV); break; | |
3112 case PIX_FMT_RGB555 : c->hcscale_internal = RENAME(rgb15ToUV); break; | |
3113 } | |
3114 } | |
3115 | |
3116 c->hyscale_internal = NULL; | |
3117 switch (srcFormat) { | |
3118 case PIX_FMT_YUYV422 : | |
3119 case PIX_FMT_GRAY16BE : c->hyscale_internal = RENAME(yuy2ToY); break; | |
3120 case PIX_FMT_UYVY422 : | |
3121 case PIX_FMT_GRAY16LE : c->hyscale_internal = RENAME(uyvyToY); break; | |
3122 case PIX_FMT_BGR24 : c->hyscale_internal = RENAME(bgr24ToY); break; | |
3123 case PIX_FMT_BGR565 : c->hyscale_internal = RENAME(bgr16ToY); break; | |
3124 case PIX_FMT_BGR555 : c->hyscale_internal = RENAME(bgr15ToY); break; | |
3125 case PIX_FMT_RGB24 : c->hyscale_internal = RENAME(rgb24ToY); break; | |
3126 case PIX_FMT_RGB565 : c->hyscale_internal = RENAME(rgb16ToY); break; | |
3127 case PIX_FMT_RGB555 : c->hyscale_internal = RENAME(rgb15ToY); break; | |
3128 case PIX_FMT_RGB8 : | |
3129 case PIX_FMT_BGR8 : | |
3130 case PIX_FMT_PAL8 : | |
3131 case PIX_FMT_BGR4_BYTE: | |
3132 case PIX_FMT_RGB4_BYTE: c->hyscale_internal = RENAME(palToY); break; | |
3133 case PIX_FMT_MONOBLACK: c->hyscale_internal = RENAME(monoblack2Y); break; | |
3134 case PIX_FMT_MONOWHITE: c->hyscale_internal = RENAME(monowhite2Y); break; | |
3135 } | |
3136 if (c->alpPixBuf) { | |
3137 switch (srcFormat) { | |
3138 case PIX_FMT_RGB32 : | |
3139 case PIX_FMT_RGB32_1: | |
3140 case PIX_FMT_BGR32 : | |
3141 case PIX_FMT_BGR32_1: c->hyscale_internal = RENAME(abgrToA); break; | |
3142 } | |
3143 } else { | |
3144 switch (srcFormat) { | |
3145 case PIX_FMT_RGB32 : | |
3146 case PIX_FMT_RGB32_1: c->hyscale_internal = RENAME(bgr32ToY); break; | |
3147 case PIX_FMT_BGR32 : | |
3148 case PIX_FMT_BGR32_1: c->hyscale_internal = RENAME(rgb32ToY); break; | |
3149 } | |
3150 } | |
3151 } |