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