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

📄 encodercodingparameter.h

📁 jsvm开发代码包括抽样,编码,抽取,解码等一系列功能,可以做工具或研究用
💻 H
📖 第 1 页 / 共 5 页
字号:
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BaseLayerMode",           &m_uiBaseLayerMode,                                    3 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("NumLayers",               &m_uiNumberOfLayers,                                   1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SearchRange",             &(m_cMotionVectorSearchParams.m_uiSearchRange),        96);
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("BiPredIter",              &(m_cMotionVectorSearchParams.m_uiNumMaxIter),         4 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("IterSearchRange",         &(m_cMotionVectorSearchParams.m_uiIterSearchRange),    8 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("LoopFilterDisable",       &(m_cLoopFilterParams.m_uiFilterIdc),                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("LoopFilterAlphaC0Offset", (Int*)&(m_cLoopFilterParams.m_iAlphaOffset),           0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("LoopFilterBetaOffset",    (Int*)&(m_cLoopFilterParams.m_iBetaOffset),            0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("SearchMode",              (Int*)&(m_cMotionVectorSearchParams.m_eSearchMode),    0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("SearchFuncFullPel",       (Int*)&(m_cMotionVectorSearchParams.m_eFullPelDFunc),  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt ("SearchFuncSubPel",        (Int*)&(m_cMotionVectorSearchParams.m_eSubPelDFunc),   0 );

//TMM_WP
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("WeightedPrediction",         &m_uiIPMode,                                     0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("WeightedBiprediction",       &m_uiBMode,                                      0 );  
//TMM_WP
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineInt("NonRequiredEnable",			&m_bNonRequiredEnable,							 0 );  //NonRequired JVT-Q066
  std::string cInputFile, cReconFile;
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("AVCMode",                 &m_uiAVCmode,                                          0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr ("InputFile",               &cInputFile,                                           "in.yuv");
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr ("ReconFile",               &cReconFile,                                           "rec.yuv");
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceWidth",             &m_uiFrameWidth,                                       0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceHeight",            &m_uiFrameHeight,                                      0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SymbolMode",              &m_uiSymbolMode,                                       1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("FRExt",                   &m_ui8x8Mode,                                          1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("BasisQP",                 &m_dBasisQp,                                          26 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("DPBSize",                 &m_uiDPBSize,                                           1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("NumRefFrames",            &m_uiNumDPBRefFrames,                                  1 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("Log2MaxFrameNum",         &m_uiLog2MaxFrameNum,                                  4 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("Log2MaxPocLsb",           &m_uiLog2MaxPocLsb,                                    4 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineStr ("SequenceFormatString",    &m_cSequenceFormatString,                              "A0*n{P0}" );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer0Quant",        &m_adDeltaQpLayer[0],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer1Quant",        &m_adDeltaQpLayer[1],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer2Quant",        &m_adDeltaQpLayer[2],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer3Quant",        &m_adDeltaQpLayer[3],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer4Quant",        &m_adDeltaQpLayer[4],                                  0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineDbl ("DeltaLayer5Quant",        &m_adDeltaQpLayer[5],                                  0 );
  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}
  //JVT-T073 {
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("NestingSEI",              &m_uiNestingSEIEnable,                                 0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("SceneInfo",               &m_uiSceneInfoEnable,                                  0 );
  //JVT-T073 }

//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("TLPicIdxEnable",          &m_uiTl0PicIdxPresentFlag,                             0 );  //JVT-U116

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RCDOBlockSizes",          &m_uiRCDOBlockSizes,                                   0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RCDOMotionCompensationY", &m_uiRCDOMotionCompensationY,                          0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RCDOMotionCompensationC", &m_uiRCDOMotionCompensationC,                          0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("RCDODeblocking",          &m_uiRCDODeblocking,                                   0 );

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("4TapMotionCompensationY", &m_ui4TapMotionCompensationY,                          0 ); // V090

  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("EncodeKeyPictures",       &m_uiEncodeKeyPictures,                                0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSControl",              &m_uiMGSKeyPictureControl,                             0 );
  m_pEncoderLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSKeyPicMotRef",         &m_uiMGSKeyPictureMotionRefinement,                    1 );
  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).setFrameWidth     ( m_uiFrameWidth );
    getLayerParameters(0).setFrameHeight    ( 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 uiLayerTemp        = 0;
  UInt uiQualityLevelTemp = 0;
  UInt uiLastLayer        = 0;
  UInt uiMaxLayer         = 0;
  UInt uiMaxQualityLevel  = 0;
//JVT-T054}
  Bool bInterlaced        = false; 
  UInt ui                 = 0;

  for( ui = 0; ui < m_uiNumberOfLayers; ui++ )
  {
    getLayerParameters(ui).setLayerId(ui);
    RNOK( xReadLayerFromFile( acLayerConfigName[ui], getLayerParameters(ui) ) );
    //TMM_INTERLACE{
		if ( getLayerParameters(ui).m_uiMbAff || getLayerParameters(ui).m_uiPaff )
			bInterlaced = true;			
//TMM_INTERLACE}
//JVT-T054{
    if(m_uiCGSSNRRefinementFlag)
    {
    if(ui == 0)
    {
      uiPrevLayer = ui;
      dPrevTemp    = getLayerParameters(ui).getOutputFrameRate();
      uiPrevWidth = getLayerParameters(ui).getFrameWidth();
      uiPrevHeight = getLayerParameters(ui).getFrameHeight();
      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).getFrameWidth() &&
        uiPrevHeight == getLayerParameters(ui).getFrameHeight())
      {
        // layer can be considered as a CGS refinement
        uiLayerTemp = getLayerParameters(ui-1).getLayerCGSSNR();
        getLayerParameters(ui).setLayerCGSSNR(uiLayerTemp);
        uiQualityLevelTemp = getLayerParameters(ui-1).getQualityLevelCGSSNR();
        getLayerParameters(ui).setQualityLevelCGSSNR(uiQualityLevelTemp+1);
        
        getLayerParameters(ui).setBaseLayerCGSSNR( uiLayerTemp );
        getLayerParameters(ui).setBaseQualityLevelCGSSNR( uiQualityLevelTemp );

        if(uiMaxQualityLevel < uiQualityLevelTemp+1)
          uiMaxQualityLevel = uiQualityLevelTemp+1;
      }
      else
      {
        //layer is not a refinement from previous CGS layer
        uiLastLayer++;
        uiPrevLayer = uiLastLayer;
        dPrevTemp    = getLayerParameters(ui).getOutputFrameRate();
        uiPrevWidth = getLayerParameters(ui).getFrameWidth();
        uiPrevHeight = getLayerParameters(ui).getFrameHeight();
        getLayerParameters(ui).setLayerCGSSNR(uiLastLayer);
        getLayerParameters(ui).setQualityLevelCGSSNR(0);

        uiLayerTemp = getLayerParameters(ui-1).getLayerCGSSNR();
        uiQualityLevelTemp = getLayerParameters(ui-1).getQualityLevelCGSSNR();
        getLayerParameters(ui).setBaseLayerCGSSNR( uiLayerTemp );
        getLayerParameters(ui).setBaseQualityLevelCGSSNR( uiQualityLevelTemp );

        if(uiMaxLayer < uiLastLayer)
          uiMaxLayer = uiLastLayer;
      }
    }
    }
    else
    {
        getLayerParameters(ui).setLayerCGSSNR(ui);
        getLayerParameters(ui).setQualityLevelCGSSNR(0);
    }
    m_uiMaxLayerCGSSNR = uiMaxLayer;
    m_uiMaxQualityLevelCGSSNR = uiMaxQualityLevel;
//JVT-T054}
// TMM_ESS {
    ResizeParameters * curr;
    curr = getResizeParameters(ui);

// JVT-Q065 EIDR{
	if(ui > 0 && getLayerParameters(ui-1).getIDRPeriod() == getLayerParameters(ui).getIDRPeriod())
	{
		getLayerParameters(ui).setBLSkipEnable(true);
	}
// JVT-Q065 EIDR}

    // 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 (ui>0)
    {
      ResizeParameters * prev = getResizeParameters(uiBaseLayerId); // HS: use "real" base layer
      //curr->m_iInWidth  = prev->m_iOutWidth;
      //curr->m_iInHeight = prev->m_iOutHeight;
      curr->m_iInWidth = prev->m_iGlobWidth; //TMM
      curr->m_iInHeight = prev->m_iGlobHeight; //TMM

      bool is_crop_aligned = (curr->m_iPosX%16 == 0) && (curr->m_iPosY%16 == 0);
      if      ((curr->m_iInWidth == curr->m_iOutWidth) && (curr->m_iInHeight == curr->m_iOutHeight) &&
               is_crop_aligned && (curr->m_iExtendedSpatialScalability < ESS_PICT) )
        curr->m_iSpatialScalabilityType = SST_RATIO_1;
      else if ((curr->m_iInWidth*2 == curr->m_iOutWidth) && (curr->m_iInHeight*2 == curr->m_iOutHeight) &&
               is_crop_aligned && (curr->m_iExtendedSpatialScalability < ESS_PICT) )
        curr->m_iSpatialScalabilityType = SST_RATIO_2;
      else 
      {
        curr->m_iSpatialScalabilityType = SST_RATIO_X;
        if ( curr->m_iExtendedSpatialScalability == ESS_NONE )
          curr->m_iExtendedSpatialScalability = ESS_SEQ;
      }
     }
    else
    {
      curr->m_iSpatialScalabilityType = SST_RATIO_1;
      curr->m_iExtendedSpatialScalability = ESS_NONE;
    }
// TMM_ESS }
  }

  
//TMM_INTERLACE{
  for( ui = 0; ui < m_uiNumberOfLayers; ui++ )
    getResizeParameters(ui)->m_bInterlaced = bInterlaced;
//TMM_INTERLACE}

  return Err::m_nOK;
}



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

  //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_uiFrameWidth),               176       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SourceHeight",   &(rcLayer.m_uiFrameHeight),              352       );
  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");
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("ReconFile",      &cOutputFilename,                        "rec.yuv" );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MbAff",          &(rcLayer.m_uiMbAff),                    0         );

⌨️ 快捷键说明

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