History

Merge pull request #554 from ruil2/encoder_update

add maxbitrate parameter

Licai Guo committed 12 years ago

Commit 9d73d272 parents bef50d9 258185f6 files · +137 −23Browse files

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

Unified · Split

codec/encoder/core/src/encoder_ext.cpp+25−11
@@ -376,7 +376,7 @@ void WelsEncoderApplyFrameRate(SWelsSvcCodingParam* pParam) · 375 unmodified lines
376}376}
377 377
378 378
379void WelsEncoderApplyBitRate(SWelsSvcCodingParam* pParam)379void WelsEncoderApplyBitRate(SWelsSvcCodingParam* pParam,int iLayer)
380{380{
381 //TODO (Sijia): this is a temporary solution which keep the ratio between layers381 //TODO (Sijia): this is a temporary solution which keep the ratio between layers
382 //but it is also possible to fulfill the bitrate of lower layer first382 //but it is also possible to fulfill the bitrate of lower layer first
@@ -384,16 +384,30 @@ void WelsEncoderApplyBitRate(SWelsSvcCodingParam* pParam) · 1 unmodified line
384 SDLayerParam* pLayerParam;384 SDLayerParam* pLayerParam;
385 const int32_t iNumLayers = pParam->iSpatialLayerNum;385 const int32_t iNumLayers = pParam->iSpatialLayerNum;
386 int32_t i, iOrigTotalBitrate=0;386 int32_t i, iOrigTotalBitrate=0;
387 //read old BR387 if(iLayer == SPATIAL_LAYER_ALL){
388 for (i=0;i<iNumLayers;i++) {388 if(pParam->iMaxBitrate <pParam->iTargetBitrate){
389 iOrigTotalBitrate += pParam->sDependencyLayers[i].iSpatialBitrate;389 WelsLog (NULL, WELS_LOG_WARNING,"CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_BITRATE,overall settting,TargetBitrate = %d,iMaxBitrate = %d\n",
390 }390 pParam->iTargetBitrate,pParam->iMaxBitrate);
391 //write new BR391 pParam->iMaxBitrate = pParam->iTargetBitrate;
392 float fRatio = 0.0;392 }
393 for (i=0;i<iNumLayers;i++) {393 //read old BR
394 pLayerParam = &(pParam->sDependencyLayers[i]);394 for (i=0;i<iNumLayers;i++) {
395 fRatio = pLayerParam->iSpatialBitrate/(static_cast<float>(iOrigTotalBitrate));395 iOrigTotalBitrate += pParam->sDependencyLayers[i].iSpatialBitrate;
396 pLayerParam->iSpatialBitrate = static_cast<int32_t>(pParam->iTargetBitrate*fRatio);396 }
397 //write new BR
398 float fRatio = 0.0;
399 for (i=0;i<iNumLayers;i++) {
400 pLayerParam = &(pParam->sDependencyLayers[i]);
401 fRatio = pLayerParam->iSpatialBitrate/(static_cast<float>(iOrigTotalBitrate));
402 pLayerParam->iSpatialBitrate = static_cast<int32_t>(pParam->iTargetBitrate*fRatio);
403 }
404 }else{
405 if(pParam->sSpatialLayers[iLayer].iMaxSpatialBitrate <pParam->sSpatialLayers[iLayer].iSpatialBitrate){
406 WelsLog (NULL, WELS_LOG_WARNING,"CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_BITRATE,iLayer = %d,iTargetBitrate = %d,iMaxBitrate = %d\n",
407 iLayer,pParam->sSpatialLayers[iLayer].iSpatialBitrate,pParam->sSpatialLayers[iLayer].iMaxSpatialBitrate);
408 pParam->sSpatialLayers[iLayer].iMaxSpatialBitrate = pParam->sSpatialLayers[iLayer].iSpatialBitrate;
409 }
410
397 }411 }
398}412}
399/*!413/*!

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