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 }