[FFmpeg-devel] [PATCH 02/10] avfilter/dnn: refactor ff_get_dnn_module to remove allocation

Zhao Zhili quinkblack at foxmail.com
Sun Apr 30 18:38:54 EEST 2023


From: Zhao Zhili <zhilizhao at tencent.com>

Signed-off-by: Zhao Zhili <zhilizhao at tencent.com>
---
 libavfilter/dnn/dnn_interface.c | 28 +++++-----------------------
 libavfilter/dnn_filter_common.c |  1 -
 libavfilter/dnn_filter_common.h |  2 +-
 libavfilter/dnn_interface.h     |  2 +-
 4 files changed, 7 insertions(+), 26 deletions(-)

diff --git a/libavfilter/dnn/dnn_interface.c b/libavfilter/dnn/dnn_interface.c
index 4f78f35474..a60dcb091b 100644
--- a/libavfilter/dnn/dnn_interface.c
+++ b/libavfilter/dnn/dnn_interface.c
@@ -29,37 +29,19 @@
 extern const DNNModule ff_dnn_backend_openvino;
 extern const DNNModule ff_dnn_backend_tf;
 
-DNNModule *ff_get_dnn_module(DNNBackendType backend_type)
+const DNNModule *ff_get_dnn_module(DNNBackendType backend_type)
 {
-    DNNModule *dnn_module;
-
-    dnn_module = av_mallocz(sizeof(DNNModule));
-    if(!dnn_module){
-        return NULL;
-    }
-
     switch(backend_type){
-    case DNN_TF:
     #if (CONFIG_LIBTENSORFLOW == 1)
-        *dnn_module = ff_dnn_backend_tf;
-    #else
-        av_freep(&dnn_module);
-        return NULL;
+    case DNN_TF:
+        return &ff_dnn_backend_tf;
     #endif
-        break;
-    case DNN_OV:
     #if (CONFIG_LIBOPENVINO == 1)
-        *dnn_module = ff_dnn_backend_openvino;
-    #else
-        av_freep(&dnn_module);
-        return NULL;
+    case DNN_OV:
+        return &ff_dnn_backend_openvino;
     #endif
-        break;
     default:
         av_log(NULL, AV_LOG_ERROR, "Module backend_type is not supported or enabled.\n");
-        av_freep(&dnn_module);
         return NULL;
     }
-
-    return dnn_module;
 }
diff --git a/libavfilter/dnn_filter_common.c b/libavfilter/dnn_filter_common.c
index 5083e3de19..7b34fd0c0a 100644
--- a/libavfilter/dnn_filter_common.c
+++ b/libavfilter/dnn_filter_common.c
@@ -158,6 +158,5 @@ void ff_dnn_uninit(DnnContext *ctx)
 {
     if (ctx->dnn_module) {
         (ctx->dnn_module->free_model)(&ctx->model);
-        av_freep(&ctx->dnn_module);
     }
 }
diff --git a/libavfilter/dnn_filter_common.h b/libavfilter/dnn_filter_common.h
index bcdf37c815..30871ee381 100644
--- a/libavfilter/dnn_filter_common.h
+++ b/libavfilter/dnn_filter_common.h
@@ -36,7 +36,7 @@ typedef struct DnnContext {
 
     char **model_outputnames;
     uint32_t nb_outputs;
-    DNNModule *dnn_module;
+    const DNNModule *dnn_module;
     DNNModel *model;
 } DnnContext;
 
diff --git a/libavfilter/dnn_interface.h b/libavfilter/dnn_interface.h
index 6b64a2b55a..b2bfdd38e7 100644
--- a/libavfilter/dnn_interface.h
+++ b/libavfilter/dnn_interface.h
@@ -123,6 +123,6 @@ typedef struct DNNModule{
 } DNNModule;
 
 // Initializes DNNModule depending on chosen backend.
-DNNModule *ff_get_dnn_module(DNNBackendType backend_type);
+const DNNModule *ff_get_dnn_module(DNNBackendType backend_type);
 
 #endif
-- 
2.40.1



More information about the ffmpeg-devel mailing list