Showing the changes to codec/encoder/plus/src/welsEncoderExt.cpp (1 of 4 files). Show all
Unified · Split
| @@ -412,7 +412,7 @@ int CWelsH264SVCEncoder ::EncodeFrameInternal (const SSourcePicture* pSrcPic, S · 411 unmodified lines | ||
| 412 | 412 | return cmUnknownReason; |
| 413 | 413 | } |
| 414 | 414 | |
| 415 | − UpdateStatistics (pSrcPic->uiTimeStamp, pBsInfo->eFrameType, pBsInfo->iFrameSizeInBytes, kiCurrentFrameMs); | |
| 415 | + UpdateStatistics (pSrcPic->uiTimeStamp, pBsInfo, kiCurrentFrameMs); | |
| 416 | 416 | |
| 417 | 417 | ///////////////////for test |
| 418 | 418 | #ifdef OUTPUT_BIT_STREAM |
| @@ -481,7 +481,7 @@ int CWelsH264SVCEncoder::ForceIntraFrame (bool bIDR) { · 62 unmodified lines | ||
| 481 | 481 | |
| 482 | 482 | ForceCodingIDR (m_pEncContext); |
| 483 | 483 | |
| 484 | − m_pEncContext->sEncoderStatistics.uiIDRReqNum++; | |
| 484 | + m_pEncContext->sEncoderStatistics[0].uiIDRReqNum++; | |
| 485 | 485 | |
| 486 | 486 | return 0; |
| 487 | 487 | } |
| @@ -545,102 +545,125 @@ void CWelsH264SVCEncoder::TraceParamInfo (SEncParamExt* pParam) { · 57 unmodified lines | ||
| 545 | 545 | } |
| 546 | 546 | } |
| 547 | 547 | |
| 548 | −void CWelsH264SVCEncoder::LogStatistics (const int64_t kiCurrentFrameTs) { | |
| 549 | − SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics); | |
| 550 | − WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_INFO, | |
| 551 | − "EncoderStatistics: %dx%d, SpeedInMs: %f, fAverageFrameRate=%f, " | |
| 552 | − "LastFrameRate=%f, LatestBitRate=%d, LastFrameQP=%d, uiInputFrameCount=%d, uiSkippedFrameCount=%d, " | |
| 553 | − "uiResolutionChangeTimes=%d, uIDRReqNum=%d, uIDRSentNum=%d, uLTRSentNum=NA, iTotalEncodedBytes=%" PRId64 | |
| 554 | − " at Ts = %" PRId64, | |
| 555 | − pStatistics->uiWidth, pStatistics->uiHeight, | |
| 556 | − pStatistics->fAverageFrameSpeedInMs, pStatistics->fAverageFrameRate, | |
| 557 | − pStatistics->fLatestFrameRate, pStatistics->uiBitRate, pStatistics->uiAverageFrameQP, | |
| 558 | − pStatistics->uiInputFrameCount, pStatistics->uiSkippedFrameCount, | |
| 559 | − pStatistics->uiResolutionChangeTimes, pStatistics->uiIDRReqNum, pStatistics->uiIDRSentNum, | |
| 560 | − m_pEncContext->iTotalEncodedBytes, kiCurrentFrameTs); | |
| 548 | +void CWelsH264SVCEncoder::LogStatistics (const int64_t kiCurrentFrameTs, int32_t iMaxDid) { | |
| 549 | + for (int32_t iDid = 0; iDid <= iMaxDid; iDid++) { | |
| 550 | + SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics[iDid]); | |
| 551 | + WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_INFO, | |
| 552 | + "EncoderStatistics: SpatialId = %d,%dx%d, SpeedInMs: %f, fAverageFrameRate=%f, " | |
| 553 | + "LastFrameRate=%f, LatestBitRate=%d, LastFrameQP=%d, uiInputFrameCount=%d, uiSkippedFrameCount=%d, " | |
| 554 | + "uiResolutionChangeTimes=%d, uIDRReqNum=%d, uIDRSentNum=%d, uLTRSentNum=NA, iTotalEncodedBytes=%" PRId64 | |
| 555 | + " at Ts = %" PRId64, | |
| 556 | + iDid, pStatistics->uiWidth, pStatistics->uiHeight, | |
| 557 | + pStatistics->fAverageFrameSpeedInMs, pStatistics->fAverageFrameRate, | |
| 558 | + pStatistics->fLatestFrameRate, pStatistics->uiBitRate, pStatistics->uiAverageFrameQP, | |
| 559 | + pStatistics->uiInputFrameCount, pStatistics->uiSkippedFrameCount, | |
| 560 | + pStatistics->uiResolutionChangeTimes, pStatistics->uiIDRReqNum, pStatistics->uiIDRSentNum, | |
| 561 | + m_pEncContext->iTotalEncodedBytes[iDid], kiCurrentFrameTs); | |
| 562 | + } | |
| 561 | 563 | } |
| 562 | 564 | |
| 563 | −void CWelsH264SVCEncoder::UpdateStatistics (const int64_t kiCurrentFrameTs, EVideoFrameType eFrameType, | |
| 564 | − const int32_t kiCurrentFrameSize, const int64_t kiCurrentFrameMs) { | |
| 565 | − SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics); | |
| 565 | +void CWelsH264SVCEncoder::UpdateStatistics (const int64_t kiCurrentFrameTs, SFrameBSInfo* pBsInfo, | |
| 566 | + const int64_t kiCurrentFrameMs) { | |
| 566 | 567 | |
| 567 | 568 | int32_t iMaxDid = m_pEncContext->pSvcParam->iSpatialLayerNum - 1; |
| 568 | − if ((0 != pStatistics->uiWidth && 0 != pStatistics->uiHeight) | |
| 569 | − && (pStatistics->uiWidth != (unsigned int) m_pEncContext->pSvcParam->sDependencyLayers[iMaxDid].iActualWidth | |
| 570 | − || pStatistics->uiHeight != (unsigned int) m_pEncContext->pSvcParam->sDependencyLayers[iMaxDid].iActualHeight)) { | |
| 571 | − pStatistics->uiResolutionChangeTimes ++; | |
| 572 | − } | |
| 573 | − pStatistics->uiWidth = m_pEncContext->pSvcParam->sDependencyLayers[iMaxDid].iActualWidth; | |
| 574 | − pStatistics->uiHeight = m_pEncContext->pSvcParam->sDependencyLayers[iMaxDid].iActualHeight; | |
| 575 | − | |
| 576 | − const bool kbCurrentFrameSkipped = (videoFrameTypeSkip == eFrameType); | |
| 577 | − pStatistics->uiInputFrameCount ++; | |
| 578 | − pStatistics->uiSkippedFrameCount += (kbCurrentFrameSkipped ? 1 : 0); | |
| 579 | − int32_t iProcessedFrameCount = pStatistics->uiInputFrameCount - pStatistics->uiSkippedFrameCount; | |
| 580 | − if (!kbCurrentFrameSkipped && iProcessedFrameCount != 0) { | |
| 581 | − pStatistics->fAverageFrameSpeedInMs += (kiCurrentFrameMs - pStatistics->fAverageFrameSpeedInMs) / iProcessedFrameCount; | |
| 582 | − } | |
| 583 | − | |
| 584 | − // rate control related | |
| 585 | − if (0 != m_pEncContext->uiStartTimestamp) { | |
| 586 | − if (kiCurrentFrameTs > m_pEncContext->uiStartTimestamp + 800) { | |
| 587 | − pStatistics->fAverageFrameRate = (static_cast<float> (pStatistics->uiInputFrameCount) * 1000 / | |
| 588 | − (kiCurrentFrameTs - m_pEncContext->uiStartTimestamp)); | |
| 569 | + SLayerBSInfo* pLayerInfo = &pBsInfo->sLayerInfo[0]; | |
| 570 | + for (int32_t iDid = 0; iDid <= iMaxDid; iDid++) { | |
| 571 | + EVideoFrameType eFrameType = videoFrameTypeInvalid; | |
| 572 | + int32_t kiCurrentFrameSize = 0; | |
| 573 | + if (pBsInfo->eFrameType == videoFrameTypeSkip) { | |
| 574 | + eFrameType = videoFrameTypeSkip; | |
| 575 | + } else { | |
| 576 | + for (int32_t iLayerNum = 0; iLayerNum < pBsInfo->iLayerNum; iLayerNum++) { | |
| 577 | + pLayerInfo = &pBsInfo->sLayerInfo[iLayerNum]; | |
| 578 | + if ((pLayerInfo->uiLayerType == VIDEO_CODING_LAYER) && (pLayerInfo->uiSpatialId == iDid)) { | |
| 579 | + eFrameType = pLayerInfo->eFrameType; | |
| 580 | + for (int32_t iNalIdx = 0; iNalIdx < pLayerInfo->iNalCount; iNalIdx++) { | |
| 581 | + kiCurrentFrameSize += pLayerInfo->pNalLengthInByte[iNalIdx]; | |
| 582 | + } | |
| 583 | + } | |
| 584 | + } | |
| 585 | + | |
| 589 | 586 | } |
| 590 | − } else { | |
| 591 | − m_pEncContext->uiStartTimestamp = kiCurrentFrameTs; | |
| 592 | − } | |
| 593 | − //pStatistics->fLatestFrameRate = m_pEncContext->pWelsSvcRc->fLatestFrameRate; //TODO: finish the calculation in RC | |
| 594 | − //pStatistics->uiBitRate = m_pEncContext->pWelsSvcRc->iActualBitRate; //TODO: finish the calculation in RC | |
| 595 | − pStatistics->uiAverageFrameQP = m_pEncContext->pWelsSvcRc->iAverageFrameQp; | |
| 587 | + SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics[iDid]); | |
| 596 | 588 | |
| 597 | − if (videoFrameTypeIDR == eFrameType || videoFrameTypeI == eFrameType) { | |
| 598 | − pStatistics->uiIDRSentNum ++; | |
| 599 | − } | |
| 600 | − if (m_pEncContext->pLtr->bLTRMarkingFlag) { | |
| 601 | − pStatistics->uiLTRSentNum ++; | |
| 602 | − } | |
| 603 | 589 | |
| 604 | − m_pEncContext->iTotalEncodedBytes += kiCurrentFrameSize; | |
| 590 | + if ((0 != pStatistics->uiWidth && 0 != pStatistics->uiHeight) | |
| 591 | + && (pStatistics->uiWidth != (unsigned int) m_pEncContext->pSvcParam->sDependencyLayers[iDid].iActualWidth | |
| 592 | + || pStatistics->uiHeight != (unsigned int) m_pEncContext->pSvcParam->sDependencyLayers[iDid].iActualHeight)) { | |
| 593 | + pStatistics->uiResolutionChangeTimes ++; | |
| 594 | + } | |
| 595 | + pStatistics->uiWidth = m_pEncContext->pSvcParam->sDependencyLayers[iDid].iActualWidth; | |
| 596 | + pStatistics->uiHeight = m_pEncContext->pSvcParam->sDependencyLayers[iDid].iActualHeight; | |
| 597 | + | |
| 598 | + const bool kbCurrentFrameSkipped = (videoFrameTypeSkip == eFrameType); | |
| 599 | + pStatistics->uiInputFrameCount ++; | |
| 600 | + pStatistics->uiSkippedFrameCount += (kbCurrentFrameSkipped ? 1 : 0); | |
| 601 | + int32_t iProcessedFrameCount = pStatistics->uiInputFrameCount - pStatistics->uiSkippedFrameCount; | |
| 602 | + if (!kbCurrentFrameSkipped && iProcessedFrameCount != 0) { | |
| 603 | + pStatistics->fAverageFrameSpeedInMs += (kiCurrentFrameMs - pStatistics->fAverageFrameSpeedInMs) / iProcessedFrameCount; | |
| 604 | + } | |
| 605 | + // rate control related | |
| 606 | + if (0 != m_pEncContext->uiStartTimestamp) { | |
| 607 | + if (kiCurrentFrameTs > m_pEncContext->uiStartTimestamp + 800) { | |
| 608 | + pStatistics->fAverageFrameRate = (static_cast<float> (pStatistics->uiInputFrameCount) * 1000 / | |
| 609 | + (kiCurrentFrameTs - m_pEncContext->uiStartTimestamp)); | |
| 610 | + } | |
| 611 | + } else { | |
| 612 | + m_pEncContext->uiStartTimestamp = kiCurrentFrameTs; | |
| 613 | + } | |
| 614 | + //pStatistics->fLatestFrameRate = m_pEncContext->pWelsSvcRc->fLatestFrameRate; //TODO: finish the calculation in RC | |
| 615 | + //pStatistics->uiBitRate = m_pEncContext->pWelsSvcRc->iActualBitRate; //TODO: finish the calculation in RC | |
| 616 | + pStatistics->uiAverageFrameQP = m_pEncContext->pWelsSvcRc->iAverageFrameQp; | |
| 617 | + | |
| 618 | + if (videoFrameTypeIDR == eFrameType || videoFrameTypeI == eFrameType) { | |
| 619 | + pStatistics->uiIDRSentNum ++; | |
| 620 | + } | |
| 621 | + if (m_pEncContext->pLtr->bLTRMarkingFlag) { | |
| 622 | + pStatistics->uiLTRSentNum ++; | |
| 623 | + } | |
| 605 | 624 | |
| 606 | − const int32_t kiDeltaFrames = static_cast<int32_t> (pStatistics->uiInputFrameCount - | |
| 607 | − m_pEncContext->iLastStatisticsFrameCount); | |
| 608 | − if (kiDeltaFrames > (m_pEncContext->pSvcParam->fMaxFrameRate * 2)) { | |
| 609 | − const int64_t kiTimeDiff = kiCurrentFrameTs - pStatistics->iStatisticsTs; | |
| 610 | − if (kiTimeDiff) { | |
| 611 | − pStatistics->fLatestFrameRate = static_cast<float> ((pStatistics->uiInputFrameCount - | |
| 612 | − m_pEncContext->iLastStatisticsFrameCount) * 1000 / | |
| 613 | − kiTimeDiff); | |
| 614 | − pStatistics->uiBitRate = static_cast<unsigned int> ((m_pEncContext->iTotalEncodedBytes - | |
| 615 | − m_pEncContext->iLastStatisticsBytes) * 8 * 1000 / kiTimeDiff); | |
| 625 | + m_pEncContext->iTotalEncodedBytes[iDid] += kiCurrentFrameSize; | |
| 616 | 626 | |
| 617 | − if (WELS_ABS (pStatistics->fLatestFrameRate - m_pEncContext->pSvcParam->fMaxFrameRate) > 30) { | |
| 618 | − WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_WARNING, | |
| 619 | − "Actual input fLatestFrameRate = %f is quite different from framerate in setting %f, please check setting or timestamp unit (ms), cur_Ts = %" | |
| 620 | − PRId64 " start_Ts = %" PRId64, | |
| 621 | − pStatistics->fLatestFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate, kiCurrentFrameTs, | |
| 622 | − static_cast<int64_t> (pStatistics->iStatisticsTs)); | |
| 623 | − } | |
| 627 | + const int32_t kiDeltaFrames = static_cast<int32_t> (pStatistics->uiInputFrameCount - | |
| 628 | + m_pEncContext->iLastStatisticsFrameCount[iDid]); | |
| 629 | + if (kiDeltaFrames > (m_pEncContext->pSvcParam->fMaxFrameRate * 2)) { | |
| 630 | + const int64_t kiTimeDiff = kiCurrentFrameTs - pStatistics->iStatisticsTs; | |
| 631 | + if (kiTimeDiff) { | |
| 632 | + pStatistics->fLatestFrameRate = static_cast<float> ((pStatistics->uiInputFrameCount - | |
| 633 | + m_pEncContext->iLastStatisticsFrameCount[iDid]) * 1000 / | |
| 634 | + kiTimeDiff); | |
| 635 | + pStatistics->uiBitRate = static_cast<unsigned int> ((m_pEncContext->iTotalEncodedBytes[iDid] - | |
| 636 | + m_pEncContext->iLastStatisticsBytes[iDid]) * 8 * 1000 / kiTimeDiff); | |
| 624 | 637 | |
| 625 | − if (m_pEncContext->pSvcParam->iRCMode == RC_QUALITY_MODE || m_pEncContext->pSvcParam->iRCMode == RC_BITRATE_MODE) { | |
| 626 | − if ((pStatistics->fLatestFrameRate > 0) | |
| 627 | − && WELS_ABS (m_pEncContext->pSvcParam->fMaxFrameRate - pStatistics->fLatestFrameRate) > 5) { | |
| 638 | + if (WELS_ABS (pStatistics->fLatestFrameRate - m_pEncContext->pSvcParam->fMaxFrameRate) > 30) { | |
| 628 | 639 | WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_WARNING, |
| 629 | − "Actual input framerate %f is different from framerate in setting %f, suggest to use other rate control modes", | |
| 630 | − pStatistics->fLatestFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate); | |
| 640 | + "Actual input fLatestFrameRate = %f is quite different from framerate in setting %f, please check setting or timestamp unit (ms), cur_Ts = %" | |
| 641 | + PRId64 " start_Ts = %" PRId64, | |
| 642 | + pStatistics->fLatestFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate, kiCurrentFrameTs, | |
| 643 | + static_cast<int64_t> (pStatistics->iStatisticsTs)); | |
| 644 | + } | |
| 645 | + | |
| 646 | + if (m_pEncContext->pSvcParam->iRCMode == RC_QUALITY_MODE || m_pEncContext->pSvcParam->iRCMode == RC_BITRATE_MODE) { | |
| 647 | + if ((pStatistics->fLatestFrameRate > 0) | |
| 648 | + && WELS_ABS (m_pEncContext->pSvcParam->fMaxFrameRate - pStatistics->fLatestFrameRate) > 5) { | |
| 649 | + WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_WARNING, | |
| 650 | + "Actual input framerate %f is different from framerate in setting %f, suggest to use other rate control modes", | |
| 651 | + pStatistics->fLatestFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate); | |
| 652 | + } | |
| 631 | 653 | } |
| 632 | 654 | } |
| 633 | − } | |
| 634 | 655 | |
| 635 | − // update variables | |
| 636 | − pStatistics->iStatisticsTs = kiCurrentFrameTs; | |
| 637 | − m_pEncContext->iLastStatisticsBytes = m_pEncContext->iTotalEncodedBytes; | |
| 638 | − m_pEncContext->iLastStatisticsFrameCount = pStatistics->uiInputFrameCount; | |
| 656 | + // update variables | |
| 657 | + pStatistics->iStatisticsTs = kiCurrentFrameTs; | |
| 658 | + m_pEncContext->iLastStatisticsBytes[iDid] = m_pEncContext->iTotalEncodedBytes[iDid]; | |
| 659 | + m_pEncContext->iLastStatisticsFrameCount[iDid] = pStatistics->uiInputFrameCount; | |
| 639 | 660 | |
| 640 | − //TODO: the following statistics will be calculated and added later | |
| 641 | − //pStatistics->uiLTRSentNum | |
| 661 | + //TODO: the following statistics will be calculated and added later | |
| 662 | + //pStatistics->uiLTRSentNum | |
| 663 | + } | |
| 642 | 664 | } |
| 643 | 665 | if (m_pEncContext->iStatisticsLogInterval > 0) { |
| 666 | + SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics[0]); | |
| 644 | 667 | const int64_t kiTimeDiff = kiCurrentFrameTs - m_pEncContext->iLastStatisticsLogTs; |
| 645 | 668 | if ((kiTimeDiff > m_pEncContext->iStatisticsLogInterval) || (0 == pStatistics->uiInputFrameCount % 300)) { |
| 646 | 669 | if (WELS_ABS (pStatistics->fAverageFrameRate - m_pEncContext->pSvcParam->fMaxFrameRate) > 30) { |
| @@ -650,7 +673,7 @@ void CWelsH264SVCEncoder::UpdateStatistics (const int64_t kiCurrentFrameTs, EVid · 3 unmodified lines | ||
| 650 | 673 | pStatistics->fAverageFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate, m_pEncContext->uiStartTimestamp); |
| 651 | 674 | } |
| 652 | 675 | |
| 653 | − LogStatistics (kiCurrentFrameTs); | |
| 676 | + LogStatistics (kiCurrentFrameTs, iMaxDid); | |
| 654 | 677 | m_pEncContext->iLastStatisticsLogTs = kiCurrentFrameTs; |
| 655 | 678 | } |
| 656 | 679 | } |
| @@ -788,7 +811,7 @@ int CWelsH264SVCEncoder::SetOption (ENCODER_OPTION eOptionId, void* pOption) { · 131 unmodified lines | ||
| 788 | 811 | //LogStatistics |
| 789 | 812 | WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_INFO, |
| 790 | 813 | "CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, LogStatisticsBeforeNewEncoding"); |
| 791 | − LogStatistics (m_pEncContext->iLastStatisticsLogTs); | |
| 814 | + LogStatistics (m_pEncContext->iLastStatisticsLogTs, sEncodingParam.iSpatialLayerNum - 1); | |
| 792 | 815 | } |
| 793 | 816 | break; |
| 794 | 817 | case ENCODER_OPTION_FRAME_RATE: { // Maximal input frame rate |
| @@ -1214,22 +1237,23 @@ int CWelsH264SVCEncoder::GetOption (ENCODER_OPTION eOptionId, void* pOption) { · 419 unmodified lines | ||
| 1214 | 1237 | break; |
| 1215 | 1238 | case ENCODER_OPTION_GET_STATISTICS: { |
| 1216 | 1239 | SEncoderStatistics* pStatistics = (static_cast<SEncoderStatistics*> (pOption)); |
| 1217 | − pStatistics->uiWidth = m_pEncContext->sEncoderStatistics.uiWidth; | |
| 1218 | − pStatistics->uiHeight = m_pEncContext->sEncoderStatistics.uiHeight; | |
| 1219 | − pStatistics->fAverageFrameSpeedInMs = m_pEncContext->sEncoderStatistics.fAverageFrameSpeedInMs; | |
| 1240 | + SEncoderStatistics* pEncStatistics = &m_pEncContext->sEncoderStatistics[m_pEncContext->pSvcParam->iSpatialLayerNum - 1]; | |
| 1241 | + pStatistics->uiWidth = pEncStatistics->uiWidth; | |
| 1242 | + pStatistics->uiHeight = pEncStatistics->uiHeight; | |
| 1243 | + pStatistics->fAverageFrameSpeedInMs = pEncStatistics->fAverageFrameSpeedInMs; | |
| 1220 | 1244 | |
| 1221 | 1245 | // rate control related |
| 1222 | − pStatistics->fAverageFrameRate = m_pEncContext->sEncoderStatistics.fAverageFrameRate; | |
| 1223 | − pStatistics->fLatestFrameRate = m_pEncContext->sEncoderStatistics.fLatestFrameRate; | |
| 1224 | − pStatistics->uiBitRate = m_pEncContext->sEncoderStatistics.uiBitRate; | |
| 1246 | + pStatistics->fAverageFrameRate = pEncStatistics->fAverageFrameRate; | |
| 1247 | + pStatistics->fLatestFrameRate = pEncStatistics->fLatestFrameRate; | |
| 1248 | + pStatistics->uiBitRate = pEncStatistics->uiBitRate; | |
| 1225 | 1249 | |
| 1226 | − pStatistics->uiInputFrameCount = m_pEncContext->sEncoderStatistics.uiInputFrameCount; | |
| 1227 | − pStatistics->uiSkippedFrameCount = m_pEncContext->sEncoderStatistics.uiSkippedFrameCount; | |
| 1250 | + pStatistics->uiInputFrameCount = pEncStatistics->uiInputFrameCount; | |
| 1251 | + pStatistics->uiSkippedFrameCount = pEncStatistics->uiSkippedFrameCount; | |
| 1228 | 1252 | |
| 1229 | − pStatistics->uiResolutionChangeTimes = m_pEncContext->sEncoderStatistics.uiResolutionChangeTimes; | |
| 1230 | − pStatistics->uiIDRReqNum = m_pEncContext->sEncoderStatistics.uiIDRReqNum; | |
| 1231 | − pStatistics->uiIDRSentNum = m_pEncContext->sEncoderStatistics.uiIDRSentNum; | |
| 1232 | − pStatistics->uiLTRSentNum = m_pEncContext->sEncoderStatistics.uiLTRSentNum; | |
| 1253 | + pStatistics->uiResolutionChangeTimes = pEncStatistics->uiResolutionChangeTimes; | |
| 1254 | + pStatistics->uiIDRReqNum = pEncStatistics->uiIDRReqNum; | |
| 1255 | + pStatistics->uiIDRSentNum = pEncStatistics->uiIDRSentNum; | |
| 1256 | + pStatistics->uiLTRSentNum = pEncStatistics->uiLTRSentNum; | |
| 1233 | 1257 | } |
| 1234 | 1258 | break; |
| 1235 | 1259 | case ENCODER_OPTION_STATISTICS_LOG_INTERVAL: { |