Mercurial > mplayer.hg
comparison libswscale/swscale_template.c @ 29090:319305829bdc
swscale: Remove mmx2 params from h[yc]scale().
author | ramiro |
---|---|
date | Thu, 02 Apr 2009 18:34:11 +0000 |
parents | e3253ea94757 |
children | 06c79db43cd8 |
comparison
equal
deleted
inserted
replaced
29089:e3253ea94757 | 29090:319305829bdc |
---|---|
2259 } | 2259 } |
2260 } | 2260 } |
2261 | 2261 |
2262 // *** horizontal scale Y line to temp buffer | 2262 // *** horizontal scale Y line to temp buffer |
2263 static inline void RENAME(hyscale)(SwsContext *c, uint16_t *dst, long dstWidth, uint8_t *src, int srcW, int xInc, | 2263 static inline void RENAME(hyscale)(SwsContext *c, uint16_t *dst, long dstWidth, uint8_t *src, int srcW, int xInc, |
2264 int flags, int canMMX2BeUsed, int16_t *hLumFilter, | 2264 int flags, int16_t *hLumFilter, |
2265 int16_t *hLumFilterPos, int hLumFilterSize, void *funnyYCode, | 2265 int16_t *hLumFilterPos, int hLumFilterSize, |
2266 int srcFormat, uint8_t *formatConvBuffer, int16_t *mmx2Filter, | 2266 int srcFormat, uint8_t *formatConvBuffer, |
2267 int32_t *mmx2FilterPos, uint32_t *pal, int isAlpha) | 2267 uint32_t *pal, int isAlpha) |
2268 { | 2268 { |
2269 int32_t *mmx2FilterPos = c->lumMmx2FilterPos; | |
2270 int16_t *mmx2Filter = c->lumMmx2Filter; | |
2271 int canMMX2BeUsed = c->canMMX2BeUsed; | |
2272 void *funnyYCode = c->funnyYCode; | |
2273 | |
2269 if (srcFormat==PIX_FMT_YUYV422 || srcFormat==PIX_FMT_GRAY16BE) | 2274 if (srcFormat==PIX_FMT_YUYV422 || srcFormat==PIX_FMT_GRAY16BE) |
2270 { | 2275 { |
2271 RENAME(yuy2ToY)(formatConvBuffer, src, srcW, pal); | 2276 RENAME(yuy2ToY)(formatConvBuffer, src, srcW, pal); |
2272 src= formatConvBuffer; | 2277 src= formatConvBuffer; |
2273 } | 2278 } |
2518 xpos+=xInc; | 2523 xpos+=xInc; |
2519 } | 2524 } |
2520 } | 2525 } |
2521 | 2526 |
2522 inline static void RENAME(hcscale)(SwsContext *c, uint16_t *dst, long dstWidth, uint8_t *src1, uint8_t *src2, | 2527 inline static void RENAME(hcscale)(SwsContext *c, uint16_t *dst, long dstWidth, uint8_t *src1, uint8_t *src2, |
2523 int srcW, int xInc, int flags, int canMMX2BeUsed, int16_t *hChrFilter, | 2528 int srcW, int xInc, int flags, int16_t *hChrFilter, |
2524 int16_t *hChrFilterPos, int hChrFilterSize, void *funnyUVCode, | 2529 int16_t *hChrFilterPos, int hChrFilterSize, |
2525 int srcFormat, uint8_t *formatConvBuffer, int16_t *mmx2Filter, | 2530 int srcFormat, uint8_t *formatConvBuffer, |
2526 int32_t *mmx2FilterPos, uint32_t *pal) | 2531 uint32_t *pal) |
2527 { | 2532 { |
2533 int32_t *mmx2FilterPos = c->chrMmx2FilterPos; | |
2534 int16_t *mmx2Filter = c->chrMmx2Filter; | |
2535 int canMMX2BeUsed = c->canMMX2BeUsed; | |
2536 void *funnyUVCode = c->funnyUVCode; | |
2537 | |
2528 if (srcFormat==PIX_FMT_YUYV422) | 2538 if (srcFormat==PIX_FMT_YUYV422) |
2529 { | 2539 { |
2530 RENAME(yuy2ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); | 2540 RENAME(yuy2ToUV)(formatConvBuffer, formatConvBuffer+VOFW, src1, src2, srcW, pal); |
2531 src1= formatConvBuffer; | 2541 src1= formatConvBuffer; |
2532 src2= formatConvBuffer+VOFW; | 2542 src2= formatConvBuffer+VOFW; |
2815 const int lumXInc= c->lumXInc; | 2825 const int lumXInc= c->lumXInc; |
2816 const int chrXInc= c->chrXInc; | 2826 const int chrXInc= c->chrXInc; |
2817 const int dstFormat= c->dstFormat; | 2827 const int dstFormat= c->dstFormat; |
2818 const int srcFormat= c->srcFormat; | 2828 const int srcFormat= c->srcFormat; |
2819 const int flags= c->flags; | 2829 const int flags= c->flags; |
2820 const int canMMX2BeUsed= c->canMMX2BeUsed; | |
2821 int16_t *vLumFilterPos= c->vLumFilterPos; | 2830 int16_t *vLumFilterPos= c->vLumFilterPos; |
2822 int16_t *vChrFilterPos= c->vChrFilterPos; | 2831 int16_t *vChrFilterPos= c->vChrFilterPos; |
2823 int16_t *hLumFilterPos= c->hLumFilterPos; | 2832 int16_t *hLumFilterPos= c->hLumFilterPos; |
2824 int16_t *hChrFilterPos= c->hChrFilterPos; | 2833 int16_t *hChrFilterPos= c->hChrFilterPos; |
2825 int16_t *vLumFilter= c->vLumFilter; | 2834 int16_t *vLumFilter= c->vLumFilter; |
2836 int16_t **lumPixBuf= c->lumPixBuf; | 2845 int16_t **lumPixBuf= c->lumPixBuf; |
2837 int16_t **chrPixBuf= c->chrPixBuf; | 2846 int16_t **chrPixBuf= c->chrPixBuf; |
2838 int16_t **alpPixBuf= c->alpPixBuf; | 2847 int16_t **alpPixBuf= c->alpPixBuf; |
2839 const int vLumBufSize= c->vLumBufSize; | 2848 const int vLumBufSize= c->vLumBufSize; |
2840 const int vChrBufSize= c->vChrBufSize; | 2849 const int vChrBufSize= c->vChrBufSize; |
2841 uint8_t *funnyYCode= c->funnyYCode; | |
2842 uint8_t *funnyUVCode= c->funnyUVCode; | |
2843 uint8_t *formatConvBuffer= c->formatConvBuffer; | 2850 uint8_t *formatConvBuffer= c->formatConvBuffer; |
2844 const int chrSrcSliceY= srcSliceY >> c->chrSrcVSubSample; | 2851 const int chrSrcSliceY= srcSliceY >> c->chrSrcVSubSample; |
2845 const int chrSrcSliceH= -((-srcSliceH) >> c->chrSrcVSubSample); | 2852 const int chrSrcSliceH= -((-srcSliceH) >> c->chrSrcVSubSample); |
2846 int lastDstY; | 2853 int lastDstY; |
2847 uint32_t *pal=c->pal_yuv; | 2854 uint32_t *pal=c->pal_yuv; |
2940 assert(lumBufIndex < 2*vLumBufSize); | 2947 assert(lumBufIndex < 2*vLumBufSize); |
2941 assert(lastInLumBuf + 1 - srcSliceY < srcSliceH); | 2948 assert(lastInLumBuf + 1 - srcSliceY < srcSliceH); |
2942 assert(lastInLumBuf + 1 - srcSliceY >= 0); | 2949 assert(lastInLumBuf + 1 - srcSliceY >= 0); |
2943 //printf("%d %d\n", lumBufIndex, vLumBufSize); | 2950 //printf("%d %d\n", lumBufIndex, vLumBufSize); |
2944 RENAME(hyscale)(c, lumPixBuf[ lumBufIndex ], dstW, src1, srcW, lumXInc, | 2951 RENAME(hyscale)(c, lumPixBuf[ lumBufIndex ], dstW, src1, srcW, lumXInc, |
2945 flags, canMMX2BeUsed, hLumFilter, hLumFilterPos, hLumFilterSize, | 2952 flags, hLumFilter, hLumFilterPos, hLumFilterSize, |
2946 funnyYCode, c->srcFormat, formatConvBuffer, | 2953 c->srcFormat, formatConvBuffer, |
2947 c->lumMmx2Filter, c->lumMmx2FilterPos, pal, 0); | 2954 pal, 0); |
2948 if (CONFIG_SWSCALE_ALPHA && alpPixBuf) | 2955 if (CONFIG_SWSCALE_ALPHA && alpPixBuf) |
2949 RENAME(hyscale)(c, alpPixBuf[ lumBufIndex ], dstW, src2, srcW, lumXInc, | 2956 RENAME(hyscale)(c, alpPixBuf[ lumBufIndex ], dstW, src2, srcW, lumXInc, |
2950 flags, canMMX2BeUsed, hLumFilter, hLumFilterPos, hLumFilterSize, | 2957 flags, hLumFilter, hLumFilterPos, hLumFilterSize, |
2951 funnyYCode, c->srcFormat, formatConvBuffer, | 2958 c->srcFormat, formatConvBuffer, |
2952 c->lumMmx2Filter, c->lumMmx2FilterPos, pal, 1); | 2959 pal, 1); |
2953 lastInLumBuf++; | 2960 lastInLumBuf++; |
2954 } | 2961 } |
2955 while(lastInChrBuf < lastChrSrcY) | 2962 while(lastInChrBuf < lastChrSrcY) |
2956 { | 2963 { |
2957 uint8_t *src1= src[1]+(lastInChrBuf + 1 - chrSrcSliceY)*srcStride[1]; | 2964 uint8_t *src1= src[1]+(lastInChrBuf + 1 - chrSrcSliceY)*srcStride[1]; |
2962 assert(lastInChrBuf + 1 - chrSrcSliceY >= 0); | 2969 assert(lastInChrBuf + 1 - chrSrcSliceY >= 0); |
2963 //FIXME replace parameters through context struct (some at least) | 2970 //FIXME replace parameters through context struct (some at least) |
2964 | 2971 |
2965 if (!(isGray(srcFormat) || isGray(dstFormat))) | 2972 if (!(isGray(srcFormat) || isGray(dstFormat))) |
2966 RENAME(hcscale)(c, chrPixBuf[ chrBufIndex ], chrDstW, src1, src2, chrSrcW, chrXInc, | 2973 RENAME(hcscale)(c, chrPixBuf[ chrBufIndex ], chrDstW, src1, src2, chrSrcW, chrXInc, |
2967 flags, canMMX2BeUsed, hChrFilter, hChrFilterPos, hChrFilterSize, | 2974 flags, hChrFilter, hChrFilterPos, hChrFilterSize, |
2968 funnyUVCode, c->srcFormat, formatConvBuffer, | 2975 c->srcFormat, formatConvBuffer, |
2969 c->chrMmx2Filter, c->chrMmx2FilterPos, pal); | 2976 pal); |
2970 lastInChrBuf++; | 2977 lastInChrBuf++; |
2971 } | 2978 } |
2972 //wrap buf index around to stay inside the ring buffer | 2979 //wrap buf index around to stay inside the ring buffer |
2973 if (lumBufIndex >= vLumBufSize) lumBufIndex-= vLumBufSize; | 2980 if (lumBufIndex >= vLumBufSize) lumBufIndex-= vLumBufSize; |
2974 if (chrBufIndex >= vChrBufSize) chrBufIndex-= vChrBufSize; | 2981 if (chrBufIndex >= vChrBufSize) chrBufIndex-= vChrBufSize; |
2988 lumBufIndex++; | 2995 lumBufIndex++; |
2989 assert(lumBufIndex < 2*vLumBufSize); | 2996 assert(lumBufIndex < 2*vLumBufSize); |
2990 assert(lastInLumBuf + 1 - srcSliceY < srcSliceH); | 2997 assert(lastInLumBuf + 1 - srcSliceY < srcSliceH); |
2991 assert(lastInLumBuf + 1 - srcSliceY >= 0); | 2998 assert(lastInLumBuf + 1 - srcSliceY >= 0); |
2992 RENAME(hyscale)(c, lumPixBuf[ lumBufIndex ], dstW, src1, srcW, lumXInc, | 2999 RENAME(hyscale)(c, lumPixBuf[ lumBufIndex ], dstW, src1, srcW, lumXInc, |
2993 flags, canMMX2BeUsed, hLumFilter, hLumFilterPos, hLumFilterSize, | 3000 flags, hLumFilter, hLumFilterPos, hLumFilterSize, |
2994 funnyYCode, c->srcFormat, formatConvBuffer, | 3001 c->srcFormat, formatConvBuffer, |
2995 c->lumMmx2Filter, c->lumMmx2FilterPos, pal, 0); | 3002 pal, 0); |
2996 if (CONFIG_SWSCALE_ALPHA && alpPixBuf) | 3003 if (CONFIG_SWSCALE_ALPHA && alpPixBuf) |
2997 RENAME(hyscale)(c, alpPixBuf[ lumBufIndex ], dstW, src2, srcW, lumXInc, | 3004 RENAME(hyscale)(c, alpPixBuf[ lumBufIndex ], dstW, src2, srcW, lumXInc, |
2998 flags, canMMX2BeUsed, hLumFilter, hLumFilterPos, hLumFilterSize, | 3005 flags, hLumFilter, hLumFilterPos, hLumFilterSize, |
2999 funnyYCode, c->srcFormat, formatConvBuffer, | 3006 c->srcFormat, formatConvBuffer, |
3000 c->lumMmx2Filter, c->lumMmx2FilterPos, pal, 1); | 3007 pal, 1); |
3001 lastInLumBuf++; | 3008 lastInLumBuf++; |
3002 } | 3009 } |
3003 while(lastInChrBuf+1 < (chrSrcSliceY + chrSrcSliceH)) | 3010 while(lastInChrBuf+1 < (chrSrcSliceY + chrSrcSliceH)) |
3004 { | 3011 { |
3005 uint8_t *src1= src[1]+(lastInChrBuf + 1 - chrSrcSliceY)*srcStride[1]; | 3012 uint8_t *src1= src[1]+(lastInChrBuf + 1 - chrSrcSliceY)*srcStride[1]; |
3009 assert(lastInChrBuf + 1 - chrSrcSliceY < chrSrcSliceH); | 3016 assert(lastInChrBuf + 1 - chrSrcSliceY < chrSrcSliceH); |
3010 assert(lastInChrBuf + 1 - chrSrcSliceY >= 0); | 3017 assert(lastInChrBuf + 1 - chrSrcSliceY >= 0); |
3011 | 3018 |
3012 if (!(isGray(srcFormat) || isGray(dstFormat))) | 3019 if (!(isGray(srcFormat) || isGray(dstFormat))) |
3013 RENAME(hcscale)(c, chrPixBuf[ chrBufIndex ], chrDstW, src1, src2, chrSrcW, chrXInc, | 3020 RENAME(hcscale)(c, chrPixBuf[ chrBufIndex ], chrDstW, src1, src2, chrSrcW, chrXInc, |
3014 flags, canMMX2BeUsed, hChrFilter, hChrFilterPos, hChrFilterSize, | 3021 flags, hChrFilter, hChrFilterPos, hChrFilterSize, |
3015 funnyUVCode, c->srcFormat, formatConvBuffer, | 3022 c->srcFormat, formatConvBuffer, |
3016 c->chrMmx2Filter, c->chrMmx2FilterPos, pal); | 3023 pal); |
3017 lastInChrBuf++; | 3024 lastInChrBuf++; |
3018 } | 3025 } |
3019 //wrap buf index around to stay inside the ring buffer | 3026 //wrap buf index around to stay inside the ring buffer |
3020 if (lumBufIndex >= vLumBufSize) lumBufIndex-= vLumBufSize; | 3027 if (lumBufIndex >= vLumBufSize) lumBufIndex-= vLumBufSize; |
3021 if (chrBufIndex >= vChrBufSize) chrBufIndex-= vChrBufSize; | 3028 if (chrBufIndex >= vChrBufSize) chrBufIndex-= vChrBufSize; |