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