History

add maxbitrate parameter

ruil2 committed 12 years ago

Commit 258185f1 parent cb46a3c6 files · +137 −23Browse files

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

Unified · Split

codec/encoder/plus/src/welsEncoderExt.cpp+93−8
@@ -510,8 +510,10 @@ int CWelsH264SVCEncoder::EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSIn · 509 unmodified lines
510 }510 }
511 511
512 const int32_t kiEncoderReturn = EncodeFrameInternal(kpSrcPic, pBsInfo);512 const int32_t kiEncoderReturn = EncodeFrameInternal(kpSrcPic, pBsInfo);
513
513 if(kiEncoderReturn != cmResultSuccess)514 if(kiEncoderReturn != cmResultSuccess)
514 return kiEncoderReturn;515 return kiEncoderReturn;
516
515#ifdef REC_FRAME_COUNT517#ifdef REC_FRAME_COUNT
516 ++ m_uiCountFrameNum;518 ++ m_uiCountFrameNum;
517 WelsLog (m_pEncContext, WELS_LOG_INFO,519 WelsLog (m_pEncContext, WELS_LOG_INFO,
@@ -521,7 +523,7 @@ int CWelsH264SVCEncoder::EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSIn · 3 unmodified lines
521#ifdef DUMP_SRC_PICTURE523#ifdef DUMP_SRC_PICTURE
522 DumpSrcPicture (pSrc);524 DumpSrcPicture (pSrc);
523#endif // DUMP_SRC_PICTURE525#endif // DUMP_SRC_PICTURE
524 return cmResultSuccess;526 return kiEncoderReturn;
525}527}
526 528
527 529
@@ -540,7 +542,6 @@ int CWelsH264SVCEncoder::EncodeFrameInternal(const SSourcePicture* pSrcPic, SFr · 12 unmodified lines
540 WelsLog (m_pEncContext, WELS_LOG_ERROR, "unexpected return(%d) from EncodeFrameInternal()!\n", kiEncoderReturn);542 WelsLog (m_pEncContext, WELS_LOG_ERROR, "unexpected return(%d) from EncodeFrameInternal()!\n", kiEncoderReturn);
541 return cmUnkonwReason;543 return cmUnkonwReason;
542 }544 }
543
544 ///////////////////for test545 ///////////////////for test
545#ifdef OUTPUT_BIT_STREAM546#ifdef OUTPUT_BIT_STREAM
546 if (pBsInfo->eOutputFrameType != videoFrameTypeInvalid && pBsInfo->eOutputFrameType != videoFrameTypeSkip) {547 if (pBsInfo->eOutputFrameType != videoFrameTypeInvalid && pBsInfo->eOutputFrameType != videoFrameTypeSkip) {
@@ -826,18 +827,80 @@ int CWelsH264SVCEncoder::SetOption (ENCODER_OPTION eOptionId, void* pOption) { · 279 unmodified lines
826 }827 }
827 break;828 break;
828 case ENCODER_OPTION_BITRATE: { // Target bit-rate829 case ENCODER_OPTION_BITRATE: { // Target bit-rate
829 int32_t iValue = * ((int32_t*)pOption);830 SBitrateInfo*pInfo = (static_cast<SBitrateInfo *>(pOption));
831 int32_t iBitrate = pInfo->iBitrate;
830#ifdef REC_FRAME_COUNT832#ifdef REC_FRAME_COUNT
831 WelsLog (m_pEncContext, WELS_LOG_INFO,833 WelsLog (m_pEncContext, WELS_LOG_INFO,
832 "CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_BITRATE, m_uiCountFrameNum= %d, m_iCspInternal= 0x%x, iValue= %d\n",834 "CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_BITRATE, m_uiCountFrameNum= %d, m_iCspInternal= 0x%x, iValue= %d\n",
833 m_uiCountFrameNum, m_iCspInternal, iValue);835 m_uiCountFrameNum, m_iCspInternal, iValue);
834#endif//REC_FRAME_COUNT836#endif//REC_FRAME_COUNT
835 if (iValue<=0) {837 if (iBitrate<=0) {
836 return cmInitParaError;838 WelsLog (m_pEncContext, WELS_LOG_ERROR,"CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_BITRATE,iBitrate = %d\n",iBitrate);
839 return cmInitParaError;
837 }840 }
841 iBitrate = WELS_CLIP3 (iBitrate, MIN_BIT_RATE, MAX_BIT_RATE);
842 switch(pInfo->iLayer){
843 case SPATIAL_LAYER_ALL:
844 m_pEncContext->pSvcParam->iTargetBitrate = iBitrate;
845 break;
846 case SPATIAL_LAYER_0:
847 m_pEncContext->pSvcParam->sSpatialLayers[0].iSpatialBitrate = iBitrate;
848 break;
849 case SPATIAL_LAYER_1:
850 m_pEncContext->pSvcParam->sSpatialLayers[1].iSpatialBitrate = iBitrate;
851 break;
852 case SPATIAL_LAYER_2:
853 m_pEncContext->pSvcParam->sSpatialLayers[2].iSpatialBitrate = iBitrate;
854 break;
855 case SPATIAL_LAYER_3:
856 m_pEncContext->pSvcParam->sSpatialLayers[3].iSpatialBitrate = iBitrate;
857 break;
858 default:
859 WelsLog (m_pEncContext, WELS_LOG_ERROR,"CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_BITRATE,iLayer = %d\n",pInfo->iLayer);
860 return cmInitParaError;
861 break;
862 }
838 //adjust to valid range863 //adjust to valid range
839 m_pEncContext->pSvcParam->iTargetBitrate = WELS_CLIP3 (iValue, MIN_BIT_RATE, MAX_BIT_RATE);864 WelsEncoderApplyBitRate (m_pEncContext->pSvcParam,pInfo->iLayer);
840 WelsEncoderApplyBitRate (m_pEncContext->pSvcParam);865 }
866 break;
867 case ENCODER_OPTION_MAX_BITRATE: { // Target bit-rate
868 SBitrateInfo*pInfo = (static_cast<SBitrateInfo *>(pOption));
869 int32_t iBitrate = pInfo->iBitrate;
870
871#ifdef REC_FRAME_COUNT
872 WelsLog (m_pEncContext, WELS_LOG_INFO,
873 "CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_BITRATE, m_uiCountFrameNum= %d, m_iCspInternal= 0x%x, iValue= %d\n",
874 m_uiCountFrameNum, m_iCspInternal, iValue);
875#endif//REC_FRAME_COUNT
876 if (iBitrate<=0) {
877 WelsLog (m_pEncContext, WELS_LOG_ERROR,"CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_MAX_BITRATE,iBitrate = %d\n",iBitrate);
878 return cmInitParaError;
879 }
880 iBitrate = WELS_CLIP3 (iBitrate, MIN_BIT_RATE, MAX_BIT_RATE);
881 switch(pInfo->iLayer){
882 case SPATIAL_LAYER_ALL:
883 m_pEncContext->pSvcParam->iMaxBitrate = iBitrate;
884 break;
885 case SPATIAL_LAYER_0:
886 m_pEncContext->pSvcParam->sSpatialLayers[0].iMaxSpatialBitrate = iBitrate;
887 break;
888 case SPATIAL_LAYER_1:
889 m_pEncContext->pSvcParam->sSpatialLayers[1].iMaxSpatialBitrate = iBitrate;
890 break;
891 case SPATIAL_LAYER_2:
892 m_pEncContext->pSvcParam->sSpatialLayers[2].iMaxSpatialBitrate = iBitrate;
893 break;
894 case SPATIAL_LAYER_3:
895 m_pEncContext->pSvcParam->sSpatialLayers[3].iMaxSpatialBitrate = iBitrate;
896 break;
897 default:
898 WelsLog (m_pEncContext, WELS_LOG_ERROR,"CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_MAX_BITRATE,iLayer = %d\n",pInfo->iLayer);
899 return cmInitParaError;
900 break;
901 }
902 //adjust to valid range
903 WelsEncoderApplyBitRate (m_pEncContext->pSvcParam,pInfo->iLayer);
841 }904 }
842 break;905 break;
843 case ENCODER_OPTION_RC_MODE: { // 0:quality mode;1:bit-rate mode906 case ENCODER_OPTION_RC_MODE: { // 0:quality mode;1:bit-rate mode
@@ -990,7 +1053,29 @@ int CWelsH264SVCEncoder::GetOption (ENCODER_OPTION eOptionId, void* pOption) { · 146 unmodified lines
990 "CWelsH264SVCEncoder::GetOption():ENCODER_OPTION_BITRATE, m_uiCountFrameNum= %d, m_iCspInternal= 0x%x\n",1053 "CWelsH264SVCEncoder::GetOption():ENCODER_OPTION_BITRATE, m_uiCountFrameNum= %d, m_iCspInternal= 0x%x\n",
991 m_uiCountFrameNum, m_iCspInternal);1054 m_uiCountFrameNum, m_iCspInternal);
992#endif//REC_FRAME_COUNT1055#endif//REC_FRAME_COUNT
993 * ((int32_t*)pOption) = m_pEncContext->pSvcParam->iTargetBitrate;1056 SBitrateInfo*pInfo = (static_cast<SBitrateInfo *>(pOption));
1057 if((pInfo->iLayer!=SPATIAL_LAYER_ALL)||(pInfo->iLayer!=SPATIAL_LAYER_0)||(pInfo->iLayer!=SPATIAL_LAYER_1)||(pInfo->iLayer!=SPATIAL_LAYER_2)||(pInfo->iLayer!=SPATIAL_LAYER_3))
1058 return cmInitParaError;
1059 if(pInfo->iLayer == SPATIAL_LAYER_ALL){
1060 pInfo->iBitrate = m_pEncContext->pSvcParam->iTargetBitrate;
1061 }else{
1062 pInfo->iBitrate = m_pEncContext->pSvcParam->sSpatialLayers[pInfo->iLayer].iSpatialBitrate;
1063 }
1064 }
1065 break;
1066 case ENCODER_OPTION_MAX_BITRATE: { // Target bit-rate
1067#ifdef REC_FRAME_COUNT
1068 WelsLog (m_pEncContext, WELS_LOG_INFO,"CWelsH264SVCEncoder::GetOption():ENCODER_OPTION_MAX_BITRATE, m_uiCountFrameNum= %d, m_iCspInternal= 0x%x\n",
1069 m_uiCountFrameNum, m_iCspInternal);
1070#endif//REC_FRAME_COUNT
1071 SBitrateInfo*pInfo = (static_cast<SBitrateInfo *>(pOption));
1072 if((pInfo->iLayer!=SPATIAL_LAYER_ALL)||(pInfo->iLayer!=SPATIAL_LAYER_0)||(pInfo->iLayer!=SPATIAL_LAYER_1)||(pInfo->iLayer!=SPATIAL_LAYER_2)||(pInfo->iLayer!=SPATIAL_LAYER_3))
1073 return cmInitParaError;
1074 if(pInfo->iLayer == SPATIAL_LAYER_ALL){
1075 pInfo->iBitrate = m_pEncContext->pSvcParam->iMaxBitrate;
1076 }else{
1077 pInfo->iBitrate = m_pEncContext->pSvcParam->sSpatialLayers[pInfo->iLayer].iMaxSpatialBitrate;
1078 }
994 }1079 }
995 break;1080 break;
996 default:1081 default:

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