Mercurial > mplayer.hg
changeset 29411:0192dbbb3121
MMX2 scaler: factorize initMMX2Scaler().
author | ramiro |
---|---|
date | Tue, 28 Jul 2009 05:42:46 +0000 |
parents | fd9b0bd6c908 |
children | 139af822b6ce |
files | libswscale/swscale.c |
diffstat | 1 files changed, 11 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/libswscale/swscale.c Tue Jul 28 05:41:22 2009 +0000 +++ b/libswscale/swscale.c Tue Jul 28 05:42:46 2009 +0000 @@ -1889,6 +1889,10 @@ int c=((xpos+xInc*2)>>16) - xx; int d=((xpos+xInc*3)>>16) - xx; int inc = (d+1<4); + uint8_t *fragment = (d+1<4) ? fragmentB : fragmentA; + x86_reg imm8OfPShufW1 = (d+1<4) ? imm8OfPShufW1B : imm8OfPShufW1A; + x86_reg imm8OfPShufW2 = (d+1<4) ? imm8OfPShufW2B : imm8OfPShufW2A; + x86_reg fragmentLength = (d+1<4) ? fragmentLengthB : fragmentLengthA; filter[i ] = (( xpos & 0xFFFF) ^ 0xFFFF)>>9; filter[i+1] = (((xpos+xInc ) & 0xFFFF) ^ 0xFFFF)>>9; @@ -1896,16 +1900,15 @@ filter[i+3] = (((xpos+xInc*3) & 0xFFFF) ^ 0xFFFF)>>9; filterPos[i/2]= xx; - if (d+1<4) { int maxShift= 3-(d+inc); int shift=0; - memcpy(funnyCode + fragmentPos, fragmentB, fragmentLengthB); - - funnyCode[fragmentPos + imm8OfPShufW1B]= + memcpy(funnyCode + fragmentPos, fragment, fragmentLength); + + funnyCode[fragmentPos + imm8OfPShufW1]= (a+inc) | ((b+inc)<<2) | ((c+inc)<<4) | ((d+inc)<<6); - funnyCode[fragmentPos + imm8OfPShufW2B]= + funnyCode[fragmentPos + imm8OfPShufW2]= a | (b<<2) | (c<<4) | (d<<6); if (i+4-inc>=dstW) shift=maxShift; //avoid overread @@ -1913,35 +1916,12 @@ if (shift && i>=shift) { - funnyCode[fragmentPos + imm8OfPShufW1B]+= 0x55*shift; - funnyCode[fragmentPos + imm8OfPShufW2B]+= 0x55*shift; + funnyCode[fragmentPos + imm8OfPShufW1]+= 0x55*shift; + funnyCode[fragmentPos + imm8OfPShufW2]+= 0x55*shift; filterPos[i/2]-=shift; } - fragmentPos+= fragmentLengthB; - } - else - { - int maxShift= 3-d; - int shift=0; - - memcpy(funnyCode + fragmentPos, fragmentA, fragmentLengthA); - - funnyCode[fragmentPos + imm8OfPShufW1A]= - funnyCode[fragmentPos + imm8OfPShufW2A]= - a | (b<<2) | (c<<4) | (d<<6); - - if (i+4>=dstW) shift=maxShift; //avoid overread - else if ((filterPos[i/2]&3) <= maxShift) shift=filterPos[i/2]&3; //partial align - - if (shift && i>=shift) - { - funnyCode[fragmentPos + imm8OfPShufW1A]+= 0x55*shift; - funnyCode[fragmentPos + imm8OfPShufW2A]+= 0x55*shift; - filterPos[i/2]-=shift; - } - - fragmentPos+= fragmentLengthA; + fragmentPos+= fragmentLength; } funnyCode[fragmentPos]= RET;