@ -3479,7 +3479,7 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[
# endif
const int8_t * QPptr = & QPs [ ( y > > qpVShift ) * QPStride ] ;
int8_t * nonBQPptr = & c . nonBQPTable [ ( y > > qpVShift ) * FFABS ( QPStride ) ] ;
int QP = 0 ;
int QP = 0 , nonBQP = 0 ;
/* can we mess with a 8x16 block from srcBlock/dstBlock downwards and 1 line upwards
if not than use a temporary buffer */
if ( y + 15 > = height ) {
@ -3512,6 +3512,29 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[
int endx = FFMIN ( width , x + 32 ) ;
uint8_t * dstBlockStart = dstBlock ;
const uint8_t * srcBlockStart = srcBlock ;
int qp_index = 0 ;
for ( qp_index = 0 ; qp_index < ( endx - startx ) / BLOCK_SIZE ; qp_index + + ) {
QP = QPptr [ ( x + qp_index * BLOCK_SIZE ) > > qpHShift ] ;
nonBQP = nonBQPptr [ ( x + qp_index * BLOCK_SIZE ) > > qpHShift ] ;
if ( ! isColor ) {
QP = ( QP * QPCorrecture + 256 * 128 ) > > 16 ;
nonBQP = ( nonBQP * QPCorrecture + 256 * 128 ) > > 16 ;
yHistogram [ ( srcBlock + qp_index * 8 ) [ srcStride * 12 + 4 ] ] + + ;
}
c . QP_block [ qp_index ] = QP ;
c . nonBQP_block [ qp_index ] = nonBQP ;
# if TEMPLATE_PP_MMX
__asm__ volatile (
" movd %1, %%mm7 \n \t "
" packuswb %%mm7, %%mm7 \n \t " // 0, 0, 0, QP, 0, 0, 0, QP
" packuswb %%mm7, %%mm7 \n \t " // 0,QP, 0, QP, 0,QP, 0, QP
" packuswb %%mm7, %%mm7 \n \t " // QP,..., QP
" movq %%mm7, %0 \n \t "
: " =m " ( c . pQPb_block [ qp_index ] )
: " r " ( QP )
) ;
# endif
}
for ( ; x < endx ; x + = BLOCK_SIZE ) {
RENAME ( prefetchnta ) ( srcBlock + ( ( ( x > > 2 ) & 6 ) + copyAhead ) * srcStride + 32 ) ;
RENAME ( prefetchnta ) ( srcBlock + ( ( ( x > > 2 ) & 6 ) + copyAhead + 1 ) * srcStride + 32 ) ;
@ -3543,27 +3566,15 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[
dstBlock = dstBlockStart ;
srcBlock = srcBlockStart ;
for ( x = startx ; x < endx ; x + = BLOCK_SIZE ) {
for ( x = startx , qp_index = 0 ; x < endx ; x + = BLOCK_SIZE , qp_index + + ) {
const int stride = dstStride ;
QP = QPptr [ x > > qpHShift ] ;
c . nonBQP = nonBQPptr [ x > > qpHShift ] ;
if ( ! isColor ) {
QP = ( QP * QPCorrecture + 256 * 128 ) > > 16 ;
c . nonBQP = ( c . nonBQP * QPCorrecture + 256 * 128 ) > > 16 ;
yHistogram [ srcBlock [ srcStride * 12 + 4 ] ] + + ;
}
c . QP = QP ;
# if TEMPLATE_PP_MMX
__asm__ volatile (
" movd %1, %%mm7 \n \t "
" packuswb %%mm7, %%mm7 \n \t " // 0, 0, 0, QP, 0, 0, 0, QP
" packuswb %%mm7, %%mm7 \n \t " // 0,QP, 0, QP, 0,QP, 0, QP
" packuswb %%mm7, %%mm7 \n \t " // QP,..., QP
" movq %%mm7, %0 \n \t "
: " =m " ( c . pQPb )
: " r " ( QP )
) ;
# endif
//temporary while changing QP stuff to make things continue to work
//eventually QP,nonBQP,etc will be arrays and this will be unnecessary
c . QP = c . QP_block [ qp_index ] ;
c . nonBQP = c . nonBQP_block [ qp_index ] ;
c . pQPb = c . pQPb_block [ qp_index ] ;
c . pQPb2 = c . pQPb2_block [ qp_index ] ;
/* only deblock if we have 2 blocks */
if ( y + 8 < height ) {
if ( mode & V_X1_FILTER )
@ -3587,30 +3598,14 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[
dstBlock = dstBlockStart ;
srcBlock = srcBlockStart ;
for ( x = startx ; x < endx ; x + = BLOCK_SIZE ) {
for ( x = startx , qp_index = 0 ; x < endx ; x + = BLOCK_SIZE , qp_index + + ) {
const int stride = dstStride ;
av_unused uint8_t * tmpXchg ;
if ( isColor ) {
QP = QPptr [ x > > qpHShift ] ;
c . nonBQP = nonBQPptr [ x > > qpHShift ] ;
} else {
QP = QPptr [ x > > 4 ] ;
QP = ( QP * QPCorrecture + 256 * 128 ) > > 16 ;
c . nonBQP = nonBQPptr [ x > > 4 ] ;
c . nonBQP = ( c . nonBQP * QPCorrecture + 256 * 128 ) > > 16 ;
}
c . QP = QP ;
c . QP = c . QP_block [ qp_index ] ;
c . nonBQP = c . nonBQP_block [ qp_index ] ;
c . pQPb = c . pQPb_block [ qp_index ] ;
c . pQPb2 = c . pQPb2_block [ qp_index ] ;
# if TEMPLATE_PP_MMX
__asm__ volatile (
" movd %1, %%mm7 \n \t "
" packuswb %%mm7, %%mm7 \n \t " // 0, 0, 0, QP, 0, 0, 0, QP
" packuswb %%mm7, %%mm7 \n \t " // 0,QP, 0, QP, 0,QP, 0, QP
" packuswb %%mm7, %%mm7 \n \t " // QP,..., QP
" movq %%mm7, %0 \n \t "
: " =m " ( c . pQPb )
: " r " ( QP )
) ;
RENAME ( transpose1 ) ( tempBlock1 , tempBlock2 , dstBlock , dstStride ) ;
# endif
/* check if we have a previous block to deblock it with dstBlock */
@ -3632,7 +3627,7 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[
# else
if ( mode & H_X1_FILTER )
horizX1Filter ( dstBlock - 4 , stride , QP ) ;
horizX1Filter ( dstBlock - 4 , stride , c . QP ) ;
else if ( mode & H_DEBLOCK ) {
# if TEMPLATE_PP_ALTIVEC
DECLARE_ALIGNED ( 16 , unsigned char , tempBlock ) [ 272 ] ;