xref: /rockchip-linux_mpp/mpp/base/test/mpp_enc_ref_test.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #define MODULE_TAG "mpp_enc_ref_test"
18*437bfbebSnyanmisaka 
19*437bfbebSnyanmisaka #include <string.h>
20*437bfbebSnyanmisaka 
21*437bfbebSnyanmisaka #include "mpp_log.h"
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka #include "rk_venc_ref.h"
24*437bfbebSnyanmisaka 
main()25*437bfbebSnyanmisaka int main()
26*437bfbebSnyanmisaka {
27*437bfbebSnyanmisaka     MPP_RET ret = MPP_OK;
28*437bfbebSnyanmisaka     RK_S32 lt_cnt = 0;
29*437bfbebSnyanmisaka     RK_S32 st_cnt = 0;
30*437bfbebSnyanmisaka     MppEncRefCfg ref = NULL;
31*437bfbebSnyanmisaka     MppEncRefLtFrmCfg lt_ref[4];
32*437bfbebSnyanmisaka     MppEncRefStFrmCfg st_ref[16];
33*437bfbebSnyanmisaka 
34*437bfbebSnyanmisaka     memset(&lt_ref, 0, sizeof(lt_ref));
35*437bfbebSnyanmisaka     memset(&st_ref, 0, sizeof(st_ref));
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka     mpp_log("mpp_enc_ref_test start\n");
38*437bfbebSnyanmisaka 
39*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_init(&ref);
40*437bfbebSnyanmisaka 
41*437bfbebSnyanmisaka     mpp_log("mpp_enc_ref_test tsvc4 ref info generation start\n");
42*437bfbebSnyanmisaka 
43*437bfbebSnyanmisaka     lt_cnt = 1;
44*437bfbebSnyanmisaka     st_cnt = 9;
45*437bfbebSnyanmisaka 
46*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_set_cfg_cnt(ref, lt_cnt, st_cnt);
47*437bfbebSnyanmisaka 
48*437bfbebSnyanmisaka     /* set 8 frame lt-ref gap */
49*437bfbebSnyanmisaka     lt_ref[0].lt_idx        = 0;
50*437bfbebSnyanmisaka     lt_ref[0].temporal_id   = 0;
51*437bfbebSnyanmisaka     lt_ref[0].ref_mode      = REF_TO_PREV_LT_REF;
52*437bfbebSnyanmisaka     lt_ref[0].lt_gap        = 8;
53*437bfbebSnyanmisaka     lt_ref[0].lt_delay      = 0;
54*437bfbebSnyanmisaka 
55*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_add_lt_cfg(ref, 1, lt_ref);
56*437bfbebSnyanmisaka 
57*437bfbebSnyanmisaka     /* set tsvc4 st-ref struct */
58*437bfbebSnyanmisaka     /* st 0 layer 0 - ref */
59*437bfbebSnyanmisaka     st_ref[0].is_non_ref    = 0;
60*437bfbebSnyanmisaka     st_ref[0].temporal_id   = 0;
61*437bfbebSnyanmisaka     st_ref[0].ref_mode      = REF_TO_TEMPORAL_LAYER;
62*437bfbebSnyanmisaka     st_ref[0].ref_arg       = 0;
63*437bfbebSnyanmisaka     st_ref[0].repeat        = 0;
64*437bfbebSnyanmisaka     /* st 1 layer 3 - non-ref */
65*437bfbebSnyanmisaka     st_ref[1].is_non_ref    = 1;
66*437bfbebSnyanmisaka     st_ref[1].temporal_id   = 3;
67*437bfbebSnyanmisaka     st_ref[1].ref_mode      = REF_TO_PREV_REF_FRM;
68*437bfbebSnyanmisaka     st_ref[1].ref_arg       = 0;
69*437bfbebSnyanmisaka     st_ref[1].repeat        = 0;
70*437bfbebSnyanmisaka     /* st 2 layer 2 - ref */
71*437bfbebSnyanmisaka     st_ref[2].is_non_ref    = 0;
72*437bfbebSnyanmisaka     st_ref[2].temporal_id   = 2;
73*437bfbebSnyanmisaka     st_ref[2].ref_mode      = REF_TO_PREV_REF_FRM;
74*437bfbebSnyanmisaka     st_ref[2].ref_arg       = 0;
75*437bfbebSnyanmisaka     st_ref[2].repeat        = 0;
76*437bfbebSnyanmisaka     /* st 3 layer 3 - non-ref */
77*437bfbebSnyanmisaka     st_ref[3].is_non_ref    = 1;
78*437bfbebSnyanmisaka     st_ref[3].temporal_id   = 3;
79*437bfbebSnyanmisaka     st_ref[3].ref_mode      = REF_TO_PREV_REF_FRM;
80*437bfbebSnyanmisaka     st_ref[3].ref_arg       = 0;
81*437bfbebSnyanmisaka     st_ref[3].repeat        = 0;
82*437bfbebSnyanmisaka     /* st 4 layer 1 - ref */
83*437bfbebSnyanmisaka     st_ref[4].is_non_ref    = 0;
84*437bfbebSnyanmisaka     st_ref[4].temporal_id   = 1;
85*437bfbebSnyanmisaka     st_ref[4].ref_mode      = REF_TO_PREV_REF_FRM;
86*437bfbebSnyanmisaka     st_ref[4].ref_arg       = 0;
87*437bfbebSnyanmisaka     st_ref[4].repeat        = 0;
88*437bfbebSnyanmisaka     /* st 5 layer 3 - non-ref */
89*437bfbebSnyanmisaka     st_ref[5].is_non_ref    = 1;
90*437bfbebSnyanmisaka     st_ref[5].temporal_id   = 3;
91*437bfbebSnyanmisaka     st_ref[5].ref_mode      = REF_TO_PREV_REF_FRM;
92*437bfbebSnyanmisaka     st_ref[5].ref_arg       = 0;
93*437bfbebSnyanmisaka     st_ref[5].repeat        = 0;
94*437bfbebSnyanmisaka     /* st 6 layer 2 - ref */
95*437bfbebSnyanmisaka     st_ref[6].is_non_ref    = 0;
96*437bfbebSnyanmisaka     st_ref[6].temporal_id   = 2;
97*437bfbebSnyanmisaka     st_ref[6].ref_mode      = REF_TO_PREV_REF_FRM;
98*437bfbebSnyanmisaka     st_ref[6].ref_arg       = 0;
99*437bfbebSnyanmisaka     st_ref[6].repeat        = 0;
100*437bfbebSnyanmisaka     /* st 7 layer 3 - non-ref */
101*437bfbebSnyanmisaka     st_ref[7].is_non_ref    = 1;
102*437bfbebSnyanmisaka     st_ref[7].temporal_id   = 3;
103*437bfbebSnyanmisaka     st_ref[7].ref_mode      = REF_TO_PREV_REF_FRM;
104*437bfbebSnyanmisaka     st_ref[7].ref_arg       = 0;
105*437bfbebSnyanmisaka     st_ref[7].repeat        = 0;
106*437bfbebSnyanmisaka     /* st 8 layer 0 - ref */
107*437bfbebSnyanmisaka     st_ref[8].is_non_ref    = 0;
108*437bfbebSnyanmisaka     st_ref[8].temporal_id   = 0;
109*437bfbebSnyanmisaka     st_ref[8].ref_mode      = REF_TO_TEMPORAL_LAYER;
110*437bfbebSnyanmisaka     st_ref[8].ref_arg       = 0;
111*437bfbebSnyanmisaka     st_ref[8].repeat        = 0;
112*437bfbebSnyanmisaka 
113*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_add_st_cfg(ref, 9, st_ref);
114*437bfbebSnyanmisaka 
115*437bfbebSnyanmisaka     /* check and get dpb size */
116*437bfbebSnyanmisaka     mpp_log("mpp_enc_ref_test tsvc4 ref info verification start\n");
117*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_check(ref);
118*437bfbebSnyanmisaka     mpp_log("mpp_enc_ref_test tsvc4 ref info verification ret %d\n", ret);
119*437bfbebSnyanmisaka 
120*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_show(ref);
121*437bfbebSnyanmisaka 
122*437bfbebSnyanmisaka     /* reset for next config */
123*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_reset(ref);
124*437bfbebSnyanmisaka 
125*437bfbebSnyanmisaka #if 0
126*437bfbebSnyanmisaka     mpp_log("mpp_enc_ref_test smartp ref info generation start\n");
127*437bfbebSnyanmisaka 
128*437bfbebSnyanmisaka     /* typical smartp config */
129*437bfbebSnyanmisaka     lt_cnt = 1;
130*437bfbebSnyanmisaka     st_cnt = 3;
131*437bfbebSnyanmisaka 
132*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_set_cfg_cnt(ref, lt_cnt, st_cnt);
133*437bfbebSnyanmisaka 
134*437bfbebSnyanmisaka     memset(&lt_ref, 0, sizeof(lt_ref));
135*437bfbebSnyanmisaka     memset(&st_ref, 0, sizeof(st_ref));
136*437bfbebSnyanmisaka 
137*437bfbebSnyanmisaka     /* set 300 frame lt-ref gap */
138*437bfbebSnyanmisaka     lt_ref[0].lt_idx        = 0;
139*437bfbebSnyanmisaka     lt_ref[0].temporal_id   = 0;
140*437bfbebSnyanmisaka     lt_ref[0].ref_mode      = REF_TO_PREV_INTRA;
141*437bfbebSnyanmisaka     lt_ref[0].lt_gap        = 300;
142*437bfbebSnyanmisaka     lt_ref[0].lt_delay      = 0;
143*437bfbebSnyanmisaka 
144*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_add_lt_cfg(ref, 1, lt_ref);
145*437bfbebSnyanmisaka 
146*437bfbebSnyanmisaka     st_ref[0].is_non_ref    = 0;
147*437bfbebSnyanmisaka     st_ref[0].temporal_id   = 0;
148*437bfbebSnyanmisaka     st_ref[0].ref_mode      = REF_TO_PREV_LT_REF;
149*437bfbebSnyanmisaka     st_ref[0].ref_arg       = 0;
150*437bfbebSnyanmisaka     st_ref[0].repeat        = 0;
151*437bfbebSnyanmisaka 
152*437bfbebSnyanmisaka     st_ref[1].is_non_ref    = 0;
153*437bfbebSnyanmisaka     st_ref[1].temporal_id   = 0;
154*437bfbebSnyanmisaka     st_ref[1].ref_mode      = REF_TO_PREV_REF_FRM;
155*437bfbebSnyanmisaka     st_ref[1].ref_arg       = 0;
156*437bfbebSnyanmisaka     st_ref[1].repeat        = 299;
157*437bfbebSnyanmisaka 
158*437bfbebSnyanmisaka     st_ref[2].is_non_ref    = 0;
159*437bfbebSnyanmisaka     st_ref[2].temporal_id   = 0;
160*437bfbebSnyanmisaka     st_ref[2].ref_mode      = REF_TO_PREV_LT_REF;
161*437bfbebSnyanmisaka     st_ref[2].ref_arg       = 0;
162*437bfbebSnyanmisaka     st_ref[2].repeat        = 0;
163*437bfbebSnyanmisaka 
164*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_add_st_cfg(ref, 3, st_ref);
165*437bfbebSnyanmisaka 
166*437bfbebSnyanmisaka     mpp_log("mpp_enc_ref_test smartp ref info verification start\n");
167*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_check(ref);
168*437bfbebSnyanmisaka     mpp_log("mpp_enc_ref_test smartp ref info verification ret %d\n", ret);
169*437bfbebSnyanmisaka 
170*437bfbebSnyanmisaka     ret = mpp_enc_ref_cfg_deinit(&ref);
171*437bfbebSnyanmisaka #endif
172*437bfbebSnyanmisaka 
173*437bfbebSnyanmisaka     mpp_log("mpp_enc_ref_test %s\n", ret ? "failed" : "success");
174*437bfbebSnyanmisaka 
175*437bfbebSnyanmisaka     return ret;
176*437bfbebSnyanmisaka }
177