亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qualitylevelassigner.cpp

?? JMVM MPEG MVC/3DAV 測試平臺 國際通用標準
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
  fclose( pFile );

  printf("\n");
  return Err::m_nOK;
}



ErrVal
QualityLevelAssigner::xDetermineQualityIDs()
{
  printf( "determine quality levels ..." );

  //===== determine minimum and maximum quality level id's =====
  UInt  auiMinQualityLevel[MAX_LAYERS];
  UInt  auiMaxQualityLevel[MAX_LAYERS];
  {
    for( Int iLayer = (Int)m_uiNumLayers-1; iLayer >= 0; iLayer-- )
    {
      UInt  uiMinQLLayer          = ( iLayer == (Int)m_uiNumLayers-1 ? 0 : auiMaxQualityLevel[iLayer+1]+1 );
      UInt  uiNumQLInLayer        = ( 63 - uiMinQLLayer ) / ( iLayer + 1 );
      auiMinQualityLevel[iLayer]  = uiMinQLLayer;
      auiMaxQualityLevel[iLayer]  = uiMinQLLayer + uiNumQLInLayer - 1;
    }
  }

  //===== determine optimized quality levels per layer =====
  for( UInt uiLayer = 0; uiLayer < m_uiNumLayers; uiLayer++ )
  {
    //----- create quality estimation object -----
    QualityLevelEstimation  cQualityLevelEstimation;
    RNOK( cQualityLevelEstimation.init( m_uiNumLayers, m_auiNumFGSLayers, m_auiNumFrames ) );

    //----- initialize with packets -----
    {
      for( UInt uiFGSLayer = 1; uiFGSLayer <= m_auiNumFGSLayers[uiLayer]; uiFGSLayer++ )
      for( UInt uiFrame    = 0; uiFrame    <  m_auiNumFrames   [uiLayer]; uiFrame   ++ )
      {
        RNOK( cQualityLevelEstimation.addPacket( uiLayer, uiFGSLayer, uiFrame,
                                                 m_aaauiPacketSize [uiLayer][uiFGSLayer][uiFrame],
                                                 m_aaadDeltaDist   [uiLayer][uiFGSLayer][uiFrame] ) );
      }
    }

    //----- determine quality levels -----
    RNOK( cQualityLevelEstimation.optimizeQualityLevel( uiLayer, uiLayer, auiMinQualityLevel[uiLayer], auiMaxQualityLevel[uiLayer] ) );

    //----- assign quality levels -----
    {
      for( UInt uiFGSLayer = 0; uiFGSLayer <= m_auiNumFGSLayers[uiLayer]; uiFGSLayer++ )
      for( UInt uiFrame    = 0; uiFrame    <  m_auiNumFrames   [uiLayer]; uiFrame   ++ )
      {
        m_aaauiQualityID[uiLayer][uiFGSLayer][uiFrame] = ( uiFGSLayer ? cQualityLevelEstimation.getQualityLevel( uiLayer, uiFGSLayer, uiFrame ) : 63 );
      }
    }
  }

  printf("\n");
  return Err::m_nOK;
}

//JVT-S043
ErrVal
QualityLevelAssigner::xDetermineMultiLayerQualityIDs()
{
  printf( "determine ML quality levels ..." );

  //===== determine minimum and maximum quality level id's =====
  UInt  uiMinQualityLevel = 0;
  UInt  uiMaxQualityLevel = 62;
  
  UInt uiLayer;

 //----- create quality estimation object -----
  QualityLevelEstimation  cQualityLevelEstimation;
  RNOK( cQualityLevelEstimation.init( m_uiNumLayers, m_auiNumFGSLayers, m_auiNumFrames ) );

  //===== determine optimized quality levels per layer =====
  for( uiLayer = 0; uiLayer < m_uiNumLayers; uiLayer++ )
  {
    //----- initialize with packets -----
    {
      for( UInt uiFGSLayer = 1; uiFGSLayer <= m_auiNumFGSLayers[uiLayer]; uiFGSLayer++ )
      for( UInt uiFrame    = 0; uiFrame    <  m_auiNumFrames   [uiLayer]; uiFrame   ++ )
      {
        RNOK( cQualityLevelEstimation.addPacket( uiLayer, uiFGSLayer, uiFrame,
                                                 m_aaauiPacketSize [uiLayer][uiFGSLayer][uiFrame],
                                                 m_aaadDeltaDist   [uiLayer][uiFGSLayer][uiFrame] ) );
      }
    }
  }


  //----- determine quality levels -----
  RNOK( cQualityLevelEstimation.optimizeQualityLevel( m_uiNumLayers-1, 0, uiMinQualityLevel, uiMaxQualityLevel ) );

  for( uiLayer = 0; uiLayer < m_uiNumLayers; uiLayer++ )
  {
    //----- assign quality levels -----
    {
      for( UInt uiFGSLayer = 0; uiFGSLayer <= m_auiNumFGSLayers[uiLayer]; uiFGSLayer++ )
      for( UInt uiFrame    = 0; uiFrame    <  m_auiNumFrames   [uiLayer]; uiFrame   ++ )
      {
        m_aaauiQualityID[uiLayer][uiFGSLayer][uiFrame] = ( uiFGSLayer ? cQualityLevelEstimation.getQualityLevel( uiLayer, uiFGSLayer, uiFrame ) : 63 );
      }
    }
  }

  printf("\n");
  return Err::m_nOK;
}

ErrVal
QualityLevelAssigner::xWriteQualityLayerStreamPID()
{
  printf( "write stream with quality layer (PID) \"%s\" ...", m_pcParameter->getOutputBitStreamName().c_str() );

  BinData*          pcBinData     = 0;
  SEI::SEIMessage*  pcScalableSEI = 0;
  PacketDescription cPacketDescription;
  UInt              auiFrameNum[MAX_LAYERS] = { MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX };

  //===== init =====
  RNOK( m_pcH264AVCPacketAnalyzer->init() );
  ReadBitstreamFile*    pcReadBitStream   = 0;
  WriteBitstreamToFile* pcWriteBitStream  = 0;
  RNOK( ReadBitstreamFile   ::create( pcReadBitStream  ) );
  RNOK( WriteBitstreamToFile::create( pcWriteBitStream ) );
  RNOK( pcReadBitStream ->init( m_pcParameter->getInputBitStreamName  () ) );
  RNOK( pcWriteBitStream->init( m_pcParameter->getOutputBitStreamName () ) );


  //===== loop over packets =====
  while( true )
  {
    //----- read packet -----
    Bool bEOS = false;
    RNOK( pcReadBitStream->extractPacket( pcBinData, bEOS ) );
    if( bEOS )
    {
      //manu.mathew@samsung : memory leak fix
      RNOK( pcReadBitStream ->releasePacket ( pcBinData ) );
      pcBinData = NULL;
      //--
      break;
    }

    //----- get packet description -----
    RNOK( m_pcH264AVCPacketAnalyzer->process( pcBinData, cPacketDescription, pcScalableSEI ) );
    delete pcScalableSEI; pcScalableSEI = 0;

    //----- set packet size -----
    while( pcBinData->data()[ pcBinData->size() - 1 ] == 0x00 )
    {
      RNOK( pcBinData->decreaseEndPos( 1 ) ); // remove trailing zeros
    }

    //----- analyse packets -----
    if( cPacketDescription.FGSLayer )
    {
      pcBinData->data()[1] |= ( m_aaauiQualityID[cPacketDescription.Layer][cPacketDescription.FGSLayer][auiFrameNum[cPacketDescription.Layer]] << 2 );
    }
    else
    {
      if( ! cPacketDescription.ParameterSet && cPacketDescription.NalUnitType != NAL_UNIT_SEI &&
          ! cPacketDescription.FGSLayer )
      {
        auiFrameNum[cPacketDescription.Layer]++;
      }
    }

    //----- write and delete bin data -----
    RNOK( pcWriteBitStream->writePacket   ( &m_cBinDataStartCode ) );
    RNOK( pcWriteBitStream->writePacket   ( pcBinData ) );
    RNOK( pcReadBitStream ->releasePacket ( pcBinData ) );
  }

  
  //===== uninit =====
  RNOK( m_pcH264AVCPacketAnalyzer->uninit() );
  RNOK( pcReadBitStream ->uninit  () );
  RNOK( pcWriteBitStream->uninit  () );
  RNOK( pcReadBitStream ->destroy () );
  RNOK( pcWriteBitStream->destroy () );

  printf("\n");
  return Err::m_nOK;
}



ErrVal
QualityLevelAssigner::xWriteQualityLayerStreamSEI()
{
  printf( "write stream with quality layer (SEI) \"%s\" ...", m_pcParameter->getOutputBitStreamName().c_str() );

  UInt              uiNumAccessUnits  = 0;
  UInt              uiPrevLayer       = 0;
  UInt              uiPrevLevel       = 0;
  BinData*          pcBinData         = 0;
  SEI::SEIMessage*  pcScalableSEI     = 0;
  PacketDescription cPacketDescription;
  UInt              auiFrameNum[MAX_LAYERS] = { MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX, MSYS_UINT_MAX };

  //===== init =====
  RNOK( m_pcH264AVCPacketAnalyzer->init() );
  ReadBitstreamFile*    pcReadBitStream   = 0;
  WriteBitstreamToFile* pcWriteBitStream  = 0;
  RNOK( ReadBitstreamFile   ::create( pcReadBitStream  ) );
  RNOK( WriteBitstreamToFile::create( pcWriteBitStream ) );
  RNOK( pcReadBitStream ->init( m_pcParameter->getInputBitStreamName  () ) );
  RNOK( pcWriteBitStream->init( m_pcParameter->getOutputBitStreamName () ) );


  //===== loop over packets =====
  while( true )
  {
    //----- read packet -----
    Bool bEOS = false;
    RNOK( pcReadBitStream->extractPacket( pcBinData, bEOS ) );
    if( bEOS )
    {
      //manu.mathew@samsung : memory leak fix
      RNOK( pcReadBitStream ->releasePacket ( pcBinData ) );
      pcBinData = NULL;
      //--
      break;
    }

    //----- get packet description -----
    RNOK( m_pcH264AVCPacketAnalyzer->process( pcBinData, cPacketDescription, pcScalableSEI ) );
    delete pcScalableSEI; pcScalableSEI = 0;

    //----- set packet size -----
    while( pcBinData->data()[ pcBinData->size() - 1 ] == 0x00 )
    {
      RNOK( pcBinData->decreaseEndPos( 1 ) ); // remove trailing zeros
    }

    //----- detect first slice data of access unit -----
    Bool bNewAccessUnit = ( !cPacketDescription.ParameterSet                &&
                            !cPacketDescription.ApplyToNext                 &&
                             cPacketDescription.NalUnitType != NAL_UNIT_SEI &&
                             cPacketDescription.FGSLayer    == 0U );
    if(  bNewAccessUnit )
    {
      bNewAccessUnit  =                   ( cPacketDescription.Layer == 0 );
      bNewAccessUnit  = bNewAccessUnit || ( cPacketDescription.Layer >= uiPrevLayer && cPacketDescription.Level >  uiPrevLevel );
      bNewAccessUnit  = bNewAccessUnit || ( cPacketDescription.Layer == uiPrevLayer && cPacketDescription.Level == uiPrevLevel );
      bNewAccessUnit  = bNewAccessUnit || ( cPacketDescription.Layer <  uiPrevLayer );
    }

    //----- insert quality layer SEI and increase frame number -----
    if( bNewAccessUnit )
    {
      for( UInt uiLayer = cPacketDescription.Layer; uiLayer < m_uiNumLayers; uiLayer++ )
      {
        auiFrameNum[uiLayer]++;
        xInsertQualityLayerSEI( pcWriteBitStream, uiLayer, auiFrameNum[uiLayer] );
      }
      uiNumAccessUnits++;
    }

    //----- write and delete bin data -----
    RNOK( pcWriteBitStream->writePacket   ( &m_cBinDataStartCode ) );
    RNOK( pcWriteBitStream->writePacket   ( pcBinData ) );
    RNOK( pcReadBitStream ->releasePacket ( pcBinData ) );

    //----- update previous layer information -----
    uiPrevLayer = cPacketDescription.Layer;
    uiPrevLevel = cPacketDescription.Level;
  }

  
  //===== uninit =====
  RNOK( m_pcH264AVCPacketAnalyzer->uninit() );
  RNOK( pcReadBitStream ->uninit  () );
  RNOK( pcWriteBitStream->uninit  () );
  RNOK( pcReadBitStream ->destroy () );
  RNOK( pcWriteBitStream->destroy () );


  printf(" (%d AU's)\n", uiNumAccessUnits );
  return Err::m_nOK;
}



ErrVal
QualityLevelAssigner::xInsertQualityLayerSEI( WriteBitstreamToFile* pcWriteBitStream,
                                              UInt                  uiLayer,
                                              UInt                  uiFrameNum )
{
  //===== init binary data =====
  const UInt          uiQLSEIMessageBufferSize = 1024;
  UChar               aucQLSEIMessageBuffer[uiQLSEIMessageBufferSize];
  BinData             cBinData;
  ExtBinDataAccessor  cExtBinDataAccessor;
  cBinData.reset          ();
  cBinData.set            ( aucQLSEIMessageBuffer, uiQLSEIMessageBufferSize );
  cBinData.setMemAccessor ( cExtBinDataAccessor );

  //===== create SEI message =====
  SEI::QualityLevelSEI* pcQualityLevelSEI;
  SEI::MessageList      cSEIMessageList;
  RNOK( SEI::QualityLevelSEI::create( pcQualityLevelSEI ) );
  cSEIMessageList.push_back( pcQualityLevelSEI );

  //===== set content of SEI message =====
  UInt uiNumLayers;
  for( uiNumLayers = 0; uiNumLayers <= m_auiNumFGSLayers[uiLayer] && m_aaauiQualityID  [uiLayer][uiNumLayers][uiFrameNum] != MSYS_UINT_MAX; uiNumLayers++ )
  {
    pcQualityLevelSEI->setQualityLevel          ( uiNumLayers,       m_aaauiQualityID  [uiLayer][uiNumLayers][uiFrameNum] );
    pcQualityLevelSEI->setDeltaBytesRateOfLevel ( uiNumLayers,       m_aaauiPacketSize [uiLayer][uiNumLayers][uiFrameNum] );
  }
  pcQualityLevelSEI->setDependencyId            ( uiLayer );
  pcQualityLevelSEI->setNumLevel                ( uiNumLayers );

  //===== encode SEI message =====
  UInt uiBits = 0;
  RNOK( m_pcNalUnitEncoder->initNalUnit ( &cExtBinDataAccessor ) );
  RNOK( m_pcNalUnitEncoder->write       ( cSEIMessageList ) );
  RNOK( m_pcNalUnitEncoder->closeNalUnit( uiBits ) );

  //===== write SEI message =====
  RNOK( pcWriteBitStream->writePacket( &m_cBinDataStartCode ) );
  RNOK( pcWriteBitStream->writePacket( &cExtBinDataAccessor ) );

  //===== reset =====
  cBinData.reset();

  return Err::m_nOK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一二三区在线| 久久久www免费人成精品| 亚洲久本草在线中文字幕| 风间由美一区二区三区在线观看 | 精品一区二区三区日韩| 欧美日韩一区二区三区在线看 | 久久久久国产精品厨房| 精品一区二区三区蜜桃| 日韩精品一区二区三区四区视频| 日韩国产欧美在线观看| 欧美日韩大陆在线| 亚洲午夜久久久久久久久久久 | 成人精品国产一区二区4080| 久久久av毛片精品| 国产精品99久久久久久似苏梦涵 | 国产精品一区免费在线观看| 久久久国产精华| 国产一区二区剧情av在线| 久久久久免费观看| 国产91综合一区在线观看| 国产农村妇女精品| 成人精品亚洲人成在线| 国产精品久99| 色偷偷久久人人79超碰人人澡| 亚洲视频免费在线观看| 91传媒视频在线播放| 亚洲一区二区在线视频| 欧美高清性hdvideosex| 蜜桃视频在线观看一区二区| 精品剧情v国产在线观看在线| 久草中文综合在线| 欧美激情一区不卡| 99久久夜色精品国产网站| 亚洲精品v日韩精品| 欧美三级乱人伦电影| 青椒成人免费视频| 久久亚洲综合色| 91小视频免费观看| 亚洲第四色夜色| 日韩精品中文字幕一区二区三区 | 国产黑丝在线一区二区三区| 欧美激情自拍偷拍| 日本韩国一区二区三区视频| 亚洲va天堂va国产va久| 欧美videos大乳护士334| 国模娜娜一区二区三区| 国产精品国产精品国产专区不蜜| 色999日韩国产欧美一区二区| 婷婷丁香久久五月婷婷| 久久婷婷久久一区二区三区| 91伊人久久大香线蕉| 丝袜a∨在线一区二区三区不卡 | 欧美精选一区二区| 激情av综合网| 亚洲免费av高清| 日韩精品一区二区三区视频在线观看| 成人黄色在线视频| 偷窥少妇高潮呻吟av久久免费| 久久综合狠狠综合久久综合88| 91伊人久久大香线蕉| 奇米888四色在线精品| 欧美国产欧美综合| 欧美日韩三级在线| 国产成人免费xxxxxxxx| 亚洲国产aⅴ成人精品无吗| 精品国产伦一区二区三区免费| a在线欧美一区| 男女视频一区二区| 亚洲三级在线观看| 久久婷婷久久一区二区三区| 色老头久久综合| 激情伊人五月天久久综合| 亚洲欧美日韩小说| 久久这里只有精品6| 色呦呦日韩精品| 国产精品一区在线观看乱码| 亚洲高清免费视频| 国产蜜臀97一区二区三区| 欧美人牲a欧美精品| 成人av网在线| 久久国产剧场电影| 亚洲制服丝袜在线| 中文字幕av资源一区| 制服.丝袜.亚洲.中文.综合| 成人晚上爱看视频| 久久99日本精品| 亚洲福利一二三区| 国产精品国产三级国产aⅴ原创 | 久久久久99精品一区| 欧美三级三级三级爽爽爽| 成人av在线播放网站| 黑人巨大精品欧美黑白配亚洲| 亚洲一区二区影院| 国产精品久久久久影院亚瑟| 亚洲精品一区二区在线观看| 欧美乱熟臀69xxxxxx| av不卡在线播放| 国产伦精品一区二区三区免费| 五月天丁香久久| 亚洲精品第1页| 国产精品久久国产精麻豆99网站 | 久久久精品国产免大香伊| 91精品国产高清一区二区三区蜜臀 | 欧美日韩专区在线| 91在线云播放| 福利一区在线观看| 国产一区二区0| 久久99精品国产麻豆婷婷| 天天综合日日夜夜精品| 一区二区三区四区在线免费观看| 久久精品一区八戒影视| 日韩午夜激情视频| 在线电影院国产精品| 欧美亚一区二区| 91久久人澡人人添人人爽欧美| 成人伦理片在线| 风间由美一区二区av101| 国产另类ts人妖一区二区| 久久国产精品免费| 美腿丝袜亚洲综合| 日韩国产在线一| 日韩国产欧美一区二区三区| 天堂成人免费av电影一区| 亚洲一区二区三区不卡国产欧美 | 中文字幕中文字幕在线一区| 久久精品一区二区三区不卡| 日本女优在线视频一区二区| 日韩在线卡一卡二| 三级久久三级久久| 天堂av在线一区| 日韩国产精品久久久久久亚洲| 婷婷中文字幕综合| 日本91福利区| 免费观看在线综合| 美女网站一区二区| 激情六月婷婷久久| 国产成人鲁色资源国产91色综| 国产一区二区不卡| 成人午夜大片免费观看| 97精品久久久久中文字幕| 色综合天天视频在线观看| 91女厕偷拍女厕偷拍高清| 在线影视一区二区三区| 欧美在线短视频| 欧美日韩的一区二区| 日韩午夜激情免费电影| 久久在线免费观看| 国产精品久久99| 亚洲综合区在线| 婷婷开心激情综合| 精彩视频一区二区三区| 国产一区二区看久久| 成人福利在线看| 在线视频你懂得一区二区三区| 欧美色综合影院| 欧美不卡视频一区| 久久久国产精品午夜一区ai换脸 | 久久先锋资源网| 日本一区二区成人在线| 综合久久久久久久| 亚洲电影激情视频网站| 蜜臀精品一区二区三区在线观看| 狠狠色狠狠色综合系列| 成人avav在线| 在线精品视频小说1| 7777精品伊人久久久大香线蕉 | 亚洲主播在线播放| 裸体在线国模精品偷拍| 国产精品综合二区| 成人午夜精品一区二区三区| 欧美综合亚洲图片综合区| 717成人午夜免费福利电影| 久久看人人爽人人| 亚洲欧美激情小说另类| 石原莉奈在线亚洲三区| 国产一区二区精品在线观看| 91麻豆精品视频| 欧美一级在线观看| 中文字幕精品综合| 午夜视频在线观看一区二区| 国产精品亚洲成人| 欧美性猛片aaaaaaa做受| 精品日韩一区二区三区免费视频| 中文字幕av不卡| 午夜久久电影网| 成人在线视频首页| 9191国产精品| 亚洲国产精品99久久久久久久久| 亚洲国产日韩一级| 成人中文字幕电影| 欧美一区二区三区免费| 最新日韩在线视频| 美女一区二区在线观看| 91视频一区二区| 亚洲精品一区在线观看| 亚洲一二三四久久| 国产成人精品一区二区三区网站观看| 欧美综合欧美视频| 国产日韩欧美麻豆| 调教+趴+乳夹+国产+精品|