On 7/25/2021 8:58 AM, Xiaowei Wang wrote:
The backend can be called as:
-vf dnn_processing=dnn_backend=tensorrt:model="model":input=:output=

As TensorRT provides C++ API rather than C, the TensorRT implementation is
separated into a wrapper.
The wrapper is placed inhttps://github.com/DutchPiPi/nv-tensorrt-wrapper
Please build & install the wrapper before compiling ffmpeg.
Please seehttps://github.com/DutchPiPi/FFmpeg-trt-backend-test  for how to
configure ffmpeg and generate a TensorRT engine for tests.

Signed-off-by: Xiaowei Wang<xiaow...@nvidia.com>
---
  libavfilter/dnn/Makefile               |   2 +-
  libavfilter/dnn/dnn_backend_tensorrt.c |  97 +++-
  libavfilter/dnn/dnn_backend_tensorrt.h |  40 +-
  libavfilter/dnn/dnn_io_proc_trt.cu     |  55 --
  libavfilter/dnn/trt_class_wrapper.cpp  | 731 -------------------------
  libavfilter/dnn/trt_class_wrapper.h    |  49 --
  6 files changed, 109 insertions(+), 865 deletions(-)
  delete mode 100644 libavfilter/dnn/dnn_io_proc_trt.cu
  delete mode 100644 libavfilter/dnn/trt_class_wrapper.cpp
  delete mode 100644 libavfilter/dnn/trt_class_wrapper.h

diff --git a/libavfilter/dnn/Makefile b/libavfilter/dnn/Makefile
index f9ea7ca386..4661d3b2cb 100644
--- a/libavfilter/dnn/Makefile
+++ b/libavfilter/dnn/Makefile
@@ -16,6 +16,6 @@ OBJS-$(CONFIG_DNN)                           += 
dnn/dnn_backend_native_layer_mat
DNN-OBJS-$(CONFIG_LIBTENSORFLOW) += dnn/dnn_backend_tf.o
  DNN-OBJS-$(CONFIG_LIBOPENVINO)               += dnn/dnn_backend_openvino.o
-DNN-OBJS-$(CONFIG_LIBTENSORRT)               += dnn/dnn_backend_tensorrt.o 
dnn/trt_class_wrapper.o dnn/dnn_io_proc_trt.ptx.o
+DNN-OBJS-$(CONFIG_LIBTENSORRT)               += dnn/dnn_backend_tensorrt.o
OBJS-$(CONFIG_DNN) += $(DNN-OBJS-yes)
diff --git a/libavfilter/dnn/dnn_backend_tensorrt.c 
b/libavfilter/dnn/dnn_backend_tensorrt.c
index b45b770a77..e50ebc6c99 100644
--- a/libavfilter/dnn/dnn_backend_tensorrt.c
+++ b/libavfilter/dnn/dnn_backend_tensorrt.c
@@ -25,45 +25,119 @@
   * DNN TensorRT backend implementation.
   */
-#include "trt_class_wrapper.h"
  #include "dnn_backend_tensorrt.h"
-#include "libavutil/mem.h"
  #include "libavformat/avio.h"
+#include "libavutil/mem.h"
  #include "libavutil/avassert.h"
  #include "libavutil/opt.h"
  #include "libavutil/avstring.h"
+#include "libavutil/buffer.h"
+#include "libavutil/pixfmt.h"
+#include "libavutil/pixdesc.h"
+
  #include "dnn_io_proc.h"
  #include "../internal.h"
-#include "libavutil/buffer.h"
+#include "trt_class_wrapper.h"
+
+#include <stdio.h>
+#include <dlfcn.h>
+#include <libavutil/log.h>
  #include <stdint.h>
#define OFFSET(x) offsetof(TRTContext, x)
  #define FLAGS AV_OPT_FLAG_FILTERING_PARAM
  static const AVOption dnn_tensorrt_options[] = {
-    { "device", "index of the GPU to run model", OFFSET(options.device), 
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS },
+    { "device", "index of the GPU to run model", OFFSET(options.device),    
AV_OPT_TYPE_INT,    { .i64 = 0 }, 0, INT_MAX, FLAGS },
+    { "plugin", "path to the plugin so",         OFFSET(options.plugin_so), 
AV_OPT_TYPE_STRING, { .str = NULL}, 0, 0,     FLAGS },
      { NULL }
  };
  AVFILTER_DEFINE_CLASS(dnn_tensorrt);
-DNNModel *ff_dnn_load_model_trt(const char *model_filename,DNNFunctionType func_type,
+static TRTWrapper *wrapper = NULL;
+
+static int load_trt_backend_lib(TRTWrapper *w, const char *so_path, int mode)
+{
+    w->so_handle = dlopen("libnvtensorrt.so", mode);

No, dlopen() is not allowed for this kind of thing. Linking must be added at build time.

You for that matter apparently add support for build time linking in patch 1, then attempt to remove it in this one, leaving cruft in the configure script. Why?

+    if (!w->so_handle)
+    {
+        return AVERROR(EIO);
+    }
+
+    w->load_model_func = (tloadModelTrt*)dlsym(w->so_handle, "load_model_trt");
+    w->execute_model_func = (texecuteModelTrt*)dlsym(w->so_handle, 
"execute_model_trt");
+    w->free_model_func = (tfreeModelTrt*)dlsym(w->so_handle, "free_model_trt");
+    if (!w->load_model_func || !w->execute_model_func || !w->free_model_func)
+    {
+        return AVERROR(EIO);
+    }
+
+    return 0;
+}

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to