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 | return cmUnknownReason; | 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 | ///////////////////for test | 417 | ///////////////////for test |
| 418 | #ifdef OUTPUT_BIT_STREAM | 418 | #ifdef OUTPUT_BIT_STREAM |
| @@ -481,7 +481,7 @@ int CWelsH264SVCEncoder::ForceIntraFrame (bool bIDR) { · 62 unmodified lines | |||
| 481 | 481 | ||
| 482 | ForceCodingIDR (m_pEncContext); | 482 | ForceCodingIDR (m_pEncContext); |
| 483 | 483 | ||
| 484 | m_pEncContext->sEncoderStatistics.uiIDRReqNum++; | 484 | m_pEncContext->sEncoderStatistics[0].uiIDRReqNum++; |
| 485 | 485 | ||
| 486 | return 0; | 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) { | 548 | void CWelsH264SVCEncoder::LogStatistics (const int64_t kiCurrentFrameTs, int32_t iMaxDid) { |
| 549 | SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics); | 549 | for (int32_t iDid = 0; iDid <= iMaxDid; iDid++) { |
| 550 | WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_INFO, | 550 | SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics[iDid]); |
| 551 | "EncoderStatistics: %dx%d, SpeedInMs: %f, fAverageFrameRate=%f, " | 551 | WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_INFO, |
| 552 | "LastFrameRate=%f, LatestBitRate=%d, LastFrameQP=%d, uiInputFrameCount=%d, uiSkippedFrameCount=%d, " | 552 | "EncoderStatistics: SpatialId = %d,%dx%d, SpeedInMs: %f, fAverageFrameRate=%f, " |
| 553 | "uiResolutionChangeTimes=%d, uIDRReqNum=%d, uIDRSentNum=%d, uLTRSentNum=NA, iTotalEncodedBytes=%" PRId64 | 553 | "LastFrameRate=%f, LatestBitRate=%d, LastFrameQP=%d, uiInputFrameCount=%d, uiSkippedFrameCount=%d, " |
| 554 | " at Ts = %" PRId64, | 554 | "uiResolutionChangeTimes=%d, uIDRReqNum=%d, uIDRSentNum=%d, uLTRSentNum=NA, iTotalEncodedBytes=%" PRId64 |
| 555 | pStatistics->uiWidth, pStatistics->uiHeight, | 555 | " at Ts = %" PRId64, |
| 556 | pStatistics->fAverageFrameSpeedInMs, pStatistics->fAverageFrameRate, | 556 | iDid, pStatistics->uiWidth, pStatistics->uiHeight, |
| 557 | pStatistics->fLatestFrameRate, pStatistics->uiBitRate, pStatistics->uiAverageFrameQP, | 557 | pStatistics->fAverageFrameSpeedInMs, pStatistics->fAverageFrameRate, |
| 558 | pStatistics->uiInputFrameCount, pStatistics->uiSkippedFrameCount, | 558 | pStatistics->fLatestFrameRate, pStatistics->uiBitRate, pStatistics->uiAverageFrameQP, |
| 559 | pStatistics->uiResolutionChangeTimes, pStatistics->uiIDRReqNum, pStatistics->uiIDRSentNum, | 559 | pStatistics->uiInputFrameCount, pStatistics->uiSkippedFrameCount, |
| 560 | m_pEncContext->iTotalEncodedBytes, kiCurrentFrameTs); | 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, | 565 | void CWelsH264SVCEncoder::UpdateStatistics (const int64_t kiCurrentFrameTs, SFrameBSInfo* pBsInfo, |
| 564 | const int32_t kiCurrentFrameSize, const int64_t kiCurrentFrameMs) { | 566 | const int64_t kiCurrentFrameMs) { |
| 565 | SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics); | ||
| 566 | 567 | ||
| 567 | int32_t iMaxDid = m_pEncContext->pSvcParam->iSpatialLayerNum - 1; | 568 | int32_t iMaxDid = m_pEncContext->pSvcParam->iSpatialLayerNum - 1; |
| 568 | if ((0 != pStatistics->uiWidth && 0 != pStatistics->uiHeight) | 569 | SLayerBSInfo* pLayerInfo = &pBsInfo->sLayerInfo[0]; |
| 569 | && (pStatistics->uiWidth != (unsigned int) m_pEncContext->pSvcParam->sDependencyLayers[iMaxDid].iActualWidth | 570 | for (int32_t iDid = 0; iDid <= iMaxDid; iDid++) { |
| 570 | || pStatistics->uiHeight != (unsigned int) m_pEncContext->pSvcParam->sDependencyLayers[iMaxDid].iActualHeight)) { | 571 | EVideoFrameType eFrameType = videoFrameTypeInvalid; |
| 571 | pStatistics->uiResolutionChangeTimes ++; | 572 | int32_t kiCurrentFrameSize = 0; |
| 572 | } | 573 | if (pBsInfo->eFrameType == videoFrameTypeSkip) { |
| 573 | pStatistics->uiWidth = m_pEncContext->pSvcParam->sDependencyLayers[iMaxDid].iActualWidth; | 574 | eFrameType = videoFrameTypeSkip; |
| 574 | pStatistics->uiHeight = m_pEncContext->pSvcParam->sDependencyLayers[iMaxDid].iActualHeight; | 575 | } else { |
| 575 | 576 | for (int32_t iLayerNum = 0; iLayerNum < pBsInfo->iLayerNum; iLayerNum++) { | |
| 576 | const bool kbCurrentFrameSkipped = (videoFrameTypeSkip == eFrameType); | 577 | pLayerInfo = &pBsInfo->sLayerInfo[iLayerNum]; |
| 577 | pStatistics->uiInputFrameCount ++; | 578 | if ((pLayerInfo->uiLayerType == VIDEO_CODING_LAYER) && (pLayerInfo->uiSpatialId == iDid)) { |
| 578 | pStatistics->uiSkippedFrameCount += (kbCurrentFrameSkipped ? 1 : 0); | 579 | eFrameType = pLayerInfo->eFrameType; |
| 579 | int32_t iProcessedFrameCount = pStatistics->uiInputFrameCount - pStatistics->uiSkippedFrameCount; | 580 | for (int32_t iNalIdx = 0; iNalIdx < pLayerInfo->iNalCount; iNalIdx++) { |
| 580 | if (!kbCurrentFrameSkipped && iProcessedFrameCount != 0) { | 581 | kiCurrentFrameSize += pLayerInfo->pNalLengthInByte[iNalIdx]; |
| 581 | pStatistics->fAverageFrameSpeedInMs += (kiCurrentFrameMs - pStatistics->fAverageFrameSpeedInMs) / iProcessedFrameCount; | 582 | } |
| 582 | } | 583 | } |
| 583 | 584 | } | |
| 584 | // rate control related | 585 | |
| 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)); | ||
| 589 | } | 586 | } |
| 590 | } else { | 587 | SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics[iDid]); |
| 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; | ||
| 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 - | 625 | m_pEncContext->iTotalEncodedBytes[iDid] += kiCurrentFrameSize; |
| 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); | ||
| 616 | 626 | ||
| 617 | if (WELS_ABS (pStatistics->fLatestFrameRate - m_pEncContext->pSvcParam->fMaxFrameRate) > 30) { | 627 | const int32_t kiDeltaFrames = static_cast<int32_t> (pStatistics->uiInputFrameCount - |
| 618 | WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_WARNING, | 628 | m_pEncContext->iLastStatisticsFrameCount[iDid]); |
| 619 | "Actual input fLatestFrameRate = %f is quite different from framerate in setting %f, please check setting or timestamp unit (ms), cur_Ts = %" | 629 | if (kiDeltaFrames > (m_pEncContext->pSvcParam->fMaxFrameRate * 2)) { |
| 620 | PRId64 " start_Ts = %" PRId64, | 630 | const int64_t kiTimeDiff = kiCurrentFrameTs - pStatistics->iStatisticsTs; |
| 621 | pStatistics->fLatestFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate, kiCurrentFrameTs, | 631 | if (kiTimeDiff) { |
| 622 | static_cast<int64_t> (pStatistics->iStatisticsTs)); | 632 | pStatistics->fLatestFrameRate = static_cast<float> ((pStatistics->uiInputFrameCount - |
| 623 | } | 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) { | 638 | if (WELS_ABS (pStatistics->fLatestFrameRate - m_pEncContext->pSvcParam->fMaxFrameRate) > 30) { |
| 626 | if ((pStatistics->fLatestFrameRate > 0) | ||
| 627 | && WELS_ABS (m_pEncContext->pSvcParam->fMaxFrameRate - pStatistics->fLatestFrameRate) > 5) { | ||
| 628 | WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_WARNING, | 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", | 640 | "Actual input fLatestFrameRate = %f is quite different from framerate in setting %f, please check setting or timestamp unit (ms), cur_Ts = %" |
| 630 | pStatistics->fLatestFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate); | 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 | 656 | // update variables |
| 636 | pStatistics->iStatisticsTs = kiCurrentFrameTs; | 657 | pStatistics->iStatisticsTs = kiCurrentFrameTs; |
| 637 | m_pEncContext->iLastStatisticsBytes = m_pEncContext->iTotalEncodedBytes; | 658 | m_pEncContext->iLastStatisticsBytes[iDid] = m_pEncContext->iTotalEncodedBytes[iDid]; |
| 638 | m_pEncContext->iLastStatisticsFrameCount = pStatistics->uiInputFrameCount; | 659 | m_pEncContext->iLastStatisticsFrameCount[iDid] = pStatistics->uiInputFrameCount; |
| 639 | 660 | ||
| 640 | //TODO: the following statistics will be calculated and added later | 661 | //TODO: the following statistics will be calculated and added later |
| 641 | //pStatistics->uiLTRSentNum | 662 | //pStatistics->uiLTRSentNum |
| 663 | } | ||
| 642 | } | 664 | } |
| 643 | if (m_pEncContext->iStatisticsLogInterval > 0) { | 665 | if (m_pEncContext->iStatisticsLogInterval > 0) { |
| 666 | SEncoderStatistics* pStatistics = & (m_pEncContext->sEncoderStatistics[0]); | ||
| 644 | const int64_t kiTimeDiff = kiCurrentFrameTs - m_pEncContext->iLastStatisticsLogTs; | 667 | const int64_t kiTimeDiff = kiCurrentFrameTs - m_pEncContext->iLastStatisticsLogTs; |
| 645 | if ((kiTimeDiff > m_pEncContext->iStatisticsLogInterval) || (0 == pStatistics->uiInputFrameCount % 300)) { | 668 | if ((kiTimeDiff > m_pEncContext->iStatisticsLogInterval) || (0 == pStatistics->uiInputFrameCount % 300)) { |
| 646 | if (WELS_ABS (pStatistics->fAverageFrameRate - m_pEncContext->pSvcParam->fMaxFrameRate) > 30) { | 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 | pStatistics->fAverageFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate, m_pEncContext->uiStartTimestamp); | 673 | pStatistics->fAverageFrameRate, m_pEncContext->pSvcParam->fMaxFrameRate, m_pEncContext->uiStartTimestamp); |
| 651 | } | 674 | } |
| 652 | 675 | ||
| 653 | LogStatistics (kiCurrentFrameTs); | 676 | LogStatistics (kiCurrentFrameTs, iMaxDid); |
| 654 | m_pEncContext->iLastStatisticsLogTs = kiCurrentFrameTs; | 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 | //LogStatistics | 811 | //LogStatistics |
| 789 | WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_INFO, | 812 | WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_INFO, |
| 790 | "CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, LogStatisticsBeforeNewEncoding"); | 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 | break; | 816 | break; |
| 794 | case ENCODER_OPTION_FRAME_RATE: { // Maximal input frame rate | 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 | break; | 1237 | break; |
| 1215 | case ENCODER_OPTION_GET_STATISTICS: { | 1238 | case ENCODER_OPTION_GET_STATISTICS: { |
| 1216 | SEncoderStatistics* pStatistics = (static_cast<SEncoderStatistics*> (pOption)); | 1239 | SEncoderStatistics* pStatistics = (static_cast<SEncoderStatistics*> (pOption)); |
| 1217 | pStatistics->uiWidth = m_pEncContext->sEncoderStatistics.uiWidth; | 1240 | SEncoderStatistics* pEncStatistics = &m_pEncContext->sEncoderStatistics[m_pEncContext->pSvcParam->iSpatialLayerNum - 1]; |
| 1218 | pStatistics->uiHeight = m_pEncContext->sEncoderStatistics.uiHeight; | 1241 | pStatistics->uiWidth = pEncStatistics->uiWidth; |
| 1219 | pStatistics->fAverageFrameSpeedInMs = m_pEncContext->sEncoderStatistics.fAverageFrameSpeedInMs; | 1242 | pStatistics->uiHeight = pEncStatistics->uiHeight; |
| 1243 | pStatistics->fAverageFrameSpeedInMs = pEncStatistics->fAverageFrameSpeedInMs; | ||
| 1220 | 1244 | ||
| 1221 | // rate control related | 1245 | // rate control related |
| 1222 | pStatistics->fAverageFrameRate = m_pEncContext->sEncoderStatistics.fAverageFrameRate; | 1246 | pStatistics->fAverageFrameRate = pEncStatistics->fAverageFrameRate; |
| 1223 | pStatistics->fLatestFrameRate = m_pEncContext->sEncoderStatistics.fLatestFrameRate; | 1247 | pStatistics->fLatestFrameRate = pEncStatistics->fLatestFrameRate; |
| 1224 | pStatistics->uiBitRate = m_pEncContext->sEncoderStatistics.uiBitRate; | 1248 | pStatistics->uiBitRate = pEncStatistics->uiBitRate; |
| 1225 | 1249 | ||
| 1226 | pStatistics->uiInputFrameCount = m_pEncContext->sEncoderStatistics.uiInputFrameCount; | 1250 | pStatistics->uiInputFrameCount = pEncStatistics->uiInputFrameCount; |
| 1227 | pStatistics->uiSkippedFrameCount = m_pEncContext->sEncoderStatistics.uiSkippedFrameCount; | 1251 | pStatistics->uiSkippedFrameCount = pEncStatistics->uiSkippedFrameCount; |
| 1228 | 1252 | ||
| 1229 | pStatistics->uiResolutionChangeTimes = m_pEncContext->sEncoderStatistics.uiResolutionChangeTimes; | 1253 | pStatistics->uiResolutionChangeTimes = pEncStatistics->uiResolutionChangeTimes; |
| 1230 | pStatistics->uiIDRReqNum = m_pEncContext->sEncoderStatistics.uiIDRReqNum; | 1254 | pStatistics->uiIDRReqNum = pEncStatistics->uiIDRReqNum; |
| 1231 | pStatistics->uiIDRSentNum = m_pEncContext->sEncoderStatistics.uiIDRSentNum; | 1255 | pStatistics->uiIDRSentNum = pEncStatistics->uiIDRSentNum; |
| 1232 | pStatistics->uiLTRSentNum = m_pEncContext->sEncoderStatistics.uiLTRSentNum; | 1256 | pStatistics->uiLTRSentNum = pEncStatistics->uiLTRSentNum; |
| 1233 | } | 1257 | } |
| 1234 | break; | 1258 | break; |
| 1235 | case ENCODER_OPTION_STATISTICS_LOG_INTERVAL: { | 1259 | case ENCODER_OPTION_STATISTICS_LOG_INTERVAL: { |