Commit d834ab0f authored by Christophe Gisquet's avatar Christophe Gisquet Committed by Ronald S. Bultje

rv40: perform bitwise checks in loop filter

Down from 95 kcycles to 93 (including all called functions).
Signed-off-by: 's avatarRonald S. Bultje <rsbultje@gmail.com>
parent 774b681b
...@@ -431,7 +431,7 @@ static void rv40_loop_filter(RV34DecContext *r, int row) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment