Mercurial > mplayer.hg
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 |