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

📄 h264avcencoder.cpp

📁 JVT-Z203_jsvm.rar
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            Int32 uilayerProfileLevelIdc = 0;
            uilayerProfileLevelIdc += uilayerProfileIdc;
            uilayerProfileLevelIdc = uilayerProfileLevelIdc << 1;
            uilayerProfileLevelIdc += bLayerConstraintSet0Flag;
            uilayerProfileLevelIdc = uilayerProfileLevelIdc << 1;
            uilayerProfileLevelIdc += bLayerConstraintSet1Flag;
            uilayerProfileLevelIdc = uilayerProfileLevelIdc << 1;
            uilayerProfileLevelIdc += bLayerConstraintSet2Flag;
            uilayerProfileLevelIdc = uilayerProfileLevelIdc << 1;
            uilayerProfileLevelIdc += bLayerConstraintSet3Flag;
            uilayerProfileLevelIdc = uilayerProfileLevelIdc << 4;
            uilayerProfileLevelIdc = uilayerProfileLevelIdc << 8;
            uilayerProfileLevelIdc += uiLayerLevelIdc;
            //JVT-W051 }
            pcScalableSEI->setLayerProfileIdc(uiNumScalableLayer, uilayerProfileIdc);
            //SEI changes update {
						//pcScalableSEI->setLayerConstraintSet0Flag(uiNumScalableLayer, bLayerConstraintSet0Flag);
      //      pcScalableSEI->setLayerConstraintSet1Flag(uiNumScalableLayer, bLayerConstraintSet1Flag);
      //      pcScalableSEI->setLayerConstraintSet2Flag(uiNumScalableLayer, bLayerConstraintSet2Flag);
      //      pcScalableSEI->setLayerConstraintSet3Flag(uiNumScalableLayer, bLayerConstraintSet3Flag);
      //      pcScalableSEI->setLayerLevelIdc(uiNumScalableLayer, uiLayerLevelIdc);
          }
					//else
          //{//JVT-S036 lsj
          //  UInt bProfileLevelInfoSrcLayerIdDelta = 0;  //may be changed

          //  pcScalableSEI->setProfileLevelInfoSrcLayerIdDelta(uiNumScalableLayer, bProfileLevelInfoSrcLayerIdDelta);
          //}
          //SEI changes update }
          if(pcScalableSEI->getBitrateInfoPresentFlag(uiNumScalableLayer))
          {
            Double  dAvgBitrate                 = m_aaadLayerBitrateRep[uiDependencyID][uiCurrTempLevel][uiQualityLevel];
            Double  dMaxBitrateLayer          = 0.0;	//should be changed
            Double  dMaxBitrateDecodedPicture = 0.0;	//should be changed
            UInt    uiMaxBitrateCalcWindow    = 0;    //should be changed

            pcScalableSEI->setAvgBitrateBPS(uiNumScalableLayer, dAvgBitrate);
            pcScalableSEI->setMaxBitrateLayerBPS(uiNumScalableLayer, dMaxBitrateLayer);
            pcScalableSEI->setMaxBitrateDecodedPictureBPS(uiNumScalableLayer, dMaxBitrateDecodedPicture);
            pcScalableSEI->setMaxBitrateCalcWindow(uiNumScalableLayer, uiMaxBitrateCalcWindow);
          }

          if(pcScalableSEI->getFrmRateInfoPresentFlag(uiNumScalableLayer))
          {
            UInt uiConstantFrmRateIdc = 0;
            ROT( m_aaadFinalFramerate[uiDependencyID][uiCurrTempLevel][uiQualityLevel] == 0.0 );
            UInt uiAvgFrmRate = (UInt)floor( 256.0 * m_aaadFinalFramerate[uiDependencyID][uiCurrTempLevel][uiQualityLevel] + 0.5 );

            pcScalableSEI->setConstantFrmRateIdc(uiNumScalableLayer, uiConstantFrmRateIdc);
            pcScalableSEI->setAvgFrmRate(uiNumScalableLayer, uiAvgFrmRate);
          }
          //SEI changes update {
          //else
          //{//JVT-S036 lsj
          //  UInt  bFrmRateInfoSrcLayerIdDelta = 0;  //may be changed

          //  pcScalableSEI->setFrmRateInfoSrcLayerIdDelta(uiNumScalableLayer, bFrmRateInfoSrcLayerIdDelta);
          //}

          //if(pcScalableSEI->getFrmSizeInfoPresentFlag(uiNumScalableLayer))
					if(pcScalableSEI->getFrmSizeInfoPresentFlag(uiNumScalableLayer)||pcScalableSEI->getIroiSliceDivisionInfoPresentFlag(uiNumScalableLayer))
					//SEI changes update }
          {
            UInt uiFrmWidthInMbsMinus1 = rcLayer.getFrameWidth()/16 - 1;
            UInt uiFrmHeightInMbsMinus1 = rcLayer.getFrameHeight()/16 - 1;

            pcScalableSEI->setFrmWidthInMbsMinus1(uiNumScalableLayer, uiFrmWidthInMbsMinus1);
            pcScalableSEI->setFrmHeightInMbsMinus1(uiNumScalableLayer, uiFrmHeightInMbsMinus1);
          }
          //SEI changes update
					//else
          //{//JVT-S036 lsj
          //  UInt  bFrmSizeInfoSrcLayerIdDelta = 0;  //may be changed

          //  pcScalableSEI->setFrmSizeInfoSrcLayerIdDelta(uiNumScalableLayer, bFrmSizeInfoSrcLayerIdDelta);
          //}

          if(pcScalableSEI->getSubRegionLayerFlag(uiNumScalableLayer))
          {
            UInt uiBaseRegionLayerId = 0;
            Bool bDynamicRectFlag = false;

            pcScalableSEI->setBaseRegionLayerId(uiNumScalableLayer, uiBaseRegionLayerId);
            pcScalableSEI->setDynamicRectFlag(uiNumScalableLayer, bDynamicRectFlag);
            if(pcScalableSEI->getDynamicRectFlag(uiNumScalableLayer))
            {
              UInt uiHorizontalOffset = 0;
              UInt uiVerticalOffset = 0;
              UInt uiRegionWidth = 0;
              UInt uiRegionHeight = 0;
              pcScalableSEI->setHorizontalOffset(uiNumScalableLayer, uiHorizontalOffset);
              pcScalableSEI->setVerticalOffset(uiNumScalableLayer, uiVerticalOffset);
              pcScalableSEI->setRegionWidth(uiNumScalableLayer, uiRegionWidth);
              pcScalableSEI->setRegionHeight(uiNumScalableLayer, uiRegionHeight);
            }
          }
          //SEI changes update
					//else
          //{//JVT-S036 lsj
          //  UInt  bSubRegionInfoSrcLayerIdDelta = 0; //may be changed

          //  pcScalableSEI->setSubRegionInfoSrcLayerIdDelta(uiNumScalableLayer, bSubRegionInfoSrcLayerIdDelta);
          //}

        //JVT-S036 lsj start
          if( pcScalableSEI->getSubPicLayerFlag( uiNumScalableLayer ) )
          {
            UInt RoiId = 1;//should be changed
            pcScalableSEI->setRoiId( uiNumScalableLayer, RoiId );
          }
          if( pcScalableSEI->getIroiSliceDivisionInfoPresentFlag( uiNumScalableLayer ) )
          {
            //SEI changes update {
						//pcScalableSEI->setIroiSliceDivisionType( uiNumScalableLayer, rcLayer.m_uiSliceDivisionType );
            /*if (rcLayer.m_uiSliceDivisionType == 0)
            {
              pcScalableSEI->setGridSliceWidthInMbsMinus1( uiNumScalableLayer, rcLayer.m_puiGridSliceWidthInMbsMinus1[0] );
              pcScalableSEI->setGridSliceHeightInMbsMinus1( uiNumScalableLayer, rcLayer.m_puiGridSliceHeightInMbsMinus1[0] );
            }
            else if (rcLayer.m_uiSliceDivisionType == 1)
            {
              pcScalableSEI->setNumSliceMinus1( uiNumScalableLayer, rcLayer.m_uiNumSliceMinus1 );
              for ( j = 0; j <= rcLayer.m_uiNumSliceMinus1; j++ )
              {
                pcScalableSEI->setFirstMbInSlice( uiNumScalableLayer, j, rcLayer.m_puiFirstMbInSlice[j] );
                pcScalableSEI->setSliceWidthInMbsMinus1( uiNumScalableLayer, j, rcLayer.m_puiGridSliceWidthInMbsMinus1[j] );
                pcScalableSEI->setSliceHeightInMbsMinus1( uiNumScalableLayer, j, rcLayer.m_puiGridSliceHeightInMbsMinus1[j] );
              }
            }
            else if (rcLayer.m_uiSliceDivisionType == 2)
            {
              pcScalableSEI->setNumSliceMinus1( uiNumScalableLayer, rcLayer.m_uiNumSliceMinus1 );
              UInt uiFrameHeightInMb = pcScalableSEI->getFrmHeightInMbsMinus1( uiNumScalableLayer ) + 1;
              UInt uiFrameWidthInMb  = pcScalableSEI->getFrmWidthInMbsMinus1(uiNumScalableLayer ) + 1;
              UInt uiPicSizeInMbs = uiFrameHeightInMb * uiFrameWidthInMb;
              for ( j = 0; j < uiPicSizeInMbs; j++)
              {
                pcScalableSEI->setSliceId( uiNumScalableLayer, j, rcLayer.m_puiSliceId[j] );
              }
            }
          }*/
						pcScalableSEI->setIroiGridFlag( uiNumScalableLayer, rcLayer.m_bGridFlag );
						if (rcLayer.m_bGridFlag)
            {
              pcScalableSEI->setGridSliceWidthInMbsMinus1( uiNumScalableLayer, rcLayer.m_puiGridSliceWidthInMbsMinus1[0] );
              pcScalableSEI->setGridSliceHeightInMbsMinus1( uiNumScalableLayer, rcLayer.m_puiGridSliceHeightInMbsMinus1[0] );
            }
            else
            {
              pcScalableSEI->setNumSliceMinus1( uiNumScalableLayer, rcLayer.m_uiNumSliceMinus1 );
              for ( j = 0; j <= rcLayer.m_uiNumSliceMinus1; j++ )
              {
                pcScalableSEI->setFirstMbInSlice( uiNumScalableLayer, j, rcLayer.m_puiFirstMbInSlice[j] );
                pcScalableSEI->setSliceWidthInMbsMinus1( uiNumScalableLayer, j, rcLayer.m_puiGridSliceWidthInMbsMinus1[j] );
                pcScalableSEI->setSliceHeightInMbsMinus1( uiNumScalableLayer, j, rcLayer.m_puiGridSliceHeightInMbsMinus1[j] );
              }
            }
          }
        //JVT-S036 lsj end
        //SEI changes update }
          if(pcScalableSEI->getLayerDependencyInfoPresentFlag(uiNumScalableLayer))
          {
// BUG_FIX liuhui{
          {
            UInt uiDelta;
            UInt uiQL = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getQualityLevelCGSSNR() + uiCurrFGSLevel : uiCurrFGSLevel);
            UInt uiL = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getLayerCGSSNR() : uiCurrLayer);
            if( uiQL ) // FGS layer, Q != 0
            {
              uiDelta = uiNumScalableLayer - getScalableLayerId( uiL, uiCurrTempLevel, uiQL-1 );
              assert ( uiDelta > 0 );
              pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 0, uiDelta-1 ); //JVT-S036 lsj
              pcScalableSEI->setNumDirectlyDependentLayers(uiNumScalableLayer, 1 );
              if( uiCurrTempLevel- uiMinTempLevel ) // T != 0
              {
                uiDelta = uiNumScalableLayer - getScalableLayerId( uiL, uiCurrTempLevel-1, uiQL );
                assert ( uiDelta > 0 );
                pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 1, uiDelta-1 ); //JVT-S036 lsj
                pcScalableSEI->setNumDirectlyDependentLayers(uiNumScalableLayer, 2 );
              }
            }
            else if( ( uiCurrTempLevel- uiMinTempLevel ) ) // Q = 0, T != 0					    
            {
              uiDelta = uiNumScalableLayer - getScalableLayerId( uiL, uiCurrTempLevel-1, uiQL );
              assert ( uiDelta > 0 );
              pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 0, uiDelta-1 ); //JVT-S036 lsj
              pcScalableSEI->setNumDirectlyDependentLayers( uiNumScalableLayer, 1 );
              if( uiL ) // D != 0, T != 0, Q = 0
              {
                UInt uiBaseLayerCGSSNRId = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseLayerCGSSNR() : rcLayer.getBaseLayerId());
                UInt uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseQualityLevelCGSSNR() : rcLayer.getBaseQualityLevel());
                uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? uiBaseQualityLevel : 0 );
  //bugfix delete
                {
                  if( MSYS_UINT_MAX != getScalableLayerId( uiBaseLayerCGSSNRId, uiCurrTempLevel, uiBaseQualityLevel ) )
                  {
                    uiDelta = uiNumScalableLayer - getScalableLayerId( uiBaseLayerCGSSNRId, uiCurrTempLevel, uiBaseQualityLevel );
                    assert ( uiDelta > 0 );
                    pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 1, uiDelta-1 ); //JVT-S036 lsj
                    pcScalableSEI->setNumDirectlyDependentLayers( uiNumScalableLayer, 2 );
                  }
                }
              }
            }
            else if ( uiL ) // D != 0,T = 0, Q = 0
            {
              UInt uiBaseLayerCGSSNRId = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseLayerCGSSNR() : rcLayer.getBaseLayerId());
              UInt uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseQualityLevelCGSSNR() : rcLayer.getBaseQualityLevel());
              uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? uiBaseQualityLevel : 0 );
//bugfix delete
              uiDelta = uiNumScalableLayer - getScalableLayerId( uiBaseLayerCGSSNRId, uiCurrTempLevel, uiBaseQualityLevel );
              assert ( uiDelta > 0 );
              pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 0, uiDelta-1 ); //JVT-S036 lsj
              pcScalableSEI->setNumDirectlyDependentLayers( uiNumScalableLayer, 1 );
            }
            else // base layer, no dependency layers
            {
              pcScalableSEI->setNumDirectlyDependentLayers( uiNumScalableLayer, 0 );
            }
          } 

// BUG_FIX liuhui}
          }
          else
          {//JVT-S036 lsj
            UInt uiLayerDependencyInfoSrcLayerIdDelta = 0; //may be changed

            pcScalableSEI->setLayerDependencyInfoSrcLayerIdDelta( uiNumScalableLayer, uiLayerDependencyInfoSrcLayerIdDelta);
          }

          //if(pcScalableSEI->getInitParameterSetsInfoPresentFlag(uiNumScalableLayer))//SEI changes update
          if(pcScalableSEI->getParameterSetsInfoPresentFlag(uiNumScalableLayer))//SEI changes update
          {
            UInt uiNumInitSPSMinus1  = 0;	//should be changed
						UInt uiNumInitSSPSMinus1 = 0;	//should be changed SEI changes update
            UInt uiNumInitPPSMinus1  = 0;	//should be changed
            pcScalableSEI->setNumInitSeqParameterSetMinus1(uiNumScalableLayer, uiNumInitSPSMinus1);
						pcScalableSEI->setNumInitSubsetSeqParameterSetMinus1(uiNumScalableLayer, uiNumInitSSPSMinus1);//SEI changes update
            pcScalableSEI->setNumInitPicParameterSetMinus1(uiNumScalableLayer, uiNumInitPPSMinus1);
            for( j = 0; j <= pcScalableSEI->getNumInitSPSMinus1(uiNumScalableLayer); j++)
            {
              UInt uiDelta = 0; //should be changed
              pcScalableSEI->setInitSeqParameterSetIdDelta( uiNumScalableLayer, j, uiDelta );
            }
						//SEI changes update {
            for( j = 0; j <= pcScalableSEI->getNumInitSSPSMinus1(uiNumScalableLayer); j++)
            {
              UInt uiDelta = 0; //should be changed
              pcScalableSEI->setInitSubsetSeqParameterSetIdDelta( uiNumScalableLayer, j, uiDelta );
            }
						//SEI changes update }
            for( j = 0; j <= pcScalableSEI->getNumInitPPSMinus1(uiNumScalableLayer); j++)
            {
              UInt uiDelta = 0; //should be changed
              pcScalableSEI->setInitPicParameterSetIdDelta( uiNumScalableLayer, j, uiDelta );
            }
          }
          else
          {//JVT-S036 lsj
            UInt bInitParameterSetsInfoSrcLayerIdDelta = 0;  //may be changed

            pcScalableSEI->setInitParameterSetsInfoSrcLayerIdDelta( uiNumScalableLayer, bInitParameterSetsInfoSrcLayerIdDelta );
          }

          //JVT-W051 {
          //if ( pcScalableSEI->getBitstreamRestrictionFlag ( uiNumScalableLayer ) )//SEI changes update
					if ( pcScalableSEI->getBitstreamRestrictionInfoPresentFlag ( uiNumScalableLayer ) )//SEI changes update
          {
            UInt uiMaxDecFrameBuffering = m_pcCodingParameter->getDPBSize();//should be changed
            UInt uiNumReorderFrames = pcScalableSEI->getMaxDecFrameBuffering( uiNumScalableLayer );//should be changed
            pcScalableSEI->setMaxDecFrameBuffering( uiNumScalableLayer, uiMaxDecFrameBuffering );					  
            pcScalableSEI->setNumReorderFrames( uiNumScalableLayer, uiNumReorderFrames );
            // JVT-W064 { value of the following restriction parameters are set to the maximum in this example.
            pcScalableSEI->setMotionVectorsOverPicBoundariesFlag( uiNumScalableLayer, true );
            pcScalableSEI->setMaxBytesPerPicDenom( uiNumScalableLayer, 0 ); 
            pcScalableSEI->setLog2MaxMvLengthHorizontal( uiNumScalableLayer, 16 ); 
            pcScalableSEI->setLog2MaxMvLengthVertical( uiNumScalableLayer, 16 ); 
            // JVT-W064 }
          }
          //JVT-W051 }
          uiNumScalableLayer++;
        }
      }
    }

  }
  //JVT-W051 {
  //SEI changes update {
	//pcScalableSEI->setQualityLayerInfoPresentFlag(true);
  //if ( pcScalableSEI->getQualityLayerInfoPresentFlag() )
  //{
  //  UInt uiQlNumdIdMinus1 = m_pcCodingParameter->getNumberOfLayers ()-1;
  //  pcScalableSEI->setQlNumdIdMinus1( uiQlNumdIdMinus1 );
  //  for ( i=0; i <= pcScalableSEI->getQlNumdIdMinus1(); i++ )
  //  {
  //    UInt uiQlDependencyId = i;//could be changed
  //    pcScalableSEI->setQlDependencyId(i, uiQlDependencyId);

⌨️ 快捷键说明

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