|
|
|
@ -305,7 +305,7 @@ int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl) |
|
|
|
|
h264_initialise_ref_list(h, sl); |
|
|
|
|
|
|
|
|
|
for (list = 0; list < sl->list_count; list++) { |
|
|
|
|
int pred = h->curr_pic_num; |
|
|
|
|
int pred = sl->curr_pic_num; |
|
|
|
|
|
|
|
|
|
for (index = 0; index < sl->nb_ref_modifications[list]; index++) { |
|
|
|
|
unsigned int modification_of_pic_nums_idc = sl->ref_modifications[list][index].op; |
|
|
|
@ -320,7 +320,7 @@ int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl) |
|
|
|
|
const unsigned int abs_diff_pic_num = val + 1; |
|
|
|
|
int frame_num; |
|
|
|
|
|
|
|
|
|
if (abs_diff_pic_num > h->max_pic_num) { |
|
|
|
|
if (abs_diff_pic_num > sl->max_pic_num) { |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, |
|
|
|
|
"abs_diff_pic_num overflow\n"); |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
@ -330,7 +330,7 @@ int ff_h264_build_ref_list(H264Context *h, H264SliceContext *sl) |
|
|
|
|
pred -= abs_diff_pic_num; |
|
|
|
|
else |
|
|
|
|
pred += abs_diff_pic_num; |
|
|
|
|
pred &= h->max_pic_num - 1; |
|
|
|
|
pred &= sl->max_pic_num - 1; |
|
|
|
|
|
|
|
|
|
frame_num = pic_num_extract(h, pred, &pic_structure); |
|
|
|
|
|
|
|
|
@ -844,8 +844,8 @@ int ff_h264_decode_ref_pic_marking(const H264Context *h, H264SliceContext *sl, |
|
|
|
|
mmco[i].opcode = opcode; |
|
|
|
|
if (opcode == MMCO_SHORT2UNUSED || opcode == MMCO_SHORT2LONG) { |
|
|
|
|
mmco[i].short_pic_num = |
|
|
|
|
(h->curr_pic_num - get_ue_golomb_long(gb) - 1) & |
|
|
|
|
(h->max_pic_num - 1); |
|
|
|
|
(sl->curr_pic_num - get_ue_golomb_long(gb) - 1) & |
|
|
|
|
(sl->max_pic_num - 1); |
|
|
|
|
#if 0 |
|
|
|
|
if (mmco[i].short_pic_num >= h->short_ref_count || |
|
|
|
|
!h->short_ref[mmco[i].short_pic_num]) { |
|
|
|
|