diff options
author | Nicolas Gaullier <nicolas.gaullier@arkena.com> | 2019-07-23 14:08:59 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2019-09-10 12:19:23 +0200 |
commit | cae5b36e207117f883fb0929a7cb1882807471b8 (patch) | |
tree | f077ad24b3b56031e3f703747eeabc23f17e0cac | |
parent | 9d1e98afeecbd0c08b414f452967c47f7d846921 (diff) | |
download | ffmpeg-cae5b36e207117f883fb0929a7cb1882807471b8.tar.gz |
avcodec/h264: Fix poc_lsb in open gop context
When no IDR nor mmco_reset is found, prev_poc_lsb is
undefined and shall not be assumed to be zero
-rw-r--r-- | libavcodec/h264_parse.c | 2 | ||||
-rw-r--r-- | libavcodec/h264dec.c | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/libavcodec/h264_parse.c b/libavcodec/h264_parse.c index 32a8af88e5..352ffea948 100644 --- a/libavcodec/h264_parse.c +++ b/libavcodec/h264_parse.c @@ -287,6 +287,8 @@ int ff_h264_init_poc(int pic_field_poc[2], int *pic_poc, if (sps->poc_type == 0) { const int max_poc_lsb = 1 << sps->log2_max_poc_lsb; + if (pc->prev_poc_lsb < 0) + pc->prev_poc_lsb = pc->poc_lsb; if (pc->poc_lsb < pc->prev_poc_lsb && pc->prev_poc_lsb - pc->poc_lsb >= max_poc_lsb / 2) diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index 8d1bd16a8e..f12651fa3d 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -474,7 +474,7 @@ static void idr(H264Context *h) h->poc.prev_frame_num = h->poc.prev_frame_num_offset = 0; h->poc.prev_poc_msb = 1<<16; - h->poc.prev_poc_lsb = 0; + h->poc.prev_poc_lsb = -1; for (i = 0; i < MAX_DELAYED_PIC_COUNT; i++) h->last_pocs[i] = INT_MIN; } |