Mercurial > mplayer.hg
comparison libswscale/swscale_template.c @ 27548:78da4c8b2293
Implement full horizontal chroma for rgb/bgr24/32 output.
author | michael |
---|---|
date | Thu, 11 Sep 2008 14:39:12 +0000 |
parents | 77ff4ab4ddfc |
children | 3f12d34131a9 |
comparison
equal
deleted
inserted
replaced
27547:a917f63f61d3 | 27548:78da4c8b2293 |
---|---|
3130 assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2); | 3130 assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2); |
3131 assert(chrSrcPtr + vChrFilterSize - 1 < chrPixBuf + vChrBufSize*2); | 3131 assert(chrSrcPtr + vChrFilterSize - 1 < chrPixBuf + vChrBufSize*2); |
3132 if (vLumFilterSize == 1 && vChrFilterSize == 2) //unscaled RGB | 3132 if (vLumFilterSize == 1 && vChrFilterSize == 2) //unscaled RGB |
3133 { | 3133 { |
3134 int chrAlpha= vChrFilter[2*dstY+1]; | 3134 int chrAlpha= vChrFilter[2*dstY+1]; |
3135 if(flags & SWS_FULL_CHR_H_INT){ | |
3136 yuv2rgbXinC_full(c, //FIXME write a packed1_full function | |
3137 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | |
3138 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | |
3139 dest, dstW, dstY); | |
3140 }else{ | |
3135 RENAME(yuv2packed1)(c, *lumSrcPtr, *chrSrcPtr, *(chrSrcPtr+1), | 3141 RENAME(yuv2packed1)(c, *lumSrcPtr, *chrSrcPtr, *(chrSrcPtr+1), |
3136 dest, dstW, chrAlpha, dstFormat, flags, dstY); | 3142 dest, dstW, chrAlpha, dstFormat, flags, dstY); |
3143 } | |
3137 } | 3144 } |
3138 else if (vLumFilterSize == 2 && vChrFilterSize == 2) //bilinear upscale RGB | 3145 else if (vLumFilterSize == 2 && vChrFilterSize == 2) //bilinear upscale RGB |
3139 { | 3146 { |
3140 int lumAlpha= vLumFilter[2*dstY+1]; | 3147 int lumAlpha= vLumFilter[2*dstY+1]; |
3141 int chrAlpha= vChrFilter[2*dstY+1]; | 3148 int chrAlpha= vChrFilter[2*dstY+1]; |
3142 lumMmxFilter[2]= | 3149 lumMmxFilter[2]= |
3143 lumMmxFilter[3]= vLumFilter[2*dstY ]*0x10001; | 3150 lumMmxFilter[3]= vLumFilter[2*dstY ]*0x10001; |
3144 chrMmxFilter[2]= | 3151 chrMmxFilter[2]= |
3145 chrMmxFilter[3]= vChrFilter[2*chrDstY]*0x10001; | 3152 chrMmxFilter[3]= vChrFilter[2*chrDstY]*0x10001; |
3153 if(flags & SWS_FULL_CHR_H_INT){ | |
3154 yuv2rgbXinC_full(c, //FIXME write a packed2_full function | |
3155 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | |
3156 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | |
3157 dest, dstW, dstY); | |
3158 }else{ | |
3146 RENAME(yuv2packed2)(c, *lumSrcPtr, *(lumSrcPtr+1), *chrSrcPtr, *(chrSrcPtr+1), | 3159 RENAME(yuv2packed2)(c, *lumSrcPtr, *(lumSrcPtr+1), *chrSrcPtr, *(chrSrcPtr+1), |
3147 dest, dstW, lumAlpha, chrAlpha, dstY); | 3160 dest, dstW, lumAlpha, chrAlpha, dstY); |
3161 } | |
3148 } | 3162 } |
3149 else //general RGB | 3163 else //general RGB |
3150 { | 3164 { |
3165 if(flags & SWS_FULL_CHR_H_INT){ | |
3166 yuv2rgbXinC_full(c, | |
3167 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | |
3168 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | |
3169 dest, dstW, dstY); | |
3170 }else{ | |
3151 RENAME(yuv2packedX)(c, | 3171 RENAME(yuv2packedX)(c, |
3152 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | 3172 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, |
3153 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | 3173 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, |
3154 dest, dstW, dstY); | 3174 dest, dstW, dstY); |
3175 } | |
3155 } | 3176 } |
3156 } | 3177 } |
3157 } | 3178 } |
3158 else // hmm looks like we can't use MMX here without overwriting this array's tail | 3179 else // hmm looks like we can't use MMX here without overwriting this array's tail |
3159 { | 3180 { |
3178 } | 3199 } |
3179 else | 3200 else |
3180 { | 3201 { |
3181 assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2); | 3202 assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2); |
3182 assert(chrSrcPtr + vChrFilterSize - 1 < chrPixBuf + vChrBufSize*2); | 3203 assert(chrSrcPtr + vChrFilterSize - 1 < chrPixBuf + vChrBufSize*2); |
3204 if(flags & SWS_FULL_CHR_H_INT){ | |
3205 yuv2rgbXinC_full(c, | |
3206 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | |
3207 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | |
3208 dest, dstW, dstY); | |
3209 }else{ | |
3183 yuv2packedXinC(c, | 3210 yuv2packedXinC(c, |
3184 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, | 3211 vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize, |
3185 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, | 3212 vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize, |
3186 dest, dstW, dstY); | 3213 dest, dstW, dstY); |
3214 } | |
3187 } | 3215 } |
3188 } | 3216 } |
3189 } | 3217 } |
3190 | 3218 |
3191 #ifdef HAVE_MMX | 3219 #ifdef HAVE_MMX |