[FFmpeg-devel] lavfi/vf_hwmap: move some code into seperate function

Submitted by Ruiling Song on Feb. 2, 2019, 2:33 a.m.

Details

Message ID 1549074834-17138-1-git-send-email-ruiling.song@intel.com
State New
Headers show

Commit Message

Ruiling Song Feb. 2, 2019, 2:33 a.m.
This is just code fine. No functional change.

Signed-off-by: Ruiling Song <ruiling.song@intel.com>
---
 libavfilter/vf_hwmap.c | 83 ++++++++++++++++++++++++--------------------------
 1 file changed, 39 insertions(+), 44 deletions(-)

Patch hide | download patch | download mbox

diff --git a/libavfilter/vf_hwmap.c b/libavfilter/vf_hwmap.c
index 290559a..14276ce 100644
--- a/libavfilter/vf_hwmap.c
+++ b/libavfilter/vf_hwmap.c
@@ -50,6 +50,37 @@  static int hwmap_query_formats(AVFilterContext *avctx)
     return 0;
 }
 
+static int create_hwframe_context(AVFilterContext *avctx, AVBufferRef *device,
+                                  int format, int sw_format,
+                                  int width, int height)
+{
+    HWMapContext      *ctx = avctx->priv;
+    int err;
+    AVHWFramesContext *frames;
+
+    ctx->hwframes_ref = av_hwframe_ctx_alloc(device);
+    if (!ctx->hwframes_ref) {
+        return AVERROR(ENOMEM);
+    }
+    frames = (AVHWFramesContext*)ctx->hwframes_ref->data;
+
+    frames->format    = format;
+    frames->sw_format = sw_format;
+    frames->width     = width;
+    frames->height    = height;
+
+    if (avctx->extra_hw_frames >= 0)
+        frames->initial_pool_size = 2 + avctx->extra_hw_frames;
+
+    err = av_hwframe_ctx_init(ctx->hwframes_ref);
+    if (err < 0) {
+        av_log(avctx, AV_LOG_ERROR, "Failed to initialise "
+               "hardware frames context: %d.\n", err);
+        return err;
+    }
+    return 0;
+}
+
 static int hwmap_config_output(AVFilterLink *outlink)
 {
     AVFilterContext *avctx = outlink->src;
@@ -130,29 +161,12 @@  static int hwmap_config_output(AVFilterLink *outlink)
             // overwrite the input hwframe context with a derived context
             // mapped from that back to the source type.
             AVBufferRef *source;
-            AVHWFramesContext *frames;
-
-            ctx->hwframes_ref = av_hwframe_ctx_alloc(device);
-            if (!ctx->hwframes_ref) {
-                err = AVERROR(ENOMEM);
-                goto fail;
-            }
-            frames = (AVHWFramesContext*)ctx->hwframes_ref->data;
-
-            frames->format    = outlink->format;
-            frames->sw_format = hwfc->sw_format;
-            frames->width     = hwfc->width;
-            frames->height    = hwfc->height;
-
-            if (avctx->extra_hw_frames >= 0)
-                frames->initial_pool_size = 2 + avctx->extra_hw_frames;
 
-            err = av_hwframe_ctx_init(ctx->hwframes_ref);
-            if (err < 0) {
-                av_log(avctx, AV_LOG_ERROR, "Failed to initialise "
-                       "target frames context: %d.\n", err);
-                goto fail;
-            }
+            err = create_hwframe_context(avctx, device, outlink->format,
+                                         hwfc->sw_format, hwfc->width,
+                                         hwfc->height);
+            if (err < 0)
+                 goto fail;
 
             err = av_hwframe_ctx_create_derived(&source,
                                                 inlink->format,
@@ -212,29 +226,10 @@  static int hwmap_config_output(AVFilterLink *outlink)
         }
 
         ctx->reverse = 1;
-
-        ctx->hwframes_ref = av_hwframe_ctx_alloc(device);
-        if (!ctx->hwframes_ref) {
-            err = AVERROR(ENOMEM);
-            goto fail;
-        }
-        hwfc = (AVHWFramesContext*)ctx->hwframes_ref->data;
-
-        hwfc->format    = outlink->format;
-        hwfc->sw_format = inlink->format;
-        hwfc->width     = inlink->w;
-        hwfc->height    = inlink->h;
-
-        if (avctx->extra_hw_frames >= 0)
-            hwfc->initial_pool_size = 2 + avctx->extra_hw_frames;
-
-        err = av_hwframe_ctx_init(ctx->hwframes_ref);
-        if (err < 0) {
-            av_log(avctx, AV_LOG_ERROR, "Failed to create frame "
-                   "context for reverse mapping: %d.\n", err);
+        err = create_hwframe_context(avctx, device, outlink->format,
+                                     inlink->format, inlink->w, inlink->h);
+        if (err < 0)
             goto fail;
-        }
-
     } else {
         av_log(avctx, AV_LOG_ERROR, "Mapping requires a hardware "
                "context (a device, or frames on input).\n");