From 235e01f5a0b6218590eff2377574046c684143e8 Mon Sep 17 00:00:00 2001 From: Xu Jun Date: Sun, 6 Sep 2020 20:28:51 +0800 Subject: dnn_backend_native.c: parse options in native backend Signed-off-by: Xu Jun Signed-off-by: Guo, Yejun --- libavfilter/dnn/dnn_backend_native.c | 22 +++++++++++++++++++--- libavfilter/dnn/dnn_backend_native.h | 6 ++++++ 2 files changed, 25 insertions(+), 3 deletions(-) (limited to 'libavfilter') 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. -- cgit v1.2.3