void ff_generate_sliding_window_mmcos(H264Context *h) {
MpegEncContext * const s = &h->s;
- av_assert0(h->long_ref_count + h->short_ref_count <= h->sps.ref_frame_count);
h->mmco_index= 0;
- if(h->short_ref_count && h->long_ref_count + h->short_ref_count == h->sps.ref_frame_count &&
+ if(h->short_ref_count && h->long_ref_count + h->short_ref_count >= h->sps.ref_frame_count &&
!(FIELD_PICTURE && !s->first_field && s->current_picture_ptr->f.reference)) {
h->mmco[0].opcode= MMCO_SHORT2UNUSED;
h->mmco[0].short_pic_num= h->short_ref[ h->short_ref_count - 1 ]->frame_num;
for(j = 0; j < 16; j++) {
remove_long(h, j, 0);
}
- s->current_picture_ptr->poc=
- s->current_picture_ptr->field_poc[0]=
- s->current_picture_ptr->field_poc[1]=
- h->poc_lsb=
- h->poc_msb=
h->frame_num=
s->current_picture_ptr->frame_num= 0;
+ h->mmco_reset = 1;
s->current_picture_ptr->mmco_reset=1;
+ for (j = 0; j < MAX_DELAYED_PIC_COUNT; j++)
+ h->last_pocs[j] = INT_MIN;
break;
default: assert(0);
}
print_short_term(h);
print_long_term(h);
- return h->s.avctx->error_recognition >= FF_ER_EXPLODE ? err : 0;
+
+ if(err >= 0 && h->long_ref_count==0 && h->short_ref_count<=2 && h->pps.ref_count[0]<=1 && s->current_picture_ptr->f.pict_type == AV_PICTURE_TYPE_I){
+ h->sync |= 1;
+ s->current_picture_ptr->sync |= h->sync;
+ }
+
+ return (h->s.avctx->err_recognition & AV_EF_EXPLODE) ? err : 0;
}
int ff_h264_decode_ref_pic_marking(H264Context *h, GetBitContext *gb){