| 868 | } |
| 869 | |
| 870 | bool WelsRcCheckFrameStatus (sWelsEncCtx* pEncCtx, long long uiTimeStamp, int32_t iSpatialNum, int32_t iCurDid) { |
| 871 | |
| 872 | bool bSkipMustFlag = false; |
| 873 | |
| 874 | SSpatialPicIndex* pSpatialIndexMap = &pEncCtx->sSpatialIndexMap[0]; |
| 875 | |
| 876 | //simul_cast AVC control |
| 877 | if (pEncCtx->pSvcParam->bSimulcastAVC) { |
| 878 | //check target_br skip and update info |
| 879 | int32_t iDidIdx = iCurDid; |
| 880 | if (pEncCtx->pFuncList->pfRc.pfWelsRcPicDelayJudge) { |
| 881 | pEncCtx->pFuncList->pfRc.pfWelsRcPicDelayJudge (pEncCtx, uiTimeStamp, iDidIdx); |
| 882 | } |
| 883 | if (true == pEncCtx->pWelsSvcRc[iDidIdx].bSkipFlag) { |
| 884 | bSkipMustFlag = true; |
| 885 | } |
| 886 | //check max_br skip |
| 887 | if (pEncCtx->pFuncList->pfRc.pfWelsCheckSkipBasedMaxbr) { |
| 888 | if ((!bSkipMustFlag) && (pEncCtx->pSvcParam->sSpatialLayers[iDidIdx].iMaxSpatialBitrate != UNSPECIFIED_BIT_RATE)) { |
| 889 | pEncCtx->pFuncList->pfRc.pfWelsCheckSkipBasedMaxbr (pEncCtx, uiTimeStamp, iDidIdx); |
| 890 | if (true == pEncCtx->pWelsSvcRc[iDidIdx].bSkipFlag) { |
| 891 | bSkipMustFlag = true; |
| 892 | |
| 893 | } |
| 894 | } |
| 895 | } |
| 896 | if (bSkipMustFlag) { |
| 897 | pEncCtx->pWelsSvcRc[iDidIdx].uiLastTimeStamp = uiTimeStamp; |
| 898 | pEncCtx->pWelsSvcRc[iDidIdx].bSkipFlag = false; |
| 899 | pEncCtx->pWelsSvcRc[iDidIdx].iContinualSkipFrames++; |
| 900 | return true; |
| 901 | } |
| 902 | } else { //SVC control |
| 903 | for (int32_t i = 0; i < iSpatialNum; i++) { |
| 904 | int32_t iDidIdx = (pSpatialIndexMap + i)->iDid; |
| 905 | //check target_br skip and update info |
| 906 | |
| 907 | if (pEncCtx->pFuncList->pfRc.pfWelsRcPicDelayJudge) { |
| 908 | pEncCtx->pFuncList->pfRc.pfWelsRcPicDelayJudge (pEncCtx, uiTimeStamp, iDidIdx); |
| 909 | } |
| 910 | if (true == pEncCtx->pWelsSvcRc[iDidIdx].bSkipFlag) { |
| 911 | bSkipMustFlag = true; |
| 912 | } |
| 913 | //check max_br skip |
| 914 | if (pEncCtx->pFuncList->pfRc.pfWelsCheckSkipBasedMaxbr) { |
| 915 | if ((!bSkipMustFlag) && (pEncCtx->pSvcParam->sSpatialLayers[iDidIdx].iMaxSpatialBitrate != UNSPECIFIED_BIT_RATE)) { |
| 916 | pEncCtx->pFuncList->pfRc.pfWelsCheckSkipBasedMaxbr (pEncCtx, uiTimeStamp, iDidIdx); |
| 917 | if (true == pEncCtx->pWelsSvcRc[iDidIdx].bSkipFlag) { |
| 918 | bSkipMustFlag = true; |
| 919 | } |
| 920 | } |
| 921 | } |
| 922 | if (bSkipMustFlag) { |
| 923 | break; |
| 924 | } |
| 925 | } |
| 926 | |
| 927 | if (bSkipMustFlag) { |
no outgoing calls
no test coverage detected