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

181 lines
7.4 KiB
C

/* SPDX-License-Identifier: Apache-2.0 OR MIT */
/*
* Copyright (c) 2020 Rockchip Electronics Co., Ltd.
*/
#define MODULE_TAG "mpp_dec_cfg"
#include "rk_vdec_cfg.h"
#include <string.h>
#include "mpp_env.h"
#include "mpp_mem.h"
#include "mpp_lock.h"
#include "mpp_time.h"
#include "mpp_debug.h"
#include "mpp_common.h"
#include "mpp_singleton.h"
#include "mpp_internal.h"
#include "mpp_trie.h"
#include "mpp_cfg.h"
#include "mpp_cfg_io.h"
#include "mpp_dec_cfg.h"
#define MPP_DEC_CFG_ENTRY_TABLE(prefix, ENTRY, STRCT, EHOOK, SHOOK, ALIAS) \
CFG_DEF_START() \
STRUCT_START(base) \
ENTRY(prefix, u32, rk_u32, type, FLAG_BASE(0), base, type) \
ENTRY(prefix, u32, rk_u32, coding, FLAG_INCR, base, coding) \
ENTRY(prefix, u32, rk_u32, hw_type, FLAG_INCR, base, hw_type) \
ENTRY(prefix, u32, rk_u32, batch_mode, FLAG_INCR, base, batch_mode) \
ENTRY(prefix, u32, rk_u32, out_fmt, FLAG_INCR, base, out_fmt) \
ENTRY(prefix, u32, rk_u32, fast_out, FLAG_INCR, base, fast_out) \
ENTRY(prefix, u32, rk_u32, fast_parse, FLAG_INCR, base, fast_parse) \
ENTRY(prefix, u32, rk_u32, split_parse, FLAG_INCR, base, split_parse) \
ENTRY(prefix, u32, rk_u32, internal_pts, FLAG_INCR, base, internal_pts) \
ENTRY(prefix, u32, rk_u32, sort_pts, FLAG_INCR, base, sort_pts) \
ENTRY(prefix, u32, rk_u32, disable_error, FLAG_INCR, base, disable_error) \
ENTRY(prefix, u32, rk_u32, enable_vproc, FLAG_INCR, base, enable_vproc) \
ENTRY(prefix, u32, rk_u32, enable_fast_play, FLAG_INCR, base, enable_fast_play) \
ENTRY(prefix, u32, rk_u32, enable_hdr_meta, FLAG_INCR, base, enable_hdr_meta) \
ENTRY(prefix, u32, rk_u32, enable_thumbnail, FLAG_INCR, base, enable_thumbnail) \
ENTRY(prefix, u32, rk_u32, enable_mvc, FLAG_INCR, base, enable_mvc) \
ENTRY(prefix, u32, rk_u32, disable_dpb_chk, FLAG_INCR, base, disable_dpb_chk) \
ENTRY(prefix, u32, rk_u32, disable_thread, FLAG_INCR, base, disable_thread) \
ENTRY(prefix, u32, rk_u32, codec_mode, FLAG_INCR, base, codec_mode) \
ENTRY(prefix, u32, rk_u32, dis_err_clr_mark, FLAG_INCR, base, dis_err_clr_mark) \
ENTRY(prefix, u32, rk_u32, meta_chk_len, FLAG_INCR, base, meta_chk_len) \
STRUCT_END(base) \
STRUCT_START(status) \
ENTRY(prefix, s32, rk_s32, width, FLAG_NONE, status, width) \
ENTRY(prefix, s32, rk_s32, height, FLAG_NONE, status, height) \
ENTRY(prefix, s32, rk_s32, hor_stride, FLAG_NONE, status, hor_stride) \
ENTRY(prefix, s32, rk_s32, ver_stride, FLAG_NONE, status, ver_stride) \
ENTRY(prefix, s32, rk_s32, buf_size, FLAG_NONE, status, buf_size) \
STRUCT_END(status) \
STRUCT_START(cb) \
ENTRY(prefix, ptr, void *, pkt_rdy_cb, FLAG_BASE(0), cb, pkt_rdy_cb) \
ENTRY(prefix, ptr, void *, pkt_rdy_ctx, FLAG_PREV, cb, pkt_rdy_ctx) \
ENTRY(prefix, s32, rk_s32, pkt_rdy_cmd, FLAG_PREV, cb, pkt_rdy_cmd) \
ENTRY(prefix, ptr, void *, frm_rdy_cb, FLAG_INCR, cb, frm_rdy_cb) \
ENTRY(prefix, ptr, void *, frm_rdy_ctx, FLAG_PREV, cb, frm_rdy_ctx) \
ENTRY(prefix, s32, rk_s32, frm_rdy_cmd, FLAG_PREV, cb, frm_rdy_cmd) \
STRUCT_END(cb) \
CFG_DEF_END()
rk_s32 mpp_dec_cfg_set_default(void *entry, KmppObj obj, const char *caller)
{
MppDecCfgSet *cfg = (MppDecCfgSet *)entry;
cfg->base.type = MPP_CTX_BUTT;
cfg->base.coding = MPP_VIDEO_CodingUnused;
cfg->base.hw_type = -1;
cfg->base.fast_parse = 1;
#ifdef ENABLE_FASTPLAY_ONCE
cfg->base.enable_fast_play = MPP_ENABLE_FAST_PLAY_ONCE;
#else
cfg->base.enable_fast_play = MPP_ENABLE_FAST_PLAY;
#endif
cfg->base.meta_chk_len = MPP_DEC_META_CHK_LEN_DEFAULT;
(void) obj;
(void) caller;
return rk_ok;
}
#define KMPP_OBJ_NAME mpp_dec_cfg
#define KMPP_OBJ_INTF_TYPE MppDecCfg
#define KMPP_OBJ_IMPL_TYPE MppDecCfgSet
#define KMPP_OBJ_SGLN_ID MPP_SGLN_DEC_CFG
#define KMPP_OBJ_FUNC_INIT mpp_dec_cfg_set_default
#define KMPP_OBJ_ENTRY_TABLE MPP_DEC_CFG_ENTRY_TABLE
#define KMPP_OBJ_ACCESS_DISABLE
#define KMPP_OBJ_HIERARCHY_ENABLE
#include "kmpp_obj_helper.h"
/* wrapper for old interface */
MPP_RET mpp_dec_cfg_init(MppDecCfg *cfg)
{
return mpp_dec_cfg_get(cfg);
}
MPP_RET mpp_dec_cfg_deinit(MppDecCfg cfg)
{
return mpp_dec_cfg_put(cfg);
}
#define DEC_CFG_SET_ACCESS(func_name, in_type, cfg_type) \
MPP_RET func_name(MppDecCfg cfg, const char *name, in_type val) \
{ \
if (NULL == cfg || NULL == name) { \
mpp_err_f("invalid input cfg %p name %p\n", cfg, name); \
return rk_nok; \
} \
return kmpp_obj_set_##cfg_type(cfg, name, val); \
}
DEC_CFG_SET_ACCESS(mpp_dec_cfg_set_s32, RK_S32, s32)
DEC_CFG_SET_ACCESS(mpp_dec_cfg_set_u32, RK_U32, u32)
DEC_CFG_SET_ACCESS(mpp_dec_cfg_set_s64, RK_S64, s64)
DEC_CFG_SET_ACCESS(mpp_dec_cfg_set_u64, RK_U64, u64)
DEC_CFG_SET_ACCESS(mpp_dec_cfg_set_ptr, void *, ptr)
DEC_CFG_SET_ACCESS(mpp_dec_cfg_set_st, void *, st)
#define DEC_CFG_GET_ACCESS(func_name, in_type, cfg_type) \
MPP_RET func_name(MppDecCfg cfg, const char *name, in_type *val) \
{ \
if (NULL == cfg || NULL == name) { \
mpp_err_f("invalid input cfg %p name %p\n", cfg, name); \
return rk_nok; \
} \
return kmpp_obj_get_##cfg_type(cfg, name, val); \
}
DEC_CFG_GET_ACCESS(mpp_dec_cfg_get_s32, RK_S32, s32)
DEC_CFG_GET_ACCESS(mpp_dec_cfg_get_u32, RK_U32, u32)
DEC_CFG_GET_ACCESS(mpp_dec_cfg_get_s64, RK_S64, s64)
DEC_CFG_GET_ACCESS(mpp_dec_cfg_get_u64, RK_U64, u64)
DEC_CFG_GET_ACCESS(mpp_dec_cfg_get_ptr, void *, ptr)
DEC_CFG_GET_ACCESS(mpp_dec_cfg_get_st, void , st)
void mpp_dec_cfg_show(void)
{
MppTrie trie = kmpp_objdef_get_trie(mpp_dec_cfg_def);
MppTrieInfo *root;
if (!trie)
return;
root = mpp_trie_get_info_first(trie);
mpp_log("dumping valid configure string start\n");
if (root) {
MppTrieInfo *node = root;
rk_s32 len = mpp_trie_get_name_max(trie);
mpp_log("%-*s %-6s | %6s | %4s | %4s\n", len, "name", "type", "offset", "size", "flag (hex)");
do {
if (mpp_trie_info_is_self(node))
continue;
if (node->ctx_len == sizeof(KmppEntry)) {
KmppEntry *entry = (KmppEntry *)mpp_trie_info_ctx(node);
mpp_log("%-*s %-6s | %-6d | %-4d | %-4x\n", len, mpp_trie_info_name(node),
strof_elem_type(entry->tbl.elem_type), entry->tbl.elem_offset,
entry->tbl.elem_size, entry->tbl.flag_offset);
} else {
mpp_log("%-*s size - %d\n", len, mpp_trie_info_name(node), node->ctx_len);
}
} while ((node = mpp_trie_get_info_next(trie, node)));
}
mpp_log("dumping valid configure string done\n");
mpp_log("dec cfg size %d count %d with trie node %d size %d\n",
sizeof(MppDecCfgSet), mpp_trie_get_info_count(trie),
mpp_trie_get_node_count(trie), mpp_trie_get_buf_size(trie));
}