xref: /OK3568_Linux_fs/external/mpp/mpp/base/test/mpp_meta_test.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright 2021 Rockchip Electronics Co. LTD
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #define MODULE_TAG "mpp_meta_test"
18 
19 #include <pthread.h>
20 
21 #include "mpp_time.h"
22 #include "mpp_debug.h"
23 #include "mpp_meta_impl.h"
24 
25 #define TEST_MAX    200
26 #define LOOP_MAX    100000
27 
meta_test(void * param)28 void *meta_test(void *param)
29 {
30     RK_S32 loop_max = LOOP_MAX;
31     RK_S64 time_start;
32     RK_S64 time_end;
33     MppMeta meta = NULL;
34     MPP_RET ret = MPP_OK;
35     MppFrame frame;
36     MppPacket packet;
37     MppBuffer buffer;
38     void *ptr;
39     RK_S32 val;
40     RK_S32 i;
41 
42     time_start = mpp_time();
43 
44     for (i = 0; i < loop_max; i++) {
45         ret |= mpp_meta_get(&meta);
46         mpp_assert(meta);
47 
48         /* set */
49         ret |= mpp_meta_set_frame(meta,  KEY_INPUT_FRAME, NULL);
50         ret |= mpp_meta_set_packet(meta, KEY_INPUT_PACKET, NULL);
51         ret |= mpp_meta_set_frame(meta,  KEY_OUTPUT_FRAME, NULL);
52         ret |= mpp_meta_set_packet(meta, KEY_OUTPUT_PACKET, NULL);
53 
54         ret |= mpp_meta_set_buffer(meta, KEY_MOTION_INFO, NULL);
55         ret |= mpp_meta_set_buffer(meta, KEY_HDR_INFO, NULL);
56 
57         ret |= mpp_meta_set_s32(meta, KEY_INPUT_BLOCK, 0);
58         ret |= mpp_meta_set_s32(meta, KEY_OUTPUT_BLOCK, 0);
59         ret |= mpp_meta_set_s32(meta, KEY_INPUT_IDR_REQ, 0);
60         ret |= mpp_meta_set_s32(meta, KEY_OUTPUT_INTRA, 0);
61 
62         ret |= mpp_meta_set_s32(meta, KEY_TEMPORAL_ID, 0);
63         ret |= mpp_meta_set_s32(meta, KEY_LONG_REF_IDX, 0);
64         ret |= mpp_meta_set_s32(meta, KEY_ENC_AVERAGE_QP, 0);
65 
66         ret |= mpp_meta_set_ptr(meta, KEY_ROI_DATA, NULL);
67         ret |= mpp_meta_set_ptr(meta, KEY_OSD_DATA, NULL);
68         ret |= mpp_meta_set_ptr(meta, KEY_OSD_DATA2, NULL);
69         ret |= mpp_meta_set_ptr(meta, KEY_USER_DATA, NULL);
70         ret |= mpp_meta_set_ptr(meta, KEY_USER_DATAS, NULL);
71 
72         ret |= mpp_meta_set_buffer(meta, KEY_QPMAP0, NULL);
73         ret |= mpp_meta_set_ptr(meta, KEY_MV_LIST, NULL);
74 
75         ret |= mpp_meta_set_s32(meta, KEY_ENC_MARK_LTR, 0);
76         ret |= mpp_meta_set_s32(meta, KEY_ENC_USE_LTR, 0);
77         ret |= mpp_meta_set_s32(meta, KEY_ENC_FRAME_QP, 0);
78         ret |= mpp_meta_set_s32(meta, KEY_ENC_BASE_LAYER_PID, 0);
79 
80         /* get */
81         ret |= mpp_meta_get_frame(meta,  KEY_INPUT_FRAME, &frame);
82         ret |= mpp_meta_get_packet(meta, KEY_INPUT_PACKET, &packet);
83         ret |= mpp_meta_get_frame(meta,  KEY_OUTPUT_FRAME, &frame);
84         ret |= mpp_meta_get_packet(meta, KEY_OUTPUT_PACKET, &packet);
85 
86         ret |= mpp_meta_get_buffer(meta, KEY_MOTION_INFO, &buffer);
87         ret |= mpp_meta_get_buffer(meta, KEY_HDR_INFO, &buffer);
88 
89         ret |= mpp_meta_get_s32(meta, KEY_INPUT_BLOCK, &val);
90         ret |= mpp_meta_get_s32(meta, KEY_OUTPUT_BLOCK, &val);
91         ret |= mpp_meta_get_s32(meta, KEY_INPUT_IDR_REQ, &val);
92         ret |= mpp_meta_get_s32(meta, KEY_OUTPUT_INTRA, &val);
93 
94         ret |= mpp_meta_get_s32(meta, KEY_TEMPORAL_ID, &val);
95         ret |= mpp_meta_get_s32(meta, KEY_LONG_REF_IDX, &val);
96         ret |= mpp_meta_get_s32(meta, KEY_ENC_AVERAGE_QP, &val);
97 
98         ret |= mpp_meta_get_ptr(meta, KEY_ROI_DATA, &ptr);
99         ret |= mpp_meta_get_ptr(meta, KEY_OSD_DATA, &ptr);
100         ret |= mpp_meta_get_ptr(meta, KEY_OSD_DATA2, &ptr);
101         ret |= mpp_meta_get_ptr(meta, KEY_USER_DATA, &ptr);
102         ret |= mpp_meta_get_ptr(meta, KEY_USER_DATAS, &ptr);
103 
104         ret |= mpp_meta_get_buffer(meta, KEY_QPMAP0, &buffer);
105         ret |= mpp_meta_get_ptr(meta, KEY_MV_LIST, &ptr);
106 
107         ret |= mpp_meta_get_s32(meta, KEY_ENC_MARK_LTR, &val);
108         ret |= mpp_meta_get_s32(meta, KEY_ENC_USE_LTR, &val);
109         ret |= mpp_meta_get_s32(meta, KEY_ENC_FRAME_QP, &val);
110         ret |= mpp_meta_get_s32(meta, KEY_ENC_BASE_LAYER_PID, &val);
111 
112         ret |= mpp_meta_put(meta);
113     }
114 
115     mpp_log("meta setting and getting, ret %d\n", ret);
116 
117     time_end = mpp_time();
118 
119     *((RK_S64 *)param) = (time_end - time_start) / loop_max;
120 
121     return NULL;
122 }
123 
main()124 int main()
125 {
126     pthread_t thds[TEST_MAX];
127     RK_S64 times[TEST_MAX];
128     RK_S32 thd_cnt = TEST_MAX;
129     RK_S64 avg_time = 0;
130     pthread_attr_t attr;
131     RK_S32 i;
132 
133     pthread_attr_init(&attr);
134     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
135 
136     mpp_log("mpp_meta_test start\n");
137 
138     for (i = 0; i < thd_cnt; i++)
139         pthread_create(&thds[i], &attr, meta_test, &times[i]);
140 
141     for (i = 0; i < thd_cnt; i++)
142         pthread_join(thds[i], NULL);
143 
144     for (i = 0; i < thd_cnt; i++)
145         avg_time += times[i];
146 
147     mpp_log("mpp_meta_test %d threads %d loop config avg %lld us",
148             thd_cnt, LOOP_MAX, avg_time / thd_cnt);
149 
150     mpp_log("mpp_meta_test done\n");
151 
152     return 0;
153 }
154