Merge commit '98cc9efc5f6b4dc847ed3b9b60b1c3bcd14e6791'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 18 Jan 2014 21:07:54 +0000 (22:07 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 18 Jan 2014 21:41:49 +0000 (22:41 +0100)
* commit '98cc9efc5f6b4dc847ed3b9b60b1c3bcd14e6791':
  h264: prevent two matching fields from being both a short/long ref combination

See: 92002db3eb437414281ad4fb6e84e34862f7fc92
Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/h264_refs.c

@@@ -637,21 -621,11 +637,22 @@@ int ff_h264_execute_ref_pic_marking(H26
                       * Report the problem and keep the pair where it is,
                       * and mark this field valid.
                       */
 -            if (h->short_ref[0] == h->cur_pic_ptr)
++            if (h->short_ref[0] == h->cur_pic_ptr) {
++                av_log(h->avctx, AV_LOG_ERROR, "mmco: cannot assign current picture to short and long at the same time\n");
+                 remove_short_at_index(h, 0);
++            }
  
              if (h->long_ref[mmco[i].long_arg] != h->cur_pic_ptr) {
 +                if (h->cur_pic_ptr->long_ref) {
 +                    for(j=0; j<16; j++) {
 +                        if(h->long_ref[j] == h->cur_pic_ptr) {
 +                            remove_long(h, j, 0);
 +                            av_log(h->avctx, AV_LOG_ERROR, "mmco: cannot assign current picture to 2 long term references\n");
 +                        }
 +                    }
 +                }
 +                av_assert0(!h->cur_pic_ptr->long_ref);
                  remove_long(h, mmco[i].long_arg, 0);
-                 if (remove_short(h, h->cur_pic_ptr->frame_num, 0)) {
-                     av_log(h->avctx, AV_LOG_ERROR, "mmco: cannot assign current picture to short and long at the same time\n");
-                 }
  
                  h->long_ref[mmco[i].long_arg]           = h->cur_pic_ptr;
                  h->long_ref[mmco[i].long_arg]->long_ref = 1;