rv40: perform bitwise checks in loop filter
Down from 95 kcycles to 93 (including all called functions). Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
This commit is contained in:
parent
774b681b80
commit
d834ab0f2a
@ -431,7 +431,7 @@ static void rv40_loop_filter(RV34DecContext *r, int row)
|
|||||||
y_v_deblock &= ~MASK_Y_LEFT_COL;
|
y_v_deblock &= ~MASK_Y_LEFT_COL;
|
||||||
if(!row)
|
if(!row)
|
||||||
y_h_deblock &= ~MASK_Y_TOP_ROW;
|
y_h_deblock &= ~MASK_Y_TOP_ROW;
|
||||||
if(row == s->mb_height - 1 || (mb_strong[POS_CUR] || mb_strong[POS_BOTTOM]))
|
if(row == s->mb_height - 1 || (mb_strong[POS_CUR] | mb_strong[POS_BOTTOM]))
|
||||||
y_h_deblock &= ~(MASK_Y_TOP_ROW << 16);
|
y_h_deblock &= ~(MASK_Y_TOP_ROW << 16);
|
||||||
/* Calculating chroma patterns is similar and easier since there is
|
/* Calculating chroma patterns is similar and easier since there is
|
||||||
* no motion vector pattern for them.
|
* no motion vector pattern for them.
|
||||||
@ -448,7 +448,7 @@ static void rv40_loop_filter(RV34DecContext *r, int row)
|
|||||||
c_v_deblock[i] &= ~MASK_C_LEFT_COL;
|
c_v_deblock[i] &= ~MASK_C_LEFT_COL;
|
||||||
if(!row)
|
if(!row)
|
||||||
c_h_deblock[i] &= ~MASK_C_TOP_ROW;
|
c_h_deblock[i] &= ~MASK_C_TOP_ROW;
|
||||||
if(row == s->mb_height - 1 || mb_strong[POS_CUR] || mb_strong[POS_BOTTOM])
|
if(row == s->mb_height - 1 || (mb_strong[POS_CUR] | mb_strong[POS_BOTTOM]))
|
||||||
c_h_deblock[i] &= ~(MASK_C_TOP_ROW << 4);
|
c_h_deblock[i] &= ~(MASK_C_TOP_ROW << 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,7 +469,7 @@ static void rv40_loop_filter(RV34DecContext *r, int row)
|
|||||||
0, 0, 0);
|
0, 0, 0);
|
||||||
}
|
}
|
||||||
// filter left block edge in ordinary mode (with low filtering strength)
|
// filter left block edge in ordinary mode (with low filtering strength)
|
||||||
if(y_v_deblock & (MASK_CUR << ij) && (i || !(mb_strong[POS_CUR] || mb_strong[POS_LEFT]))){
|
if(y_v_deblock & (MASK_CUR << ij) && (i || !(mb_strong[POS_CUR] | mb_strong[POS_LEFT]))){
|
||||||
if(!i)
|
if(!i)
|
||||||
clip_left = mvmasks[POS_LEFT] & (MASK_RIGHT << j) ? clip[POS_LEFT] : 0;
|
clip_left = mvmasks[POS_LEFT] & (MASK_RIGHT << j) ? clip[POS_LEFT] : 0;
|
||||||
else
|
else
|
||||||
@ -480,14 +480,14 @@ static void rv40_loop_filter(RV34DecContext *r, int row)
|
|||||||
alpha, beta, betaY, 0, 0, 1);
|
alpha, beta, betaY, 0, 0, 1);
|
||||||
}
|
}
|
||||||
// filter top edge of the current macroblock when filtering strength is high
|
// filter top edge of the current macroblock when filtering strength is high
|
||||||
if(!j && y_h_deblock & (MASK_CUR << i) && (mb_strong[POS_CUR] || mb_strong[POS_TOP])){
|
if(!j && y_h_deblock & (MASK_CUR << i) && (mb_strong[POS_CUR] | mb_strong[POS_TOP])){
|
||||||
rv40_adaptive_loop_filter(&r->rdsp, Y, s->linesize, dither,
|
rv40_adaptive_loop_filter(&r->rdsp, Y, s->linesize, dither,
|
||||||
clip_cur,
|
clip_cur,
|
||||||
mvmasks[POS_TOP] & (MASK_TOP << i) ? clip[POS_TOP] : 0,
|
mvmasks[POS_TOP] & (MASK_TOP << i) ? clip[POS_TOP] : 0,
|
||||||
alpha, beta, betaY, 0, 1, 0);
|
alpha, beta, betaY, 0, 1, 0);
|
||||||
}
|
}
|
||||||
// filter left block edge in edge mode (with high filtering strength)
|
// filter left block edge in edge mode (with high filtering strength)
|
||||||
if(y_v_deblock & (MASK_CUR << ij) && !i && (mb_strong[POS_CUR] || mb_strong[POS_LEFT])){
|
if(y_v_deblock & (MASK_CUR << ij) && !i && (mb_strong[POS_CUR] | mb_strong[POS_LEFT])){
|
||||||
clip_left = mvmasks[POS_LEFT] & (MASK_RIGHT << j) ? clip[POS_LEFT] : 0;
|
clip_left = mvmasks[POS_LEFT] & (MASK_RIGHT << j) ? clip[POS_LEFT] : 0;
|
||||||
rv40_adaptive_loop_filter(&r->rdsp, Y, s->linesize, dither,
|
rv40_adaptive_loop_filter(&r->rdsp, Y, s->linesize, dither,
|
||||||
clip_cur,
|
clip_cur,
|
||||||
@ -509,7 +509,7 @@ static void rv40_loop_filter(RV34DecContext *r, int row)
|
|||||||
clip_cur,
|
clip_cur,
|
||||||
alpha, beta, betaC, 1, 0, 0);
|
alpha, beta, betaC, 1, 0, 0);
|
||||||
}
|
}
|
||||||
if((c_v_deblock[k] & (MASK_CUR << ij)) && (i || !(mb_strong[POS_CUR] || mb_strong[POS_LEFT]))){
|
if((c_v_deblock[k] & (MASK_CUR << ij)) && (i || !(mb_strong[POS_CUR] | mb_strong[POS_LEFT]))){
|
||||||
if(!i)
|
if(!i)
|
||||||
clip_left = uvcbp[POS_LEFT][k] & (MASK_CUR << (2*j+1)) ? clip[POS_LEFT] : 0;
|
clip_left = uvcbp[POS_LEFT][k] & (MASK_CUR << (2*j+1)) ? clip[POS_LEFT] : 0;
|
||||||
else
|
else
|
||||||
@ -519,14 +519,14 @@ static void rv40_loop_filter(RV34DecContext *r, int row)
|
|||||||
clip_left,
|
clip_left,
|
||||||
alpha, beta, betaC, 1, 0, 1);
|
alpha, beta, betaC, 1, 0, 1);
|
||||||
}
|
}
|
||||||
if(!j && c_h_deblock[k] & (MASK_CUR << ij) && (mb_strong[POS_CUR] || mb_strong[POS_TOP])){
|
if(!j && c_h_deblock[k] & (MASK_CUR << ij) && (mb_strong[POS_CUR] | mb_strong[POS_TOP])){
|
||||||
int clip_top = uvcbp[POS_TOP][k] & (MASK_CUR << (ij+2)) ? clip[POS_TOP] : 0;
|
int clip_top = uvcbp[POS_TOP][k] & (MASK_CUR << (ij+2)) ? clip[POS_TOP] : 0;
|
||||||
rv40_adaptive_loop_filter(&r->rdsp, C, s->uvlinesize, i*8,
|
rv40_adaptive_loop_filter(&r->rdsp, C, s->uvlinesize, i*8,
|
||||||
clip_cur,
|
clip_cur,
|
||||||
clip_top,
|
clip_top,
|
||||||
alpha, beta, betaC, 1, 1, 0);
|
alpha, beta, betaC, 1, 1, 0);
|
||||||
}
|
}
|
||||||
if(c_v_deblock[k] & (MASK_CUR << ij) && !i && (mb_strong[POS_CUR] || mb_strong[POS_LEFT])){
|
if(c_v_deblock[k] & (MASK_CUR << ij) && !i && (mb_strong[POS_CUR] | mb_strong[POS_LEFT])){
|
||||||
clip_left = uvcbp[POS_LEFT][k] & (MASK_CUR << (2*j+1)) ? clip[POS_LEFT] : 0;
|
clip_left = uvcbp[POS_LEFT][k] & (MASK_CUR << (2*j+1)) ? clip[POS_LEFT] : 0;
|
||||||
rv40_adaptive_loop_filter(&r->rdsp, C, s->uvlinesize, j*8,
|
rv40_adaptive_loop_filter(&r->rdsp, C, s->uvlinesize, j*8,
|
||||||
clip_cur,
|
clip_cur,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user