/* 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; }