FFmpeg
Data Structures | Macros | Functions | Variables
dnn_backend_onnx.c File Reference
#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)   offsetof(ONNXOptions, 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)    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)

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

Definition at line 514 of file dnn_backend_onnx.c.

Referenced by dnn_load_model_onnx(), and execute_model_onnx().

◆ 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 }
}

Definition at line 71 of file dnn_backend_onnx.c.

◆ g_ort

const OrtApi* g_ort = NULL
static

◆ 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,
}

Definition at line 1097 of file dnn_backend_onnx.c.

FLAGS
#define FLAGS
Definition: dnn_backend_onnx.c:70
dnn_free_model_onnx
static void dnn_free_model_onnx(DNNModel **model)
Definition: dnn_backend_onnx.c:147
dnn_flush_onnx
static int dnn_flush_onnx(const DNNModel *model)
Definition: dnn_backend_onnx.c:1080
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
dnn_execute_model_onnx
static int dnn_execute_model_onnx(const DNNModel *model, DNNExecBaseParams *exec_params)
Definition: dnn_backend_onnx.c:1025
ctx
static AVFormatContext * ctx
Definition: movenc.c:49
g_ort
static const OrtApi * g_ort
Definition: dnn_backend_onnx.c:79
NULL
#define NULL
Definition: coverity.c:32
dnn_load_model_onnx
static DNNModel * dnn_load_model_onnx(DnnContext *ctx, DNNFunctionType func_type, AVFilterContext *filter_ctx)
Definition: dnn_backend_onnx.c:725
DNN_ONNX
@ DNN_ONNX
Definition: dnn_interface.h:39
DNN_DEFINE_CLASS
#define DNN_DEFINE_CLASS(fname)
Definition: dnn_backend_common.h:40
OFFSET
#define OFFSET(x)
Definition: dnn_backend_onnx.c:69
status
ov_status_e status
Definition: dnn_backend_openvino.c:100
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:258
dnn_get_result_onnx
static DNNAsyncStatusType dnn_get_result_onnx(const DNNModel *model, AVFrame **in, AVFrame **out)
Definition: dnn_backend_onnx.c:1074