comparison libswscale/swscale_template.c @ 29480:a4d8dee13834

Indent libswscale: - Use 4 spaces throughout for indentation; - Fix inconsistent indentation; - Indent function calls and declarations aligning arguments on multiple lines to the column after the opening parentheses; - Align asm code to the column 4 spaces after the call to __asm__(); - Align cases in switch statements to the same column as "switch".
author ramiro
date Sun, 16 Aug 2009 00:32:04 +0000
parents dc1a6d06b090
children c080f1f5c07e
comparison
equal deleted inserted replaced
29479:55f33b0748c9 29480:a4d8dee13834
930 } 930 }
931 return; 931 return;
932 } 932 }
933 #endif 933 #endif
934 #if COMPILE_TEMPLATE_ALTIVEC 934 #if COMPILE_TEMPLATE_ALTIVEC
935 yuv2yuvX_altivec_real(lumFilter, lumSrc, lumFilterSize, 935 yuv2yuvX_altivec_real(lumFilter, lumSrc, lumFilterSize,
936 chrFilter, chrSrc, chrFilterSize, 936 chrFilter, chrSrc, chrFilterSize,
937 dest, uDest, vDest, dstW, chrDstW); 937 dest, uDest, vDest, dstW, chrDstW);
938 #else //COMPILE_TEMPLATE_ALTIVEC 938 #else //COMPILE_TEMPLATE_ALTIVEC
939 yuv2yuvXinC(lumFilter, lumSrc, lumFilterSize, 939 yuv2yuvXinC(lumFilter, lumSrc, lumFilterSize,
940 chrFilter, chrSrc, chrFilterSize, 940 chrFilter, chrSrc, chrFilterSize,
941 alpSrc, dest, uDest, vDest, aDest, dstW, chrDstW); 941 alpSrc, dest, uDest, vDest, aDest, dstW, chrDstW);
942 #endif //!COMPILE_TEMPLATE_ALTIVEC 942 #endif //!COMPILE_TEMPLATE_ALTIVEC
943 } 943 }
944 944
945 static inline void RENAME(yuv2nv12X)(SwsContext *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, 945 static inline void RENAME(yuv2nv12X)(SwsContext *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize,
946 const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize, 946 const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize,
947 uint8_t *dest, uint8_t *uDest, int dstW, int chrDstW, int dstFormat) 947 uint8_t *dest, uint8_t *uDest, int dstW, int chrDstW, int dstFormat)
948 { 948 {
949 yuv2nv12XinC(lumFilter, lumSrc, lumFilterSize, 949 yuv2nv12XinC(lumFilter, lumSrc, lumFilterSize,
950 chrFilter, chrSrc, chrFilterSize, 950 chrFilter, chrSrc, chrFilterSize,
951 dest, uDest, dstW, chrDstW, dstFormat); 951 dest, uDest, dstW, chrDstW, dstFormat);
952 } 952 }
953 953
954 static inline void RENAME(yuv2yuv1)(SwsContext *c, const int16_t *lumSrc, const int16_t *chrSrc, const int16_t *alpSrc, 954 static inline void RENAME(yuv2yuv1)(SwsContext *c, const int16_t *lumSrc, const int16_t *chrSrc, const int16_t *alpSrc,
955 uint8_t *dest, uint8_t *uDest, uint8_t *vDest, uint8_t *aDest, long dstW, long chrDstW) 955 uint8_t *dest, uint8_t *uDest, uint8_t *vDest, uint8_t *aDest, long dstW, long chrDstW)
956 { 956 {
1196 #endif /* COMPILE_TEMPLATE_MMX */ 1196 #endif /* COMPILE_TEMPLATE_MMX */
1197 #if COMPILE_TEMPLATE_ALTIVEC 1197 #if COMPILE_TEMPLATE_ALTIVEC
1198 /* The following list of supported dstFormat values should 1198 /* The following list of supported dstFormat values should
1199 match what's found in the body of ff_yuv2packedX_altivec() */ 1199 match what's found in the body of ff_yuv2packedX_altivec() */
1200 if (!(c->flags & SWS_BITEXACT) && !c->alpPixBuf && 1200 if (!(c->flags & SWS_BITEXACT) && !c->alpPixBuf &&
1201 (c->dstFormat==PIX_FMT_ABGR || c->dstFormat==PIX_FMT_BGRA || 1201 (c->dstFormat==PIX_FMT_ABGR || c->dstFormat==PIX_FMT_BGRA ||
1202 c->dstFormat==PIX_FMT_BGR24 || c->dstFormat==PIX_FMT_RGB24 || 1202 c->dstFormat==PIX_FMT_BGR24 || c->dstFormat==PIX_FMT_RGB24 ||
1203 c->dstFormat==PIX_FMT_RGBA || c->dstFormat==PIX_FMT_ARGB)) 1203 c->dstFormat==PIX_FMT_RGBA || c->dstFormat==PIX_FMT_ARGB))
1204 ff_yuv2packedX_altivec(c, lumFilter, lumSrc, lumFilterSize, 1204 ff_yuv2packedX_altivec(c, lumFilter, lumSrc, lumFilterSize,
1205 chrFilter, chrSrc, chrFilterSize, 1205 chrFilter, chrSrc, chrFilterSize,
1206 dest, dstW, dstY); 1206 dest, dstW, dstY);
1207 else 1207 else
1208 #endif 1208 #endif
1356 return; 1356 return;
1357 default: break; 1357 default: break;
1358 } 1358 }
1359 } 1359 }
1360 #endif //COMPILE_TEMPLATE_MMX 1360 #endif //COMPILE_TEMPLATE_MMX
1361 YSCALE_YUV_2_ANYRGB_C(YSCALE_YUV_2_RGB2_C, YSCALE_YUV_2_PACKED2_C(void,0), YSCALE_YUV_2_GRAY16_2_C, YSCALE_YUV_2_MONO2_C) 1361 YSCALE_YUV_2_ANYRGB_C(YSCALE_YUV_2_RGB2_C, YSCALE_YUV_2_PACKED2_C(void,0), YSCALE_YUV_2_GRAY16_2_C, YSCALE_YUV_2_MONO2_C)
1362 } 1362 }
1363 1363
1364 /** 1364 /**
1365 * YV12 to RGB without scaling or interpolating 1365 * YV12 to RGB without scaling or interpolating
1366 */ 1366 */
2303 "add %%"REG_a", %%"REG_D" \n\t"\ 2303 "add %%"REG_a", %%"REG_D" \n\t"\
2304 "xor %%"REG_a", %%"REG_a" \n\t"\ 2304 "xor %%"REG_a", %%"REG_a" \n\t"\
2305 2305
2306 #endif /* ARCH_X86_64 */ 2306 #endif /* ARCH_X86_64 */
2307 2307
2308 CALL_MMX2_FILTER_CODE 2308 CALL_MMX2_FILTER_CODE
2309 CALL_MMX2_FILTER_CODE 2309 CALL_MMX2_FILTER_CODE
2310 CALL_MMX2_FILTER_CODE 2310 CALL_MMX2_FILTER_CODE
2311 CALL_MMX2_FILTER_CODE 2311 CALL_MMX2_FILTER_CODE
2312 CALL_MMX2_FILTER_CODE 2312 CALL_MMX2_FILTER_CODE
2313 CALL_MMX2_FILTER_CODE 2313 CALL_MMX2_FILTER_CODE
2314 CALL_MMX2_FILTER_CODE 2314 CALL_MMX2_FILTER_CODE
2315 CALL_MMX2_FILTER_CODE 2315 CALL_MMX2_FILTER_CODE
2316 2316
2317 #if defined(PIC) 2317 #if defined(PIC)
2318 "mov %5, %%"REG_b" \n\t" 2318 "mov %5, %%"REG_b" \n\t"
2319 #endif 2319 #endif
2320 :: "m" (src), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos), 2320 :: "m" (src), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos),
2468 "xor %%"REG_a", %%"REG_a" \n\t" // i 2468 "xor %%"REG_a", %%"REG_a" \n\t" // i
2469 PREFETCH" (%%"REG_c") \n\t" 2469 PREFETCH" (%%"REG_c") \n\t"
2470 PREFETCH" 32(%%"REG_c") \n\t" 2470 PREFETCH" 32(%%"REG_c") \n\t"
2471 PREFETCH" 64(%%"REG_c") \n\t" 2471 PREFETCH" 64(%%"REG_c") \n\t"
2472 2472
2473 CALL_MMX2_FILTER_CODE 2473 CALL_MMX2_FILTER_CODE
2474 CALL_MMX2_FILTER_CODE 2474 CALL_MMX2_FILTER_CODE
2475 CALL_MMX2_FILTER_CODE 2475 CALL_MMX2_FILTER_CODE
2476 CALL_MMX2_FILTER_CODE 2476 CALL_MMX2_FILTER_CODE
2477 "xor %%"REG_a", %%"REG_a" \n\t" // i 2477 "xor %%"REG_a", %%"REG_a" \n\t" // i
2478 "mov %5, %%"REG_c" \n\t" // src 2478 "mov %5, %%"REG_c" \n\t" // src
2479 "mov %1, %%"REG_D" \n\t" // buf1 2479 "mov %1, %%"REG_D" \n\t" // buf1
2480 "add $"AV_STRINGIFY(VOF)", %%"REG_D" \n\t" 2480 "add $"AV_STRINGIFY(VOF)", %%"REG_D" \n\t"
2481 PREFETCH" (%%"REG_c") \n\t" 2481 PREFETCH" (%%"REG_c") \n\t"
2482 PREFETCH" 32(%%"REG_c") \n\t" 2482 PREFETCH" 32(%%"REG_c") \n\t"
2483 PREFETCH" 64(%%"REG_c") \n\t" 2483 PREFETCH" 64(%%"REG_c") \n\t"
2484 2484
2485 CALL_MMX2_FILTER_CODE 2485 CALL_MMX2_FILTER_CODE
2486 CALL_MMX2_FILTER_CODE 2486 CALL_MMX2_FILTER_CODE
2487 CALL_MMX2_FILTER_CODE 2487 CALL_MMX2_FILTER_CODE
2488 CALL_MMX2_FILTER_CODE 2488 CALL_MMX2_FILTER_CODE
2489 2489
2490 #if defined(PIC) 2490 #if defined(PIC)
2491 "mov %6, %%"REG_b" \n\t" 2491 "mov %6, %%"REG_b" \n\t"
2492 #endif 2492 #endif
2493 :: "m" (src1), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos), 2493 :: "m" (src1), "m" (dst), "m" (mmx2Filter), "m" (mmx2FilterPos),
2752 const int16_t **lumSrcPtr= (const int16_t **) lumPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize; 2752 const int16_t **lumSrcPtr= (const int16_t **) lumPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize;
2753 const int16_t **chrSrcPtr= (const int16_t **) chrPixBuf + chrBufIndex + firstChrSrcY - lastInChrBuf + vChrBufSize; 2753 const int16_t **chrSrcPtr= (const int16_t **) chrPixBuf + chrBufIndex + firstChrSrcY - lastInChrBuf + vChrBufSize;
2754 const int16_t **alpSrcPtr= (CONFIG_SWSCALE_ALPHA && alpPixBuf) ? (const int16_t **) alpPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize : NULL; 2754 const int16_t **alpSrcPtr= (CONFIG_SWSCALE_ALPHA && alpPixBuf) ? (const int16_t **) alpPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize : NULL;
2755 #if COMPILE_TEMPLATE_MMX 2755 #if COMPILE_TEMPLATE_MMX
2756 int i; 2756 int i;
2757 if (flags & SWS_ACCURATE_RND){ 2757 if (flags & SWS_ACCURATE_RND){
2758 int s= APCK_SIZE / 8; 2758 int s= APCK_SIZE / 8;
2759 for (i=0; i<vLumFilterSize; i+=2){ 2759 for (i=0; i<vLumFilterSize; i+=2){
2760 *(void**)&lumMmxFilter[s*i ]= lumSrcPtr[i ]; 2760 *(void**)&lumMmxFilter[s*i ]= lumSrcPtr[i ];
2761 *(void**)&lumMmxFilter[s*i+APCK_PTR2/4 ]= lumSrcPtr[i+(vLumFilterSize>1)]; 2761 *(void**)&lumMmxFilter[s*i+APCK_PTR2/4 ]= lumSrcPtr[i+(vLumFilterSize>1)];
2762 lumMmxFilter[s*i+APCK_COEF/4 ]= 2762 lumMmxFilter[s*i+APCK_COEF/4 ]=
2763 lumMmxFilter[s*i+APCK_COEF/4+1]= vLumFilter[dstY*vLumFilterSize + i ] 2763 lumMmxFilter[s*i+APCK_COEF/4+1]= vLumFilter[dstY*vLumFilterSize + i ]
2764 + (vLumFilterSize>1 ? vLumFilter[dstY*vLumFilterSize + i + 1]<<16 : 0); 2764 + (vLumFilterSize>1 ? vLumFilter[dstY*vLumFilterSize + i + 1]<<16 : 0);
2765 if (CONFIG_SWSCALE_ALPHA && alpPixBuf){ 2765 if (CONFIG_SWSCALE_ALPHA && alpPixBuf){
2766 *(void**)&alpMmxFilter[s*i ]= alpSrcPtr[i ]; 2766 *(void**)&alpMmxFilter[s*i ]= alpSrcPtr[i ];
2767 *(void**)&alpMmxFilter[s*i+APCK_PTR2/4 ]= alpSrcPtr[i+(vLumFilterSize>1)]; 2767 *(void**)&alpMmxFilter[s*i+APCK_PTR2/4 ]= alpSrcPtr[i+(vLumFilterSize>1)];
2768 alpMmxFilter[s*i+APCK_COEF/4 ]= 2768 alpMmxFilter[s*i+APCK_COEF/4 ]=
2769 alpMmxFilter[s*i+APCK_COEF/4+1]= lumMmxFilter[s*i+APCK_COEF/4 ]; 2769 alpMmxFilter[s*i+APCK_COEF/4+1]= lumMmxFilter[s*i+APCK_COEF/4 ];
2770 }
2771 }
2772 for (i=0; i<vChrFilterSize; i+=2){
2773 *(void**)&chrMmxFilter[s*i ]= chrSrcPtr[i ];
2774 *(void**)&chrMmxFilter[s*i+APCK_PTR2/4 ]= chrSrcPtr[i+(vChrFilterSize>1)];
2775 chrMmxFilter[s*i+APCK_COEF/4 ]=
2776 chrMmxFilter[s*i+APCK_COEF/4+1]= vChrFilter[chrDstY*vChrFilterSize + i ]
2777 + (vChrFilterSize>1 ? vChrFilter[chrDstY*vChrFilterSize + i + 1]<<16 : 0);
2778 }
2779 }else{
2780 for (i=0; i<vLumFilterSize; i++)
2781 {
2782 lumMmxFilter[4*i+0]= (int32_t)lumSrcPtr[i];
2783 lumMmxFilter[4*i+1]= (uint64_t)lumSrcPtr[i] >> 32;
2784 lumMmxFilter[4*i+2]=
2785 lumMmxFilter[4*i+3]=
2786 ((uint16_t)vLumFilter[dstY*vLumFilterSize + i])*0x10001;
2787 if (CONFIG_SWSCALE_ALPHA && alpPixBuf){
2788 alpMmxFilter[4*i+0]= (int32_t)alpSrcPtr[i];
2789 alpMmxFilter[4*i+1]= (uint64_t)alpSrcPtr[i] >> 32;
2790 alpMmxFilter[4*i+2]=
2791 alpMmxFilter[4*i+3]= lumMmxFilter[4*i+2];
2792 }
2793 }
2794 for (i=0; i<vChrFilterSize; i++)
2795 {
2796 chrMmxFilter[4*i+0]= (int32_t)chrSrcPtr[i];
2797 chrMmxFilter[4*i+1]= (uint64_t)chrSrcPtr[i] >> 32;
2798 chrMmxFilter[4*i+2]=
2799 chrMmxFilter[4*i+3]=
2800 ((uint16_t)vChrFilter[chrDstY*vChrFilterSize + i])*0x10001;
2770 } 2801 }
2771 } 2802 }
2772 for (i=0; i<vChrFilterSize; i+=2){
2773 *(void**)&chrMmxFilter[s*i ]= chrSrcPtr[i ];
2774 *(void**)&chrMmxFilter[s*i+APCK_PTR2/4 ]= chrSrcPtr[i+(vChrFilterSize>1)];
2775 chrMmxFilter[s*i+APCK_COEF/4 ]=
2776 chrMmxFilter[s*i+APCK_COEF/4+1]= vChrFilter[chrDstY*vChrFilterSize + i ]
2777 + (vChrFilterSize>1 ? vChrFilter[chrDstY*vChrFilterSize + i + 1]<<16 : 0);
2778 }
2779 }else{
2780 for (i=0; i<vLumFilterSize; i++)
2781 {
2782 lumMmxFilter[4*i+0]= (int32_t)lumSrcPtr[i];
2783 lumMmxFilter[4*i+1]= (uint64_t)lumSrcPtr[i] >> 32;
2784 lumMmxFilter[4*i+2]=
2785 lumMmxFilter[4*i+3]=
2786 ((uint16_t)vLumFilter[dstY*vLumFilterSize + i])*0x10001;
2787 if (CONFIG_SWSCALE_ALPHA && alpPixBuf){
2788 alpMmxFilter[4*i+0]= (int32_t)alpSrcPtr[i];
2789 alpMmxFilter[4*i+1]= (uint64_t)alpSrcPtr[i] >> 32;
2790 alpMmxFilter[4*i+2]=
2791 alpMmxFilter[4*i+3]= lumMmxFilter[4*i+2];
2792 }
2793 }
2794 for (i=0; i<vChrFilterSize; i++)
2795 {
2796 chrMmxFilter[4*i+0]= (int32_t)chrSrcPtr[i];
2797 chrMmxFilter[4*i+1]= (uint64_t)chrSrcPtr[i] >> 32;
2798 chrMmxFilter[4*i+2]=
2799 chrMmxFilter[4*i+3]=
2800 ((uint16_t)vChrFilter[chrDstY*vChrFilterSize + i])*0x10001;
2801 }
2802 }
2803 #endif 2803 #endif
2804 if (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21){ 2804 if (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21){
2805 const int chrSkipMask= (1<<c->chrDstVSubSample)-1; 2805 const int chrSkipMask= (1<<c->chrDstVSubSample)-1;
2806 if (dstY&chrSkipMask) uDest= NULL; //FIXME split functions in lumi / chromi 2806 if (dstY&chrSkipMask) uDest= NULL; //FIXME split functions in lumi / chromi
2807 c->yuv2nv12X(c, 2807 c->yuv2nv12X(c,
2808 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, 2808 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize,
2809 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2809 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2810 dest, uDest, dstW, chrDstW, dstFormat); 2810 dest, uDest, dstW, chrDstW, dstFormat);
2811 } 2811 }
2812 else if (isPlanarYUV(dstFormat) || dstFormat==PIX_FMT_GRAY8) //YV12 like 2812 else if (isPlanarYUV(dstFormat) || dstFormat==PIX_FMT_GRAY8) //YV12 like
2813 { 2813 {
2814 const int chrSkipMask= (1<<c->chrDstVSubSample)-1; 2814 const int chrSkipMask= (1<<c->chrDstVSubSample)-1;
2815 if ((dstY&chrSkipMask) || isGray(dstFormat)) uDest=vDest= NULL; //FIXME split functions in lumi / chromi 2815 if ((dstY&chrSkipMask) || isGray(dstFormat)) uDest=vDest= NULL; //FIXME split functions in lumi / chromi
2816 if (is16BPS(dstFormat)) 2816 if (is16BPS(dstFormat))
2817 { 2817 {
2818 yuv2yuvX16inC( 2818 yuv2yuvX16inC(
2819 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, 2819 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize,
2820 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2820 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2821 alpSrcPtr, (uint16_t *) dest, (uint16_t *) uDest, (uint16_t *) vDest, (uint16_t *) aDest, dstW, chrDstW, 2821 alpSrcPtr, (uint16_t *) dest, (uint16_t *) uDest, (uint16_t *) vDest, (uint16_t *) aDest, dstW, chrDstW,
2822 dstFormat); 2822 dstFormat);
2823 } 2823 }
2824 else 2824 else
2825 if (vLumFilterSize == 1 && vChrFilterSize == 1) // unscaled YV12 2825 if (vLumFilterSize == 1 && vChrFilterSize == 1) // unscaled YV12
2826 { 2826 {
2827 int16_t *lumBuf = lumPixBuf[0]; 2827 int16_t *lumBuf = lumPixBuf[0];
2830 c->yuv2yuv1(c, lumBuf, chrBuf, alpBuf, dest, uDest, vDest, aDest, dstW, chrDstW); 2830 c->yuv2yuv1(c, lumBuf, chrBuf, alpBuf, dest, uDest, vDest, aDest, dstW, chrDstW);
2831 } 2831 }
2832 else //General YV12 2832 else //General YV12
2833 { 2833 {
2834 c->yuv2yuvX(c, 2834 c->yuv2yuvX(c,
2835 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, 2835 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize,
2836 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2836 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2837 alpSrcPtr, dest, uDest, vDest, aDest, dstW, chrDstW); 2837 alpSrcPtr, dest, uDest, vDest, aDest, dstW, chrDstW);
2838 } 2838 }
2839 } 2839 }
2840 else 2840 else
2841 { 2841 {
2842 assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2); 2842 assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2);
2844 if (vLumFilterSize == 1 && vChrFilterSize == 2) //unscaled RGB 2844 if (vLumFilterSize == 1 && vChrFilterSize == 2) //unscaled RGB
2845 { 2845 {
2846 int chrAlpha= vChrFilter[2*dstY+1]; 2846 int chrAlpha= vChrFilter[2*dstY+1];
2847 if(flags & SWS_FULL_CHR_H_INT){ 2847 if(flags & SWS_FULL_CHR_H_INT){
2848 yuv2rgbXinC_full(c, //FIXME write a packed1_full function 2848 yuv2rgbXinC_full(c, //FIXME write a packed1_full function
2849 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, 2849 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
2850 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2850 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2851 alpSrcPtr, dest, dstW, dstY); 2851 alpSrcPtr, dest, dstW, dstY);
2852 }else{ 2852 }else{
2853 c->yuv2packed1(c, *lumSrcPtr, *chrSrcPtr, *(chrSrcPtr+1), 2853 c->yuv2packed1(c, *lumSrcPtr, *chrSrcPtr, *(chrSrcPtr+1),
2854 alpPixBuf ? *alpSrcPtr : NULL, 2854 alpPixBuf ? *alpSrcPtr : NULL,
2855 dest, dstW, chrAlpha, dstFormat, flags, dstY); 2855 dest, dstW, chrAlpha, dstFormat, flags, dstY);
2856 } 2856 }
2857 } 2857 }
2858 else if (vLumFilterSize == 2 && vChrFilterSize == 2) //bilinear upscale RGB 2858 else if (vLumFilterSize == 2 && vChrFilterSize == 2) //bilinear upscale RGB
2859 { 2859 {
2860 int lumAlpha= vLumFilter[2*dstY+1]; 2860 int lumAlpha= vLumFilter[2*dstY+1];
2863 lumMmxFilter[3]= vLumFilter[2*dstY ]*0x10001; 2863 lumMmxFilter[3]= vLumFilter[2*dstY ]*0x10001;
2864 chrMmxFilter[2]= 2864 chrMmxFilter[2]=
2865 chrMmxFilter[3]= vChrFilter[2*chrDstY]*0x10001; 2865 chrMmxFilter[3]= vChrFilter[2*chrDstY]*0x10001;
2866 if(flags & SWS_FULL_CHR_H_INT){ 2866 if(flags & SWS_FULL_CHR_H_INT){
2867 yuv2rgbXinC_full(c, //FIXME write a packed2_full function 2867 yuv2rgbXinC_full(c, //FIXME write a packed2_full function
2868 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, 2868 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
2869 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2869 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2870 alpSrcPtr, dest, dstW, dstY); 2870 alpSrcPtr, dest, dstW, dstY);
2871 }else{ 2871 }else{
2872 c->yuv2packed2(c, *lumSrcPtr, *(lumSrcPtr+1), *chrSrcPtr, *(chrSrcPtr+1), 2872 c->yuv2packed2(c, *lumSrcPtr, *(lumSrcPtr+1), *chrSrcPtr, *(chrSrcPtr+1),
2873 alpPixBuf ? *alpSrcPtr : NULL, alpPixBuf ? *(alpSrcPtr+1) : NULL, 2873 alpPixBuf ? *alpSrcPtr : NULL, alpPixBuf ? *(alpSrcPtr+1) : NULL,
2874 dest, dstW, lumAlpha, chrAlpha, dstY); 2874 dest, dstW, lumAlpha, chrAlpha, dstY);
2875 } 2875 }
2876 } 2876 }
2877 else //general RGB 2877 else //general RGB
2878 { 2878 {
2879 if(flags & SWS_FULL_CHR_H_INT){ 2879 if(flags & SWS_FULL_CHR_H_INT){
2880 yuv2rgbXinC_full(c, 2880 yuv2rgbXinC_full(c,
2881 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, 2881 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
2882 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2882 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2883 alpSrcPtr, dest, dstW, dstY); 2883 alpSrcPtr, dest, dstW, dstY);
2884 }else{ 2884 }else{
2885 c->yuv2packedX(c, 2885 c->yuv2packedX(c,
2886 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, 2886 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
2887 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2887 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2888 alpSrcPtr, dest, dstW, dstY); 2888 alpSrcPtr, dest, dstW, dstY);
2889 } 2889 }
2890 } 2890 }
2891 } 2891 }
2892 } 2892 }
2893 else // hmm looks like we can't use MMX here without overwriting this array's tail 2893 else // hmm looks like we can't use MMX here without overwriting this array's tail
2897 const int16_t **alpSrcPtr= (CONFIG_SWSCALE_ALPHA && alpPixBuf) ? (const int16_t **)alpPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize : NULL; 2897 const int16_t **alpSrcPtr= (CONFIG_SWSCALE_ALPHA && alpPixBuf) ? (const int16_t **)alpPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize : NULL;
2898 if (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21){ 2898 if (dstFormat == PIX_FMT_NV12 || dstFormat == PIX_FMT_NV21){
2899 const int chrSkipMask= (1<<c->chrDstVSubSample)-1; 2899 const int chrSkipMask= (1<<c->chrDstVSubSample)-1;
2900 if (dstY&chrSkipMask) uDest= NULL; //FIXME split functions in lumi / chromi 2900 if (dstY&chrSkipMask) uDest= NULL; //FIXME split functions in lumi / chromi
2901 yuv2nv12XinC( 2901 yuv2nv12XinC(
2902 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, 2902 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize,
2903 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2903 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2904 dest, uDest, dstW, chrDstW, dstFormat); 2904 dest, uDest, dstW, chrDstW, dstFormat);
2905 } 2905 }
2906 else if (isPlanarYUV(dstFormat) || dstFormat==PIX_FMT_GRAY8) //YV12 2906 else if (isPlanarYUV(dstFormat) || dstFormat==PIX_FMT_GRAY8) //YV12
2907 { 2907 {
2908 const int chrSkipMask= (1<<c->chrDstVSubSample)-1; 2908 const int chrSkipMask= (1<<c->chrDstVSubSample)-1;
2909 if ((dstY&chrSkipMask) || isGray(dstFormat)) uDest=vDest= NULL; //FIXME split functions in lumi / chromi 2909 if ((dstY&chrSkipMask) || isGray(dstFormat)) uDest=vDest= NULL; //FIXME split functions in lumi / chromi
2910 if (is16BPS(dstFormat)) 2910 if (is16BPS(dstFormat))
2911 { 2911 {
2912 yuv2yuvX16inC( 2912 yuv2yuvX16inC(
2913 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, 2913 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize,
2914 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2914 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2915 alpSrcPtr, (uint16_t *) dest, (uint16_t *) uDest, (uint16_t *) vDest, (uint16_t *) aDest, dstW, chrDstW, 2915 alpSrcPtr, (uint16_t *) dest, (uint16_t *) uDest, (uint16_t *) vDest, (uint16_t *) aDest, dstW, chrDstW,
2916 dstFormat); 2916 dstFormat);
2917 } 2917 }
2918 else 2918 else
2919 { 2919 {
2920 yuv2yuvXinC( 2920 yuv2yuvXinC(
2921 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize, 2921 vLumFilter+dstY*vLumFilterSize , lumSrcPtr, vLumFilterSize,
2922 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2922 vChrFilter+chrDstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2923 alpSrcPtr, dest, uDest, vDest, aDest, dstW, chrDstW); 2923 alpSrcPtr, dest, uDest, vDest, aDest, dstW, chrDstW);
2924 } 2924 }
2925 } 2925 }
2926 else 2926 else
2927 { 2927 {
2928 assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2); 2928 assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2);
2929 assert(chrSrcPtr + vChrFilterSize - 1 < chrPixBuf + vChrBufSize*2); 2929 assert(chrSrcPtr + vChrFilterSize - 1 < chrPixBuf + vChrBufSize*2);
2930 if(flags & SWS_FULL_CHR_H_INT){ 2930 if(flags & SWS_FULL_CHR_H_INT){
2931 yuv2rgbXinC_full(c, 2931 yuv2rgbXinC_full(c,
2932 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, 2932 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
2933 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2933 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2934 alpSrcPtr, dest, dstW, dstY); 2934 alpSrcPtr, dest, dstW, dstY);
2935 }else{ 2935 }else{
2936 yuv2packedXinC(c, 2936 yuv2packedXinC(c,
2937 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, 2937 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
2938 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, 2938 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
2939 alpSrcPtr, dest, dstW, dstY); 2939 alpSrcPtr, dest, dstW, dstY);
2940 } 2940 }
2941 } 2941 }
2942 } 2942 }
2943 } 2943 }
2944 2944