[FFmpeg-cvslog] avcodec/h264_slice: clear old slice POC values on parsing failure

James Almer git at videolan.org
Wed Aug 11 18:03:08 EEST 2021


ffmpeg | branch: release/4.1 | James Almer <jamrial at gmail.com> | Sun Aug  8 15:30:26 2021 -0300| [347bcf6054890f19dd67f53b33489bc5c3c40471] | committer: James Almer

avcodec/h264_slice: clear old slice POC values on parsing failure

If a slice header fails to parse, and the next one uses different Sequence and
Picture parameter sets, certain values may not be read if they are not coded,
resulting in the previous slice values being used.

Signed-off-by: James Almer <jamrial at gmail.com>
(cherry picked from commit ce4a31cd1ff0348d279af74d49556d0315171e94)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=347bcf6054890f19dd67f53b33489bc5c3c40471
---

 libavcodec/h264_slice.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 1c9a270fb6..272f3b00a4 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -1821,6 +1821,8 @@ static int h264_slice_header_parse(const H264Context *h, H264SliceContext *sl,
     if (nal->type == H264_NAL_IDR_SLICE)
         get_ue_golomb_long(&sl->gb); /* idr_pic_id */
 
+    sl->poc_lsb = 0;
+    sl->delta_poc_bottom = 0;
     if (sps->poc_type == 0) {
         sl->poc_lsb = get_bits(&sl->gb, sps->log2_max_poc_lsb);
 
@@ -1828,6 +1830,7 @@ static int h264_slice_header_parse(const H264Context *h, H264SliceContext *sl,
             sl->delta_poc_bottom = get_se_golomb(&sl->gb);
     }
 
+    sl->delta_poc[0] = sl->delta_poc[1] = 0;
     if (sps->poc_type == 1 && !sps->delta_pic_order_always_zero_flag) {
         sl->delta_poc[0] = get_se_golomb(&sl->gb);
 



More information about the ffmpeg-cvslog mailing list