# HG changeset patch # User ramiro # Date 1248759766 0 # Node ID 0192dbbb31215fa3e505b175c46943f45a577f54 # Parent fd9b0bd6c908e24faad9e41414e7620ef9e39b62 MMX2 scaler: factorize initMMX2Scaler(). diff -r fd9b0bd6c908 -r 0192dbbb3121 libswscale/swscale.c --- 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;