diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2010-01-28 10:34:06 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2010-01-28 10:34:06 +0000 |
commit | ca7c784fdffb9cba9f2b1939c706b71abee9f0a7 (patch) | |
tree | af21f9fa3be10d64b8c7325ef972ab7ec15e27ac | |
parent | e814817b74bfd9f003a69a92d3e208fe36c78cec (diff) | |
download | ffmpeg-streaming-ca7c784fdffb9cba9f2b1939c706b71abee9f0a7.zip ffmpeg-streaming-ca7c784fdffb9cba9f2b1939c706b71abee9f0a7.tar.gz |
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
-rw-r--r-- | libavcodec/h264_loopfilter.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/libavcodec/h264_loopfilter.c b/libavcodec/h264_loopfilter.c index 23d9988..b99372b 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; |