summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorXu Jun <xujunzz@sjtu.edu.cn>2020-09-06 20:28:51 +0800
committerGuo, Yejun <yejun.guo@intel.com>2020-09-09 14:24:36 +0800
commit235e01f5a0b6218590eff2377574046c684143e8 (patch)
tree2ea8e9e743ab607e1b7608eff5488c322575ba42 /libavfilter
parent1e5b3f77d9f6f6827b5755763ef041d360969d0c (diff)
dnn_backend_native.c: parse options in native backend
Signed-off-by: Xu Jun <xujunzz@sjtu.edu.cn> Signed-off-by: Guo, Yejun <yejun.guo@intel.com>
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/dnn/dnn_backend_native.c22
-rw-r--r--libavfilter/dnn/dnn_backend_native.h6
2 files changed, 25 insertions, 3 deletions
diff --git a/libavfilter/dnn/dnn_backend_native.c b/libavfilter/dnn/dnn_backend_native.c
index a8fe6b94eb..a9ecbdc88b 100644
--- a/libavfilter/dnn/dnn_backend_native.c
+++ b/libavfilter/dnn/dnn_backend_native.c
@@ -28,10 +28,17 @@
#include "dnn_backend_native_layer_conv2d.h"
#include "dnn_backend_native_layers.h"
-static const AVClass dnn_native_class = {
+#define OFFSET(x) offsetof(NativeContext, x)
+#define FLAGS AV_OPT_FLAG_FILTERING_PARAM
+static const AVOption dnn_native_options[] = {
+ { "conv2d_threads", "threads num for conv2d layer", OFFSET(options.conv2d_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FLAGS },
+ { NULL },
+};
+
+const AVClass dnn_native_class = {
.class_name = "dnn_native",
.item_name = av_default_item_name,
- .option = NULL,
+ .option = dnn_native_options,
.version = LIBAVUTIL_VERSION_INT,
.category = AV_CLASS_CATEGORY_FILTER,
};
@@ -174,8 +181,18 @@ DNNModel *ff_dnn_load_model_native(const char *model_filename, const char *optio
}
native_model->ctx.class = &dnn_native_class;
+ model->options = options;
+ if (av_opt_set_from_string(&native_model->ctx, model->options, NULL, "=", "&") < 0)
+ goto fail;
model->model = (void *)native_model;
+#if !HAVE_PTHREAD_CANCEL
+ if (native_model->ctx.options.conv2d_threads > 1){
+ av_log(&native_model->ctx, AV_LOG_WARNING, "'conv2d_threads' option was set but it is not supported "
+ "on this build (pthread support is required)\n");
+ }
+#endif
+
avio_seek(model_file_context, file_size - 8, SEEK_SET);
native_model->layers_num = (int32_t)avio_rl32(model_file_context);
native_model->operands_num = (int32_t)avio_rl32(model_file_context);
@@ -248,7 +265,6 @@ DNNModel *ff_dnn_load_model_native(const char *model_filename, const char *optio
model->set_input = &set_input_native;
model->get_input = &get_input_native;
- model->options = options;
return model;
diff --git a/libavfilter/dnn/dnn_backend_native.h b/libavfilter/dnn/dnn_backend_native.h
index 197f557dee..b1f8f3d6bf 100644
--- a/libavfilter/dnn/dnn_backend_native.h
+++ b/libavfilter/dnn/dnn_backend_native.h
@@ -29,6 +29,7 @@
#include "../dnn_interface.h"
#include "libavformat/avio.h"
+#include "libavutil/opt.h"
/**
* the enum value of DNNLayerType should not be changed,
@@ -106,8 +107,13 @@ typedef struct InputParams{
int height, width, channels;
} InputParams;
+typedef struct NativeOptions{
+ uint32_t conv2d_threads;
+} NativeOptions;
+
typedef struct NativeContext {
const AVClass *class;
+ NativeOptions options;
} NativeContext;
// Represents simple feed-forward convolutional network.