summaryrefslogtreecommitdiff
path: root/libavcodec/h264_loopfilter.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2010-01-28 10:34:06 +0000
committerMichael Niedermayer <michaelni@gmx.at>2010-01-28 10:34:06 +0000
commitca7c784fdffb9cba9f2b1939c706b71abee9f0a7 (patch)
treeaf21f9fa3be10d64b8c7325ef972ab7ec15e27ac /libavcodec/h264_loopfilter.c
parente814817b74bfd9f003a69a92d3e208fe36c78cec (diff)
Unroll loops in check_mv()
~6% faster (slow path) loopfilter (should be ~2% overall) Originally committed as revision 21503 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h264_loopfilter.c')
-rw-r--r--libavcodec/h264_loopfilter.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/libavcodec/h264_loopfilter.c b/libavcodec/h264_loopfilter.c
index 23d998863d..b99372b191 100644
--- a/libavcodec/h264_loopfilter.c
+++ b/libavcodec/h264_loopfilter.c
@@ -425,23 +425,26 @@ void ff_h264_filter_mb_fast( H264Context *h, int mb_x, int mb_y, uint8_t *img_y,
}
static int check_mv(H264Context *h, long b_idx, long bn_idx, int mvy_limit){
- int l;
- int v = 0;
+ int v;
- for( l = 0; !v && l < h->list_count; l++ ) {
- v |= h->ref_cache[l][b_idx] != h->ref_cache[l][bn_idx] |
- h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] + 3 >= 7U |
- FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit;
- }
+ v = h->ref_cache[0][b_idx] != h->ref_cache[0][bn_idx] |
+ h->mv_cache[0][b_idx][0] - h->mv_cache[0][bn_idx][0] + 3 >= 7U |
+ FFABS( h->mv_cache[0][b_idx][1] - h->mv_cache[0][bn_idx][1] ) >= mvy_limit;
+ if(h->list_count==2 && !v)
+ v = h->ref_cache[1][b_idx] != h->ref_cache[1][bn_idx] |
+ h->mv_cache[1][b_idx][0] - h->mv_cache[1][bn_idx][0] + 3 >= 7U |
+ FFABS( h->mv_cache[1][b_idx][1] - h->mv_cache[1][bn_idx][1] ) >= mvy_limit;
if(h->list_count==2 && v){
- v=0;
- for( l = 0; !v && l < 2; l++ ) {
- int ln= 1-l;
- v |= h->ref_cache[l][b_idx] != h->ref_cache[ln][bn_idx] |
- h->mv_cache[l][b_idx][0] - h->mv_cache[ln][bn_idx][0] + 3 >= 7U |
- FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[ln][bn_idx][1] ) >= mvy_limit;
- }
+ if(h->ref_cache[0][b_idx] != h->ref_cache[1][bn_idx] |
+ h->mv_cache[0][b_idx][0] - h->mv_cache[1][bn_idx][0] + 3 >= 7U |
+ FFABS( h->mv_cache[0][b_idx][1] - h->mv_cache[1][bn_idx][1] ) >= mvy_limit)
+ return 1;
+ if(h->ref_cache[1][b_idx] != h->ref_cache[0][bn_idx] |
+ h->mv_cache[1][b_idx][0] - h->mv_cache[0][bn_idx][0] + 3 >= 7U |
+ FFABS( h->mv_cache[1][b_idx][1] - h->mv_cache[0][bn_idx][1] ) >= mvy_limit)
+ return 1;
+ return 0;
}
return v;