fix[kmpp_obj]: Fix grp_cfg and buf_cfg leak in kmpp_obj_test

1. Use mem pool to alloc KmppObjImpl
2. Add kmpp_obj_put_impl to release KmppObjImpl header only.
3. Add grp_cfg and buf_cfg release operation.
4. Use MPP_SINGLETON to init kmpp_venc_cfg.

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I865d4d990d7e89598b2f17d85460b809f7f602df
This commit is contained in:
Herman Chen 2025-07-08 10:43:49 +08:00
parent e0e59e5ce2
commit 5497c458fe
7 changed files with 131 additions and 104 deletions

View file

@ -255,38 +255,39 @@ KMPP_OBJ_ENTRY_TABLE(KMPP_OBJ_NAME, VAL_ENTRY_TBL, VAL_ENTRY_TBL,
void CONCAT_US(KMPP_OBJ_NAME, register)(void)
{
rk_s32 impl_size = (sizeof(KMPP_OBJ_IMPL_TYPE) + KMPP_OBJ_EXTRA_SIZE + 3) & ~3;
rk_s32 __flag_base = impl_size << 3;
rk_s32 __flag_step = 0;
rk_s32 __flag_prev = 0;
rk_s32 __flag_record[ELEM_FLAG_RECORD_MAX];
(void) __flag_base;
(void) __flag_step;
(void) __flag_prev;
(void) __flag_record;
mpp_env_get_u32(TO_STR(CONCAT_US(KMPP_OBJ_NAME, debug)), &KMPP_OBJ_DEF_DEUBG(KMPP_OBJ_NAME), 0);
KMPP_OBJ_DBG_LOG("register enter\n");
kmpp_objdef_get(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), TO_STR(KMPP_OBJ_INTF_TYPE));
if (KMPP_OBJ_DEF(KMPP_OBJ_NAME)) {
KMPP_OBJ_DBG_LOG(TO_STR(KMPP_OBJ_NAME) " found at kernel\n");
return;
} else {
rk_s32 __entry_size = (sizeof(KMPP_OBJ_IMPL_TYPE) + KMPP_OBJ_EXTRA_SIZE + 3) & ~3;
rk_s32 __flag_base = __entry_size << 3;
rk_s32 __flag_step = 0;
rk_s32 __flag_prev = 0;
rk_s32 __flag_record[ELEM_FLAG_RECORD_MAX];
(void) __flag_base;
(void) __flag_step;
(void) __flag_prev;
(void) __flag_record;
kmpp_objdef_register(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), __entry_size, TO_STR(KMPP_OBJ_INTF_TYPE));
if (!KMPP_OBJ_DEF(KMPP_OBJ_NAME)) {
mpp_loge_f(TO_STR(KMPP_OBJ_NAME) " init failed\n");
return;
}
KMPP_OBJ_DBG_LOG(TO_STR(KMPP_OBJ_NAME) " registered at userspace\n");
KMPP_OBJ_ENTRY_TABLE(KMPP_OBJ_NAME, ENTRY_TO_TRIE, ENTRY_TO_TRIE,
ENTRY_TO_TRIE, ENTRY_TO_TRIE, ENTRY_TO_TRIE)
kmpp_objdef_add_entry(KMPP_OBJ_DEF(KMPP_OBJ_NAME), NULL, NULL);
KMPP_OBJ_ENTRY_TABLE(KMPP_OBJ_NAME, ENTRY_QUERY, ENTRY_QUERY,
HOOK_QUERY, HOOK_QUERY, ENTRY_NOTHING);
}
KMPP_OBJ_DBG_LOG("register enter\n");
kmpp_objdef_register(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), impl_size, TO_STR(KMPP_OBJ_INTF_TYPE));
if (!KMPP_OBJ_DEF(KMPP_OBJ_NAME)) {
mpp_loge_f(TO_STR(KMPP_OBJ_NAME) " init failed\n");
return;
}
KMPP_OBJ_ENTRY_TABLE(KMPP_OBJ_NAME, ENTRY_TO_TRIE, ENTRY_TO_TRIE,
ENTRY_TO_TRIE, ENTRY_TO_TRIE, ENTRY_TO_TRIE)
kmpp_objdef_add_entry(KMPP_OBJ_DEF(KMPP_OBJ_NAME), NULL, NULL);
KMPP_OBJ_ENTRY_TABLE(KMPP_OBJ_NAME, ENTRY_QUERY, ENTRY_QUERY,
HOOK_QUERY, HOOK_QUERY, ENTRY_NOTHING);
#if defined(KMPP_OBJ_FUNC_INIT)
kmpp_objdef_add_init(KMPP_OBJ_DEF(KMPP_OBJ_NAME), KMPP_OBJ_FUNC_INIT);
#endif