Files
mpp/kmpp/base/test/kmpp_obj_test.c
Herman Chen 84c7d337bf refactor:[kmpp]: Move kmpp to seperate directory
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I85eb166a3ebb1ae64a44c7127808fc469c6415a8
2025-04-01 14:51:32 +08:00

287 lines
6.3 KiB
C

/* SPDX-License-Identifier: Apache-2.0 OR MIT */
/*
* Copyright (c) 2024 Rockchip Electronics Co., Ltd.
*/
#define MODULE_TAG "kmpp_obj_test"
#include "mpp_log.h"
#include "mpp_common.h"
#include "kmpp_obj.h"
#define TEST_DETAIL 1
#define TEST_DEF_DUMP 2
#define TEST_OBJ_UDUMP 4
#define TEST_OBJ_KDUMP 8
#define test_detail(fmt, ...) \
do { \
if (flag & TEST_DETAIL) \
mpp_log(fmt, ##__VA_ARGS__); \
} while (0)
typedef struct KmppObjTest_t {
const char *name;
rk_u32 flag;
rk_s32 (*func)(const char *name, rk_u32 flag);
} KmppObjTest;
static rk_s32 kmpp_obj_std_test(const char *name, rk_u32 flag)
{
KmppObjDef def = NULL;
KmppObj obj = NULL;
MPP_RET ret = MPP_NOK;
ret = kmpp_objdef_get(&def, name);
if (ret) {
mpp_log("kmpp_objdef_get %s failed\n", name);
goto done;
}
if (flag & TEST_DEF_DUMP)
kmpp_objdef_dump(def);
ret = kmpp_obj_get(&obj, def);
if (ret) {
mpp_log("kmpp_obj_get %s failed ret %d\n", name, ret);
goto done;
}
if (flag & TEST_OBJ_UDUMP)
kmpp_obj_udump(obj);
if (flag & TEST_OBJ_KDUMP)
kmpp_obj_kdump(obj);
ret = kmpp_obj_put(obj);
if (ret) {
mpp_log("kmpp_obj_put %s failed\n", name);
goto done;
}
obj = NULL;
ret = kmpp_objdef_put(def);
if (ret) {
mpp_log("kmpp_objdef_put %s failed\n", name);
goto done;
}
def = NULL;
done:
if (obj)
kmpp_obj_put(obj);
if (def)
kmpp_objdef_put(def);
return ret;
}
static rk_s32 kmpp_obj_by_name_test(const char *name, rk_u32 flag)
{
KmppObj obj = NULL;
MPP_RET ret = MPP_NOK;
ret = kmpp_obj_get_by_name(&obj, name);
if (ret) {
mpp_log("kmpp_obj_get_by_name %s failed ret %d\n", name, ret);
goto done;
}
if (flag & TEST_OBJ_UDUMP)
kmpp_obj_udump(obj);
if (flag & TEST_OBJ_KDUMP)
kmpp_obj_kdump(obj);
ret = kmpp_obj_put(obj);
if (ret) {
mpp_log("kmpp_obj_put %s failed\n", name);
goto done;
}
obj = NULL;
done:
if (obj)
kmpp_obj_put(obj);
return ret;
}
static rk_s32 kmpp_buffer_test(const char *name, rk_u32 flag)
{
KmppShmPtr sptr;
KmppObj grp = NULL;
KmppObj grp_cfg = NULL;
KmppObj buf = NULL;
KmppObj buf_cfg = NULL;
MPP_RET ret = MPP_NOK;
rk_u32 val = 0;
ret = kmpp_obj_get_by_name(&grp, "KmppBufGrp");
if (ret) {
mpp_log("buf grp get obj failed ret %d\n", ret);
goto done;
}
/* KmppBufGrp object ready */
test_detail("object %s ready\n", kmpp_obj_get_name(grp));
/* get KmppBufGrpCfg from KmppBufGrp to config */
ret = kmpp_obj_get_shm_obj(grp, "cfg", &grp_cfg);
if (ret) {
mpp_log("buf grp get cfg failed ret %d\n", ret);
goto done;
}
/* KmppBufGrpCfg object ready */
test_detail("object %s ready\n", kmpp_obj_get_name(grp_cfg));
if (flag & TEST_OBJ_UDUMP)
kmpp_obj_udump(buf_cfg);
/* write parameters to KmppBufGrpCfg */
ret = kmpp_obj_set_u32(grp_cfg, "flag", 0);
if (ret) {
mpp_log("grp cfg set flag failed ret %d\n", ret);
goto done;
}
ret = kmpp_obj_set_u32(grp_cfg, "count", 10);
if (ret) {
mpp_log("grp cfg set count failed ret %d\n", ret);
goto done;
}
ret = kmpp_obj_set_u32(grp_cfg, "size", 4096);
if (ret) {
mpp_log("grp cfg set size failed ret %d\n", ret);
goto done;
}
ret = kmpp_obj_set_s32(grp_cfg, "fd", -1);
if (ret) {
mpp_log("grp cfg set fd failed ret %d\n", ret);
goto done;
}
/* set buffer group name to test */
name = "allocator";
sptr.kaddr = 0;
sptr.uptr = "rk dma heap";
ret = kmpp_obj_set_shm(grp_cfg, name, &sptr);
if (ret) {
mpp_log("grp cfg set %s failed ret %d\n", name, ret);
goto done;
}
/* set buffer group name to test */
name = "name";
sptr.kaddr = 0;
sptr.uptr = "test";
ret = kmpp_obj_set_shm(grp_cfg, name, &sptr);
if (ret) {
mpp_log("grp cfg set %s failed ret %d\n", name, ret);
goto done;
}
test_detail("object %s write parameters ready\n", kmpp_obj_get_name(grp_cfg));
/* enable KmppBufGrpCfg by ioctl */
ret = kmpp_obj_ioctl(grp, 0, grp, NULL);
test_detail("object %s ioctl ret %d\n", kmpp_obj_get_name(grp), ret);
/* get KmppBuffer for buffer allocation */
ret = kmpp_obj_get_by_name(&buf, "KmppBuffer");
if (ret) {
mpp_log("kmpp_obj_get_by_name failed ret %d\n", ret);
goto done;
}
test_detail("object %s ready\n", kmpp_obj_get_name(buf));
/* get KmppBufGrpCfg to setup */
sptr.uaddr = 0;
sptr.kaddr = 0;
ret = kmpp_obj_get_shm_obj(buf, "cfg", &buf_cfg);
if (ret) {
mpp_log("buf get cfg failed ret %d\n", ret);
goto done;
}
if (flag & TEST_OBJ_UDUMP)
kmpp_obj_udump(buf_cfg);
test_detail("object %s ready\n", kmpp_obj_get_name(buf_cfg));
/* setup buffer config parameters */
/* set buffer group */
ret = kmpp_obj_set_shm_obj(buf_cfg, "group", grp);
if (ret) {
mpp_log("buf cfg set group failed ret %d\n", ret);
goto done;
}
/* enable KmppBufferCfg by ioctl */
ret = kmpp_obj_ioctl(buf, 0, buf, NULL);
test_detail("object %s ioctl ret %d\n", kmpp_obj_get_name(buf), ret);
kmpp_obj_get_u32(buf_cfg, "size", &val);
test_detail("object %s size %d\n", kmpp_obj_get_name(buf_cfg), val);
done:
if (grp)
kmpp_obj_put(grp);
if (buf)
kmpp_obj_put(buf);
return ret;
}
static KmppObjTest obj_tests[] = {
{
"KmppFrame",
0,
kmpp_obj_std_test,
},
{
"KmppVencInitCfg",
0,
kmpp_obj_by_name_test,
},
{
"KmppBuffer",
0,
kmpp_buffer_test,
},
};
int main()
{
MPP_RET ret = MPP_NOK;
rk_u32 i;
mpp_log("start\n");
for (i = 0; i < MPP_ARRAY_ELEMS(obj_tests); i++) {
const char *name = obj_tests[i].name;
rk_u32 flag = obj_tests[i].flag;
ret = obj_tests[i].func(name, flag);
if (ret) {
mpp_log("test %-16s failed ret %d\n", name, ret);
goto done;
}
mpp_log("test %-16s success\n", name);
}
done:
mpp_log("done %s \n", ret ? "failed" : "success");
return ret;
}