diff mbox series

[FFmpeg-devel,V2,5/5] lavfi/dnn: Fill Task using Common Function

Message ID 20210605180806.65831-5-shubhanshu.e01@gmail.com
State New
Headers show
Series [FFmpeg-devel,V2,1/5] lavfi/dnn: Extract TaskItem and InferenceItem from OpenVino Backend
Related show

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished
andriy/PPC64_make success Make finished
andriy/PPC64_make_fate success Make fate finished

Commit Message

Shubhanshu Saxena June 5, 2021, 6:08 p.m. UTC
This commit adds a common function for filling the TaskItems
in all three backends.

Signed-off-by: Shubhanshu Saxena <shubhanshu.e01@gmail.com>
---
 libavfilter/dnn/dnn_backend_common.c   | 20 ++++++++++++++++++++
 libavfilter/dnn/dnn_backend_common.h   | 15 +++++++++++++++
 libavfilter/dnn/dnn_backend_openvino.c | 23 +++++++----------------
 3 files changed, 42 insertions(+), 16 deletions(-)

Comments

Guo, Yejun June 11, 2021, 1:04 a.m. UTC | #1
> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> Shubhanshu Saxena
> Sent: 2021年6月6日 2:08
> To: ffmpeg-devel@ffmpeg.org
> Cc: Shubhanshu Saxena <shubhanshu.e01@gmail.com>
> Subject: [FFmpeg-devel] [PATCH V2 5/5] lavfi/dnn: Fill Task using Common
> Function
> 
> This commit adds a common function for filling the TaskItems
> in all three backends.
> 
> Signed-off-by: Shubhanshu Saxena <shubhanshu.e01@gmail.com>
> ---
>  libavfilter/dnn/dnn_backend_common.c   | 20 ++++++++++++++++++++
>  libavfilter/dnn/dnn_backend_common.h   | 15 +++++++++++++++
>  libavfilter/dnn/dnn_backend_openvino.c | 23 +++++++----------------
>  3 files changed, 42 insertions(+), 16 deletions(-)
> 
> diff --git a/libavfilter/dnn/dnn_backend_common.c
> b/libavfilter/dnn/dnn_backend_common.c
> index a522ab5650..4d9d3f79b1 100644
> --- a/libavfilter/dnn/dnn_backend_common.c
> +++ b/libavfilter/dnn/dnn_backend_common.c
> @@ -49,3 +49,23 @@ int ff_check_exec_params(void *ctx, DNNBackendType
> backend, DNNFunctionType func
> 
>      return 0;
>  }
> +
> +DNNReturnType ff_dnn_fill_task(TaskItem *task, DNNExecBaseParams
> *exec_params, void *backend_model, int async, int do_ioproc) {
> +    if (task == NULL || exec_params == NULL || backend_model == NULL)
> +        return DNN_ERROR;
> +    if (do_ioproc != 0 && do_ioproc != 1)
> +        return DNN_ERROR;
> +    if (async != 0 && async != 1)
> +        return DNN_ERROR;
> +
> +    task->do_ioproc = do_ioproc;
> +    task->async = async;
> +    task->input_name = exec_params->input_name;
> +    task->in_frame = exec_params->in_frame;
> +    task->out_frame = exec_params->out_frame;
> +    task->model = backend_model;
> +    task->nb_output = exec_params->nb_output;
> +    task->output_names = exec_params->output_names;
> +
> +    return DNN_SUCCESS;
> +}
> diff --git a/libavfilter/dnn/dnn_backend_common.h
> b/libavfilter/dnn/dnn_backend_common.h
> index d962312c16..df59615f40 100644
> --- a/libavfilter/dnn/dnn_backend_common.h
> +++ b/libavfilter/dnn/dnn_backend_common.h
> @@ -48,4 +48,19 @@ typedef struct InferenceItem {
> 
>  int ff_check_exec_params(void *ctx, DNNBackendType backend,
> DNNFunctionType func_type, DNNExecBaseParams *exec_params);
> 
> +/**
> + * Fill the Task for Backend Execution. It should be called after
> + * checking execution parameters using ff_check_exec_params.
> + *
> + * @param task pointer to the allocated task
> + * @param exec_param pointer to execution parameters
> + * @param backend_model void pointer to the backend model
> + * @param async flag for async execution. Must be 0 or 1
> + * @param do_ioproc flag for IO processing. Must be 0 or 1
> + *
> + * @retval DNN_SUCCESS if successful
> + * @retval DNN_ERROR if flags are invalid or any parameter is NULL
> + */
> +DNNReturnType ff_dnn_fill_task(TaskItem *task, DNNExecBaseParams
> *exec_params, void *backend_model, int async, int do_ioproc);
> +
>  #endif
> diff --git a/libavfilter/dnn/dnn_backend_openvino.c
> b/libavfilter/dnn/dnn_backend_openvino.c
> index c2487c35be..709a772a4d 100644
> --- a/libavfilter/dnn/dnn_backend_openvino.c
> +++ b/libavfilter/dnn/dnn_backend_openvino.c
> @@ -793,14 +793,9 @@ DNNReturnType ff_dnn_execute_model_ov(const
> DNNModel *model, DNNExecBaseParams *
>          }
>      }
> 
> -    task.do_ioproc = 1;
> -    task.async = 0;
> -    task.input_name = exec_params->input_name;
> -    task.in_frame = exec_params->in_frame;
> -    task.output_names = &exec_params->output_names[0];
> -    task.out_frame = exec_params->out_frame ? exec_params->out_frame :
> exec_params->in_frame;
> -    task.nb_output = exec_params->nb_output;
> -    task.model = ov_model;
> +    if (ff_dnn_fill_task(&task, exec_params, ov_model, 0, 1) !=
> DNN_SUCCESS) {
> +        return DNN_ERROR;
> +    }
> 
>      if (extract_inference_from_task(ov_model->model->func_type, &task,
> ov_model->inference_queue, exec_params) != DNN_SUCCESS) {
>          av_log(ctx, AV_LOG_ERROR, "unable to extract inference from
> task.\n");
> @@ -841,14 +836,10 @@ DNNReturnType
> ff_dnn_execute_model_async_ov(const DNNModel *model, DNNExecBasePa
>          return DNN_ERROR;
>      }
> 
> -    task->do_ioproc = 1;
> -    task->async = 1;
> -    task->input_name = exec_params->input_name;
> -    task->in_frame = exec_params->in_frame;
> -    task->output_names = &exec_params->output_names[0];
> -    task->out_frame = exec_params->out_frame ?
> exec_params->out_frame : exec_params->in_frame;
> -    task->nb_output = exec_params->nb_output;
> -    task->model = ov_model;
> +    if (ff_dnn_fill_task(task, exec_params, ov_model, 1, 1) != DNN_SUCCESS)
> {
> +        return DNN_ERROR;
> +    }
> +
>      if (ff_queue_push_back(ov_model->task_queue, task) < 0) {
>          av_freep(&task);
>          av_log(ctx, AV_LOG_ERROR, "unable to push back task_queue.\n");

will push tomorrow if there's no objection, thanks.
diff mbox series

Patch

diff --git a/libavfilter/dnn/dnn_backend_common.c b/libavfilter/dnn/dnn_backend_common.c
index a522ab5650..4d9d3f79b1 100644
--- a/libavfilter/dnn/dnn_backend_common.c
+++ b/libavfilter/dnn/dnn_backend_common.c
@@ -49,3 +49,23 @@  int ff_check_exec_params(void *ctx, DNNBackendType backend, DNNFunctionType func
 
     return 0;
 }
+
+DNNReturnType ff_dnn_fill_task(TaskItem *task, DNNExecBaseParams *exec_params, void *backend_model, int async, int do_ioproc) {
+    if (task == NULL || exec_params == NULL || backend_model == NULL)
+        return DNN_ERROR;
+    if (do_ioproc != 0 && do_ioproc != 1)
+        return DNN_ERROR;
+    if (async != 0 && async != 1)
+        return DNN_ERROR;
+
+    task->do_ioproc = do_ioproc;
+    task->async = async;
+    task->input_name = exec_params->input_name;
+    task->in_frame = exec_params->in_frame;
+    task->out_frame = exec_params->out_frame;
+    task->model = backend_model;
+    task->nb_output = exec_params->nb_output;
+    task->output_names = exec_params->output_names;
+
+    return DNN_SUCCESS;
+}
diff --git a/libavfilter/dnn/dnn_backend_common.h b/libavfilter/dnn/dnn_backend_common.h
index d962312c16..df59615f40 100644
--- a/libavfilter/dnn/dnn_backend_common.h
+++ b/libavfilter/dnn/dnn_backend_common.h
@@ -48,4 +48,19 @@  typedef struct InferenceItem {
 
 int ff_check_exec_params(void *ctx, DNNBackendType backend, DNNFunctionType func_type, DNNExecBaseParams *exec_params);
 
+/**
+ * Fill the Task for Backend Execution. It should be called after
+ * checking execution parameters using ff_check_exec_params.
+ *
+ * @param task pointer to the allocated task
+ * @param exec_param pointer to execution parameters
+ * @param backend_model void pointer to the backend model
+ * @param async flag for async execution. Must be 0 or 1
+ * @param do_ioproc flag for IO processing. Must be 0 or 1
+ *
+ * @retval DNN_SUCCESS if successful
+ * @retval DNN_ERROR if flags are invalid or any parameter is NULL
+ */
+DNNReturnType ff_dnn_fill_task(TaskItem *task, DNNExecBaseParams *exec_params, void *backend_model, int async, int do_ioproc);
+
 #endif
diff --git a/libavfilter/dnn/dnn_backend_openvino.c b/libavfilter/dnn/dnn_backend_openvino.c
index c2487c35be..709a772a4d 100644
--- a/libavfilter/dnn/dnn_backend_openvino.c
+++ b/libavfilter/dnn/dnn_backend_openvino.c
@@ -793,14 +793,9 @@  DNNReturnType ff_dnn_execute_model_ov(const DNNModel *model, DNNExecBaseParams *
         }
     }
 
-    task.do_ioproc = 1;
-    task.async = 0;
-    task.input_name = exec_params->input_name;
-    task.in_frame = exec_params->in_frame;
-    task.output_names = &exec_params->output_names[0];
-    task.out_frame = exec_params->out_frame ? exec_params->out_frame : exec_params->in_frame;
-    task.nb_output = exec_params->nb_output;
-    task.model = ov_model;
+    if (ff_dnn_fill_task(&task, exec_params, ov_model, 0, 1) != DNN_SUCCESS) {
+        return DNN_ERROR;
+    }
 
     if (extract_inference_from_task(ov_model->model->func_type, &task, ov_model->inference_queue, exec_params) != DNN_SUCCESS) {
         av_log(ctx, AV_LOG_ERROR, "unable to extract inference from task.\n");
@@ -841,14 +836,10 @@  DNNReturnType ff_dnn_execute_model_async_ov(const DNNModel *model, DNNExecBasePa
         return DNN_ERROR;
     }
 
-    task->do_ioproc = 1;
-    task->async = 1;
-    task->input_name = exec_params->input_name;
-    task->in_frame = exec_params->in_frame;
-    task->output_names = &exec_params->output_names[0];
-    task->out_frame = exec_params->out_frame ? exec_params->out_frame : exec_params->in_frame;
-    task->nb_output = exec_params->nb_output;
-    task->model = ov_model;
+    if (ff_dnn_fill_task(task, exec_params, ov_model, 1, 1) != DNN_SUCCESS) {
+        return DNN_ERROR;
+    }
+
     if (ff_queue_push_back(ov_model->task_queue, task) < 0) {
         av_freep(&task);
         av_log(ctx, AV_LOG_ERROR, "unable to push back task_queue.\n");