예제 #1
0
파일: pps.c 프로젝트: janieltec/svc
/**
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);
}
예제 #2
0
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);
	}
}