1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka * Copyright 2022 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_bit_read_test"
18*437bfbebSnyanmisaka
19*437bfbebSnyanmisaka #include <stdlib.h>
20*437bfbebSnyanmisaka #include <string.h>
21*437bfbebSnyanmisaka
22*437bfbebSnyanmisaka #include "mpp_log.h"
23*437bfbebSnyanmisaka #include "mpp_common.h"
24*437bfbebSnyanmisaka #include "mpp_bitread.h"
25*437bfbebSnyanmisaka
26*437bfbebSnyanmisaka #define BIT_READ_BUFFER_SIZE (1024)
27*437bfbebSnyanmisaka
28*437bfbebSnyanmisaka typedef enum BitOpsType_e {
29*437bfbebSnyanmisaka BIT_GET,
30*437bfbebSnyanmisaka BIT_GET_UE,
31*437bfbebSnyanmisaka BIT_GET_SE,
32*437bfbebSnyanmisaka BIT_SKIP,
33*437bfbebSnyanmisaka } BitOpsType;
34*437bfbebSnyanmisaka
35*437bfbebSnyanmisaka static RK_U8 bitOpsStr[][10] = {
36*437bfbebSnyanmisaka "read_bit",
37*437bfbebSnyanmisaka "read_ue",
38*437bfbebSnyanmisaka "read_se",
39*437bfbebSnyanmisaka "skip_bit"
40*437bfbebSnyanmisaka };
41*437bfbebSnyanmisaka
42*437bfbebSnyanmisaka typedef struct BitOps_t {
43*437bfbebSnyanmisaka BitOpsType type;
44*437bfbebSnyanmisaka RK_S32 len;
45*437bfbebSnyanmisaka RK_S32 val;
46*437bfbebSnyanmisaka char syntax[50];
47*437bfbebSnyanmisaka } BitOps;
48*437bfbebSnyanmisaka
49*437bfbebSnyanmisaka // AVS2 I-frame data containing "00 00 02"
50*437bfbebSnyanmisaka static RK_U8 test_data_1[] = {
51*437bfbebSnyanmisaka 0x00, 0x00, 0x01, 0xB3, 0x00, 0x00, 0xFF, 0xFF,
52*437bfbebSnyanmisaka 0x80, 0x00, 0x00, 0x02, 0x04, 0x40, 0xCA, 0xB3,
53*437bfbebSnyanmisaka 0xD2, 0x2B, 0x33, 0x4C, 0x91, 0x88, 0xAC, 0xCD,
54*437bfbebSnyanmisaka 0x14, 0xD8, 0xA1, 0x86, 0x14, 0x30, 0x8A, 0x58,
55*437bfbebSnyanmisaka 0xE1, 0x46, 0x8C, 0x1D, 0x80, 0x00, 0x00, 0x01
56*437bfbebSnyanmisaka };
57*437bfbebSnyanmisaka
58*437bfbebSnyanmisaka static BitOps bit_ops_1 [] = {
59*437bfbebSnyanmisaka {BIT_SKIP, 32, 0, "Skip start code of I Pic"},
60*437bfbebSnyanmisaka {BIT_GET, 32, 65535, "bbv_delay"},
61*437bfbebSnyanmisaka {BIT_GET, 1, 1, "time_code_flag"},
62*437bfbebSnyanmisaka {BIT_GET, 24, 0, "time_code"},
63*437bfbebSnyanmisaka {BIT_GET, 8, 0, "coding_order"},
64*437bfbebSnyanmisaka {BIT_GET_UE, 0, 3, "picture_output_delay"},
65*437bfbebSnyanmisaka {BIT_GET, 1, 0, "use RCS in SPS"},
66*437bfbebSnyanmisaka {BIT_GET, 1, 1, "refered by others"},
67*437bfbebSnyanmisaka {BIT_GET, 3, 0, "number of reference picture"},
68*437bfbebSnyanmisaka {BIT_GET, 3, 0, "number of removed picture"},
69*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker bit"},
70*437bfbebSnyanmisaka {BIT_GET, 1, 1, "progressive_frame"},
71*437bfbebSnyanmisaka {BIT_GET, 1, 0, "top_field_first"},
72*437bfbebSnyanmisaka {BIT_GET, 1, 0, "repeat_first_field"},
73*437bfbebSnyanmisaka {BIT_GET, 1, 1, "fixed_picture_qp"},
74*437bfbebSnyanmisaka {BIT_GET, 7, 43, "picture_qp"},
75*437bfbebSnyanmisaka {BIT_GET, 1, 0, "loop_filter_disable"},
76*437bfbebSnyanmisaka {BIT_GET, 1, 0, "loop_filter_parameter_flag"},
77*437bfbebSnyanmisaka {BIT_GET, 1, 1, "chroma_quant_param_disable"}
78*437bfbebSnyanmisaka };
79*437bfbebSnyanmisaka
80*437bfbebSnyanmisaka // AVS2 Sequence header data without "00 00 02"
81*437bfbebSnyanmisaka static RK_U8 test_data_2[] = {
82*437bfbebSnyanmisaka 0x00, 0x00, 0x01, 0xB0, 0x20, 0x42, 0x81, 0xA0,
83*437bfbebSnyanmisaka 0x03, 0xC1, 0x23, 0x0F, 0x42, 0x44, 0x00, 0x10,
84*437bfbebSnyanmisaka 0x00, 0x01, 0x9F, 0xFE, 0x46, 0x10, 0x18, 0xE8,
85*437bfbebSnyanmisaka 0x0D, 0x02, 0x4B, 0x10, 0xA4, 0x74, 0x09, 0x44,
86*437bfbebSnyanmisaka 0x99, 0x02, 0x58, 0x90, 0x61, 0x0D, 0x0A, 0x20,
87*437bfbebSnyanmisaka 0x90, 0x22, 0x91, 0x24, 0x38, 0x42, 0x39, 0x00,
88*437bfbebSnyanmisaka 0x00, 0x01, 0xB5, 0x23, 0x0F, 0x01, 0x14, 0x99
89*437bfbebSnyanmisaka };
90*437bfbebSnyanmisaka
91*437bfbebSnyanmisaka static BitOps bit_ops_2 [] = {
92*437bfbebSnyanmisaka {BIT_SKIP, 32, 0, "Skip start code of Seq header"},
93*437bfbebSnyanmisaka {BIT_GET, 8, 32, "profile_id"},
94*437bfbebSnyanmisaka {BIT_GET, 8, 66, "level_id"},
95*437bfbebSnyanmisaka {BIT_GET, 1, 1, "progressive_sequence"},
96*437bfbebSnyanmisaka {BIT_GET, 1, 0, "field_coded_sequence"},
97*437bfbebSnyanmisaka {BIT_GET, 14, 416, "horizontal_size"},
98*437bfbebSnyanmisaka {BIT_GET, 14, 240, "vertical_size"},
99*437bfbebSnyanmisaka {BIT_GET, 2, 1, "chroma_format"},
100*437bfbebSnyanmisaka {BIT_GET, 3, 1, "sample_precision"},
101*437bfbebSnyanmisaka {BIT_GET, 4, 1, "aspect_ratio"},
102*437bfbebSnyanmisaka {BIT_GET, 4, 8, "frame_rate_code"},
103*437bfbebSnyanmisaka {BIT_GET, 18, 125000, "bit_rate_lower_18"},
104*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
105*437bfbebSnyanmisaka {BIT_GET, 12, 0, "bit_rate_upper_12"},
106*437bfbebSnyanmisaka {BIT_GET, 1, 0, "low_delay"},
107*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
108*437bfbebSnyanmisaka {BIT_GET, 1, 0, "enable_temporal_id"},
109*437bfbebSnyanmisaka {BIT_GET, 18, 0, "bbv_uffer_size"},
110*437bfbebSnyanmisaka {BIT_GET, 3, 6, "lcu_size"},
111*437bfbebSnyanmisaka {BIT_GET, 1, 0, "enable_weighted_quant"},
112*437bfbebSnyanmisaka // weighted quant matrix
113*437bfbebSnyanmisaka {BIT_GET, 1, 1, "disable_background_picture"},
114*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_mhp_skip"},
115*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_dhp"},
116*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_wsm"},
117*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_amp"},
118*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_nsqt"},
119*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_nsip"},
120*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_2nd_transform"},
121*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_sao"},
122*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_alf"},
123*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_pmvr"},
124*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
125*437bfbebSnyanmisaka {BIT_GET, 6, 8, "num_of_rps"},
126*437bfbebSnyanmisaka {BIT_GET, 1, 1, "refered_by_others[0]"},
127*437bfbebSnyanmisaka {BIT_GET, 3, 4, "num_of_ref[0]"},
128*437bfbebSnyanmisaka {BIT_GET, 6, 8, "ref_pic[0][0]"},
129*437bfbebSnyanmisaka {BIT_GET, 6, 3, "ref_pic[0][1]"},
130*437bfbebSnyanmisaka {BIT_GET, 6, 7, "ref_pic[0][2]"},
131*437bfbebSnyanmisaka {BIT_GET, 6, 16, "ref_pic[0][3]"},
132*437bfbebSnyanmisaka {BIT_GET, 3, 0, "num_to_remove[0]"},
133*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
134*437bfbebSnyanmisaka {BIT_GET, 1, 1, "refered_by_others[1]"},
135*437bfbebSnyanmisaka {BIT_GET, 3, 2, "num_of_ref[1]"},
136*437bfbebSnyanmisaka {BIT_GET, 6, 1, "ref_pic[1][0]"},
137*437bfbebSnyanmisaka {BIT_GET, 6, 9, "ref_pic[1][1]"},
138*437bfbebSnyanmisaka {BIT_GET, 3, 3, "num_to_remove[1]"},
139*437bfbebSnyanmisaka {BIT_GET, 6, 4, "remove_pic[1][0]"},
140*437bfbebSnyanmisaka {BIT_GET, 6, 10, "remove_pic[1][0]"},
141*437bfbebSnyanmisaka {BIT_GET, 6, 17, "remove_pic[1][0]"},
142*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
143*437bfbebSnyanmisaka {BIT_GET, 1, 1, "refered_by_others[2]"},
144*437bfbebSnyanmisaka {BIT_GET, 3, 2, "num_of_ref[2]"},
145*437bfbebSnyanmisaka {BIT_GET, 6, 1, "ref_pic[2][0]"},
146*437bfbebSnyanmisaka {BIT_GET, 6, 10, "ref_pic[2][1]"},
147*437bfbebSnyanmisaka {BIT_GET, 3, 1, "num_to_remove[2]"},
148*437bfbebSnyanmisaka {BIT_GET, 6, 9, "remove_pic[2][0]"},
149*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
150*437bfbebSnyanmisaka {BIT_GET, 1, 0, "refered_by_others[3]"},
151*437bfbebSnyanmisaka {BIT_GET, 3, 2, "num_of_ref[3]"},
152*437bfbebSnyanmisaka {BIT_GET, 6, 1, "ref_pic[3][0]"},
153*437bfbebSnyanmisaka {BIT_GET, 6, 11, "ref_pic[3][1]"},
154*437bfbebSnyanmisaka {BIT_GET, 3, 0, "num_to_remove[3]"},
155*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
156*437bfbebSnyanmisaka {BIT_GET, 1, 0, "refered_by_others[4]"},
157*437bfbebSnyanmisaka {BIT_GET, 3, 2, "num_of_ref[4]"},
158*437bfbebSnyanmisaka {BIT_GET, 6, 3, "ref_pic[4][0]"},
159*437bfbebSnyanmisaka {BIT_GET, 6, 2, "ref_pic[4][1]"},
160*437bfbebSnyanmisaka {BIT_GET, 3, 0, "num_to_remove[4]"},
161*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
162*437bfbebSnyanmisaka {BIT_GET, 1, 1, "refered_by_others[5]"},
163*437bfbebSnyanmisaka {BIT_GET, 3, 2, "num_of_ref[5]"},
164*437bfbebSnyanmisaka {BIT_GET, 6, 5, "ref_pic[5][0]"},
165*437bfbebSnyanmisaka {BIT_GET, 6, 4, "ref_pic[5][1]"},
166*437bfbebSnyanmisaka {BIT_GET, 3, 0, "num_to_remove[5]"},
167*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
168*437bfbebSnyanmisaka {BIT_GET, 1, 0, "refered_by_6thers[6]"},
169*437bfbebSnyanmisaka {BIT_GET, 3, 2, "num_of_ref[6]"},
170*437bfbebSnyanmisaka {BIT_GET, 6, 1, "ref_pic[6][0]"},
171*437bfbebSnyanmisaka {BIT_GET, 6, 5, "ref_pic[6][1]"},
172*437bfbebSnyanmisaka {BIT_GET, 3, 1, "num_to_remove[6]"},
173*437bfbebSnyanmisaka {BIT_GET, 6, 4, "remove_pic[6][0]"},
174*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
175*437bfbebSnyanmisaka {BIT_GET, 1, 0, "refered_by_others[7]"},
176*437bfbebSnyanmisaka {BIT_GET, 3, 2, "num_of_ref[7]"},
177*437bfbebSnyanmisaka {BIT_GET, 6, 7, "ref_pic[7][0]"},
178*437bfbebSnyanmisaka {BIT_GET, 6, 2, "ref_pic[7][1]"},
179*437bfbebSnyanmisaka {BIT_GET, 3, 0, "num_to_remove[7]"},
180*437bfbebSnyanmisaka {BIT_GET, 1, 1, "marker_bit"},
181*437bfbebSnyanmisaka {BIT_GET, 5, 3, "picture_reorder_delay"},
182*437bfbebSnyanmisaka {BIT_GET, 1, 1, "enable_clf"},
183*437bfbebSnyanmisaka {BIT_GET, 2, 0, "reserved 2bits 00"}
184*437bfbebSnyanmisaka };
185*437bfbebSnyanmisaka
186*437bfbebSnyanmisaka // H264 SPS data with "00 00 03 00"
187*437bfbebSnyanmisaka static RK_U8 test_data_3[] = {0x00, 0x00, 0x00, 0x01, 0x67, 0x64, 0x00, 0x28, 0xAD, 0x00,
188*437bfbebSnyanmisaka 0x2C, 0xA4, 0x01, 0xE0, 0x11, 0x1F, 0x78, 0x0B, 0x50, 0x10,
189*437bfbebSnyanmisaka 0x10, 0x14, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x03,
190*437bfbebSnyanmisaka 0x00, 0xCB, 0x9B, 0x80, 0x03, 0xD0, 0x90, 0x03, 0xA9, 0xEF,
191*437bfbebSnyanmisaka 0x7B, 0xE0, 0xA0
192*437bfbebSnyanmisaka };
193*437bfbebSnyanmisaka
194*437bfbebSnyanmisaka // H264 PPS and SEI data without "00 00 03 00"
195*437bfbebSnyanmisaka static RK_U8 test_data_4[] = {0x00, 0x00, 0x00, 0x01, 0x68, 0xFE, 0x3C, 0xB0};
196*437bfbebSnyanmisaka
197*437bfbebSnyanmisaka static BitOps bit_ops_3[] = {
198*437bfbebSnyanmisaka {BIT_SKIP, 40, 0, "start code of SPS"},
199*437bfbebSnyanmisaka {BIT_GET, 8, 100, "profile_idc"},
200*437bfbebSnyanmisaka {BIT_GET, 1, 0, "constraint_set0_flag"},
201*437bfbebSnyanmisaka {BIT_GET, 1, 0, "constraint_set1_flag"},
202*437bfbebSnyanmisaka {BIT_GET, 1, 0, "constraint_set2_flag"},
203*437bfbebSnyanmisaka {BIT_GET, 1, 0, "constraint_set3_flag"},
204*437bfbebSnyanmisaka {BIT_GET, 1, 0, "constraint_set4_flag"},
205*437bfbebSnyanmisaka {BIT_GET, 1, 0, "constraint_set5_flag"},
206*437bfbebSnyanmisaka {BIT_GET, 2, 0, "reserved_zero_2bits"},
207*437bfbebSnyanmisaka {BIT_GET, 8, 40, "level_idc"},
208*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "seq_parameter_set_id"},
209*437bfbebSnyanmisaka {BIT_GET_UE, 0, 1, "chroma_format_idc"},
210*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "bit_depth_luma_minus8"},
211*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "bit_depth_chroma_minus8"},
212*437bfbebSnyanmisaka {BIT_GET, 1, 0, "qp_prime_y_zero_transform_bypass"},
213*437bfbebSnyanmisaka {BIT_GET, 1, 1, "seq_scaling_matrix_present_flag"},
214*437bfbebSnyanmisaka {BIT_GET, 1, 0, "seq_sacling_list_present_flag[0]"},
215*437bfbebSnyanmisaka {BIT_GET, 1, 0, "seq_sacling_list_present_flag[1]"},
216*437bfbebSnyanmisaka {BIT_GET, 1, 0, "seq_sacling_list_present_flag[2]"},
217*437bfbebSnyanmisaka {BIT_GET, 1, 0, "seq_sacling_list_present_flag[3]"},
218*437bfbebSnyanmisaka {BIT_GET, 1, 0, "seq_sacling_list_present_flag[4]"},
219*437bfbebSnyanmisaka {BIT_GET, 1, 0, "seq_sacling_list_present_flag[5]"},
220*437bfbebSnyanmisaka {BIT_GET, 1, 0, "seq_sacling_list_present_flag[6]"},
221*437bfbebSnyanmisaka {BIT_GET, 1, 0, "seq_sacling_list_present_flag[7]"},
222*437bfbebSnyanmisaka {BIT_GET_UE, 0, 4, "log2_max_frame_num_minus4"},
223*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "pic_order_cnt_type"},
224*437bfbebSnyanmisaka {BIT_GET_UE, 0, 4, "log2_max_pic_order_cnt_lsb_minus"},
225*437bfbebSnyanmisaka {BIT_GET_UE, 0, 3, "max_num_ref_frames"},
226*437bfbebSnyanmisaka {BIT_GET, 1, 0, "gaps_in_frame_num_value_allowed_flag"},
227*437bfbebSnyanmisaka {BIT_GET_UE, 0, 119, "pic_width_in_mbs_minus1"},
228*437bfbebSnyanmisaka {BIT_GET_UE, 0, 33, "pic_height_in_map_units_minus1"},
229*437bfbebSnyanmisaka {BIT_GET, 1, 0, "frame_mbs_only_flag"},
230*437bfbebSnyanmisaka {BIT_GET, 1, 0, "mb_adaptive_frame_field_flag"},
231*437bfbebSnyanmisaka {BIT_GET, 1, 1, "direct_8x8_inference_flag"},
232*437bfbebSnyanmisaka {BIT_GET, 1, 1, "frame_cropping_flag"},
233*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "frame_crop_left_offset"},
234*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "frame_crop_right_offset"},
235*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "frame_crop_top_offset"},
236*437bfbebSnyanmisaka {BIT_GET_UE, 0, 2, "frame_crop_bottom_offset"},
237*437bfbebSnyanmisaka {BIT_GET, 1, 1, "vui_parameters_present_flag"},
238*437bfbebSnyanmisaka {BIT_GET, 1, 1, "aspect_ratio_info_present_flag"},
239*437bfbebSnyanmisaka {BIT_GET, 8, 1, "aspect_ratio_idc"},
240*437bfbebSnyanmisaka {BIT_GET, 1, 0, "overscan_info_ipresent_flag"},
241*437bfbebSnyanmisaka {BIT_GET, 1, 1, "video_signal_type_present_flag"},
242*437bfbebSnyanmisaka {BIT_GET, 3, 5, "video_format"},
243*437bfbebSnyanmisaka {BIT_GET, 1, 0, "video_full_range_flag"},
244*437bfbebSnyanmisaka {BIT_GET, 1, 1, "colour_description_present_flag"},
245*437bfbebSnyanmisaka {BIT_GET, 8, 1, "colour_primaries"},
246*437bfbebSnyanmisaka {BIT_GET, 8, 1, "transfer_characteristics"},
247*437bfbebSnyanmisaka {BIT_GET, 8, 1, "matrix_coefficient"},
248*437bfbebSnyanmisaka {BIT_GET, 1, 0, "chroma_loc_info_present_flag"},
249*437bfbebSnyanmisaka {BIT_GET, 1, 1, "timing_info_presetn_flag"},
250*437bfbebSnyanmisaka {BIT_GET, 32, 1, "num_units_in_tick"},
251*437bfbebSnyanmisaka {BIT_GET, 32, 50, "time_scale"},
252*437bfbebSnyanmisaka {BIT_GET, 1, 1, "fixed_frame_rate_flag"},
253*437bfbebSnyanmisaka {BIT_GET, 1, 1, "nal_hrd_parameters_present_flag"},
254*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "cpb_cnt_minus1"},
255*437bfbebSnyanmisaka {BIT_GET, 4, 3, "bit_rate_scale"},
256*437bfbebSnyanmisaka {BIT_GET, 4, 7, "cpb_size_scale"},
257*437bfbebSnyanmisaka {BIT_GET_UE, 0, 15624, "bit_rate_value_minus1[0]"},
258*437bfbebSnyanmisaka {BIT_GET_UE, 0, 1874, "cpb_size_value_minus1[0]"},
259*437bfbebSnyanmisaka {BIT_GET, 1, 1, "cbr_flag[0]"},
260*437bfbebSnyanmisaka {BIT_GET, 5, 23, "initial_cpb_removal_delay_length_minus1"},
261*437bfbebSnyanmisaka {BIT_GET, 5, 23, "cpb_removal_delay_length_minus1"},
262*437bfbebSnyanmisaka {BIT_GET, 5, 23, "dpb_output_delay_length_minus1"},
263*437bfbebSnyanmisaka {BIT_GET, 5, 24, "time_offset_length"},
264*437bfbebSnyanmisaka {BIT_GET, 1, 0, "vcl_hrd_parameters_present_flag"},
265*437bfbebSnyanmisaka {BIT_GET, 1, 0, "low_delay_hrd_flag"},
266*437bfbebSnyanmisaka {BIT_GET, 1, 1, "picture_sturct_present_flag"},
267*437bfbebSnyanmisaka {BIT_GET, 1, 0, "bitstream_restriction_flag"},
268*437bfbebSnyanmisaka };
269*437bfbebSnyanmisaka
270*437bfbebSnyanmisaka static BitOps bit_ops_4[] = {
271*437bfbebSnyanmisaka {BIT_SKIP, 40, 0, "Skip start code of PPS"},
272*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "pic_parameter_set_id"},
273*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "seq_parameter_set_id"},
274*437bfbebSnyanmisaka {BIT_GET, 1, 1, "entropy_coding_mode_flag"},
275*437bfbebSnyanmisaka {BIT_GET, 1, 1, "bottom_field_pic_order_in_frame_present_flag"},
276*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "num_slice_groups_minus1"},
277*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "num_ref_idx_l0_default_active_minus1"},
278*437bfbebSnyanmisaka {BIT_GET_UE, 0, 0, "num_ref_idx_l1_default_active_minus1"},
279*437bfbebSnyanmisaka {BIT_GET, 1, 0, "weighted_pred_flag"},
280*437bfbebSnyanmisaka {BIT_GET, 2, 0, "weighted_bipred_idc"},
281*437bfbebSnyanmisaka {BIT_GET_SE, 0, 0, "pic_init_qp_minus26"},
282*437bfbebSnyanmisaka {BIT_GET_SE, 0, 0, "pic_init_qs_minus26"},
283*437bfbebSnyanmisaka {BIT_GET_SE, 0, 0, "chroma_qp_index_offset"},
284*437bfbebSnyanmisaka {BIT_GET, 1, 1, "debloking_filter_control_present_flag"},
285*437bfbebSnyanmisaka {BIT_GET, 1, 0, "constrained_intra_pred_flag"},
286*437bfbebSnyanmisaka {BIT_GET, 1, 0, "redundant_pic_cnt_present_flag"},
287*437bfbebSnyanmisaka {BIT_GET, 1, 1, "transform_8x8_mode_flag"},
288*437bfbebSnyanmisaka {BIT_GET, 1, 0, "pic_scaling_matrix_present_flag"},
289*437bfbebSnyanmisaka {BIT_GET_SE, 0, 0, "second_chroma_qp_index_offset"}
290*437bfbebSnyanmisaka };
291*437bfbebSnyanmisaka
proc_bit_ops(BitReadCtx_t * ctx,BitOps * ops,RK_S32 * ret_val)292*437bfbebSnyanmisaka MPP_RET proc_bit_ops(BitReadCtx_t *ctx, BitOps *ops, RK_S32 *ret_val)
293*437bfbebSnyanmisaka {
294*437bfbebSnyanmisaka MPP_RET ret = MPP_OK;
295*437bfbebSnyanmisaka switch (ops->type) {
296*437bfbebSnyanmisaka case BIT_GET :
297*437bfbebSnyanmisaka if (ops->len >= 32) {
298*437bfbebSnyanmisaka READ_BITS_LONG(ctx, ops->len, ret_val);
299*437bfbebSnyanmisaka } else {
300*437bfbebSnyanmisaka READ_BITS(ctx, ops->len, ret_val);
301*437bfbebSnyanmisaka }
302*437bfbebSnyanmisaka break;
303*437bfbebSnyanmisaka case BIT_GET_UE:
304*437bfbebSnyanmisaka READ_UE(ctx, ret_val);
305*437bfbebSnyanmisaka break;
306*437bfbebSnyanmisaka case BIT_GET_SE:
307*437bfbebSnyanmisaka READ_SE(ctx, ret_val);
308*437bfbebSnyanmisaka break;
309*437bfbebSnyanmisaka case BIT_SKIP:
310*437bfbebSnyanmisaka if (ops->len >= 32) {
311*437bfbebSnyanmisaka SKIP_BITS_LONG(ctx, ops->len);
312*437bfbebSnyanmisaka } else {
313*437bfbebSnyanmisaka SKIP_BITS(ctx, ops->len);
314*437bfbebSnyanmisaka }
315*437bfbebSnyanmisaka break;
316*437bfbebSnyanmisaka }
317*437bfbebSnyanmisaka goto __NORMAL;
318*437bfbebSnyanmisaka __BITREAD_ERR:
319*437bfbebSnyanmisaka mpp_err("Read failed: syntax %s, %s, %d bits\n", ops->syntax, bitOpsStr[ops->type], ops->len);
320*437bfbebSnyanmisaka return ret = MPP_ERR_VALUE;
321*437bfbebSnyanmisaka __NORMAL:
322*437bfbebSnyanmisaka if (ops->val != *ret_val) {
323*437bfbebSnyanmisaka mpp_err("Read error: syntax %s, expect %d but %d\n", ops->syntax, ops->val, *ret_val);
324*437bfbebSnyanmisaka ret = MPP_ERR_VALUE;
325*437bfbebSnyanmisaka } else {
326*437bfbebSnyanmisaka mpp_log("Read OK, syntax %s, %d\n", ops->syntax, *ret_val);
327*437bfbebSnyanmisaka }
328*437bfbebSnyanmisaka return ret;
329*437bfbebSnyanmisaka }
330*437bfbebSnyanmisaka
main()331*437bfbebSnyanmisaka int main()
332*437bfbebSnyanmisaka {
333*437bfbebSnyanmisaka BitReadCtx_t reader;
334*437bfbebSnyanmisaka RK_U32 i;
335*437bfbebSnyanmisaka RK_S32 tmp = 0;
336*437bfbebSnyanmisaka
337*437bfbebSnyanmisaka mpp_log("mpp bit read test start\n");
338*437bfbebSnyanmisaka mpp_log("Reading H264 data with 00 00 03 00...");
339*437bfbebSnyanmisaka memset(&reader, 0, sizeof(BitReadCtx_t));
340*437bfbebSnyanmisaka mpp_set_bitread_ctx(&reader, test_data_3, sizeof(test_data_3));
341*437bfbebSnyanmisaka // mpp_set_pre_detection(&reader);
342*437bfbebSnyanmisaka mpp_set_bitread_pseudo_code_type(&reader, PSEUDO_CODE_H264_H265);
343*437bfbebSnyanmisaka for (i = 0; i < MPP_ARRAY_ELEMS(bit_ops_3); i++) {
344*437bfbebSnyanmisaka
345*437bfbebSnyanmisaka if (proc_bit_ops(&reader, &bit_ops_3[i], &tmp))
346*437bfbebSnyanmisaka goto __READ_FAILED;
347*437bfbebSnyanmisaka
348*437bfbebSnyanmisaka tmp = 0;
349*437bfbebSnyanmisaka }
350*437bfbebSnyanmisaka
351*437bfbebSnyanmisaka mpp_log("Reading H264 data without 00 00 03 00...");
352*437bfbebSnyanmisaka memset(&reader, 0, sizeof(BitReadCtx_t));
353*437bfbebSnyanmisaka mpp_set_bitread_ctx(&reader, test_data_4, sizeof(test_data_4));
354*437bfbebSnyanmisaka
355*437bfbebSnyanmisaka for (i = 0; i < MPP_ARRAY_ELEMS(bit_ops_4); i++) {
356*437bfbebSnyanmisaka if (proc_bit_ops(&reader, &bit_ops_4[i], &tmp))
357*437bfbebSnyanmisaka goto __READ_FAILED;
358*437bfbebSnyanmisaka
359*437bfbebSnyanmisaka tmp = 0;
360*437bfbebSnyanmisaka }
361*437bfbebSnyanmisaka
362*437bfbebSnyanmisaka mpp_log("Reading AVS2 data without 00 00 02...");
363*437bfbebSnyanmisaka memset(&reader, 0, sizeof(BitReadCtx_t));
364*437bfbebSnyanmisaka mpp_set_bitread_ctx(&reader, test_data_2, sizeof(test_data_2));
365*437bfbebSnyanmisaka
366*437bfbebSnyanmisaka for (i = 0; i < MPP_ARRAY_ELEMS(bit_ops_2); i++) {
367*437bfbebSnyanmisaka if (proc_bit_ops(&reader, &bit_ops_2[i], &tmp))
368*437bfbebSnyanmisaka goto __READ_FAILED;
369*437bfbebSnyanmisaka
370*437bfbebSnyanmisaka tmp = 0;
371*437bfbebSnyanmisaka }
372*437bfbebSnyanmisaka
373*437bfbebSnyanmisaka mpp_log("Reading AVS2 data with 00 00 02...");
374*437bfbebSnyanmisaka memset(&reader, 0, sizeof(BitReadCtx_t));
375*437bfbebSnyanmisaka mpp_set_bitread_ctx(&reader, test_data_1, sizeof(test_data_1));
376*437bfbebSnyanmisaka mpp_set_bitread_pseudo_code_type(&reader, PSEUDO_CODE_AVS2);
377*437bfbebSnyanmisaka
378*437bfbebSnyanmisaka for (i = 0; i < MPP_ARRAY_ELEMS(bit_ops_1); i++) {
379*437bfbebSnyanmisaka if (proc_bit_ops(&reader, &bit_ops_1[i], &tmp))
380*437bfbebSnyanmisaka goto __READ_FAILED;
381*437bfbebSnyanmisaka
382*437bfbebSnyanmisaka tmp = 0;
383*437bfbebSnyanmisaka }
384*437bfbebSnyanmisaka mpp_log("mpp bit read test end\n");
385*437bfbebSnyanmisaka return 0;
386*437bfbebSnyanmisaka __READ_FAILED:
387*437bfbebSnyanmisaka return -1;
388*437bfbebSnyanmisaka }