for (i = 0; i < h->ref_count[list]; i++)
COPY_PICTURE(&h->ref_list[list][i], &h->default_ref_list[list][i]);
- if (get_bits1(&h->gb)) {
+ if (get_bits1(&h->gb)) { // ref_pic_list_modification_flag_l[01]
int pred = h->curr_pic_num;
for (index = 0; ; index++) {
- unsigned int reordering_of_pic_nums_idc = get_ue_golomb_31(&h->gb);
+ unsigned int modification_of_pic_nums_idc = get_ue_golomb_31(&h->gb);
unsigned int pic_id;
int i;
Picture *ref = NULL;
- if (reordering_of_pic_nums_idc == 3)
+ if (modification_of_pic_nums_idc == 3)
break;
if (index >= h->ref_count[list]) {
return -1;
}
- switch (reordering_of_pic_nums_idc) {
+ switch (modification_of_pic_nums_idc) {
case 0:
case 1: {
const unsigned int abs_diff_pic_num = get_ue_golomb(&h->gb) + 1;
return AVERROR_INVALIDDATA;
}
- if (reordering_of_pic_nums_idc == 0)
+ if (modification_of_pic_nums_idc == 0)
pred -= abs_diff_pic_num;
else
pred += abs_diff_pic_num;
}
default:
av_log(h->avctx, AV_LOG_ERROR,
- "illegal reordering_of_pic_nums_idc\n");
+ "illegal modification_of_pic_nums_idc %u\n",
+ modification_of_pic_nums_idc);
return AVERROR_INVALIDDATA;
}
int ff_generate_sliding_window_mmcos(H264Context *h, int first_slice)
{
MMCO mmco_temp[MAX_MMCO_COUNT], *mmco = first_slice ? h->mmco : mmco_temp;
- int mmco_index = 0, i;
+ int mmco_index = 0, i = 0;
if (h->short_ref_count &&
h->long_ref_count + h->short_ref_count >= h->sps.ref_frame_count &&
}
}
+ for (i = 0; i<h->short_ref_count; i++) {
+ pic = h->short_ref[i];
+ if (pic->invalid_gap) {
+ int d = (h->cur_pic_ptr->frame_num - pic->frame_num) & ((1 << h->sps.log2_max_frame_num)-1);
+ if (d > h->sps.ref_frame_count)
+ remove_short(h, pic->frame_num, 0);
+ }
+ }
+
print_short_term(h);
print_long_term(h);