[FFmpeg-cvslog] h264: eliminate low_delay

Anton Khirnov git at videolan.org
Mon Jun 20 12:05:27 CEST 2016


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon Apr 11 15:38:42 2016 +0200| [99c554efc8b09c3f1bb2fb41c3da5431085f7470] | committer: Anton Khirnov

h264: eliminate low_delay

It is always unconditionally initialized in decode_postinit() and then
immediately used in one place further below. All the other places where
it is accessed are just useless fluff.

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

 libavcodec/h264.c       |   10 +---------
 libavcodec/h264.h       |    1 -
 libavcodec/h264_slice.c |   16 ----------------
 3 files changed, 1 insertion(+), 26 deletions(-)

diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 434d561..47e3c93 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -334,10 +334,6 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
     if (ret < 0)
         return ret;
 
-    /* set defaults */
-    if (!avctx->has_b_frames)
-        h->low_delay = 1;
-
     ret = ff_thread_once(&h264_vlc_init, ff_h264_decode_init_vlc);
     if (ret != 0) {
         av_log(avctx, AV_LOG_ERROR, "pthread_once has failed.");
@@ -363,7 +359,6 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
     if (h->ps.sps && h->ps.sps->bitstream_restriction_flag &&
         h->avctx->has_b_frames < h->ps.sps->num_reorder_frames) {
         h->avctx->has_b_frames = h->ps.sps->num_reorder_frames;
-        h->low_delay           = 0;
     }
 
     avctx->internal->allocate_progress = 1;
@@ -581,7 +576,6 @@ static void decode_postinit(H264Context *h, int setup_finished)
         h->avctx->strict_std_compliance >= FF_COMPLIANCE_NORMAL) {
         h->avctx->has_b_frames = FFMAX(h->avctx->has_b_frames, sps->num_reorder_frames);
     }
-    h->low_delay = !h->avctx->has_b_frames;
 
     pics = 0;
     while (h->delayed_pic[pics])
@@ -646,12 +640,10 @@ static void decode_postinit(H264Context *h, int setup_finished)
         if (invalid + cnt < MAX_DELAYED_PIC_COUNT) {
             h->avctx->has_b_frames = FFMAX(h->avctx->has_b_frames, cnt);
         }
-        h->low_delay = 0;
-    } else if (h->low_delay &&
+    } else if (!h->avctx->has_b_frames &&
                ((h->next_outputed_poc != INT_MIN &&
                  out->poc > h->next_outputed_poc + 2) ||
                 cur->f->pict_type == AV_PICTURE_TYPE_B)) {
-        h->low_delay = 0;
         h->avctx->has_b_frames++;
     }
 
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index f551d79..55c31f6 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -470,7 +470,6 @@ typedef struct H264Context {
 
     int droppable;
     int coded_picture_number;
-    int low_delay;
 
     int context_initialized;
     int flags;
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 1251ff5..fda6d32 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -378,7 +378,6 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
     h->first_field          = h1->first_field;
     h->picture_structure    = h1->picture_structure;
     h->droppable            = h1->droppable;
-    h->low_delay            = h1->low_delay;
 
     for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
         ff_h264_unref_picture(h, &h->DPB[i]);
@@ -397,7 +396,6 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
 
     h->enable_er       = h1->enable_er;
     h->workaround_bugs = h1->workaround_bugs;
-    h->low_delay       = h1->low_delay;
     h->droppable       = h1->droppable;
 
     // extradata/NAL handling
@@ -1014,20 +1012,6 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl)
         if (h->bit_depth_luma    != h->ps.sps->bit_depth_luma ||
             h->chroma_format_idc != h->ps.sps->chroma_format_idc)
             needs_reinit         = 1;
-
-        if (h->flags & AV_CODEC_FLAG_LOW_DELAY ||
-            (h->ps.sps->bitstream_restriction_flag &&
-             !h->ps.sps->num_reorder_frames)) {
-            if (h->avctx->has_b_frames > 1 || h->delayed_pic[0])
-                av_log(h->avctx, AV_LOG_WARNING, "Delayed frames seen. "
-                       "Reenabling low delay requires a codec flush.\n");
-            else
-                h->low_delay = 1;
-        }
-
-        if (h->avctx->has_b_frames < 2)
-            h->avctx->has_b_frames = !h->low_delay;
-
     }
 
     pps = h->ps.pps;



More information about the ffmpeg-cvslog mailing list