1//#define H264_PARSE_SPS_C
2//#ifdef H264_PARSE_SPS_C
3
4#include "h264.h"
5#include "h264parse.h"
6
7
8/// SPS extension unit (unit_type = 13)
9///
10#if 0
11h264_Status h264_Parse_SeqParameterSet_Extension(void *parent,h264_Info * pInfo)
12{
13	/*h264_SPS_Extension_RBSP_t* SPS_ext = pInfo->p_active_SPS_ext;
14
15	SPS_ext->seq_parameter_set_id = h264_GetVLCElement(pInfo, false);
16	if(SPS_ext->seq_parameter_set_id > MAX_SEQ_PARAMS-1)
17	{
18		return H264_SPS_ERROR;
19	}
20	SPS_ext->aux_format_idc = h264_GetVLCElement(pInfo, false);
21	if(SPS_ext->aux_format_idc  > 3)
22	{
23		return H264_SPS_ERROR;
24	}
25	if(SPS_ext->aux_format_idc != 0)
26	{
27		SPS_ext->bit_depth_aux_minus8 = h264_GetVLCElement(pInfo, false);
28		if(SPS_ext->bit_depth_aux_minus8 + 8 > 12)
29		{
30			return H264_SPS_ERROR;
31		}
32
33		SPS_ext->alpha_incr_flag = h264_GetBits(pInfo, 1, "alpha_incr_flag");
34		if(SPS_ext->alpha_incr_flag > 1)
35		{
36			return H264_SPS_ERROR;
37		}
38
39		SPS_ext->alpha_opaque_value = h264_GetBits(pInfo,(SPS_ext->bit_depth_aux_minus8+8+1), "alpha_opaque_value");		//+8 to get the bit_depth value
40		SPS_ext->alpha_transparent_value = h264_GetBits(pInfo,(SPS_ext->bit_depth_aux_minus8+8+1), "alpha_transparent_value");		//+8 to get the bit_depth value
41	}
42	SPS_ext->additional_extension_flag = h264_GetBits(pInfo, 1, "additional_extension_flag");
43*/
44	return H264_STATUS_OK;
45}
46#endif
47
48
49h264_Status h264_Parse_HRD_Parameters(void *parent, h264_Info* pInfo, int nal_hrd,seq_param_set_used_ptr SPS, vui_seq_parameters_t_not_used_ptr pVUI_Seq_Not_Used)
50{
51	//seq_param_set_ptr SPS = pInfo->p_active_SPS;
52	int32_t i = 0;
53	uint32_t code;
54
55
56	if(nal_hrd)
57	{
58		SPS->sps_disp.vui_seq_parameters.nal_hrd_cpb_cnt_minus1 = h264_GetVLCElement(parent, pInfo, false);
59
60		if(SPS->sps_disp.vui_seq_parameters.nal_hrd_cpb_cnt_minus1 >= MAX_CPB_CNT)
61		{
62			return H264_SPS_ERROR;
63		}
64
65		viddec_pm_get_bits(parent, &code, 8);
66      pVUI_Seq_Not_Used->nal_hrd_bit_rate_scale = (uint8_t)(code>>4);
67		pVUI_Seq_Not_Used->nal_hrd_cpb_size_scale = (uint8_t)(code & 0xf);
68
69		for(i=0; i<=SPS->sps_disp.vui_seq_parameters.nal_hrd_cpb_cnt_minus1; i++)
70		{
71			pVUI_Seq_Not_Used->nal_hrd_parameters.bit_rate_value_minus1[i] = h264_GetVLCElement(parent, pInfo, false);
72			pVUI_Seq_Not_Used->nal_hrd_parameters.cpb_size_value_minus1[i] = h264_GetVLCElement(parent, pInfo, false);
73
74			viddec_pm_get_bits(parent, &code, 1);
75			pVUI_Seq_Not_Used->nal_hrd_parameters.cbr_flag[i] = (uint8_t)code;
76		}
77
78		if( viddec_pm_get_bits(parent, &code, 20) == -1)
79			return H264_SPS_ERROR;
80
81		SPS->sps_disp.vui_seq_parameters.nal_hrd_initial_cpb_removal_delay_length_minus1 = (uint8_t)((code>>15)&0x1f);
82		SPS->sps_disp.vui_seq_parameters.nal_hrd_cpb_removal_delay_length_minus1 = (uint8_t)((code>>10)&0x1f);;
83		SPS->sps_disp.vui_seq_parameters.nal_hrd_dpb_output_delay_length_minus1 = (uint8_t)((code>>5)&0x1f);;
84		SPS->sps_disp.vui_seq_parameters.nal_hrd_time_offset_length = (uint8_t)(code&0x1f);;
85
86	}
87	else
88	{
89		SPS->sps_disp.vui_seq_parameters.vcl_hrd_cpb_cnt_minus1 = h264_GetVLCElement(parent, pInfo, false);
90
91		if(SPS->sps_disp.vui_seq_parameters.vcl_hrd_cpb_cnt_minus1 >= MAX_CPB_CNT)
92		{
93			return H264_SPS_ERROR;
94		}
95
96		viddec_pm_get_bits(parent, &code, 8);
97		pVUI_Seq_Not_Used->vcl_hrd_bit_rate_scale = (uint8_t)(code>>4);
98		pVUI_Seq_Not_Used->vcl_hrd_cpb_size_scale = (uint8_t)(code&0xf);
99
100		for(i=0; i<=SPS->sps_disp.vui_seq_parameters.vcl_hrd_cpb_cnt_minus1; i++)
101		{
102			pVUI_Seq_Not_Used->vcl_hrd_parameters.bit_rate_value_minus1[i] = h264_GetVLCElement(parent, pInfo, false);
103			pVUI_Seq_Not_Used->vcl_hrd_parameters.cpb_size_value_minus1[i] = h264_GetVLCElement(parent, pInfo, false);
104			viddec_pm_get_bits(parent, &code, 1);
105			pVUI_Seq_Not_Used->vcl_hrd_parameters.cbr_flag[i] = (uint8_t)code;
106		}
107
108		if( viddec_pm_get_bits(parent, &code, 20) == -1)
109			return H264_SPS_ERROR;
110
111		SPS->sps_disp.vui_seq_parameters.vcl_hrd_initial_cpb_removal_delay_length_minus1 = (uint8_t)((code>>15)&0x1f);
112		SPS->sps_disp.vui_seq_parameters.vcl_hrd_cpb_removal_delay_length_minus1 = (uint8_t)((code>>10)&0x1f);;
113		SPS->sps_disp.vui_seq_parameters.vcl_hrd_dpb_output_delay_length_minus1 = (uint8_t)((code>>5)&0x1f);;
114		SPS->sps_disp.vui_seq_parameters.vcl_hrd_time_offset_length = (uint8_t)(code&0x1f);;
115	}
116
117	return H264_STATUS_OK;
118}
119
120
121
122h264_Status h264_Parse_Vui_Parameters(void *parent, h264_Info* pInfo, seq_param_set_used_ptr SPS, vui_seq_parameters_t_not_used_ptr pVUI_Seq_Not_Used)
123{
124	h264_Status ret = H264_STATUS_OK;
125	//seq_param_set_ptr SPS = pInfo->p_active_SPS;
126	int32_t nal_hrd = 0;
127	uint32_t code;
128
129	do {
130		viddec_pm_get_bits(parent, &code, 1);
131		SPS->sps_disp.vui_seq_parameters.aspect_ratio_info_present_flag = (uint8_t)code;
132
133
134		if(SPS->sps_disp.vui_seq_parameters.aspect_ratio_info_present_flag)
135		{
136			viddec_pm_get_bits(parent, &code, 8);
137			SPS->sps_disp.vui_seq_parameters.aspect_ratio_idc = (uint8_t)code;
138
139			if(SPS->sps_disp.vui_seq_parameters.aspect_ratio_idc == h264_AR_Extended_SAR)
140			{
141				viddec_pm_get_bits(parent, &code, 16);
142				SPS->sps_disp.vui_seq_parameters.sar_width = (uint16_t)code;
143
144				viddec_pm_get_bits(parent, &code, 16);
145				SPS->sps_disp.vui_seq_parameters.sar_height = (uint16_t)code;
146
147			}
148		}
149
150		viddec_pm_get_bits(parent, &code, 1);
151		pVUI_Seq_Not_Used->overscan_info_present_flag = (uint8_t)code;
152
153		if(pVUI_Seq_Not_Used->overscan_info_present_flag)
154		{
155			viddec_pm_get_bits(parent, &code, 1);
156			pVUI_Seq_Not_Used->overscan_appropriate_flag = (uint8_t)code;
157		}
158
159		viddec_pm_get_bits(parent, &code, 1);
160		SPS->sps_disp.vui_seq_parameters.video_signal_type_present_flag = (uint8_t)code;
161
162		if(SPS->sps_disp.vui_seq_parameters.video_signal_type_present_flag)
163		{
164			viddec_pm_get_bits(parent, &code, 3);
165			SPS->sps_disp.vui_seq_parameters.video_format = (uint8_t)code;
166
167			viddec_pm_get_bits(parent, &code, 1);
168			pVUI_Seq_Not_Used->video_full_range_flag = (uint8_t)code;
169
170			viddec_pm_get_bits(parent, &code, 1);
171			SPS->sps_disp.vui_seq_parameters.colour_description_present_flag = (uint8_t)code;
172
173			if(SPS->sps_disp.vui_seq_parameters.colour_description_present_flag)
174			{
175				viddec_pm_get_bits(parent, &code, 8);
176				SPS->sps_disp.vui_seq_parameters.colour_primaries = (uint8_t)code;
177
178				viddec_pm_get_bits(parent, &code, 8);
179				SPS->sps_disp.vui_seq_parameters.transfer_characteristics = (uint8_t)code;
180
181				viddec_pm_get_bits(parent, &code, 8);
182				pVUI_Seq_Not_Used->matrix_coefficients = (uint8_t)code;
183			}
184		}
185
186		viddec_pm_get_bits(parent, &code, 1);
187		pVUI_Seq_Not_Used->chroma_location_info_present_flag = (uint8_t)code;
188
189		if(pVUI_Seq_Not_Used->chroma_location_info_present_flag)
190		{
191			pVUI_Seq_Not_Used->chroma_sample_loc_type_top_field = h264_GetVLCElement(parent, pInfo, false);
192			pVUI_Seq_Not_Used->chroma_sample_loc_type_bottom_field = h264_GetVLCElement(parent, pInfo, false);
193		}
194
195		viddec_pm_get_bits(parent, &code, 1);
196		SPS->sps_disp.vui_seq_parameters.timing_info_present_flag = (uint8_t)code;
197
198		if(SPS->sps_disp.vui_seq_parameters.timing_info_present_flag == 1)
199		{
200			viddec_pm_get_bits(parent, &code, 32);
201			SPS->sps_disp.vui_seq_parameters.num_units_in_tick = (uint32_t)code;
202
203			viddec_pm_get_bits(parent, &code, 32);
204			SPS->sps_disp.vui_seq_parameters.time_scale = (uint32_t)code;
205
206			viddec_pm_get_bits(parent, &code, 1);
207			SPS->sps_disp.vui_seq_parameters.fixed_frame_rate_flag = (uint8_t)code;
208		}
209
210		viddec_pm_get_bits(parent, &code, 1);
211		SPS->sps_disp.vui_seq_parameters.nal_hrd_parameters_present_flag = (uint8_t)code;
212
213		if(SPS->sps_disp.vui_seq_parameters.nal_hrd_parameters_present_flag == 1)
214		{
215			nal_hrd = 1;
216			ret |= h264_Parse_HRD_Parameters(parent,pInfo, nal_hrd,SPS, pVUI_Seq_Not_Used);
217		}
218
219		viddec_pm_get_bits(parent, &code, 1);
220		SPS->sps_disp.vui_seq_parameters.vcl_hrd_parameters_present_flag = (uint8_t)code;
221
222		if(SPS->sps_disp.vui_seq_parameters.vcl_hrd_parameters_present_flag == 1)
223		{
224			nal_hrd = 0;
225			ret |= h264_Parse_HRD_Parameters(parent,pInfo, nal_hrd,SPS, pVUI_Seq_Not_Used);
226		}
227
228		if((SPS->sps_disp.vui_seq_parameters.nal_hrd_parameters_present_flag == 1) || (SPS->sps_disp.vui_seq_parameters.vcl_hrd_parameters_present_flag == 1))
229		{
230			viddec_pm_get_bits(parent, &code, 1);
231			SPS->sps_disp.vui_seq_parameters.low_delay_hrd_flag = (uint8_t)code;
232		}
233
234		viddec_pm_get_bits(parent, &code, 1);
235		SPS->sps_disp.vui_seq_parameters.pic_struct_present_flag = (uint8_t)code;
236
237		if(viddec_pm_get_bits(parent, &code, 1) == -1) {
238			ret = H264_STATUS_ERROR;
239			break;
240		}
241		SPS->sps_disp.vui_seq_parameters.bitstream_restriction_flag = (uint8_t)code;
242
243		if(SPS->sps_disp.vui_seq_parameters.bitstream_restriction_flag)
244		{
245			viddec_pm_get_bits(parent, &code, 1);
246			pVUI_Seq_Not_Used->motion_vectors_over_pic_boundaries_flag = (uint8_t)code;
247
248			pVUI_Seq_Not_Used->max_bytes_per_pic_denom = h264_GetVLCElement(parent, pInfo, false);
249			pVUI_Seq_Not_Used->max_bits_per_mb_denom = h264_GetVLCElement(parent, pInfo, false);
250			pVUI_Seq_Not_Used->log2_max_mv_length_horizontal = h264_GetVLCElement(parent, pInfo, false);
251			pVUI_Seq_Not_Used->log2_max_mv_length_vertical = h264_GetVLCElement(parent, pInfo, false);
252			SPS->sps_disp.vui_seq_parameters.num_reorder_frames = h264_GetVLCElement(parent, pInfo, false);
253			SPS->sps_disp.vui_seq_parameters.max_dec_frame_buffering = h264_GetVLCElement(parent, pInfo, false);
254
255			if(SPS->sps_disp.vui_seq_parameters.max_dec_frame_buffering == MAX_INT32_VALUE)
256				ret = H264_STATUS_ERROR;
257		}
258	}while (0);
259
260	return ret;
261}
262
263
264h264_Status h264_Parse_SeqParameterSet(void *parent,h264_Info * pInfo, seq_param_set_used_ptr SPS, vui_seq_parameters_t_not_used_ptr pVUI_Seq_Not_Used, int32_t* pOffset_ref_frame)
265{
266	h264_Status ret = H264_SPS_ERROR;
267
268	int32_t i = 0, tmp = 0;
269   int32_t PicWidthInMbs, PicHeightInMapUnits, FrameHeightInMbs;
270	uint32_t code = 0;
271   uint32_t data = 0;
272
273	//SPS->profile_idc = h264_GetBits(pInfo, 8, "Profile");
274	viddec_pm_get_bits(parent, &code, 8);
275	SPS->profile_idc = (uint8_t)code;
276
277 	switch(SPS->profile_idc)
278	{
279		case h264_ProfileBaseline:
280		case h264_ProfileMain:
281		case h264_ProfileExtended:
282		case h264_ProfileHigh10:
283		case h264_ProfileHigh422:
284		case h264_ProfileHigh444:
285		case h264_ProfileHigh:
286			break;
287		default:
288			return H264_SPS_INVALID_PROFILE;
289			break;
290	}
291
292	//SPS->constraint_set0_flag = h264_GetBits(pInfo, 1, "constraint_set0_flag");
293	//SPS->constraint_set1_flag = h264_GetBits(pInfo, 1, "constraint_set1_flag");		//should be 1
294	//SPS->constraint_set2_flag = h264_GetBits(pInfo, 1, "constraint_set2_flag");
295	//SPS->constraint_set3_flag = h264_GetBits(pInfo, 1, "constraint_set3_flag");
296
297	viddec_pm_get_bits(parent, &code, 4);
298	SPS->constraint_set_flags = (uint8_t)code;
299
300	//// reserved_zero_4bits
301	viddec_pm_get_bits(parent, (uint32_t *)&code, 4);
302
303	viddec_pm_get_bits(parent, &code, 8);
304	SPS->level_idc = (uint8_t)code;
305
306	switch(SPS->level_idc)
307	{
308		case h264_Level1b:
309		case h264_Level1:
310		case h264_Level11:
311		case h264_Level12:
312		case h264_Level13:
313		case h264_Level2:
314		case h264_Level21:
315		case h264_Level22:
316		case h264_Level3:
317		case h264_Level31:
318		case h264_Level32:
319		case h264_Level4:
320		case h264_Level41:
321		case h264_Level42:
322		case h264_Level5:
323		case h264_Level51:
324			break;
325		default:
326			return H264_SPS_INVALID_LEVEL;
327	}
328
329	do {
330		SPS->seq_parameter_set_id = h264_GetVLCElement(parent, pInfo, false);
331
332		//// seq_parameter_set_id ---[0,31]
333		if(SPS->seq_parameter_set_id > MAX_NUM_SPS -1)
334			break;
335
336		if((SPS->profile_idc == h264_ProfileHigh) || (SPS->profile_idc == h264_ProfileHigh10) ||
337	        (SPS->profile_idc == h264_ProfileHigh422) || (SPS->profile_idc == h264_ProfileHigh444)   )
338		{
339			//// chroma_format_idc ---[0,3], currently we don't support 444, so [0,2]
340			data = h264_GetVLCElement(parent, pInfo, false);
341			if( data > H264_CHROMA_422)
342				break;
343			SPS->sps_disp.chroma_format_idc = (uint8_t)data;
344			//if(SPS->sps_disp.chroma_format_idc == H264_CHROMA_444) {}
345
346			//// bit_depth_luma_minus8 ---[0,4], -----only support 8-bit pixel
347			data = h264_GetVLCElement(parent, pInfo, false);
348			if( data)
349				break;
350			SPS->bit_depth_luma_minus8 = (uint8_t)data;
351
352			//// bit_depth_chroma_minus8 ---[0,4]
353			data = h264_GetVLCElement(parent, pInfo, false);
354			if( data )
355				break;
356			SPS->bit_depth_chroma_minus8 = (uint8_t)data;
357
358
359			viddec_pm_get_bits(parent, &code, 1);
360			SPS->lossless_qpprime_y_zero_flag = (uint8_t)code;
361
362			viddec_pm_get_bits(parent, &code, 1);
363			SPS->seq_scaling_matrix_present_flag = (uint8_t)code;
364
365			if(SPS->seq_scaling_matrix_present_flag == 1)
366			{
367				//int n_ScalingList = (SPS->sps_disp.chroma_format_idc != H264_CHROMA_444) ? 8 : 12;
368				int n_ScalingList = 8;				/// We do not support 444 currrently
369
370				for(i=0; i<n_ScalingList; i++)
371				{
372					viddec_pm_get_bits(parent, &code, 1);
373					SPS->seq_scaling_list_present_flag[i] = (uint8_t)code;
374
375					if(SPS->seq_scaling_list_present_flag[i])
376					{
377					  	if(i<6)
378							h264_Scaling_List(parent, SPS->ScalingList4x4[i], 16, &SPS->UseDefaultScalingMatrix4x4Flag[i], pInfo);
379						else
380							h264_Scaling_List(parent, SPS->ScalingList8x8[i-6], 64, &SPS->UseDefaultScalingMatrix8x8Flag[i-6], pInfo);
381					}
382				}
383			}
384		}
385		else
386		{
387			SPS->sps_disp.chroma_format_idc = 1;
388			SPS->seq_scaling_matrix_present_flag = 0;
389
390			SPS->bit_depth_luma_minus8 = 0;
391			SPS->bit_depth_chroma_minus8 = 0;
392			//h264_SetDefaultScalingLists(pInfo);
393		}
394
395	   //// log2_max_frame_num_minus4 ---[0,12]
396	  	data = (h264_GetVLCElement(parent, pInfo, false));
397		if( data > 12)
398			break;
399		SPS->log2_max_frame_num_minus4 = (uint8_t)data;
400
401		//// pic_order_cnt_type ---- [0,2]
402		data = h264_GetVLCElement(parent, pInfo, false);
403		if( data > 2)
404			break;
405		SPS->pic_order_cnt_type = (uint8_t)data;
406
407
408		SPS->expectedDeltaPerPOCCycle = 0;
409		if(SPS->pic_order_cnt_type == 0)	{
410			SPS->log2_max_pic_order_cnt_lsb_minus4 = h264_GetVLCElement(parent, pInfo, false);
411		} else if(SPS->pic_order_cnt_type == 1){
412			viddec_pm_get_bits(parent, &code, 1);
413			SPS->delta_pic_order_always_zero_flag = (uint8_t)code;
414
415			SPS->offset_for_non_ref_pic = h264_GetVLCElement(parent, pInfo, true);
416			SPS->offset_for_top_to_bottom_field = h264_GetVLCElement(parent, pInfo, true);
417
418			//// num_ref_frames_in_pic_order_cnt_cycle ---- [0,255]
419	      data = h264_GetVLCElement(parent, pInfo, false);
420			if( data > 255)
421				break;
422			SPS->num_ref_frames_in_pic_order_cnt_cycle = (uint8_t)data;
423
424
425			//Alloc memory for frame offset -- FIXME
426			for(i=0; i< SPS->num_ref_frames_in_pic_order_cnt_cycle; i++)
427			{
428				/////SPS->offset_for_ref_frame[i] could be removed from SPS
429#ifndef USER_MODE
430				tmp = h264_GetVLCElement(parent, pInfo, true);
431				pOffset_ref_frame[i]=tmp;
432				SPS->expectedDeltaPerPOCCycle += tmp;
433#else
434				tmp = h264_GetVLCElement(parent, pInfo, true);
435				SPS->offset_for_ref_frame[i]=tmp;
436				SPS->expectedDeltaPerPOCCycle += tmp;
437#endif
438			}
439		}
440
441		//// num_ref_frames ---[0,16]
442		data = h264_GetVLCElement(parent, pInfo, false);
443		if( data > 16)
444			break;
445		SPS->num_ref_frames = (uint8_t)data;
446
447		viddec_pm_get_bits(parent, &code, 1);
448		SPS->gaps_in_frame_num_value_allowed_flag = (uint8_t)code;
449
450
451		SPS->sps_disp.pic_width_in_mbs_minus1 = h264_GetVLCElement(parent, pInfo, false);
452		SPS->sps_disp.pic_height_in_map_units_minus1 = h264_GetVLCElement(parent, pInfo, false);
453		viddec_pm_get_bits(parent, &code, 1);
454		SPS->sps_disp.frame_mbs_only_flag = (uint8_t)code;
455
456		/// err check for size
457		PicWidthInMbs       = (SPS->sps_disp.pic_width_in_mbs_minus1 + 1);
458		PicHeightInMapUnits = (SPS->sps_disp.pic_height_in_map_units_minus1 + 1);
459		FrameHeightInMbs    = SPS->sps_disp.frame_mbs_only_flag? PicHeightInMapUnits: (PicHeightInMapUnits<<1);
460		if((PicWidthInMbs < 2) || (PicWidthInMbs > 128) || (FrameHeightInMbs < 2) || (FrameHeightInMbs>128))
461			break;
462
463		if(!SPS->sps_disp.frame_mbs_only_flag)
464		{
465			viddec_pm_get_bits(parent, &code, 1);
466			SPS->sps_disp.mb_adaptive_frame_field_flag = (uint8_t)code;
467		}
468
469		//SPS->frame_height_in_mbs = (2-SPS->sps_disp.frame_mbs_only_flag)*(SPS->sps_disp.pic_height_in_map_units_minus1+1);
470		//SPS->pic_size_in_map_units = (SPS->sps_disp.pic_width_in_mbs_minus1+1)*SPS->sps_disp.frame_height_in_mbs;
471
472		viddec_pm_get_bits(parent, &code, 1);
473		SPS->sps_disp.direct_8x8_inference_flag = (uint8_t)code;
474
475		viddec_pm_get_bits(parent, &code, 1);
476		SPS->sps_disp.frame_cropping_flag = (uint8_t)code;
477
478		if(SPS->sps_disp.frame_cropping_flag)
479		{
480			SPS->sps_disp.frame_crop_rect_left_offset = h264_GetVLCElement(parent, pInfo, false);
481			SPS->sps_disp.frame_crop_rect_right_offset = h264_GetVLCElement(parent, pInfo, false);
482			SPS->sps_disp.frame_crop_rect_top_offset = h264_GetVLCElement(parent, pInfo, false);
483			SPS->sps_disp.frame_crop_rect_bottom_offset = h264_GetVLCElement(parent, pInfo, false);
484		}
485
486		//// when frame_mbs_only_flag is equal to 0, direct_8x8_inference_flag shall be equal to 1
487		if (SPS->sps_disp.frame_mbs_only_flag == 0 && SPS->sps_disp.direct_8x8_inference_flag == 0){
488			break;
489		}
490
491		////// vui_parameters
492		if(viddec_pm_get_bits(parent, &code, 1) == -1)
493			break;
494		SPS->sps_disp.vui_parameters_present_flag = (uint8_t)code;
495		ret = H264_STATUS_OK;
496
497		if(SPS->sps_disp.vui_parameters_present_flag)
498		{
499#ifndef VBP		// Ignore VUI parsing result
500			ret =
501#endif
502			h264_Parse_Vui_Parameters(parent, pInfo, SPS, pVUI_Seq_Not_Used);
503		}
504
505	}while(0);
506
507	//h264_Parse_rbsp_trailing_bits(pInfo);
508
509	return ret;
510}
511
512//#endif
513
514