xref: /rockchip-linux_mpp/mpp/base/test/mpp_meta_test.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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, &times[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