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

📄 encodercodingparameter.h

📁 JMVM MPEG MVC/3DAV 测试平台 国际通用标准
💻 H
📖 第 1 页 / 共 5 页
字号:
      AOF((view_id=atoi(acTags[2].c_str()))< MAX_NUM_VIEWS_MINUS_1);
      CodingParameter::SpsMVC.setAnchorRefForListX(cur_view_id,ref_idx,1,view_id);
     
      if(m_CurrentViewId==cur_view_id)
      {
      
        xAppendStringWithNO ( cReconFile, cFileNameStringTemp, view_id, ".yuv");

		for (i=0; i<(int)m_MultiviewReferenceFileParams.size() ; i++) {
			if ( m_MultiviewReferenceFileParams[i]._view_id  == view_id) // file already present, so skip
				break;
		}

		if (i==	m_MultiviewReferenceFileParams.size())	
			m_MultiviewReferenceFileParams.push_back
			(YUVFileParams(cFileNameStringTemp,view_id,m_uiFrameHeight,m_uiFrameWidth));
      }
    }
	
    if (acTags[0] == "Fwd_NonAnchorRefs")
    {
      AOF((ref_idx=atoi(acTags[1].c_str()))< (int)CodingParameter::SpsMVC.getNumNonAnchorRefsForListX(cur_view_id,0));
      AOF((view_id=atoi(acTags[2].c_str()))< MAX_NUM_VIEWS_MINUS_1);
      CodingParameter::SpsMVC.setNonAnchorRefForListX(cur_view_id,ref_idx,0,view_id);
	  
	  if(m_CurrentViewId==cur_view_id)
      {
      
        xAppendStringWithNO ( cReconFile, cFileNameStringTemp, view_id, ".yuv");

		for (i=0; i<(int)m_MultiviewReferenceFileParams.size() ; i++) {
			if ( m_MultiviewReferenceFileParams[i]._view_id  == view_id) // file already present, so skip
				break;
		}

		if (i==	m_MultiviewReferenceFileParams.size())	
			m_MultiviewReferenceFileParams.push_back
			(YUVFileParams(cFileNameStringTemp,view_id,m_uiFrameHeight,m_uiFrameWidth));
      }	
    }

    if (acTags[0] == "Bwd_NonAnchorRefs")
    {
      AOF((ref_idx=atoi(acTags[1].c_str()))< (int)CodingParameter::SpsMVC.getNumNonAnchorRefsForListX(cur_view_id,1));
      AOF((view_id=atoi(acTags[2].c_str()))< MAX_NUM_VIEWS_MINUS_1);
      CodingParameter::SpsMVC.setNonAnchorRefForListX(cur_view_id,ref_idx,1,view_id);
	  if(m_CurrentViewId==cur_view_id)
      {
          
        xAppendStringWithNO ( cReconFile, cFileNameStringTemp, view_id, ".yuv");

		for (i=0; i<(int)m_MultiviewReferenceFileParams.size() ; i++) {
			if ( m_MultiviewReferenceFileParams[i]._view_id  == view_id) 
				break;
		}

		if (i==	m_MultiviewReferenceFileParams.size())	
			m_MultiviewReferenceFileParams.push_back
			(YUVFileParams(cFileNameStringTemp,view_id,m_uiFrameHeight,m_uiFrameWidth));
      }

    }

	
  }


  if (m_uiMultiviewAcquisitionInfoSEIEnable==1) // SEI JVT-W060
  {
	RNOKS( xReadFromFile_MVAcquisitionInfo( cAcquisitionFile) ); 

  }


  //JVT-V054
  CodingParameter::SpsMVC.setViewCodingOrder(m_cViewOrder);


  /////////////////////////
    if ( view_cnt != CodingParameter::SpsMVC.getNumViewMinus1() )
    {
      fprintf(stderr, "Could not locate all view-dependency information: check config file syntax\n");
      AF();
    }
    ///////////////

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


      printf( "SPS: num_views_minus_1%d\n",CodingParameter::SpsMVC.m_num_views_minus_1 ); // ue(v)

      for (i=0;i<= CodingParameter::SpsMVC.m_num_views_minus_1; i++)
      {
        vcOrder = CodingParameter::SpsMVC.m_uiViewCodingOrder[i];       

        printf("SPS: num_anchor_refs_l0[%d]: %d\n", vcOrder, CodingParameter::SpsMVC.m_num_anchor_refs_list0[vcOrder]);
        for (j=0; j<CodingParameter::SpsMVC.m_num_anchor_refs_list0[vcOrder]; j++)
          printf("SPS: anchor_ref_l0[%d][%d]: %d\n",  vcOrder, j, CodingParameter::SpsMVC.m_anchor_ref_list0[vcOrder][j] );
		
        printf("SPS: num_anchor_refs_l1[%d]: %d\n", vcOrder, CodingParameter::SpsMVC.m_num_anchor_refs_list1[vcOrder]);
        for (j=0; j<CodingParameter::SpsMVC.m_num_anchor_refs_list1[vcOrder]; j++)
          printf("SPS: anchor_ref_l1[%d][%d]: %d\n",  vcOrder, j, CodingParameter::SpsMVC.m_anchor_ref_list1[vcOrder][j] );
      }

      for (i=0;i<= CodingParameter::SpsMVC.m_num_views_minus_1; i++)
      {
        vcOrder = CodingParameter::SpsMVC.m_uiViewCodingOrder[i];       
#if JMVM_ONLY // JVT-Y042
		if ( CodingParameter::SpsMVC.non_anchor_single_loop_decoding_flag )
		{
			printf("SPS: num_non_anchor_refs_l0[%d]: %d\n", vcOrder, CodingParameter::SpsMVC.m_num_non_anchor_refs_sld_list0[vcOrder] ); 
			for (j=0; j<CodingParameter::SpsMVC.m_num_non_anchor_refs_sld_list0[vcOrder]; j++)
				printf("SPS: non_anchor_ref_l0[%d][%d]: %d\n",vcOrder,j, CodingParameter::SpsMVC.m_non_anchor_ref_list0[vcOrder][j]);
		}
		else
		{
			printf("SPS: num_non_anchor_refs_l0[%d]: %d\n", vcOrder, CodingParameter::SpsMVC.m_num_non_anchor_refs_list0[vcOrder] ); 
			for (j=0; j<CodingParameter::SpsMVC.m_num_non_anchor_refs_list0[vcOrder]; j++)
				printf("SPS: non_anchor_ref_l0[%d][%d]: %d\n",vcOrder,j, CodingParameter::SpsMVC.m_non_anchor_ref_list0[vcOrder][j]);
		}
#else
        printf("SPS: num_non_anchor_refs_l0[%d]: %d\n", vcOrder, CodingParameter::SpsMVC.m_num_non_anchor_refs_list0[vcOrder] ); 
        for (j=0; j<CodingParameter::SpsMVC.m_num_non_anchor_refs_list0[vcOrder]; j++)
			printf("SPS: non_anchor_ref_l0[%d][%d]: %d\n",vcOrder,j, CodingParameter::SpsMVC.m_non_anchor_ref_list0[vcOrder][j]);
#endif
     	
#if JMVM_ONLY // JVT-Y042
		if ( CodingParameter::SpsMVC.non_anchor_single_loop_decoding_flag )
		{
			printf("SPS: num_non_anchor_refs_l1[%d]: %d\n", vcOrder, CodingParameter::SpsMVC.m_num_non_anchor_refs_sld_list1[vcOrder] ); 
			for (j=0; j<CodingParameter::SpsMVC.m_num_non_anchor_refs_sld_list1[vcOrder]; j++)
				printf("SPS: non_anchor_ref_l1[%d][%d]: %d\n", vcOrder,j, CodingParameter::SpsMVC.m_non_anchor_ref_list1[vcOrder][j]);
		}
		else
		{
			printf("SPS: num_non_anchor_refs_l1[%d]: %d\n", vcOrder, CodingParameter::SpsMVC.m_num_non_anchor_refs_list1[vcOrder] ); 
			for (j=0; j<CodingParameter::SpsMVC.m_num_non_anchor_refs_list1[vcOrder]; j++)
				printf("SPS: non_anchor_ref_l1[%d][%d]: %d\n", vcOrder,j, CodingParameter::SpsMVC.m_non_anchor_ref_list1[vcOrder][j]);
		}
#else
        printf("SPS: num_non_anchor_refs_l1[%d]: %d\n", vcOrder, CodingParameter::SpsMVC.m_num_non_anchor_refs_list1[vcOrder] ); 
        for (j=0; j<CodingParameter::SpsMVC.m_num_non_anchor_refs_list1[vcOrder]; j++)
			printf("SPS: non_anchor_ref_l1[%d][%d]: %d\n", vcOrder,j, CodingParameter::SpsMVC.m_non_anchor_ref_list1[vcOrder][j]);
#endif
	  }	
      if( m_uiMVCmode )
      {
        m_uiNumberOfLayers = 0;
        xAppendStringWithNO ( cInputFile, cFileNameStringTemp, m_CurrentViewId, ".yuv");
        getLayerParameters(0).setInputFilename  ( (Char*)cFileNameStringTemp.c_str() );
        xAppendStringWithNO ( cReconFile, cFileNameStringTemp, m_CurrentViewId, ".yuv");
        getLayerParameters(0).setOutputFilename ( (Char*)cFileNameStringTemp.c_str() );
#if JMVM_ONLY  // JVT-W081
	xAppendStringWithNO ( cMotionFile, cFileNameStringTemp, m_CurrentViewId, ".dat");
    getLayerParameters(0).setMotionFilename ( (Char*)cFileNameStringTemp.c_str() );

	UInt uiViewId;
	UInt uiNumNonAnchorRefsForList0 = CodingParameter::SpsMVC.getNumNonAnchorRefsForListX(m_CurrentViewId, 0);
	UInt uiNumNonAnchorRefsForList1 = CodingParameter::SpsMVC.getNumNonAnchorRefsForListX(m_CurrentViewId, 1);

	getLayerParameters(0).FwdMotionFilename( uiNumNonAnchorRefsForList0 );
	getLayerParameters(0).BwdMotionFilename( uiNumNonAnchorRefsForList1 );	

	if (!CodingParameter::SpsMVC.getSingleLoopDecoding() ) // JVT-Y042
	{
		for( i=0; i<uiNumNonAnchorRefsForList0; i++ )
		{
			uiViewId = SpsMVC.getNonAnchorRefForListX(m_CurrentViewId,i,0);
			xAppendStringWithNO ( cMotionFile, cFileNameStringTemp, uiViewId, ".dat");
			getLayerParameters(0).setFwdMotionFilename ( (Char*)cFileNameStringTemp.c_str(), i );
		}	
	}
	else
	{
		if( CodingParameter::SpsMVC.m_num_non_anchor_refs_sld_list0[m_CurrentViewId] )
		{
			m_FwdViewId = SpsMVC.getNonAnchorRefForListX (m_CurrentViewId,0,0);
			xAppendStringWithNO ( cMotionFile, cFileNameStringTemp, m_FwdViewId, ".dat");
			getLayerParameters(0).setFwdMotionFilenameSLD( (Char*)cFileNameStringTemp.c_str());
		}
	}

	if (!CodingParameter::SpsMVC.getSingleLoopDecoding() ) // JVT-Y042
	{
		for( i=0; i<uiNumNonAnchorRefsForList1; i++ )
		{
			uiViewId = SpsMVC.getNonAnchorRefForListX(m_CurrentViewId,i,1);
			xAppendStringWithNO ( cMotionFile, cFileNameStringTemp, uiViewId, ".dat");
			getLayerParameters(0).setBwdMotionFilename ( (Char*)cFileNameStringTemp.c_str(), i );		
		}
	}
	else
	{
		if( CodingParameter::SpsMVC.m_num_non_anchor_refs_sld_list1[m_CurrentViewId] )
		{
			m_BwdViewId = SpsMVC.getNonAnchorRefForListX (m_CurrentViewId,0,1);
			xAppendStringWithNO ( cMotionFile, cFileNameStringTemp, m_BwdViewId, ".dat");
			getLayerParameters(0).setBwdMotionFilenameSLD ( (Char*)cFileNameStringTemp.c_str() );	
		}
	}





//	CodingParameter::SpsMVC.setMotionSkipMode(m_uiMotionSkipMode);   		
#endif  // JVT-W081
        getLayerParameters(0).setFrameWidth     ( m_uiFrameWidth );
        getLayerParameters(0).setFrameHeight    ( m_uiFrameHeight );
        xAppendStringWithNO ( rcBitstreamFile, rcBitstreamFile, m_CurrentViewId, ".264");



      }

      fclose( f );
      return Err::m_nOK;
}

ErrVal EncoderCodingParameter::GetExponentMantissa_MVAcquisitionInfo(double arg, UInt mant_prec, UInt *E, UInt *M)// JVT-Z038
{
	double log_val;
	int expo,v,i;
	double mant;

	/* Find expo & mant when arg=(-1)^sign*2^expo*(0.mant),*/
	if (arg==0.0){
		expo=0;
		mant=0;
	} else {
		log_val= (double)log((double)fabs((double)arg))/(double)log(2.0);
		expo = (int)floor((double)log_val);
		mant = (double)pow((double)2, (double)(log_val - (double)expo));
		if ((double)fabs((double)mant) > 1.0) {
			mant = mant / (double)2.0;
			expo= expo + 1;
		}		
	}

	/* Convert expo & mant so that X=(-1)^s*2^expo*(1.mant) */
	if (expo == 0 && mant ==0.0 ) {
       v=0;
	} else if (expo> -30) { 
		while ((double)fabs(mant)<(double)1.0) {
			mant=mant*2.0;
			expo=expo-1;
		}
        if (mant>=0.0)
			mant = mant-1.0;
        v= expo + mant_prec; // number of necessary mantissa bits in the case of truncation
		if (v<0) v=0;
	    expo += 31;
	} else if (expo == -30) {
		v= expo + mant_prec; // number of necessary mantissa bits in the case of truncation
		if (v<0) v=0;
        expo=0;
	}

	*E = (UInt)expo;

	/* Convert a float number mant (0<=mant<1) into a binary representation N which is a mantissa with v bits */
	*M=0;
	int bit;

	for (i=1; i<=v; i++ ){
		bit = (2.0*mant >= 1.0);
		mant = 2.0*mant - (double)bit;
		*M = (*M << 1 ) | bit ; // MSB of M corresponds to 1/2 and MSB-1 to 1/4 and so on.
	}

	return 0;
}

ErrVal EncoderCodingParameter::xReadFromFile_MVAcquisitionInfo( std::string& rcFilename) // SEI JVT-W060, JVT-Z038
{
  
  std::string acTags[4];
 
  
  FILE *f = fopen( rcFilename.c_str(), "r");
  if( NULL == f )
  { 
    printf( "failed to open %s parameter file\n", rcFilename.c_str() );
    return Err::m_nERR;
  } 

	  
	   
  
  UInt NumViewsMinus1=0;
  int view_cnt=0;
  int j,cur_view_id=-1;
  Bool IntrinsicFlag=false;
  Bool ExtrinsicFlag=false;
  UInt PrecFocalLength=0;
  UInt PrecPrincipalPoint=0;
  UInt PrecRadialDistortion=0;
  UInt PrecRotationParam=0;
  UInt PrecTranslationParam=0;

⌨️ 快捷键说明

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