FFmpeg
Loading...
Searching...
No Matches
dnn_backend_onnx.c File Reference

DNN ONNX Runtime backend implementation. More...

#include "libavutil/opt.h"
#include "libavutil/avassert.h"
#include "libavutil/mem.h"
#include "libavutil/avstring.h"
#include "libavutil/thread.h"
#include "libavutil/wchar_filename.h"
#include "../filters.h"
#include "dnn_io_proc.h"
#include "dnn_backend_common.h"
#include "queue.h"
#include "safe_queue.h"
#include <onnxruntime_c_api.h>
#include <inttypes.h>
#include <stdio.h>
#include <string.h>

Go to the source code of this file.

Data Structures

struct  ONNXModel
 
struct  ONNXInferRequest
 
struct  ONNXRequestItem
 

Macros

#define OFFSET(x)
 
#define FLAGS   AV_OPT_FLAG_FILTERING_PARAM
 
#define ORT_ABORT_ON_ERROR(expr)
 

Functions

 AVFILTER_DEFINE_CLASS (dnn_onnx)
 
static void init_ort_api (void)
 
static int extract_lltask_from_task (TaskItem *task, Queue *lltask_queue)
 
static void onnx_free_request (ONNXInferRequest *request)
 
static void destroy_request_item (ONNXRequestItem **arg)
 
static void dnn_free_model_onnx (DNNModel **model)
 
static int get_input_onnx (DNNModel *model, DNNData *input, const char *input_name)
 
static int fill_model_input_onnx (ONNXModel *onnx_model, ONNXRequestItem *request)
 
static int onnx_start_inference (void *args)
 
static void infer_completion_callback (void *args)
 
static int execute_model_onnx (ONNXRequestItem *request, Queue *lltask_queue)
 
static int get_output_onnx (DNNModel *model, const char *input_name, int input_width, int input_height, const char *output_name, int *output_width, int *output_height)
 
static ONNXInferRequestonnx_create_inference_request (void)
 
static DNNModeldnn_load_model_onnx (DnnContext *ctx, DNNFunctionType func_type, AVFilterContext *filter_ctx)
 
static int dnn_execute_model_onnx (const DNNModel *model, DNNExecBaseParams *exec_params)
 
static DNNAsyncStatusType dnn_get_result_onnx (const DNNModel *model, AVFrame **in, AVFrame **out)
 
static int dnn_flush_onnx (const DNNModel *model)
 

Variables

static const AVOption dnn_onnx_options []
 
static const OrtApi * g_ort = NULL
 
static AVOnce g_ort_init_once = AV_ONCE_INIT
 
const DNNModule ff_dnn_backend_onnx
 

Detailed Description

DNN ONNX Runtime backend implementation.

Definition in file dnn_backend_onnx.c.

Macro Definition Documentation

◆ OFFSET

#define OFFSET ( x)
Value:
offsetof(ONNXOptions, x)

Definition at line 69 of file dnn_backend_onnx.c.

◆ FLAGS

#define FLAGS   AV_OPT_FLAG_FILTERING_PARAM

Definition at line 70 of file dnn_backend_onnx.c.

◆ ORT_ABORT_ON_ERROR

#define ORT_ABORT_ON_ERROR ( expr)
Value:
do { \
OrtStatus *status = (expr); \
if (status != NULL) { \
const char *msg = g_ort->GetErrorMessage(status); \
av_log(ctx, AV_LOG_ERROR, "ONNX Runtime error: %s\n", msg); \
g_ort->ReleaseStatus(status); \
goto err; \
} \
} while (0)
static AVFormatContext * ctx
#define NULL
Definition coverity.c:32
static const OrtApi * g_ort
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210

Definition at line 87 of file dnn_backend_onnx.c.

Function Documentation

◆ AVFILTER_DEFINE_CLASS()

AVFILTER_DEFINE_CLASS ( dnn_onnx )

◆ init_ort_api()

static void init_ort_api ( void )
static

Definition at line 82 of file dnn_backend_onnx.c.

Referenced by dnn_load_model_onnx().

◆ extract_lltask_from_task()

static int extract_lltask_from_task ( TaskItem * task,
Queue * lltask_queue )
static

Definition at line 98 of file dnn_backend_onnx.c.

Referenced by dnn_execute_model_onnx(), and get_output_onnx().

◆ onnx_free_request()

static void onnx_free_request ( ONNXInferRequest * request)
static

◆ destroy_request_item()

static void destroy_request_item ( ONNXRequestItem ** arg)
inlinestatic

◆ dnn_free_model_onnx()

static void dnn_free_model_onnx ( DNNModel ** model)
static

Definition at line 147 of file dnn_backend_onnx.c.

Referenced by dnn_load_model_onnx().

◆ get_input_onnx()

static int get_input_onnx ( DNNModel * model,
DNNData * input,
const char * input_name )
static

Definition at line 187 of file dnn_backend_onnx.c.

Referenced by dnn_load_model_onnx(), and fill_model_input_onnx().

◆ fill_model_input_onnx()

static int fill_model_input_onnx ( ONNXModel * onnx_model,
ONNXRequestItem * request )
static

Definition at line 323 of file dnn_backend_onnx.c.

Referenced by execute_model_onnx().

◆ onnx_start_inference()

static int onnx_start_inference ( void * args)
static

Definition at line 420 of file dnn_backend_onnx.c.

Referenced by dnn_load_model_onnx(), and execute_model_onnx().

◆ infer_completion_callback()

static void infer_completion_callback ( void * args)
static

◆ execute_model_onnx()

static int execute_model_onnx ( ONNXRequestItem * request,
Queue * lltask_queue )
static

Definition at line 622 of file dnn_backend_onnx.c.

Referenced by dnn_execute_model_onnx(), dnn_flush_onnx(), and get_output_onnx().

◆ get_output_onnx()

static int get_output_onnx ( DNNModel * model,
const char * input_name,
int input_width,
int input_height,
const char * output_name,
int * output_width,
int * output_height )
static

Definition at line 670 of file dnn_backend_onnx.c.

Referenced by dnn_load_model_onnx().

◆ onnx_create_inference_request()

static ONNXInferRequest * onnx_create_inference_request ( void )
static

Definition at line 714 of file dnn_backend_onnx.c.

Referenced by dnn_load_model_onnx().

◆ dnn_load_model_onnx()

static DNNModel * dnn_load_model_onnx ( DnnContext * ctx,
DNNFunctionType func_type,
AVFilterContext * filter_ctx )
static

Definition at line 725 of file dnn_backend_onnx.c.

◆ dnn_execute_model_onnx()

static int dnn_execute_model_onnx ( const DNNModel * model,
DNNExecBaseParams * exec_params )
static

Definition at line 1025 of file dnn_backend_onnx.c.

◆ dnn_get_result_onnx()

static DNNAsyncStatusType dnn_get_result_onnx ( const DNNModel * model,
AVFrame ** in,
AVFrame ** out )
static

Definition at line 1074 of file dnn_backend_onnx.c.

◆ dnn_flush_onnx()

static int dnn_flush_onnx ( const DNNModel * model)
static

Definition at line 1080 of file dnn_backend_onnx.c.

Variable Documentation

◆ dnn_onnx_options

const AVOption dnn_onnx_options[]
static
Initial value:
= {
{ "threads_per_operation", "number of CPU threads per ORT operator (device=cpu only)",
OFFSET(num_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS },
{ NULL }
}
#define FLAGS
Definition cmdutils.c:598
#define OFFSET(x)
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258

Definition at line 71 of file dnn_backend_onnx.c.

◆ g_ort

◆ g_ort_init_once

AVOnce g_ort_init_once = AV_ONCE_INIT
static

Definition at line 80 of file dnn_backend_onnx.c.

Referenced by dnn_load_model_onnx().

◆ ff_dnn_backend_onnx

const DNNModule ff_dnn_backend_onnx
Initial value:
= {
.clazz = DNN_DEFINE_CLASS(dnn_onnx),
.type = DNN_ONNX,
.load_model = dnn_load_model_onnx,
.execute_model = dnn_execute_model_onnx,
.get_result = dnn_get_result_onnx,
.flush = dnn_flush_onnx,
.free_model = dnn_free_model_onnx,
}
#define DNN_DEFINE_CLASS(fname)
static int dnn_execute_model_onnx(const DNNModel *model, DNNExecBaseParams *exec_params)
static int dnn_flush_onnx(const DNNModel *model)
static DNNModel * dnn_load_model_onnx(DnnContext *ctx, DNNFunctionType func_type, AVFilterContext *filter_ctx)
static void dnn_free_model_onnx(DNNModel **model)
static DNNAsyncStatusType dnn_get_result_onnx(const DNNModel *model, AVFrame **in, AVFrame **out)
@ DNN_ONNX

Definition at line 1097 of file dnn_backend_onnx.c.