@ -90,6 +90,7 @@ void updateMMXDitherTables(SwsContext *c, int dstY, int lumBufIndex, int chrBufI
const int flags = c - > flags ;
int16_t * * lumPixBuf = c - > lumPixBuf ;
int16_t * * chrUPixBuf = c - > chrUPixBuf ;
int16_t * * alpPixBuf = c - > alpPixBuf ;
const int vLumBufSize = c - > vLumBufSize ;
const int vChrBufSize = c - > vChrBufSize ;
int16_t * vLumFilterPos = c - > vLumFilterPos ;
@ -98,6 +99,7 @@ void updateMMXDitherTables(SwsContext *c, int dstY, int lumBufIndex, int chrBufI
int16_t * vChrFilter = c - > vChrFilter ;
int32_t * lumMmxFilter = c - > lumMmxFilter ;
int32_t * chrMmxFilter = c - > chrMmxFilter ;
int32_t av_unused * alpMmxFilter = c - > alpMmxFilter ;
const int vLumFilterSize = c - > vLumFilterSize ;
const int vChrFilterSize = c - > vChrFilterSize ;
const int chrDstY = dstY > > c - > chrDstVSubSample ;
@ -113,6 +115,7 @@ void updateMMXDitherTables(SwsContext *c, int dstY, int lumBufIndex, int chrBufI
if ( dstY < dstH - 2 ) {
const int16_t * * lumSrcPtr = ( const int16_t * * ) lumPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize ;
const int16_t * * chrUSrcPtr = ( const int16_t * * ) chrUPixBuf + chrBufIndex + firstChrSrcY - lastInChrBuf + vChrBufSize ;
const int16_t * * alpSrcPtr = ( CONFIG_SWSCALE_ALPHA & & alpPixBuf ) ? ( const int16_t * * ) alpPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize : NULL ;
int i ;
if ( flags & SWS_ACCURATE_RND ) {
int s = APCK_SIZE / 8 ;
@ -122,6 +125,12 @@ void updateMMXDitherTables(SwsContext *c, int dstY, int lumBufIndex, int chrBufI
lumMmxFilter [ s * i + APCK_COEF / 4 ] =
lumMmxFilter [ s * i + APCK_COEF / 4 + 1 ] = vLumFilter [ dstY * vLumFilterSize + i ]
+ ( vLumFilterSize > 1 ? vLumFilter [ dstY * vLumFilterSize + i + 1 ] < < 16 : 0 ) ;
if ( CONFIG_SWSCALE_ALPHA & & alpPixBuf ) {
* ( const void * * ) & alpMmxFilter [ s * i ] = alpSrcPtr [ i ] ;
* ( const void * * ) & alpMmxFilter [ s * i + APCK_PTR2 / 4 ] = alpSrcPtr [ i + ( vLumFilterSize > 1 ) ] ;
alpMmxFilter [ s * i + APCK_COEF / 4 ] =
alpMmxFilter [ s * i + APCK_COEF / 4 + 1 ] = lumMmxFilter [ s * i + APCK_COEF / 4 ] ;
}
}
for ( i = 0 ; i < vChrFilterSize ; i + = 2 ) {
* ( const void * * ) & chrMmxFilter [ s * i ] = chrUSrcPtr [ i ] ;
@ -136,6 +145,11 @@ void updateMMXDitherTables(SwsContext *c, int dstY, int lumBufIndex, int chrBufI
lumMmxFilter [ 4 * i + 2 ] =
lumMmxFilter [ 4 * i + 3 ] =
( ( uint16_t ) vLumFilter [ dstY * vLumFilterSize + i ] ) * 0x10001 ;
if ( CONFIG_SWSCALE_ALPHA & & alpPixBuf ) {
* ( const void * * ) & alpMmxFilter [ 4 * i + 0 ] = alpSrcPtr [ i ] ;
alpMmxFilter [ 4 * i + 2 ] =
alpMmxFilter [ 4 * i + 3 ] = lumMmxFilter [ 4 * i + 2 ] ;
}
}
for ( i = 0 ; i < vChrFilterSize ; i + + ) {
* ( const void * * ) & chrMmxFilter [ 4 * i + 0 ] = chrUSrcPtr [ i ] ;