| @@ -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: { |