1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3 * Copyright (c) 2025 Rockchip Electronics Co., Ltd.
4 */
5
6 #define MODULE_TAG "kmpp_buffer_test"
7
8 #include "mpp_debug.h"
9
10 #include "kmpp_obj.h"
11 #include "kmpp_buffer.h"
12
main()13 int main()
14 {
15 KmppShmPtr sptr;
16 KmppBufGrp grp = NULL;
17 KmppBufGrpCfg grp_cfg = NULL;
18 KmppBuffer buf = NULL;
19 KmppBufCfg buf_cfg = NULL;
20 rk_s32 used = 0;
21 rk_s32 unused = 0;
22 rk_u32 size = 1920 * 1080 * 3 / 2;
23 rk_s32 ret = rk_ok;
24
25 mpp_logi(MODULE_TAG " start\n");
26
27 /* KmppBufGrp object ready */
28 ret = kmpp_buf_grp_get(&grp);
29 mpp_logi("object %s ready\n", kmpp_obj_get_name(grp));
30
31 /* get KmppBufGrpCfg from KmppBufGrp to config */
32 grp_cfg = kmpp_buf_grp_to_cfg(grp);
33 mpp_logi("object %s ready\n", kmpp_obj_get_name(grp_cfg));
34
35 /* write parameters to KmppBufGrpCfg */
36 ret |= kmpp_buf_grp_cfg_set_flag(grp_cfg, 0);
37 ret |= kmpp_buf_grp_cfg_set_count(grp_cfg, 10);
38 ret |= kmpp_buf_grp_cfg_set_size(grp_cfg, size);
39 ret |= kmpp_buf_grp_cfg_set_fd(grp_cfg, -1);
40
41 sptr.uptr = "rk dma heap";
42 sptr.kaddr = 0;
43 ret |= kmpp_buf_grp_cfg_set_allocator(grp_cfg, &sptr);
44
45 sptr.uptr = "test";
46 sptr.kaddr = 0;
47 ret |= kmpp_buf_grp_cfg_set_name(grp_cfg, &sptr);
48 if (ret)
49 mpp_loge("set buf grp cfg failed\n");
50
51 /* enable KmppBufGrpCfg by ioctl */
52 ret = kmpp_buf_grp_setup(grp);
53 if (ret)
54 mpp_loge("setup buf grp cfg failed\n");
55
56 /* get KmppBuffer for buffer allocation */
57 ret = kmpp_buffer_get(&buf);
58 mpp_logi("object %s ready\n", kmpp_obj_get_name(buf));
59
60 /* get KmppBufCfg to setup */
61 buf_cfg = kmpp_buffer_to_cfg(buf);
62 mpp_logi("object %s ready\n", kmpp_obj_get_name(buf_cfg));
63
64 /* setup buffer config parameters */
65 ret = kmpp_buf_cfg_set_group(buf_cfg, kmpp_obj_to_shm(grp));
66 if (ret)
67 mpp_loge("set kmpp_buf_cfg_set_group failed\n");
68
69 /* set buffer size */
70 kmpp_buf_cfg_set_size(buf_cfg, size);
71
72 /* enable KmppBufCfg by ioctl */
73 kmpp_buffer_setup(buf);
74 if (ret)
75 mpp_loge("setup buf grp cfg failed\n");
76
77 /* get buffer group from buf_cfg */
78 ret = kmpp_buf_cfg_get_group(buf_cfg, &sptr);
79 if (ret)
80 mpp_loge("get buf cfg grp failed");
81
82 /* get buffer share pointer and access */
83 ret = kmpp_buf_cfg_get_sptr(buf_cfg, &sptr);
84 if (ret || !sptr.uptr)
85 mpp_loge("get buf cfg sptr failed");
86
87 ret = kmpp_buf_grp_cfg_get_used(grp_cfg, &used);
88 ret |= kmpp_buf_grp_cfg_get_unused(grp_cfg, &unused);
89 if (ret)
90 mpp_loge("get buf grp cfg used failed");
91
92 mpp_logi("buf grp cfg used %d unused %d after buffer_setup\n", used, unused);
93
94 mpp_assert(used == 1);
95
96 if (sptr.uptr) {
97 rk_u32 *val = sptr.uptr;
98
99 memset(sptr.uptr, 0xff, size);
100
101 *val = 0x12345678;
102 if (*val != 0x12345678)
103 mpp_loge("buf cfg sptr access failed");
104 else
105 mpp_logi("buf sptr [u:k] %p:%llx access success", sptr.uptr, sptr.kaddr);
106 }
107
108 if (buf) {
109 kmpp_buffer_put(buf);
110 buf = NULL;
111 }
112
113 ret = kmpp_buf_grp_cfg_get_used(grp_cfg, &used);
114 ret |= kmpp_buf_grp_cfg_get_unused(grp_cfg, &unused);
115 if (ret)
116 mpp_loge("get buf grp cfg used failed");
117
118 mpp_logi("buf grp cfg used %d unused %d after buffer_put\n", used, unused);
119
120 if (grp) {
121 kmpp_buf_grp_put(grp);
122 grp = NULL;
123 }
124
125 mpp_logi(MODULE_TAG " %s\n", ret ? "failed" : "success");
126
127 return ret;
128 }
129