1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka */
5*437bfbebSnyanmisaka
6*437bfbebSnyanmisaka #define MODULE_TAG "mpp_meta_test"
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisaka #include <pthread.h>
9*437bfbebSnyanmisaka
10*437bfbebSnyanmisaka #include "mpp_time.h"
11*437bfbebSnyanmisaka #include "mpp_debug.h"
12*437bfbebSnyanmisaka #include "mpp_meta_impl.h"
13*437bfbebSnyanmisaka
14*437bfbebSnyanmisaka #define TEST_MAX 200
15*437bfbebSnyanmisaka #define LOOP_MAX 100000
16*437bfbebSnyanmisaka
meta_set(MppMeta meta)17*437bfbebSnyanmisaka static MPP_RET meta_set(MppMeta meta)
18*437bfbebSnyanmisaka {
19*437bfbebSnyanmisaka MPP_RET ret = MPP_OK;
20*437bfbebSnyanmisaka
21*437bfbebSnyanmisaka ret |= mpp_meta_set_frame(meta, KEY_INPUT_FRAME, NULL);
22*437bfbebSnyanmisaka ret |= mpp_meta_set_packet(meta, KEY_INPUT_PACKET, NULL);
23*437bfbebSnyanmisaka ret |= mpp_meta_set_frame(meta, KEY_OUTPUT_FRAME, NULL);
24*437bfbebSnyanmisaka ret |= mpp_meta_set_packet(meta, KEY_OUTPUT_PACKET, NULL);
25*437bfbebSnyanmisaka
26*437bfbebSnyanmisaka ret |= mpp_meta_set_buffer(meta, KEY_MOTION_INFO, NULL);
27*437bfbebSnyanmisaka ret |= mpp_meta_set_buffer(meta, KEY_HDR_INFO, NULL);
28*437bfbebSnyanmisaka
29*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_INPUT_BLOCK, 0);
30*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_OUTPUT_BLOCK, 0);
31*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_INPUT_IDR_REQ, 0);
32*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_OUTPUT_INTRA, 0);
33*437bfbebSnyanmisaka
34*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_TEMPORAL_ID, 0);
35*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_LONG_REF_IDX, 0);
36*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_ENC_AVERAGE_QP, 0);
37*437bfbebSnyanmisaka
38*437bfbebSnyanmisaka ret |= mpp_meta_set_ptr(meta, KEY_ROI_DATA, NULL);
39*437bfbebSnyanmisaka ret |= mpp_meta_set_ptr(meta, KEY_OSD_DATA, NULL);
40*437bfbebSnyanmisaka ret |= mpp_meta_set_ptr(meta, KEY_OSD_DATA2, NULL);
41*437bfbebSnyanmisaka ret |= mpp_meta_set_ptr(meta, KEY_USER_DATA, NULL);
42*437bfbebSnyanmisaka ret |= mpp_meta_set_ptr(meta, KEY_USER_DATAS, NULL);
43*437bfbebSnyanmisaka
44*437bfbebSnyanmisaka ret |= mpp_meta_set_buffer(meta, KEY_QPMAP0, NULL);
45*437bfbebSnyanmisaka ret |= mpp_meta_set_ptr(meta, KEY_NPU_UOBJ_FLAG, NULL);
46*437bfbebSnyanmisaka
47*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_ENC_MARK_LTR, 0);
48*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_ENC_USE_LTR, 0);
49*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_ENC_FRAME_QP, 0);
50*437bfbebSnyanmisaka ret |= mpp_meta_set_s32(meta, KEY_ENC_BASE_LAYER_PID, 0);
51*437bfbebSnyanmisaka
52*437bfbebSnyanmisaka return ret;
53*437bfbebSnyanmisaka }
54*437bfbebSnyanmisaka
meta_get(MppMeta meta)55*437bfbebSnyanmisaka static MPP_RET meta_get(MppMeta meta)
56*437bfbebSnyanmisaka {
57*437bfbebSnyanmisaka MppFrame frame;
58*437bfbebSnyanmisaka MppPacket packet;
59*437bfbebSnyanmisaka MppBuffer buffer;
60*437bfbebSnyanmisaka void *ptr;
61*437bfbebSnyanmisaka RK_S32 val;
62*437bfbebSnyanmisaka MPP_RET ret = MPP_OK;
63*437bfbebSnyanmisaka
64*437bfbebSnyanmisaka ret |= mpp_meta_get_frame(meta, KEY_INPUT_FRAME, &frame);
65*437bfbebSnyanmisaka ret |= mpp_meta_get_packet(meta, KEY_INPUT_PACKET, &packet);
66*437bfbebSnyanmisaka ret |= mpp_meta_get_frame(meta, KEY_OUTPUT_FRAME, &frame);
67*437bfbebSnyanmisaka ret |= mpp_meta_get_packet(meta, KEY_OUTPUT_PACKET, &packet);
68*437bfbebSnyanmisaka
69*437bfbebSnyanmisaka ret |= mpp_meta_get_buffer(meta, KEY_MOTION_INFO, &buffer);
70*437bfbebSnyanmisaka ret |= mpp_meta_get_buffer(meta, KEY_HDR_INFO, &buffer);
71*437bfbebSnyanmisaka
72*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_INPUT_BLOCK, &val);
73*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_OUTPUT_BLOCK, &val);
74*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_INPUT_IDR_REQ, &val);
75*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_OUTPUT_INTRA, &val);
76*437bfbebSnyanmisaka
77*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_TEMPORAL_ID, &val);
78*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_LONG_REF_IDX, &val);
79*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_ENC_AVERAGE_QP, &val);
80*437bfbebSnyanmisaka
81*437bfbebSnyanmisaka ret |= mpp_meta_get_ptr(meta, KEY_ROI_DATA, &ptr);
82*437bfbebSnyanmisaka ret |= mpp_meta_get_ptr(meta, KEY_OSD_DATA, &ptr);
83*437bfbebSnyanmisaka ret |= mpp_meta_get_ptr(meta, KEY_OSD_DATA2, &ptr);
84*437bfbebSnyanmisaka ret |= mpp_meta_get_ptr(meta, KEY_USER_DATA, &ptr);
85*437bfbebSnyanmisaka ret |= mpp_meta_get_ptr(meta, KEY_USER_DATAS, &ptr);
86*437bfbebSnyanmisaka
87*437bfbebSnyanmisaka ret |= mpp_meta_get_buffer(meta, KEY_QPMAP0, &buffer);
88*437bfbebSnyanmisaka ret |= mpp_meta_get_ptr(meta, KEY_NPU_UOBJ_FLAG, &ptr);
89*437bfbebSnyanmisaka
90*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_ENC_MARK_LTR, &val);
91*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_ENC_USE_LTR, &val);
92*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_ENC_FRAME_QP, &val);
93*437bfbebSnyanmisaka ret |= mpp_meta_get_s32(meta, KEY_ENC_BASE_LAYER_PID, &val);
94*437bfbebSnyanmisaka
95*437bfbebSnyanmisaka return ret;
96*437bfbebSnyanmisaka }
97*437bfbebSnyanmisaka
meta_test(void * param)98*437bfbebSnyanmisaka void *meta_test(void *param)
99*437bfbebSnyanmisaka {
100*437bfbebSnyanmisaka RK_S32 loop_max = LOOP_MAX;
101*437bfbebSnyanmisaka RK_S64 time_start;
102*437bfbebSnyanmisaka RK_S64 time_end;
103*437bfbebSnyanmisaka MPP_RET ret = MPP_OK;
104*437bfbebSnyanmisaka RK_S32 i;
105*437bfbebSnyanmisaka
106*437bfbebSnyanmisaka time_start = mpp_time();
107*437bfbebSnyanmisaka
108*437bfbebSnyanmisaka for (i = 0; i < loop_max; i++) {
109*437bfbebSnyanmisaka MppMeta meta = NULL;
110*437bfbebSnyanmisaka
111*437bfbebSnyanmisaka ret |= mpp_meta_get(&meta);
112*437bfbebSnyanmisaka mpp_assert(meta);
113*437bfbebSnyanmisaka
114*437bfbebSnyanmisaka /* set */
115*437bfbebSnyanmisaka ret |= meta_set(meta);
116*437bfbebSnyanmisaka /* get */
117*437bfbebSnyanmisaka ret |= meta_get(meta);
118*437bfbebSnyanmisaka
119*437bfbebSnyanmisaka ret |= mpp_meta_put(meta);
120*437bfbebSnyanmisaka }
121*437bfbebSnyanmisaka
122*437bfbebSnyanmisaka time_end = mpp_time();
123*437bfbebSnyanmisaka
124*437bfbebSnyanmisaka if (ret)
125*437bfbebSnyanmisaka mpp_log("meta setting and getting, ret %d\n", ret);
126*437bfbebSnyanmisaka
127*437bfbebSnyanmisaka *((RK_S64 *)param) = (time_end - time_start) / loop_max;
128*437bfbebSnyanmisaka
129*437bfbebSnyanmisaka return NULL;
130*437bfbebSnyanmisaka }
131*437bfbebSnyanmisaka
main()132*437bfbebSnyanmisaka int main()
133*437bfbebSnyanmisaka {
134*437bfbebSnyanmisaka pthread_t thds[TEST_MAX];
135*437bfbebSnyanmisaka RK_S64 times[TEST_MAX];
136*437bfbebSnyanmisaka RK_S32 thd_cnt = TEST_MAX;
137*437bfbebSnyanmisaka RK_S64 avg_time = 0;
138*437bfbebSnyanmisaka pthread_attr_t attr;
139*437bfbebSnyanmisaka MppMeta meta = NULL;
140*437bfbebSnyanmisaka RK_S32 i;
141*437bfbebSnyanmisaka
142*437bfbebSnyanmisaka pthread_attr_init(&attr);
143*437bfbebSnyanmisaka pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
144*437bfbebSnyanmisaka
145*437bfbebSnyanmisaka mpp_log("mpp_meta_test start\n");
146*437bfbebSnyanmisaka
147*437bfbebSnyanmisaka mpp_meta_get(&meta);
148*437bfbebSnyanmisaka if (meta) {
149*437bfbebSnyanmisaka meta_set(meta);
150*437bfbebSnyanmisaka mpp_meta_dump(meta);
151*437bfbebSnyanmisaka mpp_meta_put(meta);
152*437bfbebSnyanmisaka }
153*437bfbebSnyanmisaka
154*437bfbebSnyanmisaka for (i = 0; i < thd_cnt; i++)
155*437bfbebSnyanmisaka pthread_create(&thds[i], &attr, meta_test, ×[i]);
156*437bfbebSnyanmisaka
157*437bfbebSnyanmisaka for (i = 0; i < thd_cnt; i++)
158*437bfbebSnyanmisaka pthread_join(thds[i], NULL);
159*437bfbebSnyanmisaka
160*437bfbebSnyanmisaka for (i = 0; i < thd_cnt; i++)
161*437bfbebSnyanmisaka avg_time += times[i];
162*437bfbebSnyanmisaka
163*437bfbebSnyanmisaka mpp_log("mpp_meta_test %d threads %d loop config avg %lld us",
164*437bfbebSnyanmisaka thd_cnt, LOOP_MAX, avg_time / thd_cnt);
165*437bfbebSnyanmisaka
166*437bfbebSnyanmisaka mpp_log("mpp_meta_test done\n");
167*437bfbebSnyanmisaka
168*437bfbebSnyanmisaka return 0;
169*437bfbebSnyanmisaka }
170