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

📄 header.c

📁 JM 11.0 KTA 2.1 Source Code
💻 C
📖 第 1 页 / 共 4 页
字号:

    // 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 + -