📄 header.c
字号:
// i_pos
if(FilterFlag[i_pos])
{
if (FilterFlag[h_pos])
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: i_pos", DiffQFilterCoef[i_pos][i] - DiffQFilterCoef[h_pos][i], bitstream);
else
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: i_pos", DiffQFilterCoef[i_pos][i], bitstream);
}
// j_pos
if(FilterFlag[j_pos])
{
if (FilterFlag[i_pos])
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: j_pos", DiffQFilterCoef[j_pos][i] - DiffQFilterCoef[i_pos][i], bitstream);
else
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: j_pos", DiffQFilterCoef[j_pos][i], bitstream);
}
// k_pos
if(FilterFlag[k_pos])
{
if (FilterFlag[j_pos])
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: k_pos", DiffQFilterCoef[k_pos][i] - DiffQFilterCoef[j_pos][i], bitstream);
else
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: k_pos", DiffQFilterCoef[k_pos][i], bitstream);
}
}
#ifdef DIRECTIONAL_FILTER
else if((input->UseAdaptiveFilter == 3) && img->AdaptiveFilterFlag == 1) //1D-AIF
{
#ifndef E_DAIF
len += u_v(2, "SH: apply_adaptive_filter", input->UseAdaptiveFilter, bitstream);
#else
len += u_v(3, "SH: apply_adaptive_filter", input->UseAdaptiveFilter, bitstream);
#endif
len += u_v(1, "SH: implementation_type", input->ImpType, bitstream);
len += sendCoefsAIF(bitstream);
}
#endif
#ifdef E_DAIF
else if((input->UseAdaptiveFilter == FILTER_TYPE_EDAIF) && img->AdaptiveFilterFlag == 1) //1D-AIF
{
len += u_v(3, "SH: apply_adaptive_filter", input->UseAdaptiveFilter, bitstream);
len += sendCoefs_EDAIF(bitstream);
}
#endif
else if(input->UseAdaptiveFilter && (img->type == P_SLICE || img->type == B_SLICE))
{
apply_adaptive_filter = 0;
#ifndef E_DAIF
len += u_v(2, "SH: apply_adaptive_filter", apply_adaptive_filter, bitstream);
#else
len += u_v(3, "SH: apply_adaptive_filter", apply_adaptive_filter, bitstream);
#endif
}
// printf("aif bits = %d\n",len - aif_temp);
#endif
#ifdef USE_INTRA_MDDT
len += u_v(1, "SE: use_intra_MDDT", input->UseIntraMDDT, bitstream);
#endif
#ifdef USE_HP_FILTER
len+=u_v(2,"SE: use_HP_filter", input->UseHPFilter, bitstream);
#endif
#ifdef SWITCHED_FILTERS
if((img->type != I_SLICE) && (input->UseHPFilter == HPF_SIFO))
{
if((img->filterParam == SIFO_FIRST_PASS) || ((img->type == B_SLICE) && (img->filterParam == SIFO_SEQ_FILTER)))
len += u_1("SH: encoding pass", 0, bitstream);
else
len += u_1("SH: encoding pass", 1, bitstream);
if((img->filterParam == SIFO_FIRST_PASS) || ((img->type == B_SLICE) && (img->filterParam == SIFO_SEQ_FILTER)))
{
int sub_pos;
int * filterSequence = img->filterSequence;
for(sub_pos = 1; sub_pos < 16; ++sub_pos)
{
if(filterSequence[sub_pos] == 0)
len += u_1("SH: filterSequence", 0, bitstream);
else
{
len += u_1("SH: filterSequence", 1, bitstream);
if(filterSequence[sub_pos] == 1)
len += u_1("SH: filterSequence", 0, bitstream);
else if(filterSequence[sub_pos] == 2)
len += u_1("SH: filterSequence", 1, bitstream);
else
error("filterSequence should be less than 3", -1);
}
}
}
else // Frame filter
{
int sub_pos, frame, nonzero=0;
for(sub_pos = 1; sub_pos < 16; ++sub_pos)
{
if(img->filterFrame[sub_pos] == 0)
len += u_1("SH: filterFrame", 0, bitstream);
else
{
len += u_1("SH: filterFrame", 1, bitstream);
if(img->filterFrame[sub_pos] == 1)
len += u_1("SH: filterFrame", 0, bitstream);
else if(img->filterFrame[sub_pos] == 2)
len += u_1("SH: filterFrame", 1, bitstream);
else
error("filterFrame should be less than 3", -1);
}
}
for(frame = 0; frame < listXsize[LIST_0]; ++frame)
{
if(frame == 0)
{
for(sub_pos = 0; sub_pos < 16; ++sub_pos)
if(img->subpelOffset_list0[sub_pos] != 0)
{
nonzero = 1;
break;
}
}
else
{
if(img->imgOffset_list0[frame] != 0)
{
nonzero = 1;
break;
}
}
}
len += u_1("nonzero offset", nonzero, bitstream);
if(nonzero)
{
for(frame = 0; frame < listXsize[LIST_0]; ++frame)
{
if(frame == 0)
{
for(sub_pos = 0; sub_pos < 16; ++sub_pos)
len += se_v("SH: subpelOffset_list0", img->subpelOffset_list0[sub_pos], bitstream);
}
else
{
len += se_v("SH: imgOffset_list0", img->imgOffset_list0[frame], bitstream);
}
}
}
if(img->type == B_SLICE)
{
nonzero = 0;
for(frame = 0; frame < listXsize[LIST_1]; ++frame)
{
if(frame == 0)
{
for(sub_pos = 0; sub_pos < 16; ++sub_pos)
{
if(img->subpelOffset_list1[sub_pos] != 0)
{
nonzero = 1;
break;
}
}
}
else
{
if(img->imgOffset_list1[frame] != 0)
{
nonzero = 1;
break;
}
}
}
len += u_1("nonzero offset", nonzero, bitstream);
if(nonzero)
{
for(frame = 0; frame < listXsize[LIST_1]; ++frame)
{
if(frame == 0)
{
for(sub_pos = 0; sub_pos < 16; ++sub_pos)
len += se_v("SH: subpelOffset_list1", img->subpelOffset_list1[sub_pos], bitstream);
}
else
{
len += se_v("SH: imgOffset_list1", img->imgOffset_list1[frame], bitstream);
}
}
}
}
}
}
#endif // SWITCHED_FILTERS
return len;
}
/*!
********************************************************************************************
* \brief
* Estimates the number of bits required for AIF coefficient transmitting
*
* \return
* Estimated number of bits used
* \author
* - Dmytro Rusanovskyy <dmytro.rusanovskyy@tut.fi>
********************************************************************************************
*/
#ifdef ADAPTIVE_FILTER
int nBitsAIF(void)
{
int i, j;
extern int DiffQFilterCoef[15][SQR_FILTER]; // differences to be transmitted
extern int POS_EQUATION_NUMBER[15]; // number of different coefficietns for each sub-pel position
extern int FilterFlag[15]; // Flags defining if Filter at the particular position calculated
extern int UseAllSubpelPositions; // 1 if FilterFlag for all independent positions is 1
extern int SubpelPositionsPattern;
extern int FILTER_SIZE;
extern int FILTER_OFFSET;
Bitstream *bitstream;
int len = 0;
bitstream = (Bitstream *) calloc(1, sizeof(Bitstream));
bitstream->streamBuffer = (byte *) calloc(1000, sizeof(byte));
len += u_1("SH: use_all_subpel_positions", UseAllSubpelPositions, bitstream);
if(!UseAllSubpelPositions)
len += ue_v("SH: positions_pattern", SubpelPositionsPattern, bitstream);
if(FilterFlag[a_pos])
for(i= 0; i < POS_EQUATION_NUMBER[a_pos]; i++)
len += se_v("SH: a_pos", DiffQFilterCoef[a_pos][FILTER_SIZE*FILTER_OFFSET+i], bitstream);
if(FilterFlag[b_pos])
for(i= 0; i < POS_EQUATION_NUMBER[b_pos]; i++)
len += se_v("SH: b_pos", DiffQFilterCoef[b_pos][FILTER_SIZE*FILTER_OFFSET+i], bitstream);
if(FilterFlag[e_pos])
for(i = 0; i < FILTER_SIZE; i++)
for(j = i; j < FILTER_SIZE; j++)
len += se_v("SH: e_pos", DiffQFilterCoef[e_pos][FILTER_SIZE*i+j], bitstream);
if(FilterFlag[f_pos])
for(i = 0; i < FILTER_SIZE; i++)
for(j = 0; j < FILTER_SIZE/2; j++)
len += se_v("SH: f_pos", DiffQFilterCoef[f_pos][FILTER_SIZE*i+j], bitstream);
if(FilterFlag[j_pos])
for(i = 0; i < FILTER_SIZE/2; i++)
for(j = i; j < FILTER_SIZE/2; j++)
len += se_v("SH: j_pos", DiffQFilterCoef[j_pos][FILTER_SIZE*i+j], bitstream);
free(bitstream->streamBuffer);
free(bitstream);
return len;
}
// separable aif (BEGIN)
/*!
********************************************************************************************
* \brief
* Estimates the number of bits required for separable AIF coefficient transmitting
*
* \return
* Estimated number of bits used
* \author
* - Steffen Wittmann <steffen.wittmann-at-eu.panasonic.com>
********************************************************************************************
*/
int nBitsAIF_Sep(void)
{
int i;
extern int DiffQFilterCoef[15][SQR_FILTER]; // differences to be transmitted
extern int FilterFlag[15]; // Flags defining if Filter at the particular position calculated
extern int UseAllSubpelPositions; // 1 if FilterFlag for all independent positions is 1
extern int SubpelPositionsPattern;
extern int FILTER_SIZE;
Bitstream *bitstream;
int len = 0;
bitstream = (Bitstream *) calloc(1, sizeof(Bitstream));
bitstream->streamBuffer = (byte *) calloc(1000, sizeof(byte));
len += u_1("SH: use_all_subpel_positions", UseAllSubpelPositions, bitstream);
if(!UseAllSubpelPositions)
len += ue_v("SH: positions_pattern", SubpelPositionsPattern, bitstream);
// a_pos
if(FilterFlag[a_pos])
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: a_pos", DiffQFilterCoef[a_pos][i], bitstream);
// b_pos
if(FilterFlag[b_pos])
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: b_pos", DiffQFilterCoef[b_pos][i], bitstream);
// c_pos
if(FilterFlag[c_pos])
{
if (FilterFlag[a_pos])
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: c_pos", DiffQFilterCoef[c_pos][i] - DiffQFilterCoef[a_pos][FILTER_SIZE-i-1], bitstream);
else
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: c_pos", DiffQFilterCoef[c_pos][i], bitstream);
}
// d_pos
if(FilterFlag[d_pos])
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: d_pos", DiffQFilterCoef[d_pos][i], bitstream);
// e_pos
if(FilterFlag[e_pos])
{
if (FilterFlag[d_pos])
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: e_pos", DiffQFilterCoef[e_pos][i] - DiffQFilterCoef[d_pos][i], bitstream);
else
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: e_pos", DiffQFilterCoef[e_pos][i], bitstream);
}
// f_pos
if(FilterFlag[f_pos])
{
if (FilterFlag[e_pos])
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: f_pos", DiffQFilterCoef[f_pos][i] - DiffQFilterCoef[e_pos][i], bitstream);
else
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: f_pos", DiffQFilterCoef[f_pos][i], bitstream);
}
// g_pos
if(FilterFlag[g_pos])
{
if (FilterFlag[f_pos])
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: g_pos", DiffQFilterCoef[g_pos][i] - DiffQFilterCoef[f_pos][i], bitstream);
else
for(i= 0; i < FILTER_SIZE; i++)
len += se_v("SH: g_pos", DiffQFilterCoef[g_pos][i], bitstream);
}
// h_pos
if(FilterFlag[h_pos])
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: h_pos", DiffQFilterCoef[h_pos][i], bitstream);
// i_pos
if(FilterFlag[i_pos])
{
if (FilterFlag[h_pos])
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: i_pos", DiffQFilterCoef[i_pos][i] - DiffQFilterCoef[h_pos][i], bitstream);
else
for(i= 0; i < FILTER_SIZE>>1; i++)
len += se_v("SH: i_pos", DiffQFilterCoef[i_pos][i], bitstream);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -