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
376376 }
377377
378378
379−void WelsEncoderApplyBitRate(SWelsSvcCodingParam* pParam)
379+void WelsEncoderApplyBitRate(SWelsSvcCodingParam* pParam,int iLayer)
380380 {
381381 //TODO (Sijia): this is a temporary solution which keep the ratio between layers
382382 //but it is also possible to fulfill the bitrate of lower layer first
@@ -384,16 +384,30 @@ void WelsEncoderApplyBitRate(SWelsSvcCodingParam* pParam) · 1 unmodified line
384384 SDLayerParam* pLayerParam;
385385 const int32_t iNumLayers = pParam->iSpatialLayerNum;
386386 int32_t i, iOrigTotalBitrate=0;
387− //read old BR
388− for (i=0;i<iNumLayers;i++) {
389− iOrigTotalBitrate += pParam->sDependencyLayers[i].iSpatialBitrate;
390− }
391− //write new BR
392− float fRatio = 0.0;
393− for (i=0;i<iNumLayers;i++) {
394− pLayerParam = &(pParam->sDependencyLayers[i]);
395− fRatio = pLayerParam->iSpatialBitrate/(static_cast<float>(iOrigTotalBitrate));
396− pLayerParam->iSpatialBitrate = static_cast<int32_t>(pParam->iTargetBitrate*fRatio);
387+ if(iLayer == SPATIAL_LAYER_ALL){
388+ if(pParam->iMaxBitrate <pParam->iTargetBitrate){
389+ WelsLog (NULL, WELS_LOG_WARNING,"CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_BITRATE,overall settting,TargetBitrate = %d,iMaxBitrate = %d\n",
390+ pParam->iTargetBitrate,pParam->iMaxBitrate);
391+ pParam->iMaxBitrate = pParam->iTargetBitrate;
392+ }
393+ //read old BR
394+ for (i=0;i<iNumLayers;i++) {
395+ iOrigTotalBitrate += pParam->sDependencyLayers[i].iSpatialBitrate;
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+
397411 }
398412 }
399413 /*!

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