[FFmpeg-cvslog] libavcodec/hevc_filter: move AVDISCARD_NONREF switch-case into function

sfan5 git at videolan.org
Fri Dec 8 21:03:11 EET 2017


ffmpeg | branch: master | sfan5 <sfan5 at live.de> | Thu Dec  7 20:37:48 2017 +0100| [a428f2fcd95906cdfca1eff574369fb32169317e] | committer: Michael Niedermayer

libavcodec/hevc_filter: move AVDISCARD_NONREF switch-case into function

In preparation for implementation of skip_frame.

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

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

 libavcodec/hevc_filter.c | 20 +++-----------------
 libavcodec/hevcdec.h     | 20 ++++++++++++++++++++
 2 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/libavcodec/hevc_filter.c b/libavcodec/hevc_filter.c
index 94fb7cd3d1..6b9824088c 100644
--- a/libavcodec/hevc_filter.c
+++ b/libavcodec/hevc_filter.c
@@ -842,29 +842,15 @@ void ff_hevc_deblocking_boundary_strengths(HEVCContext *s, int x0, int y0,
 void ff_hevc_hls_filter(HEVCContext *s, int x, int y, int ctb_size)
 {
     int x_end = x >= s->ps.sps->width  - ctb_size;
-    int skip = 0, is_n = 0;
-    switch (s->nal_unit_type) {
-    case HEVC_NAL_TRAIL_N:
-    case HEVC_NAL_TSA_N:
-    case HEVC_NAL_STSA_N:
-    case HEVC_NAL_RADL_N:
-    case HEVC_NAL_RASL_N:
-    case HEVC_NAL_VCL_N10:
-    case HEVC_NAL_VCL_N12:
-    case HEVC_NAL_VCL_N14:
-    case HEVC_NAL_BLA_N_LP:
-    case HEVC_NAL_IDR_N_LP:
-        is_n = 1;
-        break;
-    default: break;
-    }
+    int skip = 0;
     if (s->avctx->skip_loop_filter >= AVDISCARD_ALL ||
         (s->avctx->skip_loop_filter >= AVDISCARD_NONKEY && !IS_IDR(s)) ||
         (s->avctx->skip_loop_filter >= AVDISCARD_NONINTRA &&
          s->sh.slice_type != HEVC_SLICE_I) ||
         (s->avctx->skip_loop_filter >= AVDISCARD_BIDIR &&
          s->sh.slice_type == HEVC_SLICE_B) ||
-        (s->avctx->skip_loop_filter >= AVDISCARD_NONREF && is_n))
+        (s->avctx->skip_loop_filter >= AVDISCARD_NONREF &&
+        ff_hevc_nal_is_nonref(s->nal_unit_type)))
         skip = 1;
 
     if (!skip)
diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h
index ef918f4fb2..b311edc8ae 100644
--- a/libavcodec/hevcdec.h
+++ b/libavcodec/hevcdec.h
@@ -548,6 +548,26 @@ int ff_hevc_frame_nb_refs(HEVCContext *s);
 
 int ff_hevc_set_new_ref(HEVCContext *s, AVFrame **frame, int poc);
 
+static av_always_inline int ff_hevc_nal_is_nonref(enum HEVCNALUnitType type)
+{
+    switch (type) {
+    case HEVC_NAL_TRAIL_N:
+    case HEVC_NAL_TSA_N:
+    case HEVC_NAL_STSA_N:
+    case HEVC_NAL_RADL_N:
+    case HEVC_NAL_RASL_N:
+    case HEVC_NAL_VCL_N10:
+    case HEVC_NAL_VCL_N12:
+    case HEVC_NAL_VCL_N14:
+    case HEVC_NAL_BLA_N_LP:
+    case HEVC_NAL_IDR_N_LP:
+        return 1;
+        break;
+    default: break;
+    }
+    return 0;
+}
+
 /**
  * Find next frame in output order and put a reference to it in frame.
  * @return 1 if a frame was output, 0 otherwise



More information about the ffmpeg-cvslog mailing list