2018-06-05 17:20 GMT+03:00 James Almer <jamr...@gmail.com>: > On 6/3/2018 3:02 PM, Sergey Lavrushkin wrote: > > diff --git a/libavfilter/vf_srcnn.c b/libavfilter/vf_srcnn.c > > index d6efe9b478..5c5e26b33a 100644 > > --- a/libavfilter/vf_srcnn.c > > +++ b/libavfilter/vf_srcnn.c > > @@ -41,7 +41,6 @@ typedef struct SRCNNContext { > > DNNData input_output; > > } SRCNNContext; > > > > - > > #define OFFSET(x) offsetof(SRCNNContext, x) > > #define FLAGS AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM > > static const AVOption srcnn_options[] = { > > @@ -55,10 +54,19 @@ static av_cold int init(AVFilterContext* context) > > { > > SRCNNContext* srcnn_context = context->priv; > > > > - srcnn_context->dnn_module = ff_get_dnn_module(DNN_NATIVE); > > + srcnn_context->dnn_module = ff_get_dnn_module(DNN_TF); > > This should be a filter AVOption, not hardcoded to one or another. What > if i, for whatever reason, want to use the native backend when i have > libtensorflow enabled? > > > if (!srcnn_context->dnn_module){ > > - av_log(context, AV_LOG_ERROR, "could not create dnn module\n"); > > - return AVERROR(ENOMEM); > > + srcnn_context->dnn_module = ff_get_dnn_module(DNN_NATIVE); > > + if (!srcnn_context->dnn_module){ > > + av_log(context, AV_LOG_ERROR, "could not create dnn > module\n"); > > + return AVERROR(ENOMEM); > > + } > > + else{ > > + av_log(context, AV_LOG_INFO, "using native backend for DNN > inference\n"); > > VERBOSE, not INFO > > > + } > > + } > > + else{ > > + av_log(context, AV_LOG_INFO, "using tensorflow backend for DNN > inference\n"); > > Ditto. > > > } > > if (!srcnn_context->model_filename){ > > av_log(context, AV_LOG_INFO, "model file for network was not > specified, using default network for x2 upsampling\n");
Here is the patch, that fixes described issues.
From 971e15b4b1e3f2747aa07d0221f99226cba622ac Mon Sep 17 00:00:00 2001 From: Sergey Lavrushkin <dual...@gmail.com> Date: Wed, 6 Jun 2018 01:44:40 +0300 Subject: [PATCH] libavfilter/vf_srcnn.c: adds DNN module backend AVOption, changes AV_LOG_INFO message to AV_LOG_VERBOSE. --- libavfilter/vf_srcnn.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/libavfilter/vf_srcnn.c b/libavfilter/vf_srcnn.c index 5c5e26b33a..17e380503e 100644 --- a/libavfilter/vf_srcnn.c +++ b/libavfilter/vf_srcnn.c @@ -36,6 +36,7 @@ typedef struct SRCNNContext { char* model_filename; float* input_output_buf; + DNNBackendType backend_type; DNNModule* dnn_module; DNNModel* model; DNNData input_output; @@ -44,6 +45,9 @@ typedef struct SRCNNContext { #define OFFSET(x) offsetof(SRCNNContext, x) #define FLAGS AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM static const AVOption srcnn_options[] = { + { "dnn_backend", "DNN backend used for model execution", OFFSET(backend_type), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, 0, 1, FLAGS, "backend" }, + { "native", "native backend flag", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, FLAGS, "backend" }, + { "tensorflow", "tensorflow backend flag", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, FLAGS, "backend" }, { "model_filename", "path to model file specifying network architecture and its parameters", OFFSET(model_filename), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, { NULL } }; @@ -54,29 +58,20 @@ static av_cold int init(AVFilterContext* context) { SRCNNContext* srcnn_context = context->priv; - srcnn_context->dnn_module = ff_get_dnn_module(DNN_TF); + srcnn_context->dnn_module = ff_get_dnn_module(srcnn_context->backend_type); if (!srcnn_context->dnn_module){ - srcnn_context->dnn_module = ff_get_dnn_module(DNN_NATIVE); - if (!srcnn_context->dnn_module){ - av_log(context, AV_LOG_ERROR, "could not create dnn module\n"); - return AVERROR(ENOMEM); - } - else{ - av_log(context, AV_LOG_INFO, "using native backend for DNN inference\n"); - } - } - else{ - av_log(context, AV_LOG_INFO, "using tensorflow backend for DNN inference\n"); + av_log(context, AV_LOG_ERROR, "could not create DNN module for requested backend\n"); + return AVERROR(ENOMEM); } if (!srcnn_context->model_filename){ - av_log(context, AV_LOG_INFO, "model file for network was not specified, using default network for x2 upsampling\n"); + av_log(context, AV_LOG_VERBOSE, "model file for network was not specified, using default network for x2 upsampling\n"); srcnn_context->model = (srcnn_context->dnn_module->load_default_model)(DNN_SRCNN); } else{ srcnn_context->model = (srcnn_context->dnn_module->load_model)(srcnn_context->model_filename); } if (!srcnn_context->model){ - av_log(context, AV_LOG_ERROR, "could not load dnn model\n"); + av_log(context, AV_LOG_ERROR, "could not load DNN model\n"); return AVERROR(EIO); } -- 2.14.1
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel