mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00

1. Add buf_grp, buf_grp_cfg, buffer, buf_cfg objdef. 2. The buf_grp_cfg is binded to buf_grp and the buf_cfg is binded to buffer. The binding cfg obj is stored in private data. Change-Id: I9243c03f7b9519536fdc2f24b62761dc04baac85 Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com> Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
129 lines
3.5 KiB
C
129 lines
3.5 KiB
C
/* SPDX-License-Identifier: Apache-2.0 OR MIT */
|
|
/*
|
|
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
|
|
*/
|
|
|
|
#define MODULE_TAG "kmpp_buffer_test"
|
|
|
|
#include "mpp_debug.h"
|
|
|
|
#include "kmpp_obj.h"
|
|
#include "kmpp_buffer.h"
|
|
|
|
int main()
|
|
{
|
|
KmppShmPtr sptr;
|
|
KmppBufGrp grp = NULL;
|
|
KmppBufGrpCfg grp_cfg = NULL;
|
|
KmppBuffer buf = NULL;
|
|
KmppBufCfg buf_cfg = NULL;
|
|
rk_s32 used = 0;
|
|
rk_s32 unused = 0;
|
|
rk_u32 size = 1920 * 1080 * 3 / 2;
|
|
rk_s32 ret = rk_ok;
|
|
|
|
mpp_logi(MODULE_TAG " start\n");
|
|
|
|
/* KmppBufGrp object ready */
|
|
ret = kmpp_buf_grp_get(&grp);
|
|
mpp_logi("object %s ready\n", kmpp_obj_get_name(grp));
|
|
|
|
/* get KmppBufGrpCfg from KmppBufGrp to config */
|
|
grp_cfg = kmpp_buf_grp_to_cfg(grp);
|
|
mpp_logi("object %s ready\n", kmpp_obj_get_name(grp_cfg));
|
|
|
|
/* write parameters to KmppBufGrpCfg */
|
|
ret |= kmpp_buf_grp_cfg_set_flag(grp_cfg, 0);
|
|
ret |= kmpp_buf_grp_cfg_set_count(grp_cfg, 10);
|
|
ret |= kmpp_buf_grp_cfg_set_size(grp_cfg, size);
|
|
ret |= kmpp_buf_grp_cfg_set_fd(grp_cfg, -1);
|
|
|
|
sptr.uaddr = 0;
|
|
sptr.kptr = "rk dma heap";
|
|
ret |= kmpp_buf_grp_cfg_set_allocator(grp_cfg, &sptr);
|
|
|
|
sptr.uaddr = 0;
|
|
sptr.kptr = "test";
|
|
ret |= kmpp_buf_grp_cfg_set_name(grp_cfg, &sptr);
|
|
if (ret)
|
|
mpp_loge("set buf grp cfg failed\n");
|
|
|
|
/* enable KmppBufGrpCfg by ioctl */
|
|
ret = kmpp_buf_grp_setup(grp);
|
|
if (ret)
|
|
mpp_loge("setup buf grp cfg failed\n");
|
|
|
|
/* get KmppBuffer for buffer allocation */
|
|
ret = kmpp_buffer_get(&buf);
|
|
mpp_logi("object %s ready\n", kmpp_obj_get_name(buf));
|
|
|
|
/* get KmppBufCfg to setup */
|
|
buf_cfg = kmpp_buffer_to_cfg(buf);
|
|
mpp_logi("object %s ready\n", kmpp_obj_get_name(buf_cfg));
|
|
|
|
/* setup buffer config parameters */
|
|
ret = kmpp_buf_cfg_set_group(buf_cfg, kmpp_obj_to_shm(grp));
|
|
if (ret)
|
|
mpp_loge("set kmpp_buf_cfg_set_group failed\n");
|
|
|
|
/* set buffer size */
|
|
kmpp_buf_cfg_set_size(buf_cfg, size);
|
|
|
|
/* enable KmppBufCfg by ioctl */
|
|
kmpp_buffer_setup(buf);
|
|
if (ret)
|
|
mpp_loge("setup buf grp cfg failed\n");
|
|
|
|
/* get buffer group from buf_cfg */
|
|
ret = kmpp_buf_cfg_get_group(buf_cfg, &sptr);
|
|
if (ret)
|
|
mpp_loge("get buf cfg grp failed");
|
|
|
|
/* get buffer share pointer and access */
|
|
ret = kmpp_buf_cfg_get_sptr(buf_cfg, &sptr);
|
|
if (ret || !sptr.uptr)
|
|
mpp_loge("get buf cfg sptr failed");
|
|
|
|
ret = kmpp_buf_grp_cfg_get_used(grp_cfg, &used);
|
|
ret |= kmpp_buf_grp_cfg_get_unused(grp_cfg, &unused);
|
|
if (ret)
|
|
mpp_loge("get buf grp cfg used failed");
|
|
|
|
mpp_logi("buf grp cfg used %d unused %d after buffer_setup\n", used, unused);
|
|
|
|
mpp_assert(used == 1);
|
|
|
|
if (sptr.uptr) {
|
|
rk_u32 *val = sptr.uptr;
|
|
|
|
memset(sptr.uptr, 0xff, size);
|
|
|
|
*val = 0x12345678;
|
|
if (*val != 0x12345678)
|
|
mpp_loge("buf cfg sptr access failed");
|
|
else
|
|
mpp_logi("buf sptr [u:k] %p:%llx access success", sptr.uptr, sptr.kaddr);
|
|
}
|
|
|
|
if (buf) {
|
|
kmpp_buffer_put(buf);
|
|
buf = NULL;
|
|
}
|
|
|
|
ret = kmpp_buf_grp_cfg_get_used(grp_cfg, &used);
|
|
ret |= kmpp_buf_grp_cfg_get_unused(grp_cfg, &unused);
|
|
if (ret)
|
|
mpp_loge("get buf grp cfg used failed");
|
|
|
|
mpp_logi("buf grp cfg used %d unused %d after buffer_put\n", used, unused);
|
|
|
|
if (grp) {
|
|
kmpp_buf_grp_put(grp);
|
|
grp = NULL;
|
|
}
|
|
|
|
mpp_logi(MODULE_TAG " %s\n", ret ? "failed" : "success");
|
|
|
|
return ret;
|
|
}
|