History

minor changes for better judgement and stats calculation

sijchen@cisco.com committed 9 years ago

Commit 6c568de1 parent 73c2acb3 files · +26 −23Browse files

Showing the changes to codec/encoder/plus/src/welsEncoderExt.cpp (1 of 3 files). Show all

Unified · Split

codec/encoder/plus/src/welsEncoderExt.cpp+22−21
@@ -568,9 +568,12 @@ void CWelsH264SVCEncoder::UpdateStatistics (SFrameBSInfo* pBsInfo, · 567 unmodified lines
568568 const int64_t kiCurrentFrameMs) {
569569
570570 const int64_t kiCurrentFrameTs = m_pEncContext->uiLastTimestamp = pBsInfo->uiTimeStamp;
571+ const int64_t kiTimeDiff = kiCurrentFrameTs - m_pEncContext->iLastStatisticsLogTs;
571572
572573 int32_t iMaxDid = m_pEncContext->pSvcParam->iSpatialLayerNum - 1;
573574 SLayerBSInfo* pLayerInfo = &pBsInfo->sLayerInfo[0];
575+ uint32_t iMaxInputFrame = 0;
576+ float iMaxFrameRate = 0;
574577 for (int32_t iDid = 0; iDid <= iMaxDid; iDid++) {
575578 EVideoFrameType eFrameType = videoFrameTypeSkip;
576579 int32_t kiCurrentFrameSize = 0;
@@ -584,19 +587,20 @@ void CWelsH264SVCEncoder::UpdateStatistics (SFrameBSInfo* pBsInfo, · 7 unmodified lines
584587 }
585588 }
586589 SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics[iDid]);
587−
590+ SSpatialLayerInternal* pSpatialLayerInternalParam = & (m_pEncContext->pSvcParam->sDependencyLayers[iDid]);
588591
589592 if ((0 != pStatistics->uiWidth && 0 != pStatistics->uiHeight)
590− && (pStatistics->uiWidth != (unsigned int) m_pEncContext->pSvcParam->sDependencyLayers[iDid].iActualWidth
591− || pStatistics->uiHeight != (unsigned int) m_pEncContext->pSvcParam->sDependencyLayers[iDid].iActualHeight)) {
593+ && (pStatistics->uiWidth != (unsigned int) pSpatialLayerInternalParam->iActualWidth
594+ || pStatistics->uiHeight != (unsigned int) pSpatialLayerInternalParam->iActualHeight)) {
592595 pStatistics->uiResolutionChangeTimes ++;
593596 }
594− pStatistics->uiWidth = m_pEncContext->pSvcParam->sDependencyLayers[iDid].iActualWidth;
595− pStatistics->uiHeight = m_pEncContext->pSvcParam->sDependencyLayers[iDid].iActualHeight;
597+ pStatistics->uiWidth = pSpatialLayerInternalParam->iActualWidth;
598+ pStatistics->uiHeight = pSpatialLayerInternalParam->iActualHeight;
596599
597600 const bool kbCurrentFrameSkipped = (videoFrameTypeSkip == eFrameType);
598601 pStatistics->uiInputFrameCount ++;
599602 pStatistics->uiSkippedFrameCount += (kbCurrentFrameSkipped ? 1 : 0);
603+ iMaxInputFrame = WELS_MAX (pStatistics->uiInputFrameCount, iMaxInputFrame);
600604 int32_t iProcessedFrameCount = pStatistics->uiInputFrameCount - pStatistics->uiSkippedFrameCount;
601605 if (!kbCurrentFrameSkipped && iProcessedFrameCount != 0) {
602606 pStatistics->fAverageFrameSpeedInMs += (kiCurrentFrameMs - pStatistics->fAverageFrameSpeedInMs) / iProcessedFrameCount;
@@ -610,6 +614,7 @@ void CWelsH264SVCEncoder::UpdateStatistics (SFrameBSInfo* pBsInfo, · 7 unmodified lines
610614 } else {
611615 m_pEncContext->uiStartTimestamp = kiCurrentFrameTs;
612616 }
617+ iMaxFrameRate = WELS_MAX (iMaxFrameRate, pStatistics->fAverageFrameRate);
613618 //pStatistics->fLatestFrameRate = m_pEncContext->pWelsSvcRc->fLatestFrameRate; //TODO: finish the calculation in RC
614619 //pStatistics->uiBitRate = m_pEncContext->pWelsSvcRc->iActualBitRate; //TODO: finish the calculation in RC
615620 pStatistics->uiAverageFrameQP = m_pEncContext->pWelsSvcRc[iDid].iAverageFrameQp;
@@ -626,8 +631,7 @@ void CWelsH264SVCEncoder::UpdateStatistics (SFrameBSInfo* pBsInfo, · 10 unmodified lines
626631 const int32_t kiDeltaFrames = static_cast<int32_t> (pStatistics->uiInputFrameCount -
627632 pStatistics->iLastStatisticsFrameCount);
628633 if (kiDeltaFrames > (m_pEncContext->pSvcParam->fMaxFrameRate * 2)) {
629− const int64_t kiTimeDiff = kiCurrentFrameTs - pStatistics->iStatisticsTs;
630− if (kiTimeDiff) {
634+ if (kiTimeDiff > m_pEncContext->iStatisticsLogInterval) {
631635 pStatistics->fLatestFrameRate = static_cast<float> ((pStatistics->uiInputFrameCount -
632636 pStatistics->iLastStatisticsFrameCount) * 1000 /
633637 kiTimeDiff);
@@ -639,7 +643,7 @@ void CWelsH264SVCEncoder::UpdateStatistics (SFrameBSInfo* pBsInfo, · 5 unmodified lines
639643 "Actual input fLatestFrameRate = %f is quite different from framerate in setting %f, please check setting or timestamp unit (ms), cur_Ts = %"
640644 PRId64 " start_Ts = %" PRId64,
641645 pStatistics->fLatestFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate, kiCurrentFrameTs,
642− static_cast<int64_t> (pStatistics->iStatisticsTs));
646+ static_cast<int64_t> (m_pEncContext->iLastStatisticsLogTs));
643647 }
644648
645649 if (m_pEncContext->pSvcParam->iRCMode == RC_QUALITY_MODE || m_pEncContext->pSvcParam->iRCMode == RC_BITRATE_MODE) {
@@ -653,7 +657,6 @@ void CWelsH264SVCEncoder::UpdateStatistics (SFrameBSInfo* pBsInfo, · 7 unmodified lines
653657 }
654658
655659 // update variables
656− pStatistics->iStatisticsTs = kiCurrentFrameTs;
657660 pStatistics->iLastStatisticsBytes = pStatistics->iTotalEncodedBytes;
658661 pStatistics->iLastStatisticsFrameCount = pStatistics->uiInputFrameCount;
659662
@@ -661,20 +664,18 @@ void CWelsH264SVCEncoder::UpdateStatistics (SFrameBSInfo* pBsInfo, · 1 unmodified line
661664 //pStatistics->uiLTRSentNum
662665 }
663666 }
664− if (m_pEncContext->iStatisticsLogInterval > 0) {
665− SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics[0]);
666− const int64_t kiTimeDiff = kiCurrentFrameTs - m_pEncContext->iLastStatisticsLogTs;
667− if ((kiTimeDiff > m_pEncContext->iStatisticsLogInterval) || (0 == pStatistics->uiInputFrameCount % 300)) {
668− if (WELS_ABS (pStatistics->fAverageFrameRate - m_pEncContext->pSvcParam->fMaxFrameRate) > 30) {
669− WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_WARNING,
670− "Actual input framerate fAverageFrameRate = %f is quite different from framerate in setting %f, please check setting or timestamp unit (ms), start_Ts = %"
671− PRId64,
672− pStatistics->fAverageFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate, m_pEncContext->uiStartTimestamp);
673− }
667+ if (((m_pEncContext->iStatisticsLogInterval > 0) && (kiTimeDiff > m_pEncContext->iStatisticsLogInterval))
668+ || (0 == iMaxInputFrame % 300)) {
674669
675− LogStatistics (kiCurrentFrameTs, iMaxDid);
676− m_pEncContext->iLastStatisticsLogTs = kiCurrentFrameTs;
670+ if ((iMaxFrameRate > 0) && WELS_ABS (iMaxFrameRate - m_pEncContext->pSvcParam->fMaxFrameRate) > 30) {
671+ WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_WARNING,
672+ "Actual input framerate fAverageFrameRate = %f is quite different from framerate in setting %f, please check setting or timestamp unit (ms), start_Ts = %"
673+ PRId64,
674+ iMaxFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate, m_pEncContext->uiStartTimestamp);
677675 }
676+
677+ LogStatistics (kiCurrentFrameTs, iMaxDid);
678+ m_pEncContext->iLastStatisticsLogTs = kiCurrentFrameTs;
678679 }
679680
680681 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t