1 /*
2 * Copyright 2015 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_enc_ref_test"
18
19 #include <string.h>
20
21 #include "mpp_log.h"
22
23 #include "rk_venc_ref.h"
24
main()25 int main()
26 {
27 MPP_RET ret = MPP_OK;
28 RK_S32 lt_cnt = 0;
29 RK_S32 st_cnt = 0;
30 MppEncRefCfg ref = NULL;
31 MppEncRefLtFrmCfg lt_ref[4];
32 MppEncRefStFrmCfg st_ref[16];
33
34 memset(<_ref, 0, sizeof(lt_ref));
35 memset(&st_ref, 0, sizeof(st_ref));
36
37 mpp_log("mpp_enc_ref_test start\n");
38
39 ret = mpp_enc_ref_cfg_init(&ref);
40
41 mpp_log("mpp_enc_ref_test tsvc4 ref info generation start\n");
42
43 lt_cnt = 1;
44 st_cnt = 9;
45
46 ret = mpp_enc_ref_cfg_set_cfg_cnt(ref, lt_cnt, st_cnt);
47
48 /* set 8 frame lt-ref gap */
49 lt_ref[0].lt_idx = 0;
50 lt_ref[0].temporal_id = 0;
51 lt_ref[0].ref_mode = REF_TO_PREV_LT_REF;
52 lt_ref[0].lt_gap = 8;
53 lt_ref[0].lt_delay = 0;
54
55 ret = mpp_enc_ref_cfg_add_lt_cfg(ref, 1, lt_ref);
56
57 /* set tsvc4 st-ref struct */
58 /* st 0 layer 0 - ref */
59 st_ref[0].is_non_ref = 0;
60 st_ref[0].temporal_id = 0;
61 st_ref[0].ref_mode = REF_TO_TEMPORAL_LAYER;
62 st_ref[0].ref_arg = 0;
63 st_ref[0].repeat = 0;
64 /* st 1 layer 3 - non-ref */
65 st_ref[1].is_non_ref = 1;
66 st_ref[1].temporal_id = 3;
67 st_ref[1].ref_mode = REF_TO_PREV_REF_FRM;
68 st_ref[1].ref_arg = 0;
69 st_ref[1].repeat = 0;
70 /* st 2 layer 2 - ref */
71 st_ref[2].is_non_ref = 0;
72 st_ref[2].temporal_id = 2;
73 st_ref[2].ref_mode = REF_TO_PREV_REF_FRM;
74 st_ref[2].ref_arg = 0;
75 st_ref[2].repeat = 0;
76 /* st 3 layer 3 - non-ref */
77 st_ref[3].is_non_ref = 1;
78 st_ref[3].temporal_id = 3;
79 st_ref[3].ref_mode = REF_TO_PREV_REF_FRM;
80 st_ref[3].ref_arg = 0;
81 st_ref[3].repeat = 0;
82 /* st 4 layer 1 - ref */
83 st_ref[4].is_non_ref = 0;
84 st_ref[4].temporal_id = 1;
85 st_ref[4].ref_mode = REF_TO_PREV_REF_FRM;
86 st_ref[4].ref_arg = 0;
87 st_ref[4].repeat = 0;
88 /* st 5 layer 3 - non-ref */
89 st_ref[5].is_non_ref = 1;
90 st_ref[5].temporal_id = 3;
91 st_ref[5].ref_mode = REF_TO_PREV_REF_FRM;
92 st_ref[5].ref_arg = 0;
93 st_ref[5].repeat = 0;
94 /* st 6 layer 2 - ref */
95 st_ref[6].is_non_ref = 0;
96 st_ref[6].temporal_id = 2;
97 st_ref[6].ref_mode = REF_TO_PREV_REF_FRM;
98 st_ref[6].ref_arg = 0;
99 st_ref[6].repeat = 0;
100 /* st 7 layer 3 - non-ref */
101 st_ref[7].is_non_ref = 1;
102 st_ref[7].temporal_id = 3;
103 st_ref[7].ref_mode = REF_TO_PREV_REF_FRM;
104 st_ref[7].ref_arg = 0;
105 st_ref[7].repeat = 0;
106 /* st 8 layer 0 - ref */
107 st_ref[8].is_non_ref = 0;
108 st_ref[8].temporal_id = 0;
109 st_ref[8].ref_mode = REF_TO_TEMPORAL_LAYER;
110 st_ref[8].ref_arg = 0;
111 st_ref[8].repeat = 0;
112
113 ret = mpp_enc_ref_cfg_add_st_cfg(ref, 9, st_ref);
114
115 /* check and get dpb size */
116 mpp_log("mpp_enc_ref_test tsvc4 ref info verification start\n");
117 ret = mpp_enc_ref_cfg_check(ref);
118 mpp_log("mpp_enc_ref_test tsvc4 ref info verification ret %d\n", ret);
119
120 ret = mpp_enc_ref_cfg_show(ref);
121
122 /* reset for next config */
123 ret = mpp_enc_ref_cfg_reset(ref);
124
125 #if 0
126 mpp_log("mpp_enc_ref_test smartp ref info generation start\n");
127
128 /* typical smartp config */
129 lt_cnt = 1;
130 st_cnt = 3;
131
132 ret = mpp_enc_ref_cfg_set_cfg_cnt(ref, lt_cnt, st_cnt);
133
134 memset(<_ref, 0, sizeof(lt_ref));
135 memset(&st_ref, 0, sizeof(st_ref));
136
137 /* set 300 frame lt-ref gap */
138 lt_ref[0].lt_idx = 0;
139 lt_ref[0].temporal_id = 0;
140 lt_ref[0].ref_mode = REF_TO_PREV_INTRA;
141 lt_ref[0].lt_gap = 300;
142 lt_ref[0].lt_delay = 0;
143
144 ret = mpp_enc_ref_cfg_add_lt_cfg(ref, 1, lt_ref);
145
146 st_ref[0].is_non_ref = 0;
147 st_ref[0].temporal_id = 0;
148 st_ref[0].ref_mode = REF_TO_PREV_LT_REF;
149 st_ref[0].ref_arg = 0;
150 st_ref[0].repeat = 0;
151
152 st_ref[1].is_non_ref = 0;
153 st_ref[1].temporal_id = 0;
154 st_ref[1].ref_mode = REF_TO_PREV_REF_FRM;
155 st_ref[1].ref_arg = 0;
156 st_ref[1].repeat = 299;
157
158 st_ref[2].is_non_ref = 0;
159 st_ref[2].temporal_id = 0;
160 st_ref[2].ref_mode = REF_TO_PREV_LT_REF;
161 st_ref[2].ref_arg = 0;
162 st_ref[2].repeat = 0;
163
164 ret = mpp_enc_ref_cfg_add_st_cfg(ref, 3, st_ref);
165
166 mpp_log("mpp_enc_ref_test smartp ref info verification start\n");
167 ret = mpp_enc_ref_cfg_check(ref);
168 mpp_log("mpp_enc_ref_test smartp ref info verification ret %d\n", ret);
169
170 ret = mpp_enc_ref_cfg_deinit(&ref);
171 #endif
172
173 mpp_log("mpp_enc_ref_test %s\n", ret ? "failed" : "success");
174
175 return ret;
176 }
177