[FFmpeg-cvslog] avcodec/h264_slice: Move h264_init_ps() call into h264_field_start()

Michael Niedermayer git at videolan.org
Wed Jul 20 00:29:42 CEST 2016


ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Tue Jul 19 22:31:56 2016 +0200| [9bf3fdcd3c21b22cdbee43ae1c15c65f973a12fe] | committer: Michael Niedermayer

avcodec/h264_slice: Move h264_init_ps() call into h264_field_start()

This was missing from f512e4a39037ef798ec78170f734c7733abe3231

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

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

 libavcodec/h264_slice.c |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 2562041..ee7dedb 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -1128,13 +1128,17 @@ static int h264_init_ps(H264Context *h, const H264SliceContext *sl, int first_sl
  * or a second field in a pair and does the necessary setup.
  */
 static int h264_field_start(H264Context *h, const H264SliceContext *sl,
-                            const H2645NAL *nal)
+                            const H2645NAL *nal, int first_slice)
 {
     int i;
     const SPS *sps;
 
     int last_pic_structure, last_pic_droppable, ret;
 
+    ret = h264_init_ps(h, sl, first_slice);
+    if (ret < 0)
+        return ret;
+
     sps = h->ps.sps;
 
     last_pic_droppable   = h->droppable;
@@ -1452,11 +1456,6 @@ static int h264_slice_header_parse(H264Context *h, H264SliceContext *sl,
         }
     }
 
-    // TODO: should probably be moved to h264_field_start()
-    ret = h264_init_ps(h, sl, first_slice);
-    if (ret < 0)
-        return ret;
-
     sps = (const SPS*)h->ps.sps_list[pps->sps_id]->data;
 
     frame_num = get_bits(&sl->gb, sps->log2_max_frame_num);
@@ -1661,13 +1660,14 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl,
                                 const H2645NAL *nal)
 {
     int i, j, ret = 0;
+    int first_slice = sl == h->slice_ctx && !h->current_slice;
 
     ret = h264_slice_header_parse(h, sl, nal);
     if (ret) // can not be ret<0 because of SLICE_SKIPED, SLICE_SINGLETHREAD, ...
         return ret;
 
     if (h->current_slice == 0) {
-        ret = h264_field_start(h, sl, nal);
+        ret = h264_field_start(h, sl, nal, first_slice);
         if (ret < 0)
             return ret;
     }



More information about the ffmpeg-cvslog mailing list