mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-09-28 05:52:07 +08:00
chore[kmpp_obj]: Add from objs device macro
Combine kernel objdef and userspace objdef process. Signed-off-by: Herman Chen <herman.chen@rock-chips.com> Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com> Change-Id: Icf1ad03af8df3d1450138d3a9161b2dd20bb59f5
This commit is contained in:
@@ -18,8 +18,6 @@ extern "C" {
|
|||||||
|
|
||||||
/* userspace objdef register */
|
/* userspace objdef register */
|
||||||
rk_s32 kmpp_objdef_register(KmppObjDef *def, rk_s32 size, const char *name);
|
rk_s32 kmpp_objdef_register(KmppObjDef *def, rk_s32 size, const char *name);
|
||||||
/* userspace objdef unregister */
|
|
||||||
rk_s32 kmpp_objdef_unregister(KmppObjDef def);
|
|
||||||
/* userspace objdef add MppCfgObj root */
|
/* userspace objdef add MppCfgObj root */
|
||||||
rk_s32 kmpp_objdef_add_cfg_root(KmppObjDef def, MppCfgObj root);
|
rk_s32 kmpp_objdef_add_cfg_root(KmppObjDef def, MppCfgObj root);
|
||||||
/* userspace objdef add KmppEntry table */
|
/* userspace objdef add KmppEntry table */
|
||||||
|
@@ -266,6 +266,12 @@ void CONCAT_US(KMPP_OBJ_NAME, register)(void)
|
|||||||
|
|
||||||
mpp_env_get_u32(TO_STR(CONCAT_US(KMPP_OBJ_NAME, debug)), &KMPP_OBJ_DEF_DEUBG(KMPP_OBJ_NAME), 0);
|
mpp_env_get_u32(TO_STR(CONCAT_US(KMPP_OBJ_NAME, debug)), &KMPP_OBJ_DEF_DEUBG(KMPP_OBJ_NAME), 0);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
KMPP_OBJ_DBG_LOG("register enter\n");
|
KMPP_OBJ_DBG_LOG("register enter\n");
|
||||||
|
|
||||||
kmpp_objdef_register(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), impl_size, TO_STR(KMPP_OBJ_INTF_TYPE));
|
kmpp_objdef_register(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), impl_size, TO_STR(KMPP_OBJ_INTF_TYPE));
|
||||||
@@ -303,7 +309,7 @@ void CONCAT_US(KMPP_OBJ_NAME, unregister)(void)
|
|||||||
KmppObjDef def = __sync_fetch_and_and(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), NULL);
|
KmppObjDef def = __sync_fetch_and_and(&KMPP_OBJ_DEF(KMPP_OBJ_NAME), NULL);
|
||||||
|
|
||||||
KMPP_OBJ_DBG_LOG("unregister enter\n");
|
KMPP_OBJ_DBG_LOG("unregister enter\n");
|
||||||
kmpp_objdef_unregister(def);
|
kmpp_objdef_put(def);
|
||||||
KMPP_OBJ_DBG_LOG("unregister leave\n");
|
KMPP_OBJ_DBG_LOG("unregister leave\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -102,6 +102,8 @@ typedef struct KmppObjDefImpl_t {
|
|||||||
/* userspace objdef */
|
/* userspace objdef */
|
||||||
MppCfgObj cfg;
|
MppCfgObj cfg;
|
||||||
MppMemPool pool;
|
MppMemPool pool;
|
||||||
|
/* object define from kernel or userspace */
|
||||||
|
rk_s32 is_kobj;
|
||||||
rk_s32 flag_base;
|
rk_s32 flag_base;
|
||||||
rk_s32 flag_max_pos;
|
rk_s32 flag_max_pos;
|
||||||
rk_s32 buf_size;
|
rk_s32 buf_size;
|
||||||
@@ -418,15 +420,31 @@ rk_s32 kmpp_objdef_put(KmppObjDef def)
|
|||||||
rk_s32 ret = rk_nok;
|
rk_s32 ret = rk_nok;
|
||||||
|
|
||||||
if (impl) {
|
if (impl) {
|
||||||
impl->ref_cnt--;
|
if (impl->is_kobj) {
|
||||||
|
impl->ref_cnt--;
|
||||||
if (!impl->ref_cnt) {
|
if (!impl->ref_cnt) {
|
||||||
|
if (impl->trie) {
|
||||||
|
ret = mpp_trie_deinit(impl->trie);
|
||||||
|
impl->trie = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (impl->cfg) {
|
||||||
|
mpp_cfg_put_all(impl->cfg);
|
||||||
|
impl->cfg = NULL;
|
||||||
|
/* When init with MppCfgObj the trie is associated to the MppCfgObj */
|
||||||
|
impl->trie = NULL;
|
||||||
|
}
|
||||||
if (impl->trie) {
|
if (impl->trie) {
|
||||||
ret = mpp_trie_deinit(impl->trie);
|
ret = mpp_trie_deinit(impl->trie);
|
||||||
impl->trie = NULL;
|
impl->trie = NULL;
|
||||||
}
|
}
|
||||||
|
if (impl->pool) {
|
||||||
|
mpp_mem_pool_deinit(impl->pool);
|
||||||
|
impl->pool = NULL;
|
||||||
|
}
|
||||||
|
mpp_free(impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = rk_ok;
|
ret = rk_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -469,34 +487,6 @@ rk_s32 kmpp_objdef_register(KmppObjDef *def, rk_s32 size, const char *name)
|
|||||||
return rk_ok;
|
return rk_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
rk_s32 kmpp_objdef_unregister(KmppObjDef def)
|
|
||||||
{
|
|
||||||
KmppObjDefImpl *impl = (KmppObjDefImpl *)def;
|
|
||||||
rk_s32 ret = rk_nok;
|
|
||||||
|
|
||||||
if (impl) {
|
|
||||||
if (impl->cfg) {
|
|
||||||
mpp_cfg_put_all(impl->cfg);
|
|
||||||
impl->cfg = NULL;
|
|
||||||
/* When init with MppCfgObj the trie is associated to the MppCfgObj */
|
|
||||||
impl->trie = NULL;
|
|
||||||
}
|
|
||||||
if (impl->trie) {
|
|
||||||
ret = mpp_trie_deinit(impl->trie);
|
|
||||||
impl->trie = NULL;
|
|
||||||
}
|
|
||||||
if (impl->pool) {
|
|
||||||
mpp_mem_pool_deinit(impl->pool);
|
|
||||||
impl->pool = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mpp_free(impl);
|
|
||||||
ret = rk_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
rk_s32 kmpp_objdef_add_cfg_root(KmppObjDef def, MppCfgObj root)
|
rk_s32 kmpp_objdef_add_cfg_root(KmppObjDef def, MppCfgObj root)
|
||||||
{
|
{
|
||||||
KmppObjDefImpl *impl = (KmppObjDefImpl *)def;
|
KmppObjDefImpl *impl = (KmppObjDefImpl *)def;
|
||||||
@@ -639,7 +629,7 @@ rk_s32 kmpp_objdef_get(KmppObjDef *def, const char *name)
|
|||||||
|
|
||||||
info = mpp_trie_get_info(p->trie, name);
|
info = mpp_trie_get_info(p->trie, name);
|
||||||
if (!info) {
|
if (!info) {
|
||||||
mpp_loge_f("failed to get objdef %s\n", name);
|
obj_dbg_flow("failed to get kernel objdef %s\n", name);
|
||||||
return rk_nok;
|
return rk_nok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -647,6 +637,7 @@ rk_s32 kmpp_objdef_get(KmppObjDef *def, const char *name)
|
|||||||
KmppObjDefImpl *impl = &p->defs[info->index];
|
KmppObjDefImpl *impl = &p->defs[info->index];
|
||||||
|
|
||||||
impl->ref_cnt++;
|
impl->ref_cnt++;
|
||||||
|
impl->is_kobj = 1;
|
||||||
*def = impl;
|
*def = impl;
|
||||||
|
|
||||||
return rk_ok;
|
return rk_ok;
|
||||||
|
Reference in New Issue
Block a user