summaryrefslogtreecommitdiffstats
path: root/libswscale/swscale_template.c
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-09-11 14:39:12 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-09-11 14:39:12 +0000
commit6009a04a231b1c6d80605a407730c27b27f2f1ee (patch)
treebd18c38096f482cbfa578836c106d63234e90a9a /libswscale/swscale_template.c
parent3ea1657e650653c323230af1c862f3dce09d9118 (diff)
downloadmpv-6009a04a231b1c6d80605a407730c27b27f2f1ee.tar.bz2
mpv-6009a04a231b1c6d80605a407730c27b27f2f1ee.tar.xz
Implement full horizontal chroma for rgb/bgr24/32 output.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27580 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libswscale/swscale_template.c')
-rw-r--r--libswscale/swscale_template.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/libswscale/swscale_template.c b/libswscale/swscale_template.c
index b76dbdd51f..a52dfd55d9 100644
--- a/libswscale/swscale_template.c
+++ b/libswscale/swscale_template.c
@@ -3132,8 +3132,15 @@ static int RENAME(swScale)(SwsContext *c, uint8_t* src[], int srcStride[], int s
if (vLumFilterSize == 1 && vChrFilterSize == 2) //unscaled RGB
{
int chrAlpha= vChrFilter[2*dstY+1];
+ if(flags & SWS_FULL_CHR_H_INT){
+ yuv2rgbXinC_full(c, //FIXME write a packed1_full function
+ vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
+ vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
+ dest, dstW, dstY);
+ }else{
RENAME(yuv2packed1)(c, *lumSrcPtr, *chrSrcPtr, *(chrSrcPtr+1),
dest, dstW, chrAlpha, dstFormat, flags, dstY);
+ }
}
else if (vLumFilterSize == 2 && vChrFilterSize == 2) //bilinear upscale RGB
{
@@ -3143,15 +3150,29 @@ static int RENAME(swScale)(SwsContext *c, uint8_t* src[], int srcStride[], int s
lumMmxFilter[3]= vLumFilter[2*dstY ]*0x10001;
chrMmxFilter[2]=
chrMmxFilter[3]= vChrFilter[2*chrDstY]*0x10001;
+ if(flags & SWS_FULL_CHR_H_INT){
+ yuv2rgbXinC_full(c, //FIXME write a packed2_full function
+ vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
+ vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
+ dest, dstW, dstY);
+ }else{
RENAME(yuv2packed2)(c, *lumSrcPtr, *(lumSrcPtr+1), *chrSrcPtr, *(chrSrcPtr+1),
dest, dstW, lumAlpha, chrAlpha, dstY);
+ }
}
else //general RGB
{
+ if(flags & SWS_FULL_CHR_H_INT){
+ yuv2rgbXinC_full(c,
+ vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
+ vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
+ dest, dstW, dstY);
+ }else{
RENAME(yuv2packedX)(c,
vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
dest, dstW, dstY);
+ }
}
}
}
@@ -3180,10 +3201,17 @@ static int RENAME(swScale)(SwsContext *c, uint8_t* src[], int srcStride[], int s
{
assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2);
assert(chrSrcPtr + vChrFilterSize - 1 < chrPixBuf + vChrBufSize*2);
+ if(flags & SWS_FULL_CHR_H_INT){
+ yuv2rgbXinC_full(c,
+ vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
+ vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
+ dest, dstW, dstY);
+ }else{
yuv2packedXinC(c,
vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
dest, dstW, dstY);
+ }
}
}
}