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