Home | History | Annotate | Download | only in parser

Lines Matching refs:pInfo

25 h264_Status h264_Scaling_List(void *parent, uint8_t *scalingList, int32_t sizeOfScalingList, uint8_t *UseDefaultScalingMatrix, h264_Info* pInfo)
53 delta_scale = h264_GetVLCElement(parent, pInfo, true);
70 h264_Status h264_active_par_set(h264_Info*pInfo,h264_Slice_Header_t* SliceHeader)
72 //h264_Slice_Header_t* SliceHeader = &pInfo->SliceHeader;
79 if((SliceHeader->first_mb_in_slice == 0) || (SliceHeader->pic_parameter_id != pInfo->active_PPS.pic_parameter_set_id))
82 h264_Parse_Copy_Pps_From_DDR(pInfo, &pInfo->active_PPS, SliceHeader->pic_parameter_id);
84 if(pInfo->active_PPS.seq_parameter_set_id >= MAX_NUM_SPS)
89 if(pInfo->active_PPS.seq_parameter_set_id != pInfo->active_SPS.seq_parameter_set_id)
91 pInfo->Is_SPS_updated =1;
92 h264_Parse_Copy_Sps_From_DDR(pInfo, &pInfo->active_SPS, pInfo->active_PPS.seq_parameter_set_id);
93 h264_Parse_Clear_Sps_Updated_Flag(pInfo, pInfo->active_PPS.seq_parameter_set_id);
97 if(h264_Parse_Check_Sps_Updated_Flag(pInfo, pInfo->active_PPS.seq_parameter_set_id))
99 pInfo->Is_SPS_updated =1;
100 h264_Parse_Copy_Sps_From_DDR(pInfo, &pInfo->active_SPS, pInfo->active_PPS.seq_parameter_set_id);
101 h264_Parse_Clear_Sps_Updated_Flag(pInfo, pInfo->active_PPS.seq_parameter_set_id);
106 pInfo->active_PPS = PPS_GL[SliceHeader->pic_parameter_id];
107 pInfo->active_SPS = SPS_GL[pInfo->active_PPS.seq_parameter_set_id];
110 if(pInfo->active_SPS.seq_parameter_set_id >= MAX_NUM_SPS)
116 if((pInfo->active_PPS.seq_parameter_set_id >= MAX_NUM_SPS) || (pInfo->active_SPS.seq_parameter_set_id >= MAX_NUM_SPS))
123 pInfo->img.PicWidthInMbs = (pInfo->active_SPS.sps_disp.pic_width_in_mbs_minus1 + 1);
124 //pInfo->img.PicHeightInMapUnits = (pInfo->active_SPS.sps_disp.pic_height_in_map_units_minus1 + 1);
125 pInfo->img.FrameHeightInMbs = pInfo->active_SPS.sps_disp.frame_mbs_only_flag? \
126 (pInfo->active_SPS.sps_disp.pic_height_in_map_units_minus1 + 1): \
127 ((pInfo->active_SPS.sps_disp.pic_height_in_map_units_minus1 + 1)<<1);
140 h264_Status h264_Parse_Slice_Layer_Without_Partitioning_RBSP(void *parent, h264_Info* pInfo, h264_Slice_Header_t *SliceHeader)
150 //retStatus = h264_Parse_Slice_Header_1(pInfo);
154 if(h264_Parse_Slice_Header_1(parent, pInfo, SliceHeader) == H264_STATUS_OK)
159 retStatus = h264_active_par_set(pInfo, SliceHeader);
163 switch(pInfo->active_SPS.profile_idc)
168 pInfo->active_PPS.transform_8x8_mode_flag=0;
169 pInfo->active_PPS.pic_scaling_matrix_present_flag =0;
170 pInfo->active_PPS.second_chroma_qp_index_offset = pInfo->active_PPS.chroma_qp_index_offset;
176 if( h264_Parse_Slice_Header_2(parent, pInfo, SliceHeader) != H264_STATUS_OK)
180 else if( h264_Parse_Slice_Header_3(parent, pInfo, SliceHeader) != H264_STATUS_OK)
191 //pInfo->wl_err_flag |= VIDDEC_FW_WORKLOAD_ERR_NOTDECODABLE;
199 //retStatus = h264_Parse_Slice_Data(pInfo);
205 //h264_Parse_rbsp_trailing_bits(pInfo);
216 h264_Status h264_Parse_NAL_Unit(void *parent, h264_Info* pInfo, uint8_t *nal_ref_idc)
220 //h264_NAL_Unit_t* NAL = &pInfo->NAL;
230 pInfo->nal_unit_type = (uint8_t)code;
240 pInfo->nal_unit_type = (uint8_t)((code>>0)&0x1f);
268 void h264_init_old_slice(h264_Info* pInfo)
270 pInfo->SliceHeader.field_pic_flag = 0;
272 pInfo->SliceHeader.pic_parameter_id = 0xFF;
274 pInfo->SliceHeader.frame_num = INT_MAX;
276 pInfo->SliceHeader.nal_ref_idc = 0xFF;
278 pInfo->SliceHeader.idr_flag = 0;
280 pInfo->SliceHeader.pic_order_cnt_lsb = UINT_MAX;
281 pInfo->SliceHeader.delta_pic_order_cnt_bottom = INT_MAX;
283 pInfo->SliceHeader.delta_pic_order_cnt[0] = INT_MAX;
284 pInfo->SliceHeader.delta_pic_order_cnt[1] = INT_MAX;
290 void h264_init_img(h264_Info* pInfo)
292 h264_memset(&(pInfo->img), 0x0, sizeof(h264_img_par) );
303 h264_Info * pInfo = &(parser->info);
307 pInfo->SPS_PADDR_GL = parser->sps_pps_ddr_paddr;
308 pInfo->PPS_PADDR_GL = pInfo->SPS_PADDR_GL + MAX_NUM_SPS * sizeof(seq_param_set_all);
309 pInfo->OFFSET_REF_FRAME_PADDR_GL = pInfo->PPS_PADDR_GL + MAX_NUM_PPS * sizeof(pic_param_set);
310 pInfo->TMP_OFFSET_REFFRM_PADDR_GL = pInfo->OFFSET_REF_FRAME_PADDR_GL +
313 h264_memset( &(pInfo->active_SPS), 0x0, sizeof(seq_param_set_used) );
314 h264_memset( &(pInfo->active_PPS), 0x0, sizeof(pic_param_set) );
319 pInfo->active_SPS.seq_parameter_set_id = 0xff;
320 h264_Parse_Copy_Sps_To_DDR (pInfo, &(pInfo->active_SPS), i);
324 pInfo->active_PPS.seq_parameter_set_id = 0xff;
325 h264_Parse_Copy_Pps_To_DDR (pInfo, &(pInfo->active_PPS), i);
328 pInfo->active_SPS.seq_parameter_set_id = 0xff;
329 pInfo->sps_valid = 0;
330 pInfo->got_start = 0;
336 void h264_init_Info_under_sps_pps_level(h264_Info* pInfo)
340 h264_memset( &(pInfo->dpb), 0x0, sizeof(h264_DecodedPictureBuffer) );
341 h264_memset( &(pInfo->SliceHeader), 0x0, sizeof(h264_Slice_Header_t) );
342 h264_memset( &(pInfo->old_slice), 0x0, sizeof(OldSliceParams) );
343 h264_memset( &(pInfo->sei_information), 0x0, sizeof(sei_info) );
344 h264_memset( &(pInfo->img), 0x0, sizeof(h264_img_par) );
346 pInfo->h264_list_replacement = 0;
348 pInfo->h264_pwt_start_byte_offset = 0;
349 pInfo->h264_pwt_start_bit_offset = 0;
350 pInfo->h264_pwt_end_byte_offset = 0;
351 pInfo->h264_pwt_end_bit_offset = 0;
352 pInfo->h264_pwt_enabled = 0;
356 pInfo->slice_ref_list0[i] = 0;
357 pInfo->slice_ref_list1[i] = 0;
360 pInfo->qm_present_list = 0;
362 pInfo->nal_unit_type = 0;
363 pInfo->old_nal_unit_type = 0xff;
365 pInfo->push_to_cur = 0;
366 pInfo->Is_first_frame_in_stream = 1;
367 pInfo->Is_SPS_updated = 0;
368 pInfo->number_of_first_au_info_nal_before_first_slice = 0;
370 pInfo->is_frame_boundary_detected_by_non_slice_nal = 0;
371 pInfo->is_frame_boundary_detected_by_slice_nal = 0;
372 pInfo->is_current_workload_done = 0;
374 pInfo->sei_rp_received = 0;
375 pInfo->last_I_frame_idc = 255;
376 pInfo->wl_err_curr = 0;
377 pInfo->wl_err_next = 0;
379 pInfo->primary_pic_type_plus_one = 0;
380 pInfo->sei_b_state_ready = 0;
383 h264_init_old_slice(pInfo);
386 h264_init_dpb(&(pInfo->dpb));
389 h264_sei_stream_initialise(pInfo);
393 void h264_init_Info(h264_Info* pInfo)
395 h264_memset(pInfo, 0x0, sizeof(h264_Info));
397 pInfo->old_nal_unit_type = 0xff;
399 pInfo->Is_first_frame_in_stream =1;
400 pInfo->img.frame_count = 0;
401 pInfo->last_I_frame_idc = 255;
415 int32_t h264_is_second_field(h264_Info * pInfo)
417 h264_Slice_Header_t cur_slice = pInfo->SliceHeader;
418 OldSliceParams old_slice = pInfo->old_slice;
422 //pInfo->img.second_field = 0;
426 //OS_INFO( "xxx is_used = %d\n", pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].is_used);
430 if( ( MPD_DPB_FS_NULL_IDC != pInfo->dpb.fs_dec_idc)&&(3 != viddec_h264_get_is_used(&(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc])) )
431 &&(0 != viddec_h264_get_is_used(&(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc])) ))
444 //pInfo->img.second_field = 1;
468 int32_t h264_is_new_picture_start(h264_Info * pInfo, h264_Slice_Header_t cur_slice, h264_Slice_Header_t old_slice)
472 if(pInfo->number_of_first_au_info_nal_before_first_slice)
474 pInfo->number_of_first_au_info_nal_before_first_slice = 0;
497 if (pInfo->active_SPS.pic_order_cnt_type == 0)
503 if (pInfo->active_SPS.pic_order_cnt_type == 1)
513 int32_t h264_check_previous_frame_end(h264_Info * pInfo)
517 if( (h264_NAL_UNIT_TYPE_SLICE==pInfo->old_nal_unit_type)||(h264_NAL_UNIT_TYPE_IDR==pInfo->old_nal_unit_type) )
520 switch ( pInfo
534 pInfo->img.current_slice_num = 0;
536 if((pInfo->img.structure == FRAME) || (pInfo->img.second_field)) {
537 pInfo->is_frame_boundary_detected_by_non_slice_nal =1;
538 pInfo->is_current_workload_done=1;
563 void h264_update_old_slice(h264_Info * pInfo,h264_Slice_Header_t next_SliceHeader)
565 pInfo->old_slice.pic_parameter_id = pInfo->SliceHeader.pic_parameter_id;
567 pInfo->old_slice.frame_num = pInfo->SliceHeader.frame_num;
569 pInfo->old_slice.field_pic_flag = pInfo->SliceHeader.field_pic_flag;
571 if(pInfo->SliceHeader.field_pic_flag)
573 pInfo->old_slice.bottom_field_flag = pInfo->SliceHeader.bottom_field_flag;
576 pInfo->old_slice.nal_ref_idc = pInfo->SliceHeader.nal_ref_idc;
578 pInfo->old_slice.structure = pInfo->SliceHeader.structure;
580 pInfo->old_slice.idr_flag = pInfo->SliceHeader.idr_flag;
581 if (pInfo->SliceHeader.idr_flag)
583 pInfo->old_slice.idr_pic_id = pInfo->SliceHeader.idr_pic_id;
586 if (pInfo->active_SPS.pic_order_cnt_type == 0)
588 pInfo->old_slice.pic_order_cnt_lsb = pInfo->SliceHeader.pic_order_cnt_lsb;
589 pInfo->old_slice.delta_pic_order_cnt_bottom = pInfo->SliceHeader.delta_pic_order_cnt_bottom;
592 if (pInfo->active_SPS.pic_order_cnt_type == 1)
594 pInfo->old_slice.delta_pic_order_cnt[0] = pInfo->SliceHeader.delta_pic_order_cnt[0];
595 pInfo->old_slice.delta_pic_order_cnt[1] = pInfo->SliceHeader.delta_pic_order_cnt[1];
599 memcpy(&pInfo->SliceHeader, &next_SliceHeader, sizeof(h264_Slice_Header_t));
611 void h264_update_img_info(h264_Info * pInfo )
613 h264_DecodedPictureBuffer *p_dpb = &pInfo->dpb;
615 pInfo->img.frame_num = pInfo->SliceHeader.frame_num;
616 pInfo->img.structure = pInfo->SliceHeader.structure;
618 pInfo->img.field_pic_flag = pInfo->SliceHeader.field_pic_flag;
619 pInfo->img.bottom_field_flag = pInfo->SliceHeader.bottom_field_flag;
621 pInfo->img.MbaffFrameFlag = pInfo->active_SPS.sps_disp.mb_adaptive_frame_field_flag & (!(pInfo->SliceHeader.field_pic_flag));
622 pInfo->img.pic_order_cnt_type = pInfo->active_SPS.pic_order_cnt_type;
624 if(pInfo->img.pic_order_cnt_type == 1) {
625 pInfo->img.num_ref_frames_in_pic_order_cnt_cycle = pInfo->active_SPS.num_ref_frames_in_pic_order_cnt_cycle;
626 pInfo->img.delta_pic_order_always_zero_flag = pInfo->active_SPS.delta_pic_order_always_zero_flag;
627 pInfo->img.offset_for_non_ref_pic = pInfo->active_SPS.offset_for_non_ref_pic;
628 pInfo->img.offset_for_top_to_bottom_field = pInfo->active_SPS.offset_for_top_to_bottom_field;
631 pInfo->img.pic_order_cnt_lsb = pInfo->SliceHeader.pic_order_cnt_lsb;
632 //pInfo->img.pic_order_cnt_msb = pInfo->SliceHeader.pic_order_cnt_msb;
633 pInfo->img.delta_pic_order_cnt_bottom = pInfo->SliceHeader.delta_pic_order_cnt_bottom;
634 pInfo->img.delta_pic_order_cnt[0] = pInfo->SliceHeader.delta_pic_order_cnt[0];
635 pInfo->img.delta_pic_order_cnt[1] = pInfo->SliceHeader.delta_pic_order_cnt[1];
638 pInfo->img.PreviousFrameNum = pInfo->old_slice.frame_num;
640 pInfo->img.no_output_of_prior_pics_flag = pInfo->SliceHeader.sh_dec_refpic.no_output_of_prior_pics_flag;
643 if (pInfo->sei_information.recovery_point) {
644 int32_t MaxFrameNum = 1 << (pInfo->active_SPS.log2_max_frame_num_minus4 + 4);
645 pInfo->sei_information.recovery_frame_num = (pInfo->img.frame_num + pInfo->sei_information.recovery_frame_cnt) % MaxFrameNum;
648 if (pInfo->SliceHeader.idr_flag)
649 pInfo->sei_information.recovery_frame_num = pInfo->img.frame_num;
654 pInfo->img.curr_has_mmco_5 = 0;
656 if ( (pInfo->img.PicWidthInMbs != p_dpb->PicWidthInMbs)||
657 (pInfo->img.FrameHeightInMbs != p_dpb->FrameHeightInMbs) )
659 int32_t no_output_old_pics = (pInfo->SliceHeader.idr_flag)? pInfo->img.no_output_of_prior_pics_flag : 0;
662 h264_dpb_reset_dpb(pInfo, pInfo->img.PicWidthInMbs, pInfo->img.FrameHeightInMbs, 1, no_output_old_pics);
670 void h264_update_frame_type(h264_Info * pInfo )
674 if(pInfo->img.structure == FRAME)
676 if(pInfo->nal_unit_type == h264_NAL_UNIT_TYPE_IDR)
678 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (0x1 << FRAME_TYPE_STRUCTRUE_OFFSET)|(FRAME_TYPE_IDR << FRAME_TYPE_FRAME_OFFSET);
679 //pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = 0xff;
680 //pInfo->dpb.fs[0].pic_type = pInfo->dpb.fs_dec_idc;
686 switch(pInfo->SliceHeader.slice_type)
689 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (0x1 << FRAME_TYPE_STRUCTRUE_OFFSET)|(FRAME_TYPE_B << FRAME_TYPE_FRAME_OFFSET);
693 if( ((pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type) & (0x7 << FRAME_TYPE_FRAME_OFFSET))>>FRAME_TYPE_FRAME_OFFSET != FRAME_TYPE_B)
694 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (0x1 << FRAME_TYPE_STRUCTRUE_OFFSET)|(FRAME_TYPE_P << FRAME_TYPE_FRAME_OFFSET);
698 if( ((pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type) & (0x7 << FRAME_TYPE_FRAME_OFFSET))>>FRAME_TYPE_FRAME_OFFSET == FRAME_TYPE_INVALID)
700 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (0x1 << FRAME_TYPE_STRUCTRUE_OFFSET)|(FRAME_TYPE_I << FRAME_TYPE_FRAME_OFFSET);
702 pInfo->last_I_frame_idc = pInfo->dpb.fs_dec_idc;
714 else if(pInfo->img.structure == TOP_FIELD)
716 if(pInfo->nal_unit_type == h264_NAL_UNIT_TYPE_IDR)
718 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (FRAME_TYPE_IDR << FRAME_TYPE_TOP_OFFSET)|(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type & (0x7 << FRAME_TYPE_BOTTOM_OFFSET));;
722 switch(pInfo->SliceHeader.slice_type)
725 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (FRAME_TYPE_B << FRAME_TYPE_TOP_OFFSET)|(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type & (0x7 << FRAME_TYPE_BOTTOM_OFFSET));
729 if( ((pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type) & (0x7 << FRAME_TYPE_TOP_OFFSET))>>FRAME_TYPE_TOP_OFFSET != FRAME_TYPE_B)
730 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (FRAME_TYPE_P << FRAME_TYPE_TOP_OFFSET)|(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type & (0x7 << FRAME_TYPE_BOTTOM_OFFSET));
734 if( ((pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type) & (0x7 << FRAME_TYPE_TOP_OFFSET))>>FRAME_TYPE_TOP_OFFSET == FRAME_TYPE_INVALID)
736 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (FRAME_TYPE_I << FRAME_TYPE_TOP_OFFSET)|(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type & (0x7 << FRAME_TYPE_BOTTOM_OFFSET));
747 }else if(pInfo->img.structure == BOTTOM_FIELD)
749 if(pInfo->nal_unit_type == h264_NAL_UNIT_TYPE_IDR)
751 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (FRAME_TYPE_IDR << FRAME_TYPE_BOTTOM_OFFSET)|(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type & (0x7 << FRAME_TYPE_TOP_OFFSET));;
755 switch(pInfo->SliceHeader.slice_type)
758 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (FRAME_TYPE_B << FRAME_TYPE_BOTTOM_OFFSET)|(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type & (0x7 << FRAME_TYPE_TOP_OFFSET));
762 if( ((pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type) & (0x7 << FRAME_TYPE_BOTTOM_OFFSET))>>FRAME_TYPE_BOTTOM_OFFSET != FRAME_TYPE_B)
763 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (FRAME_TYPE_P << FRAME_TYPE_BOTTOM_OFFSET)|(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type & (0x7 << FRAME_TYPE_TOP_OFFSET));
767 if( ((pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type) & (0x7 << FRAME_TYPE_BOTTOM_OFFSET))>>FRAME_TYPE_BOTTOM_OFFSET == FRAME_TYPE_INVALID)
769 pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type = (FRAME_TYPE_I << FRAME_TYPE_BOTTOM_OFFSET)|(pInfo->dpb.fs[pInfo->dpb.fs_dec_idc].pic_type & (0x7 << FRAME_TYPE_TOP_OFFSET));