2021-01-26 05:35:30 +00:00
/*
* This file is part of FFmpeg .
*
* FFmpeg is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2.1 of the License , or ( at your option ) any later version .
*
* FFmpeg is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
/**
* @ file
* common functions for the dnn based filters
*/
# ifndef AVFILTER_DNN_FILTER_COMMON_H
# define AVFILTER_DNN_FILTER_COMMON_H
# include "dnn_interface.h"
typedef struct DnnContext {
char * model_filename ;
DNNBackendType backend_type ;
char * model_inputname ;
2021-05-06 08:46:08 +00:00
char * model_outputnames_string ;
2021-01-26 05:35:30 +00:00
char * backend_options ;
int async ;
2021-05-06 08:46:08 +00:00
char * * model_outputnames ;
uint32_t nb_outputs ;
2021-01-26 05:35:30 +00:00
DNNModule * dnn_module ;
DNNModel * model ;
} DnnContext ;
# define DNN_COMMON_OPTIONS \
{ " model " , " path to model file " , OFFSET ( model_filename ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , FLAGS } , \
{ " input " , " input name of the model " , OFFSET ( model_inputname ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , FLAGS } , \
2021-05-06 08:46:08 +00:00
{ " output " , " output name of the model " , OFFSET ( model_outputnames_string ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , FLAGS } , \
2021-01-26 05:35:30 +00:00
{ " backend_configs " , " backend configs " , OFFSET ( backend_options ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , FLAGS } , \
2021-05-17 08:28:44 +00:00
{ " options " , " backend configs (deprecated, use backend_configs) " , OFFSET ( backend_options ) , AV_OPT_TYPE_STRING , { . str = NULL } , 0 , 0 , FLAGS | AV_OPT_FLAG_DEPRECATED } , \
2021-08-25 21:10:47 +00:00
{ " async " , " use DNN async inference (ignored, use backend_configs='async=1') " , OFFSET ( async ) , AV_OPT_TYPE_BOOL , { . i64 = 1 } , 0 , 1 , FLAGS } ,
2021-01-26 05:35:30 +00:00
2021-02-07 06:35:22 +00:00
int ff_dnn_init ( DnnContext * ctx , DNNFunctionType func_type , AVFilterContext * filter_ctx ) ;
2021-03-01 11:23:20 +00:00
int ff_dnn_set_frame_proc ( DnnContext * ctx , FramePrePostProc pre_proc , FramePrePostProc post_proc ) ;
2021-03-09 06:51:42 +00:00
int ff_dnn_set_detect_post_proc ( DnnContext * ctx , DetectPostProc post_proc ) ;
2021-03-16 05:02:56 +00:00
int ff_dnn_set_classify_post_proc ( DnnContext * ctx , ClassifyPostProc post_proc ) ;
2022-03-02 18:05:49 +00:00
int ff_dnn_get_input ( DnnContext * ctx , DNNData * input ) ;
int ff_dnn_get_output ( DnnContext * ctx , int input_width , int input_height , int * output_width , int * output_height ) ;
int ff_dnn_execute_model ( DnnContext * ctx , AVFrame * in_frame , AVFrame * out_frame ) ;
int ff_dnn_execute_model_classification ( DnnContext * ctx , AVFrame * in_frame , AVFrame * out_frame , const char * target ) ;
2021-08-25 21:10:45 +00:00
DNNAsyncStatusType ff_dnn_get_result ( DnnContext * ctx , AVFrame * * in_frame , AVFrame * * out_frame ) ;
2022-03-02 18:05:49 +00:00
int ff_dnn_flush ( DnnContext * ctx ) ;
2021-01-26 05:35:30 +00:00
void ff_dnn_uninit ( DnnContext * ctx ) ;
# endif