diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2010-02-08 00:53:55 +0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2010-02-08 00:53:55 +0300 |
commit | f28a2656c365a38995c451d9ff5e98e9e614bd95 (patch) | |
tree | 6e15e7d0aff049e1502131d227e1a5ebe9966d4e /libavcodec/h264_direct.c | |
parent | 0a8dca8765e19a2a034ff9914c63b514336729a9 (diff) |
Merge mv&ref related code for spatial direct MV code.
a bit more than 10 cpu cycles faster.
Originally committed as revision 21678 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h264_direct.c')
-rw-r--r-- | libavcodec/h264_direct.c | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/libavcodec/h264_direct.c b/libavcodec/h264_direct.c index 86880b22d4..159f3ea5c1 100644 --- a/libavcodec/h264_direct.c +++ b/libavcodec/h264_direct.c @@ -231,31 +231,22 @@ single_col: if(refc == PART_NOT_AVAILABLE) refc = h->ref_cache[list][scan8[0] - 8 - 1]; ref[list] = FFMIN3((unsigned)refa, (unsigned)refb, (unsigned)refc); - if(ref[list] < 0) + if(ref[list] >= 0){ + pred_motion(h, 0, 4, list, ref[list], &mv[list][0], &mv[list][1]); + }else{ + int mask= ~(MB_TYPE_L0 << (2*list)); + mv[list][0] = mv[list][1] = 0; ref[list] = -1; + if(!is_b8x8) + *mb_type &= mask; + sub_mb_type &= mask; + } } - if(ref[0] < 0 && ref[1] < 0){ ref[0] = ref[1] = 0; - mv[0][0] = mv[0][1] = - mv[1][0] = mv[1][1] = 0; - }else{ - for(list=0; list<2; list++){ - if(ref[list] >= 0) - pred_motion(h, 0, 4, list, ref[list], &mv[list][0], &mv[list][1]); - else - mv[list][0] = mv[list][1] = 0; - } - } - - if(ref[1] < 0){ - if(!is_b8x8) - *mb_type &= ~MB_TYPE_L1; - sub_mb_type &= ~MB_TYPE_L1; - }else if(ref[0] < 0){ if(!is_b8x8) - *mb_type &= ~MB_TYPE_L0; - sub_mb_type &= ~MB_TYPE_L0; + *mb_type |= MB_TYPE_L0L1; + sub_mb_type |= MB_TYPE_L0L1; } if(IS_INTERLACED(*mb_type) != IS_INTERLACED(mb_type_col[0])){ |