encodercodingparameter.h

来自「SVC最新更新代码」· C头文件 代码 · 共 1,406 行 · 第 1/5 页

H
1,406
字号
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxRefIdxActiveBL0",      &m_uiMaxRefIdxActiveBL0,                               1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxRefIdxActiveBL1",      &m_uiMaxRefIdxActiveBL1,                               1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxRefIdxActiveP",        &m_uiMaxRefIdxActiveP,                                 1 );

  //JVT-R057 LA-RDO{
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("LARDO",                   &m_uiLARDOEnable,                                      0 ); 
  //JVT-R057 LA-RDO}

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RPEncCheck",							 &m_uiEssRPChkEnable,																					0  );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MVDiffThreshold",				 &m_uiMVThres,																					20 );

	//JVT-T073 {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("NestingSEI",              &m_uiNestingSEIEnable,                                 0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SceneInfo",               &m_uiSceneInfoEnable,                                  0 );
  //JVT-T073 }

	//JVT-W052
	m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("IntegrityCheckSEI",          &m_uiIntegrityCheckSEIEnable,                          false ); // Disabled due to buggy behaviour. mwi 070803, bug_fixed
	//JVT-W052

//JVT-S036 lsj start  //bug-fix suffix{{
//PreAndSuffixUnitEnable shall always be on in SVC contexts (i.e. when there are FGS/CGS/spatial enhancement layers)
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("PreAndSuffixUnitEnable",  &m_uiPreAndSuffixUnitEnable,                           1 ); //prefix unit
	m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MMCOBaseEnable",					 &m_uiMMCOBaseEnable,                                   1 ); 
//JVT-S036 lsj end //bug-fix suffix}}
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("CgsSnrRefinement",        &m_uiCGSSNRRefinementFlag,                             0 );  //JVT-T054
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("TLNestingFlag",           &m_uiTlevelNestingFlag,                                0 );  //JVT-U085
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("TL0DepRepIdxSeiEnable",    &m_uiTl0DepRepIdxSeiEnable,                           0 );  //JVT-U116,JVT-W062

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("EncodeKeyPictures",       &m_uiEncodeKeyPictures,                                0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSControl",              &m_uiMGSKeyPictureControl,                             0 );

// JVT-V068 HRD {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("EnableNalHRD",            &m_uiNalHRD,                                           0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("EnableVclHRD",            &m_uiVclHRD,                                           0 );
// JVT-V068 HRD }
//JVT-W049 {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("EnableRedundantKeyPic",   &m_uiRedundantKeyPic,                                  0 );
//JVT-W049 }

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("ConstrainedIntraUps",     &m_uiCIUFlag,                                          0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BiPredLT8x8Disable",      &m_uiBiPred8x8Disable,                                 0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MCBlocksLT8x8Disable",    &m_uiMCBlks8x8Disable,                                 0 );

  //JVT-W043 {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RCMinQP",                 &m_uiRCMinQP,                                         12 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RCMaxQP",                 &m_uiRCMaxQP,                                         40 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxQpChange",             &m_uiMaxQpChange,                                      2 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("InitialQp",               &m_uiInitialQp,                                       30 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BasicUnit",               &m_uiBasicUnit,                                       99 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BitRate",                 &m_uiBitRate,                                      64000 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RateControlEnable",       &m_uiRateControlEnable,                                0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("AdaptInitialQP",          &m_uiAdaptInitialQP,                                   0 );
  // JVT-W043 }
  m_pEncoderLines[uiParLnCount] = NULL;

  while (!feof(f))
  {
    RNOK( xReadLine( f, acTags ) );
    if ( acTags[0].empty() )
    {
      continue;
    }
    for (UInt ui=0; m_pEncoderLines[ui] != NULL; ui++)
    {
      if( acTags[0] == m_pEncoderLines[ui]->getTag() )
      {
        m_pEncoderLines[ui]->setVar( acTags[1] );
        break;
      }
    }
    if( acTags[0] == "LayerCfg" )
    {
      acLayerConfigName[uiLayerCnt++] = acTags[1];
      continue;
    }
  }

  uiParLnCount = 0;
  while (m_pEncoderLines[uiParLnCount] != NULL)
  {
    delete m_pEncoderLines[uiParLnCount];
    m_pEncoderLines[uiParLnCount] = NULL;
    uiParLnCount++;
  }

  if( m_uiAVCmode )
  {
    m_uiNumberOfLayers = 0;
    getLayerParameters(0).setInputFilename        ( (Char*)cInputFile.c_str() );
    getLayerParameters(0).setOutputFilename       ( (Char*)cReconFile.c_str() );
    getLayerParameters(0).setFrameWidthInSamples  ( m_uiFrameWidth );
    getLayerParameters(0).setFrameHeightInSamples ( m_uiFrameHeight );
    fclose( f );
    return Err::m_nOK;
  }

  if ( uiLayerCnt != m_uiNumberOfLayers )
  {
    fprintf(stderr, "Could not locate all layer config files: check config file syntax\n");
    AF();
  }

  fclose( f );
//JVT-T054{
  UInt uiPrevLayer        = 0;
  Double  dPrevTemp       = 0.0;
  UInt uiPrevWidth        = 0;
  UInt uiPrevHeight       = 0;
  UInt uiLastLayer        = 0;
//JVT-T054}
  Bool bInterlaced        = false; 
  UInt ui                 = 0;

  for( ui = 0; ui < m_uiNumberOfLayers; ui++ )
  {
    Bool  bFrameMbsOnly = true;
    getLayerParameters(ui).setDependencyId(ui);
    RNOK( xReadLayerFromFile( acLayerConfigName[ui], getLayerParameters(ui) ) );
		if ( getLayerParameters(ui).m_uiMbAff || getLayerParameters(ui).m_uiPAff )
    {
      bFrameMbsOnly = false;
      bInterlaced   = true;			
    }

    // HS: set base layer id
    UInt uiBaseLayerId = getLayerParameters(ui).getBaseLayerId();
    if( ui && uiBaseLayerId == MSYS_UINT_MAX )
    {
      uiBaseLayerId = ui - 1; // default value
    }
    getLayerParameters(ui).setBaseLayerId(uiBaseLayerId);
    // HS: set base layer id

    if( m_uiCGSSNRRefinementFlag )
    {
      if(ui == 0)
      {
        uiPrevLayer  = ui;
        dPrevTemp    = getLayerParameters(ui).getOutputFrameRate();
        uiPrevWidth  = getLayerParameters(ui).getFrameWidthInSamples ();
        uiPrevHeight = getLayerParameters(ui).getFrameHeightInSamples();
        getLayerParameters(ui).setLayerCGSSNR(ui);
        getLayerParameters(ui).setQualityLevelCGSSNR(0);
        uiLastLayer = uiPrevLayer;
        getLayerParameters(ui).setBaseLayerCGSSNR( MSYS_UINT_MAX );
        getLayerParameters(ui).setBaseQualityLevelCGSSNR( 0 );
      }
      else
      {
        if( dPrevTemp    == getLayerParameters(ui).getOutputFrameRate     () &&
            uiPrevWidth  == getLayerParameters(ui).getFrameWidthInSamples () &&
            uiPrevHeight == getLayerParameters(ui).getFrameHeightInSamples() )
        {
          // layer can be considered as a CGS refinement
          UInt uiLayerTemp = getLayerParameters(ui-1).getLayerCGSSNR();
          getLayerParameters(ui).setLayerCGSSNR(uiLayerTemp);
          UInt uiQualityLevelTemp = getLayerParameters(ui-1).getQualityLevelCGSSNR();
          getLayerParameters(ui).setQualityLevelCGSSNR( uiQualityLevelTemp + getLayerParameters(ui-1).getNumberOfQualityLevelsCGSSNR() );
        }
        else
        {
          //layer is not a refinement from previous CGS layer
          uiLastLayer++;
          uiPrevLayer  = uiLastLayer;
          dPrevTemp    = getLayerParameters(ui).getOutputFrameRate();
          uiPrevWidth  = getLayerParameters(ui).getFrameWidthInSamples ();
          uiPrevHeight = getLayerParameters(ui).getFrameHeightInSamples();
          getLayerParameters(ui).setLayerCGSSNR(uiLastLayer);
          getLayerParameters(ui).setQualityLevelCGSSNR(0);
        }
        getLayerParameters(ui).setBaseLayerCGSSNR( getLayerParameters(uiBaseLayerId).getLayerCGSSNR() );
        getLayerParameters(ui).setBaseQualityLevelCGSSNR( getLayerParameters(uiBaseLayerId).getQualityLevelCGSSNR() + getLayerParameters(uiBaseLayerId).getNumberOfQualityLevelsCGSSNR() - 1 );
      }
    }
    else
    {
      getLayerParameters(ui).setLayerCGSSNR(ui);
      getLayerParameters(ui).setQualityLevelCGSSNR(0);
      if( ui )
      {
        getLayerParameters(ui).setBaseLayerCGSSNR( getLayerParameters(uiBaseLayerId).getLayerCGSSNR() );
        getLayerParameters(ui).setBaseQualityLevelCGSSNR( getLayerParameters(uiBaseLayerId).getQualityLevelCGSSNR() + getLayerParameters(uiBaseLayerId).getNumberOfQualityLevelsCGSSNR() - 1 );
      }
      else
      {
        getLayerParameters(ui).setBaseLayerCGSSNR( MSYS_UINT_MAX );
        getLayerParameters(ui).setBaseQualityLevelCGSSNR( 0 );
      }
    }

//DS_FIX_FT_09_2007
  //uiBaseLayerId is no more discardable
    if(uiBaseLayerId != MSYS_UINT_MAX)
    {
      getLayerParameters(uiBaseLayerId).setNonDiscardable();
      getLayerParameters(uiBaseLayerId).setQLDiscardable(getLayerParameters(ui).getBaseQualityLevel()+1);
    }
//~DS_FIX_FT_09_2007

    if( uiBaseLayerId != MSYS_UINT_MAX )
    {
      LayerParameters&  rcCurrLayer       = getLayerParameters( ui );
      LayerParameters&  rcBaseLayer       = getLayerParameters( uiBaseLayerId );
      ResizeParameters& rcCurrRP          = rcCurrLayer.getResizeParameters();
      ResizeParameters& rcBaseRP          = rcBaseLayer.getResizeParameters();
      rcCurrRP.m_iRefLayerFrmWidth        = rcBaseRP.m_iFrameWidth;
      rcCurrRP.m_iRefLayerFrmHeight       = rcBaseRP.m_iFrameHeight;
      rcCurrRP.m_iRefLayerWidthInSamples  = rcBaseRP.m_iWidthInSamples;
      rcCurrRP.m_iRefLayerHeightInSamples = rcBaseRP.m_iHeightInSamples;

      if( rcCurrRP.m_iRefLayerFrmWidth != rcCurrRP.m_iRefLayerWidthInSamples )
      {
        Int iShift  = 1;
        Int iDiv    = rcCurrRP.m_iRefLayerWidthInSamples << iShift;
        Int iScalW  = ( ( rcCurrRP.m_iScaledRefFrmWidth * rcCurrRP.m_iRefLayerFrmWidth + ( iDiv >> 1 ) ) / iDiv ) << iShift;
        rcCurrRP.m_iScaledRefFrmWidth = iScalW;
      }
      if( rcCurrRP.m_iRefLayerFrmHeight != rcCurrRP.m_iRefLayerHeightInSamples )
      {
        Int iShift  = ( rcCurrLayer.isInterlaced() ? 2 : 1 );
        Int iDiv    = rcCurrRP.m_iRefLayerHeightInSamples << iShift;
        Int iScalH  = ( ( rcCurrRP.m_iScaledRefFrmHeight * rcCurrRP.m_iRefLayerFrmHeight + ( iDiv >> 1 ) ) / iDiv ) << iShift;
        rcCurrRP.m_iScaledRefFrmHeight = iScalH;
      }

      if( rcCurrRP.m_iExtendedSpatialScalability == ESS_NONE )
      {
        if( rcCurrRP.m_iLeftFrmOffset ||
            rcCurrRP.m_iTopFrmOffset  ||
            rcCurrRP.m_iFrameWidth   != rcCurrRP.m_iScaledRefFrmWidth    ||
            rcCurrRP.m_iFrameHeight  != rcCurrRP.m_iScaledRefFrmHeight   ||
            rcCurrRP.m_iChromaPhaseX != rcCurrRP.m_iRefLayerChromaPhaseX ||
            rcCurrRP.m_iChromaPhaseY != rcCurrRP.m_iRefLayerChromaPhaseY )
        {
          rcCurrRP.m_iExtendedSpatialScalability = ESS_SEQ;
        }
      }
    }
    else
    {
      ResizeParameters& rcCurrRP              = getLayerParameters(ui).getResizeParameters();
      rcCurrRP.m_iExtendedSpatialScalability  = ESS_NONE;
      rcCurrRP.m_iRefLayerFrmWidth            = rcCurrRP.m_iFrameWidth;
      rcCurrRP.m_iRefLayerFrmHeight           = rcCurrRP.m_iFrameHeight;
      rcCurrRP.m_iRefLayerWidthInSamples      = rcCurrRP.m_iWidthInSamples;
      rcCurrRP.m_iRefLayerHeightInSamples     = rcCurrRP.m_iHeightInSamples;
    }
  }

  return Err::m_nOK;
}



ErrVal EncoderCodingParameter::xReadLayerFromFile ( std::string&            rcFilename,
                                                    h264::LayerParameters&  rcLayer )
{
  std::string acTags[4];
  std::string cInputFilename, cOutputFilename, cMotionFilename;

  //S051{
  std::string cEncSIPFilename;
  //S051}
  
  UInt        uiParLnCount = 0;
  
  FILE *f = fopen( rcFilename.c_str(), "r");
  if( NULL == f )
  { 
    printf( "failed to open %s layer config file\n", rcFilename.c_str() );
    return Err::m_nERR;
  } 

  //--ICU/ETRI FMO Implementation
  UInt bSliceGroupChangeDirection_flag=0;

  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceWidth",            &(rcLayer.m_uiFrameWidthInSamples),      352       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceHeight",           &(rcLayer.m_uiFrameHeightInSamples),     288       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("FrameRateIn",            &(rcLayer.m_dInputFrameRate),            30        );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("FrameRateOut",           &(rcLayer.m_dOutputFrameRate),           30        );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("InputFile",              &cInputFilename,                         "test.yuv");

⌨️ 快捷键说明

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