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

📄 encodercodingparameter.h

📁 JVT-Z203_jsvm.rar
💻 H
📖 第 1 页 / 共 4 页
字号:

    if( uiBaseLayerId != MSYS_UINT_MAX )
    {
      ResizeParameters& rcCurrRP    = getLayerParameters(ui).getResizeParameters();
      ResizeParameters& rcPrevRP    = getLayerParameters(uiBaseLayerId).getResizeParameters();
      rcCurrRP.m_iRefLayerFrmWidth  = rcPrevRP.m_iFrameWidth;
      rcCurrRP.m_iRefLayerFrmHeight = rcPrevRP.m_iFrameHeight;

      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;
    }
  }

  
//TMM_INTERLACE{
  for( ui = 0; ui < m_uiNumberOfLayers; ui++ )
    getLayerParameters(ui).setInterlaced( 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;

  //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         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("PAff",                 &(rcLayer.m_uiPAff),                     0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SymbolMode",           &(rcLayer.m_uiEntropyCodingModeFlag),    1         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("FRExt",                &(rcLayer.m_uiAdaptiveTransform),        0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MaxDeltaQP",           &(rcLayer.m_uiMaxAbsDeltaQP),            1         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("QP",                   &(rcLayer.m_dBaseQpResidual),            32.0      );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQPLP",               &(rcLayer.m_dQpModeDecisionLP),          -1.0      );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP0",                &(rcLayer.m_adQpModeDecision[0]),        32.0      );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP1",                &(rcLayer.m_adQpModeDecision[1]),        32.0      );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP2",                &(rcLayer.m_adQpModeDecision[2]),        32.0      );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP3",                &(rcLayer.m_adQpModeDecision[3]),        32.0      );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP4",                &(rcLayer.m_adQpModeDecision[4]),        32.0      );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("MeQP5",                &(rcLayer.m_adQpModeDecision[5]),        32.0      );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("InterLayerPred",       &(rcLayer.m_uiInterLayerPredictionMode), 0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("BaseQuality",          &(rcLayer.m_uiBaseQualityLevel),         15        );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MotionInfoMode",       &(rcLayer.m_uiMotionInfoMode),           0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("MotionInfoFile",       &cMotionFilename,                        "test.mot");
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("LowComplexityMbMode",  &(rcLayer.m_uiLowComplexMbEnable), 0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("UseESS",               &(rcLayer.m_cResizeParameters.m_iExtendedSpatialScalability), 0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("ESSPicParamFile",      &(rcLayer.m_cESSFilename),                                              "ess.dat" );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSCropWidth",         &(rcLayer.m_cResizeParameters.m_iScaledRefFrmWidth),                   0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSCropHeight",        &(rcLayer.m_cResizeParameters.m_iScaledRefFrmHeight),                  0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSOriginX",           &(rcLayer.m_cResizeParameters.m_iLeftFrmOffset),                       0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSOriginY",           &(rcLayer.m_cResizeParameters.m_iTopFrmOffset),                       0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSChromaPhaseX",      &(rcLayer.m_cResizeParameters.m_iChromaPhaseX),              -1         );  // SSUN, Nov2005
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSChromaPhaseY",      &(rcLayer.m_cResizeParameters.m_iChromaPhaseY),               0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSBaseChromaPhaseX",  &(rcLayer.m_cResizeParameters.m_iRefLayerChromaPhaseX),      -1         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("ESSBaseChromaPhaseY",  &(rcLayer.m_cResizeParameters.m_iRefLayerChromaPhaseY),       0         );  // SSUN, Nov2005
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("ForceReOrdering",      &(rcLayer.m_uiForceReorderingCommands),  0         );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("BaseLayerId",          &(rcLayer.m_uiBaseLayerId),              MSYS_UINT_MAX );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SliceMode",            &(rcLayer.m_uiSliceMode),                             0       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SliceArgument",        &(rcLayer.m_uiSliceArgument),                        50       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("NumSlicGrpMns1",       &(rcLayer.m_uiNumSliceGroupsMinus1),                  0       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SlcGrpMapType",        &(rcLayer.m_uiSliceGroupMapType),                     2       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SlcGrpChgDrFlag",      &(bSliceGroupChangeDirection_flag),         0       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("SlcGrpChgRtMus1",      &(rcLayer.m_uiSliceGroupChangeRateMinus1),           85       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("SlcGrpCfgFileNm",      &rcLayer.m_cSliceGroupConfigFileName,             "sgcfg.cfg" );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("NumROI",               &(rcLayer.m_uiNumROI),                  0       );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr ("ROICfgFileNm",         &rcLayer.m_cROIConfigFileName,             "roicfg.cfg" );
// JVT-Q065 EIDR{
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineInt ("IDRPeriod",	          &(rcLayer.m_iIDRPeriod),								0		);
// JVT-Q065 EIDR}
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("PLR",	                &(rcLayer.m_uiPLR),								0		); //JVT-R057 LA-RDO
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("UseRedundantSlc",      &(rcLayer.m_uiUseRedundantSlice), 0   );  //JVT-Q054 Red. Picture
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("UseRedundantKeySlc",   &(rcLayer.m_uiUseRedundantKeySlice), 0   );  //JVT-W049
  //S051{
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineStr( "EncSIPFile", &cEncSIPFilename, ""); 
  //S051}

  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVectorMode", &(rcLayer.m_uiMGSVectorMode), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector0", &(rcLayer.m_uiMGSVect[0]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector1", &(rcLayer.m_uiMGSVect[1]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector2", &(rcLayer.m_uiMGSVect[2]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector3", &(rcLayer.m_uiMGSVect[3]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector4", &(rcLayer.m_uiMGSVect[4]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector5", &(rcLayer.m_uiMGSVect[5]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector6", &(rcLayer.m_uiMGSVect[6]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector7", &(rcLayer.m_uiMGSVect[7]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector8", &(rcLayer.m_uiMGSVect[8]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector9", &(rcLayer.m_uiMGSVect[9]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector10", &(rcLayer.m_uiMGSVect[10]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector11", &(rcLayer.m_uiMGSVect[11]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector12", &(rcLayer.m_uiMGSVect[12]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector13", &(rcLayer.m_uiMGSVect[13]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector14", &(rcLayer.m_uiMGSVect[14]), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("MGSVector15", &(rcLayer.m_uiMGSVect[15]), 0 );

  // JVT-V035
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("AvcRewriteFlag",          &(rcLayer.m_bAVCRewriteFlag),                            0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("AvcAdaptiveRewriteFlag",  &(rcLayer.m_bAVCAdaptiveRewriteFlag),                    0 );

  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("SliceSkip",          &(rcLayer.m_uiSliceSkip),                            0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt ("SliceSkipTIdStart",  &(rcLayer.m_uiSliceSkipTLevelStart),                 0 );

  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineUInt("ExplicitQPCascading", &(rcLayer.m_uiExplicitQPCascading), 0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel0",         &(rcLayer.m_adDeltaQPTLevel[0]),    0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel1",         &(rcLayer.m_adDeltaQPTLevel[1]),    0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel2",         &(rcLayer.m_adDeltaQPTLevel[2]),    0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel3",         &(rcLayer.m_adDeltaQPTLevel[3]),    0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel4",         &(rcLayer.m_adDeltaQPTLevel[4]),    0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel5",         &(rcLayer.m_adDeltaQPTLevel[5]),    0 );
  m_pLayerLines[uiParLnCount++] = new EncoderConfigLineDbl ("DQP4TLevel6",         &(rcLayer.m_adDeltaQPTLevel[6]),    0 );

  m_pLayerLines[uiParLnCount] = NULL;

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

  //S051{
  if(cEncSIPFilename.length())
  {
    rcLayer.setEncSIP(true);
    rcLayer.setInSIPFileName( (char*) cEncSIPFilename.c_str());
  }  
  //S051}

  rcLayer.setInputFilename     ( (Char*)cInputFilename.c_str() );
  rcLayer.setOutputFilename    ( (Char*)cOutputFilename.c_str() );
  rcLayer.setMotionInfoFilename( (Char*)cMotionFilename.c_str() );

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

  rcLayer.m_cResizeParameters.m_iFrameWidth         = (Int)( ( rcLayer.m_uiFrameWidth  + 15 ) >> 4 ) << 4;
  rcLayer.m_cResizeParameters.m_iFrameHeight        = (Int)( ( rcLayer.m_uiFrameHeight + 15 ) >> 4 ) << 4;
  rcLayer.m_cResizeParameters.m_iRefLayerFrmWidth   = rcLayer.m_cResizeParameters.m_iFrameWidth; 
  rcLayer.m_cResizeParameters.m_iRefLayerFrmHeight  = rcLayer.m_cResizeParameters.m_iFrameHeight;

  if( ! rcLayer.m_cResizeParameters.m_iExtendedSpatialScalability )  
  {
    rcLayer.m_cResizeParameters.m_iScaledRefFrmWidth    = rcLayer.m_cResizeParameters.m_iFrameWidth;
    rcLayer.m_cResizeParameters.m_iScaledRefFrmHeight   = rcLayer.m_cResizeParameters.m_iFrameHeight;
    rcLayer.m_cResizeParameters.m_iLeftFrmOffset        = 0;
    rcLayer.m_cResizeParameters.m_iTopFrmOffset         = 0;
    rcLayer.m_cResizeParameters.m_iRefLayerChromaPhaseX = rcLayer.m_cResizeParameters.m_iChromaPhaseX;
    rcLayer.m_cResizeParameters.m_iRefLayerChromaPhaseY = rcLayer.m_cResizeParameters.m_iChromaPhaseY;
  }

  //--ICU/ETRI FMO Implementation : FMO stuff start
  rcLayer.m_bSliceGroupChangeDirection_flag = ( bSliceGroupChangeDirection_flag != 0 );
  RNOK( xReadSliceGroupCfg( rcLayer)); //Slice group configuration file
  //--ICU/ETRI FMO Implementation : FMO stuff end

  // ROI Config ICU/ETRI
  RNOK( xReadROICfg( rcLayer)); 

  ::fclose(f);

  return Err::m_nOK;
}

ErrVal EncoderCodingParameter::xReadSliceGroupCfg( h264::LayerParameters&  rcLayer )
{
	UInt mapunit_height;
	UInt mb_height;
	UInt i;
	UInt mb_width;
 	FILE* sgfile=NULL;

	if( (rcLayer.getNumSliceGroupsMinus1()!=0)&&
		((rcLayer.getSliceGroupMapType() == 0) || (rcLayer.getSliceGroupMapType() == 2) || (rcLayer.getSliceGroupMapType() == 6)) )
	{ 
    if ( ! rcLayer.getSliceGroupConfigFileName().empty() &&
         ( sgfile = fopen( rcLayer.getSliceGroupConfigFileName().c_str(), "r" ) ) == NULL )
		{
      printf("Error open file %s", rcLayer.getSliceGroupConfigFileName().c_str() );
		}
		else
		{
			if (rcLayer.getSliceGroupMapType() == 0) 
			{
				for(i=0;i<=rcLayer.getNumSliceGroupsMinus1();i++)
				{
					fscanf(sgfile,"%d",(rcLayer.getArrayRunLengthMinus1()+i));
					fscanf(sgfile,"%*[^\n]");

				}
			}
			else if (rcLayer.getSliceGroupMapType() == 2)
			{
				// every two lines contain 'top_left' and 'bottom_right' value
				for(i=0;i<rcLayer.getNumSliceGroupsMinus1();i++)
				{
					fscanf(sgfile,"%d",(rcLayer.getArrayTopLeft()+i));
					fscanf(sgfile,"%*[^\n]");
					fscanf(sgfile,"%d",(rcLayer.getArrayBottomRight()+i));
					fscanf(sgfile,"%*[^\n]");
				}

			}
			else if (rcLayer.getSliceGroupMapType()== 6)
			{
				//--ICU/ETRI
				//TODO : currently map type 6 is partially supported 
				// Assume that only frame mode(no interlaced mode) is available
				// Assume that Frame cropping is not avaliable

				Int tmp;

				/*
				frame_mb_only = !(input->getPicInterlace() || input->getMbInterlace());
				mb_width= (input->get_img_width()+img->get_auto_crop_right())/16;
				mb_height= (input->get_img_height()+img->get_auto_crop_bottom())/16;
				mapunit_height=mb_height/(2-frame_mb_only);
				*/

				
				mb_width= (rcLayer.getFrameWidth())/16;
				mb_height= (rcLayer.getFrameHeight())/16;
				mapunit_height=mb_height;


				// each line contains slice_group_id for one Macroblock
				for (i=0;i<mapunit_height*mb_width;i++)
				{
					fscanf(sgfile,"%d", &tmp);
					//input->set_slice_group_id_ith( i, (unsigned) tmp);
					rcLayer.setSliceGroupId(i,(UInt)tmp);
					assert(*(rcLayer.getArraySliceGroupId()+i) <= rcLayer.getNumSliceGroupsMinus1() );
					fscanf(sgfile,"%*[^\n]");
				}

			}
			fclose(sgfile);

		}
	}
	return Err::m_nOK;

}


// ROI Config Read ICU/ETRI
ErrVal EncoderCodingParameter::xReadROICfg( h264::LayerParameters&  rcLayer )
{
	UInt i;
 	FILE* roifile=NULL;

	if ( (0 < rcLayer.getNumROI()) )
	{
		if ( ! rcLayer.getROIConfigFileName().empty() &&
         ( roifile = fopen( rcLayer.getROIConfigFileName().c_str(), "r" ) ) == NULL )
		{
			printf("Error open file %s", rcLayer.getROIConfigFileName().c_str() );
		}

		else
		{
			// every two lines contain 'top_left' and 'bottom_right' value
			for(i=0;i<rcLayer.getNumROI(); i++)
			{
				fscanf(roifile, "%d",(rcLayer.getROIID()+i));
				fscanf(roifile, "%*[^\n]");
				fscanf(roifile, "%d",(rcLayer.getSGID()+i));
				fscanf(roifile, "%*[^\n]");
				fscanf(roifile, "%d",(rcLayer.getSLID()+i));
				fscanf(roifile, "%*[^\n]");
			}

			fclose(roifile);
		}

	}
	
	
	return Err::m_nOK;
}

#endif // !defined(AFX_ENCODERCODINGPARAMETER_H__145580A5_E0D6_4E9C_820F_EA4EF1E1B793__INCLUDED_)

⌨️ 快捷键说明

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