⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 header.c

📁 avs-s最新代码,包括编码器和解码器源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	len+=u_v(8, "PB picture start code",0xB6,bitstream);
	//xyji 12.23  
	len+=u_v(16,"bbv delay",0xffff/*bbv_delay*/,bitstream);
	len+=u_v(2,"picture coding type",picture_coding_type,bitstream);

	//兼容AVS-P2 WANGJP START
	if (input->profile_id == _S_PROFILE_ID)
	{
		//核心帧
		if(picture_coding_type==1 && core_frame_enable_flag)
		{
			len+=u_v(1, "Is_coreframe_flag", cur_core_frame_flag, bitstream);
			if(cur_core_frame_flag)
			{
				len+=u_v(log2_core_frame_buffer_size, "Coreframe_num", core_frame_num, bitstream);
				len+=u_v(log2_core_frame_buffer_size, "Coreframe_ref_num", core_frame_ref_num, bitstream);
			}		
		}
	}
	//WANGJP END

	len+=u_v(8,"picture_distance",picture_distance,bitstream);
	
	//if(low_delay == 1)
	if(input->low_delay) //cjw 20070414
	{
		len+=ue_v("bbv check times",bbv_check_times,bitstream);
	}
	
	len+=u_v(1,"progressive frame",img->progressive_frame,bitstream);
	if (!img->progressive_frame)
	{
		len+=u_v(1,"picture_structure",img->picture_structure,bitstream);
		if (!img->picture_structure)
		{   
			img->advanced_pred_mode_disable=1;  //add by wuzhongmou 06.10 	
			len+=u_v(1,"advanced_pred_mode_disable",img->advanced_pred_mode_disable,bitstream);
		}
	}
	len+=u_v(1,"top field first",input->top_field_first,bitstream);
	len+=u_v(1,"repeat first field",input->repeat_first_field,bitstream);
	len+=u_v(1,"fixed qp",input->fixed_picture_qp,bitstream);
	//rate control
	if(img->type==INTER_IMG)
	{
		if(input->RCEnable)
			len+=u_v(6,"I picture QP",img->qp,bitstream);
		else
		{
			len+=u_v(6,"I picture QP",input->qpN,bitstream);
			img->qp=input->qpN;
		}
	}
	else if(img->type==B_IMG)
	{
		if(input->RCEnable)
			len+=u_v(6,"I picture QP",img->qp,bitstream);
		else
		{
			len+=u_v(6,"I picture QP",input->qpB,bitstream);
			img->qp=input->qpB;
		}
	}
//背景帧和核心帧都对下面的判断条件做了修改,原来是下面的那个判断条件
	if (!(((picture_coding_type == 2 || picture_coding_type == 3)&& img->picture_structure==1)||(cur_core_frame_flag&&img->picture_structure==1)))

//	if (!(picture_coding_type == 2 && img->picture_structure==1))
	{
		len+=u_v(1,"piture reference flag",picture_reference_flag,bitstream);
	}

	len+=u_v(1, "no_forward_reference_flag", 0, bitstream);		// Added by cjw, 20070327

//  len+=u_v(4,"reserved bits",0,bitstream);					// Commented by cjw, 20070327
	len+=u_v(3,"reserved bits",0,bitstream);					// Added by cjw, 20070327
	len+=u_v(1,"skip mode flag",input->skip_mode_flag, bitstream);
	
	len+=u_v(1,"loop filter disable",input->loop_filter_disable,bitstream);
	if (!input->loop_filter_disable)
	{
		len+=u_v(1,"loop filter parameter flag",input->loop_filter_parameter_flag,bitstream);
		if (input->loop_filter_parameter_flag)
		{
			len+=se_v("alpha offset",input->alpha_c_offset,bitstream);
			len+=se_v("beta offset",input->beta_offset,bitstream);
		}
	}
	
  return len;
}

/*
*************************************************************************
* Function:
* Input:
* Output:
* Return: 
* Attention:    cjw 20060112  Spec 9.4.3
///frame coding/////////
P		img->lum_scale[0]  fw[0] 
		img->lum_scale[1]  fw[1]			
B	    img->lum_scale[0]  fw[0]
		img->lum_scale[1]  bw[0]
///field coding////////
P		img->lum_scale[0]  fw[0] ; img->lum_scale[1]  fw[1] 
		img->lum_scale[2]  fw[2] ; img->lum_scale[3]  fw[3] 			
B		img->lum_scale[0]  fw[0] ; img->lum_scale[1]  bw[0] 
		img->lum_scale[2]  fw[1] ; img->lum_scale[3]  bw[1] 		                                               
*************************************************************************
*/                                                                

int SliceHeader(int slice_nr, int slice_qp)
{
  Bitstream *bitstream = currBitStream;
  int i;
  int len = 0;
#ifdef FLEXPICHEAD
  int slice_picture_header_flag, slice_picture_coding_type;
#endif

  //cjw 20060321
  int weight_para_num;
  int mb_row;    //added by mz, 2008.04
  int slice_set_index=img->mb_data[img->current_mb_nr].slice_set_index;  //added by mz, 2008.04
  int slice_header_flag=img->mb_data[img->current_mb_nr].slice_header_flag; //added by mz, 2008.04
  int end_of_slice_set_flag=img->mb_data[img->current_mb_nr].end_of_slice_set_flag; //added by mz, 2008.04

  if(input->slice_set_enable)  //X ZHENG, 2008.04
     slice_qp = img->mb_data[img->current_mb_nr].sliceqp;

    len+=u_v(24,"start code prefix",1,bitstream);
//	len+=u_v(8, "slice vertical position",slice_nr,bitstream);  //cjw 20060327
//	len+=u_v(8, "slice vertical position",img->current_mb_nr/(img->width>>4),bitstream);   //add by wuzhongmou 200612  //commented by Xiaozhen Zheng, 20070327
	len+=u_v(8, "slice vertical position",(img->current_mb_nr+bot_field_mb_nr+1)/(img->width>>4),bitstream);	//Added by Xiaozhen Zheng, HiSilicon, 20070327
	if(img->height > 2800)     //add by wuzhongmou 200612
		len+=u_v(3, "slice vertical position extension",slice_vertical_position_extension,bitstream);

	if(img->height > 2800)    //added by mz, 2008.04
		mb_row = (slice_vertical_position_extension << 7) + (img->current_mb_nr+bot_field_mb_nr+1)/(img->width>>4);
	else
		mb_row = (img->current_mb_nr+bot_field_mb_nr+1)/(img->width>>4);  

	if(input->slice_set_enable)    //added by mz, 2008.04
	{
		len+=u_v(8, "slice horizontal position",((img->current_mb_nr+bot_field_mb_nr+1)-mb_row*(img->width>>4)),bitstream);	//Added by Xiaozhen Zheng, HiSilicon, 20070327
		if ( img->width > 4080 )
			len+=u_v(2, "slice horizontal position extension",slice_horizontal_position_extension,bitstream);
        len+=u_v(6, "slice set index", slice_set_index, bitstream);
        len+=u_v(1, "slice header flag", slice_header_flag, bitstream);
		len+=u_v(1, "end of slice set flag", end_of_slice_set_flag, bitstream);
	}
	
#ifdef FLEXPICHEAD
	if(input->pichead_protect_enable && (img->type == INTRA_IMG  || ((img->type == INTER_IMG || img->type ==B_IMG) 
		&& cur_core_frame_flag ==0 && input->background ==0)) )
		slice_picture_header_flag = 1;
	else
		slice_picture_header_flag = 0;
	
	len += u_v(1,"slice_picture_header_flag", slice_picture_header_flag, bitstream);
	if(slice_picture_header_flag)
	{
		if(img->type == INTRA_IMG)       //I
			slice_picture_coding_type = 0;
		else if(img->type == INTER_IMG)  //P
			slice_picture_coding_type = 1;
		else if(img->type == B_IMG)
			slice_picture_coding_type = 2;     //B
		else
            slice_picture_coding_type = 3;      //S
		
		len += u_v(2,"slice_picture_coding_type", slice_picture_coding_type,bitstream);
		len += u_v(8,"slice_picture_distance", picture_distance,bitstream);
		len+=u_v(1,"progressive frame",img->progressive_frame,bitstream);
		if(!img->progressive_frame)
			len+=u_v(1,"picture_structure",img->picture_structure,bitstream);
		
		len+=u_v(1,"top field first",input->top_field_first,bitstream);
		len+=u_v(1,"repeat first field",input->repeat_first_field,bitstream);
		len+=u_v(1,"fixed picture qp",input->fixed_picture_qp,bitstream);
		if(slice_picture_coding_type ==0)
			if(img->progressive_frame==0 && img->picture_structure == 0)
                input->skip_mode_flag =1;
			else
               input->skip_mode_flag = 0;
		else
			input->skip_mode_flag =1;
		len+=u_v(1,"skip mode flag",input->skip_mode_flag,bitstream);
		if (!(slice_picture_coding_type == 2 && img->picture_structure==1) && (slice_picture_coding_type != 0))
		{
			len+=u_v(1,"slice_piture reference flag",picture_reference_flag,bitstream);
		}
		
		
	}

#endif	
	
	if(!input->slice_set_enable||(input->slice_set_enable&&slice_header_flag))    //added by mz, 2008.04
	{
		if (!input->fixed_picture_qp&&input->RCEnable)  //added by mz, 2008.04
		{
			len += u_v(1,"fixed_slice_qp",0,bitstream);//  [5/8/2007 Leeswan]
			len += u_v(6,"slice_qp",slice_qp,bitstream);
			img->qp=slice_qp;
		}
		else if(input->slice_set_enable) //added by mz, 2008.04.07
		{
			len += u_v(1,"fixed_slice_qp",1,bitstream);
			len += u_v(6,"slice_qp",slice_qp,bitstream);
			img->qp=slice_qp;
		}
		
		// 2004/08
		if(img->type != INTRA_IMG){
			len += u_v(1,"slice weighting flag",img->LumVarFlag,bitstream);
			
			if(img->LumVarFlag)	
			{
				//cjw 20060321  Spec 9.4.3
				if(second_IField && !img->picture_structure)  //I bottom
					weight_para_num=1;
				else if(img->type==INTER_IMG && img->picture_structure)  //P frame coding
					weight_para_num=2;
				else if(img->type==INTER_IMG && !img->picture_structure) //P field coding
					weight_para_num=4;
				else if(img->type==B_IMG && img->picture_structure)  //B frame coding
					weight_para_num=2;
				else if(img->type==B_IMG && !img->picture_structure) //B field coding
					weight_para_num=4;
				
				//for(i=0;i<img->buf_cycle;i++) //cjw20051230
				for(i=0;i<weight_para_num;i++) //cjw20050321
				{
					len+=u_v(8,"luma scale",img->lum_scale[i],bitstream);      //cjw 20051230
					//  len+=u_v(8,"luma shift",img->lum_shift[i]+127,bitstream); 
					//	img->lum_shift[i]=-1;
					len+=u_v(8,"luma shift",img->lum_shift[i],bitstream);	   //cjw 20051230
					
					u_1 ("insert bit", 1, bitstream);
					
					//兼容AVS-P2 WANGJP START
					if (input->profile_id != _S_PROFILE_ID || input->chroma_format)
					{
						len+=u_v(8,"chroma scale",img->chroma_scale[i],bitstream); //cjw 20051230
						//  len+=u_v(8,"chroma shift",img->chroma_shift[i]+127,bitstream);
						len+=u_v(8,"chroma shift",img->chroma_shift[i],bitstream); //cjw 20051230
						
						u_1 ("insert bit", 1, bitstream); //cjw 20060321
					}
					//WANGJP END
				}
				
				len+=u_v(1,"mb weighting flag",img->mb_weighting_flag,bitstream);
			}
		}
	}
	if(input->slice_set_enable&&!slice_header_flag)
	    img->qp=slice_qp;	//X ZHENG, 2008.04
	// end for 2004/08
  return len;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -