📄 header.c
字号:
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 + -