History

Merge pull request #2420 from sijchen/fix_sps

[Encoder] fix the lack of eSpsPpsIdStrategy==INCREASING_ID under simulcast avc on

sijchen committed 10 years ago

Commit 33bb96f2 parents 8103988 90deb802 files · +145 −20Browse files

Showing the changes to codec/encoder/core/src/encoder_ext.cpp (1 of 2 files). Show all

Unified · Split

codec/encoder/core/src/encoder_ext.cpp+32−20
@@ -3205,6 +3205,21 @@ void UpdatePpsList (sWelsEncCtx* pCtx) { · 3204 unmodified lines
3205 3205
3206}3206}
3207 3207
3208void UpdateSpsPpsIdStrategyWithIncreasingId (SParaSetOffset* pPSOVector, const uint32_t kuiId, const int iParasetType) {
3209#if _DEBUG
3210 pPSOVector->eSpsPpsIdStrategy = INCREASING_ID;
3211 assert (iIdx < MAX_DQ_LAYER_NUM);
3212#endif
3213
3214 ParasetIdAdditionIdAdjust (& (pPSOVector->sParaSetOffsetVariable[iParasetType]),
3215 kuiId,
3216 (iParasetType != PARA_SET_TYPE_PPS) ? MAX_SPS_COUNT : MAX_PPS_COUNT);
3217}
3218
3219void UpdateSpsPpsIdStrategyWithConstantId (SParaSetOffset* pPSOVector, const uint32_t kuiId, const int iParasetType) {
3220 memset (pPSOVector, 0, sizeof (SParaSetOffset));
3221}
3222
3208/*!3223/*!
3209 * \brief write all parameter sets introduced in SVC extension3224 * \brief write all parameter sets introduced in SVC extension
3210 * \return writing results, success or error3225 * \return writing results, success or error
@@ -3227,16 +3242,9 @@ int32_t WelsWriteParameterSets (sWelsEncCtx* pCtx, int32_t* pNalLen, int32_t* pN · 16 unmodified lines
3227 while (iIdx < pCtx->iSpsNum) {3242 while (iIdx < pCtx->iSpsNum) {
3228 // TODO (Sijia) wrap different operation of eSpsPpsIdStrategy to classes to hide the details3243 // TODO (Sijia) wrap different operation of eSpsPpsIdStrategy to classes to hide the details
3229 if (INCREASING_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {3244 if (INCREASING_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {
3230#if _DEBUG3245 UpdateSpsPpsIdStrategyWithIncreasingId (& (pCtx->sPSOVector), pCtx->pSpsArray[0].uiSpsId, PARA_SET_TYPE_AVCSPS);
3231 pCtx->sPSOVector.eSpsPpsIdStrategy = INCREASING_ID;
3232 assert (iIdx < MAX_DQ_LAYER_NUM);
3233#endif
3234
3235 ParasetIdAdditionIdAdjust (& (pCtx->sPSOVector.sParaSetOffsetVariable[PARA_SET_TYPE_AVCSPS]),
3236 pCtx->pSpsArray[0].uiSpsId,
3237 MAX_SPS_COUNT);
3238 } else if (CONSTANT_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {3246 } else if (CONSTANT_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {
3239 memset (& (pCtx->sPSOVector), 0, sizeof (pCtx->sPSOVector));3247 UpdateSpsPpsIdStrategyWithConstantId (& (pCtx->sPSOVector), pCtx->pSpsArray[0].uiSpsId, PARA_SET_TYPE_AVCSPS);
3240 }3248 }
3241 3249
3242 /* generate sequence parameters set */3250 /* generate sequence parameters set */
@@ -3257,16 +3265,10 @@ int32_t WelsWriteParameterSets (sWelsEncCtx* pCtx, int32_t* pNalLen, int32_t* pN · 14 unmodified lines
3257 iNal = pCtx->pOut->iNalIndex;3265 iNal = pCtx->pOut->iNalIndex;
3258 3266
3259 if (INCREASING_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {3267 if (INCREASING_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {
3260#if _DEBUG3268 UpdateSpsPpsIdStrategyWithIncreasingId (& (pCtx->sPSOVector), pCtx->pSubsetArray[iIdx].pSps.uiSpsId, PARA_SET_TYPE_SUBSETSPS);
3261 pCtx->sPSOVector.eSpsPpsIdStrategy = INCREASING_ID;
3262 assert (iIdx < MAX_DQ_LAYER_NUM);
3263#endif
3264
3265 ParasetIdAdditionIdAdjust (& (pCtx->sPSOVector.sParaSetOffsetVariable[PARA_SET_TYPE_SUBSETSPS]),
3266 pCtx->pSubsetArray[iIdx].pSps.uiSpsId,
3267 MAX_SPS_COUNT);
3268 }3269 }
3269 3270
3271
3270 iId = iIdx;3272 iId = iIdx;
3271 3273
3272 /* generate Subset SPS */3274 /* generate Subset SPS */
@@ -3298,9 +3300,7 @@ int32_t WelsWriteParameterSets (sWelsEncCtx* pCtx, int32_t* pNalLen, int32_t* pN · 25 unmodified lines
3298 iIdx = 0;3300 iIdx = 0;
3299 while (iIdx < pCtx->iPpsNum) {3301 while (iIdx < pCtx->iPpsNum) {
3300 if ((INCREASING_ID & pCtx->pSvcParam->eSpsPpsIdStrategy)) {3302 if ((INCREASING_ID & pCtx->pSvcParam->eSpsPpsIdStrategy)) {
3301 //para_set_type = 2: PPS, use MAX_PPS_COUNT3303 UpdateSpsPpsIdStrategyWithIncreasingId (& (pCtx->sPSOVector), pCtx->pPPSArray[iIdx].iPpsId, PARA_SET_TYPE_PPS);
3302 ParasetIdAdditionIdAdjust (&pCtx->sPSOVector.sParaSetOffsetVariable[PARA_SET_TYPE_PPS], pCtx->pPPSArray[iIdx].iPpsId,
3303 MAX_PPS_COUNT);
3304 }3304 }
3305 3305
3306 WelsWriteOnePPS (pCtx, iIdx, iNalLength);3306 WelsWriteOnePPS (pCtx, iIdx, iNalLength);
@@ -3515,6 +3515,12 @@ int32_t WriteSavcParaset (sWelsEncCtx* pCtx, const int32_t iIdx, · 208 unmodified lines
3515 int32_t iNalSize = 0;3515 int32_t iNalSize = 0;
3516 iCountNal = 0;3516 iCountNal = 0;
3517 3517
3518 if (INCREASING_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {
3519 UpdateSpsPpsIdStrategyWithIncreasingId (& (pCtx->sPSOVector), pCtx->pSpsArray[iIdx].uiSpsId, PARA_SET_TYPE_AVCSPS);
3520 } else if (CONSTANT_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {
3521 UpdateSpsPpsIdStrategyWithConstantId (& (pCtx->sPSOVector), pCtx->pSpsArray[iIdx].uiSpsId, PARA_SET_TYPE_AVCSPS);
3522 }
3523
3518 iReturn = WelsWriteOneSPS (pCtx, iIdx, iNalSize);3524 iReturn = WelsWriteOneSPS (pCtx, iIdx, iNalSize);
3519 WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS)3525 WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS)
3520 3526
@@ -3546,6 +3552,12 @@ int32_t WriteSavcParaset (sWelsEncCtx* pCtx, const int32_t iIdx, · 25 unmodified lines
3546 iNalSize = 0;3552 iNalSize = 0;
3547 iCountNal = 0;3553 iCountNal = 0;
3548 3554
3555 if (INCREASING_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {
3556 UpdateSpsPpsIdStrategyWithIncreasingId (& (pCtx->sPSOVector), pCtx->pPPSArray[iIdx].iPpsId, PARA_SET_TYPE_PPS);
3557 } else if (CONSTANT_ID == pCtx->pSvcParam->eSpsPpsIdStrategy) {
3558 UpdateSpsPpsIdStrategyWithConstantId (& (pCtx->sPSOVector), pCtx->pPPSArray[iIdx].iPpsId, PARA_SET_TYPE_PPS);
3559 }
3560
3549 iReturn = WelsWriteOnePPS (pCtx, iIdx, iNalSize);3561 iReturn = WelsWriteOnePPS (pCtx, iIdx, iNalSize);
3550 WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS)3562 WELS_VERIFY_RETURN_IFNEQ (iReturn, ENC_RETURN_SUCCESS)
3551 3563

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