/** Same as previous but without SliceIgroup table. */ void PPSCut (unsigned char *data, PPS *pps, SPS *sps, int NalBytesInNalunit ) { int Position = 8; unsigned char Pps_id = (unsigned char) read_ue(data, &Position); unsigned char Sps_id = (unsigned char) read_ue(data, &Position); unsigned char pic_parameter_set_id = CLIP3(0, PPS_BUF_SIZE - 1, Pps_id); unsigned char seq_parameter_set_id = CLIP3(0, SPS_BUF_SIZE - 1, Sps_id); PPS *pt_pps = &pps[pic_parameter_set_id]; pt_pps -> seq_parameter_set_id = seq_parameter_set_id; //Initialization of the maximun number of pps if(pic_parameter_set_id > pps[0] . MaxPpsId){ pps[0] . MaxPpsId = pic_parameter_set_id; } PpsFirstHeader(data, &Position, pt_pps); PpsSliceGroupHeaderCut(data, &Position, pt_pps); PpsEndOfHeader(data, &Position, pt_pps); if( more_rbsp_data(data, &Position, &NalBytesInNalunit) ) { // Position < NalBytesInNalunit << 3 SPS *pt_sps = &sps[seq_parameter_set_id]; PpsHighProfile(data, &Position, pt_pps, pt_sps); } rbsp_trailing_bits(&Position); }
void seq_parameter_set( unsigned char *data, SPS *sps){ int position = 8; int profile_idc = getNbits(data, &position, 8); int constraint = getNbits(data, &position, 8); int level_idc = getNbits(data, &position, 8); //level_idc = if (profile_idc && !(constraint & 0xf)){ char Sps_id = read_ue(data, &position); char seq_parameter_set_id = CLIP3(0, SPS_BUF_SIZE, Sps_id); SPS *pt_sps = &sps [seq_parameter_set_id]; //To save parameter before resetting short b_stride = pt_sps -> b_stride; short b8_stride = pt_sps -> b8_stride; //Initialization of the maximun number of sps if(seq_parameter_set_id > sps[0] . MaxSpsId){ sps[0] . MaxSpsId = seq_parameter_set_id; } //Intilaize the SPS to zero memset(pt_sps, 0, sizeof(SPS)); pt_sps -> b_stride = b_stride; pt_sps -> b8_stride = b8_stride; pt_sps -> profile_idc = profile_idc; pt_sps -> level_idc = level_idc; seq_parameter_set_data(data, &position, pt_sps); pt_sps -> slice_header_restriction_flag = -1; rbsp_trailing_bits(&position); } }