hevc: Conceal zero td
authorLuca Barbato <lu_zero@gentoo.org>
Sat, 8 Feb 2014 05:10:27 +0000 (06:10 +0100)
committerLuca Barbato <lu_zero@gentoo.org>
Sun, 9 Feb 2014 18:53:43 +0000 (19:53 +0100)
It was done only in check_mvset(), while mv_scale() is called also by
dist_scale().

Sample-Id: 00001579-google
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
libavcodec/hevc_mvs.c

index 49d5ff2..2fe4dbb 100644 (file)
@@ -568,8 +568,12 @@ static av_always_inline void dist_scale(HEVCContext *s, Mv *mv,
     int ref_pic_elist      = refPicList[elist].list[TAB_MVF(x, y).ref_idx[elist]];
     int ref_pic_curr       = refPicList[ref_idx_curr].list[ref_idx];
 
-    if (ref_pic_elist != ref_pic_curr)
-        mv_scale(mv, mv, s->poc - ref_pic_elist, s->poc - ref_pic_curr);
+    if (ref_pic_elist != ref_pic_curr) {
+        int poc_diff = s->poc - ref_pic_elist;
+        if (!poc_diff)
+            poc_diff = 1;
+        mv_scale(mv, mv, poc_diff, s->poc - ref_pic_curr);
+    }
 }
 
 static int mv_mp_mode_mx(HEVCContext *s, int x, int y, int pred_flag_index,