singe/thirdparty/rockchip-mpp/utils/mpp_enc_args.c
2026-09-10 20:17:28 -05:00

146 lines
4.8 KiB
C

/* SPDX-License-Identifier: Apache-2.0 OR MIT */
/*
* Copyright (c) 2026 Rockchip Electronics Co., Ltd.
*/
#include "mpp_mem.h"
#include "mpp_cfg_io.h"
#include "iniparser.h"
#include "utils_singleton.h"
#include "mpi_enc_utils.h"
#include "mpp_enc_args.h"
static rk_s32 mpp_enc_args_impl_init(void *entry, KmppObj obj, const char *caller)
{
MpiEncTestArgs *args = (MpiEncTestArgs *)entry;
args->nthreads = 1;
args->frm_step = 1;
args->rc_mode = MPP_ENC_RC_MODE_BUTT;
(void) obj;
(void) caller;
return rk_ok;
}
static rk_s32 mpp_enc_args_impl_deinit(void *entry, KmppObj obj, const char *caller)
{
MpiEncTestArgs *args = (MpiEncTestArgs *)entry;
if (args->cfg_ini) {
iniparser_freedict(args->cfg_ini);
args->cfg_ini = NULL;
}
if (args->fps) {
fps_calc_deinit(args->fps);
args->fps = NULL;
}
MPP_FREE(args->file_input);
MPP_FREE(args->file_output);
MPP_FREE(args->file_args);
MPP_FREE(args->file_cfg);
MPP_FREE(args->file_ref_cfg);
MPP_FREE(args->file_slt);
(void) obj;
(void) caller;
return rk_ok;
}
static rk_s32 mpp_enc_args_impl_dump(void *entry)
{
MpiEncTestArgs *args = (MpiEncTestArgs *)entry;
mpp_logi("cmd parse result:\n");
mpp_logi("input file name: %s\n", args->file_input);
mpp_logi("output file name: %s\n", args->file_output);
mpp_logi("width : %d\n", args->width);
mpp_logi("height : %d\n", args->height);
mpp_logi("format : %d\n", args->format);
mpp_logi("type : %d\n", args->type);
if (args->file_slt) {
mpp_logi("verify : %s\n", args->file_slt);
mpp_logi("frame step : %d\n", args->frm_step);
}
return rk_ok;
}
#define MPP_ENC_ARGS_ENTRY_TABLE(prefix, ENTRY, STRCT, EHOOK, SHOOK, ALIAS) \
CFG_DEF_START() \
ENTRY(prefix, s32, rk_s32, type_src, FLAG_NONE, type_src) \
ENTRY(prefix, s32, rk_s32, frame_num, FLAG_NONE, frame_num) \
ENTRY(prefix, s32, rk_s32, loop_cnt, FLAG_NONE, loop_cnt) \
ENTRY(prefix, s32, rk_s32, nthreads, FLAG_NONE, nthreads) \
ENTRY(prefix, s32, rk_s32, frm_step, FLAG_NONE, frm_step) \
ENTRY(prefix, s32, rk_s32, gop_mode, FLAG_NONE, gop_mode) \
ENTRY(prefix, s32, rk_s32, vi_len, FLAG_NONE, vi_len) \
ENTRY(prefix, s32, rk_s32, quiet, FLAG_NONE, quiet) \
ENTRY(prefix, s32, rk_s32, trace_fps, FLAG_NONE, trace_fps) \
ENTRY(prefix, u32, rk_u32, kmpp_mode, FLAG_NONE, kmpp_mode) \
ENTRY(prefix, u32, rk_u32, osd_enable, FLAG_NONE, osd_enable) \
ENTRY(prefix, u32, rk_u32, osd_mode, FLAG_NONE, osd_mode) \
ENTRY(prefix, u32, rk_u32, user_data_enable, FLAG_NONE, user_data_enable) \
ENTRY(prefix, u32, rk_u32, roi_enable, FLAG_NONE, roi_enable) \
ENTRY(prefix, u32, rk_u32, roi_jpeg_enable, FLAG_NONE, roi_jpeg_enable) \
ENTRY(prefix, u32, rk_u32, jpeg_osd_case, FLAG_NONE, jpeg_osd_case) \
ENTRY(prefix, u32, rk_u32, constraint_set, FLAG_NONE, constraint_set) \
ENTRY(prefix, u32, rk_u32, sei_mode, FLAG_NONE, sei_mode) \
CFG_DEF_END()
#define KMPP_OBJ_NAME mpp_enc_args
#define KMPP_OBJ_INTF_TYPE MppEncArgs
#define KMPP_OBJ_IMPL_TYPE MpiEncTestArgs
#define KMPP_OBJ_SGLN UTILS_SINGLETON
#define KMPP_OBJ_SGLN_ID UTILS_SGLN_ENC_ARGS
#define KMPP_OBJ_FUNC_INIT mpp_enc_args_impl_init
#define KMPP_OBJ_FUNC_DEINIT mpp_enc_args_impl_deinit
#define KMPP_OBJ_FUNC_DUMP mpp_enc_args_impl_dump
#define KMPP_OBJ_ENTRY_TABLE MPP_ENC_ARGS_ENTRY_TABLE
#define KMPP_OBJ_ACCESS_DISABLE
#define KMPP_OBJ_HIERARCHY_ENABLE
#include "kmpp_obj_helper.h"
rk_s32 mpp_enc_args_extract(MppEncArgs cmd_obj, MppCfgStrFmt fmt, char **buf)
{
MpiEncTestArgs *cmd = kmpp_obj_to_entry(cmd_obj);
MppCfgObj obj = NULL;
MppCfgObj root = NULL;
root = kmpp_objdef_get_cfg_root(mpp_enc_args_def);
if (mpp_cfg_from_struct(&obj, root, cmd) || !obj)
return rk_nok;
mpp_cfg_to_string(obj, fmt, buf);
mpp_cfg_put_all(obj);
return (buf && *buf) ? rk_ok : rk_nok;
}
rk_s32 mpp_enc_args_apply(MppEncArgs cmd_obj, MppCfgStrFmt fmt, char *buf)
{
MpiEncTestArgs *cmd = kmpp_obj_to_entry(cmd_obj);
MppCfgObj obj = NULL;
MppCfgObj root = NULL;
rk_s32 ret;
root = kmpp_objdef_get_cfg_root(mpp_enc_args_def);
ret = mpp_cfg_from_string(&obj, fmt, buf);
if (ret || !obj) {
if (obj)
mpp_cfg_put_all(obj);
return rk_nok;
}
mpp_cfg_to_struct(obj, root, cmd);
mpp_cfg_put_all(obj);
return rk_ok;
}