ref: 9319f879e49b7b2fbc8812aadacfbb11a160406d
parent: 573b02797b8d7d334e6647106d992cebbefa5ef5
parent: a5f5b37a25837f1f66f5910d93d3681599636f62
author: ruil2 <ruil2@cisco.com>
date: Thu Feb 27 12:38:16 EST 2014
Merge pull request #362 from mstorsjo/encoder-default-params Add a new public method for initializing SEncParamExt to default values
--- a/codec/api/svc/codec_api.h
+++ b/codec/api/svc/codec_api.h
@@ -59,6 +59,8 @@
virtual int EXTAPI Initialize (const SEncParamBase* pParam) = 0;
virtual int EXTAPI InitializeExt (const SEncParamExt* pParam) = 0;
+ virtual int EXTAPI GetDefaultParams (SEncParamExt* pParam) = 0;
+
virtual int EXTAPI Uninitialize() = 0;
/*
@@ -141,6 +143,8 @@
int (*Initialize) (ISVCEncoder*, const SEncParamBase* pParam);
int (*InitializeExt) (ISVCEncoder*, const SEncParamExt* pParam);
+
+ int (*GetDefaultParams) (ISVCEncoder*, SEncParamExt* pParam);
int (*Uninitialize) (ISVCEncoder*);
--- a/codec/encoder/core/inc/param_svc.h
+++ b/codec/encoder/core/inc/param_svc.h
@@ -137,71 +137,80 @@
}
~TagWelsSvcCodingParam() {}
-void FillDefault (const bool kbEnableRc) {
- uiGopSize = 1; // GOP size (at maximal frame rate: 16)
- uiIntraPeriod = 0; // intra period (multiple of GOP size as desired)
- iNumRefFrame = MIN_REF_PIC_COUNT; // number of reference frame used
+static void FillDefault (SEncParamExt& param, const bool kbEnableRc) {
+ memset(¶m, 0, sizeof(param));
+ param.uiIntraPeriod = 0; // intra period (multiple of GOP size as desired)
+ param.iNumRefFrame = MIN_REF_PIC_COUNT; // number of reference frame used
- iPicWidth = 0; // actual input picture width
- iPicHeight = 0; // actual input picture height
- SUsedPicRect.iLeft =
- SUsedPicRect.iTop =
- SUsedPicRect.iWidth =
- SUsedPicRect.iHeight = 0; // the rect in input picture that encoder actually used
+ param.iPicWidth = 0; // actual input picture width
+ param.iPicHeight = 0; // actual input picture height
- pCurPath = NULL; // record current lib path such as:/pData/pData/com.wels.enc/lib/
+ param.fMaxFrameRate = MAX_FRAME_RATE; // maximal frame rate [Hz / fps]
+ param.iInputCsp = videoFormatI420; // input sequence color space in default
+ param.uiFrameToBeCoded = (uint32_t) - 1; // frame to be encoded (at input frame rate)
- fMaxFrameRate = MAX_FRAME_RATE; // maximal frame rate [Hz / fps]
- iInputCsp = videoFormatI420; // input sequence color space in default
- uiFrameToBeCoded = (uint32_t) - 1; // frame to be encoded (at input frame rate)
-
- iTargetBitrate = 0; // overall target bitrate introduced in RC module
- bDeblockingParallelFlag = false; // deblocking filter parallelization control flag
+ param.iTargetBitrate = 0; // overall target bitrate introduced in RC module
#ifdef MT_ENABLED
- iMultipleThreadIdc = 0; // auto to detect cpu cores inside
+ param.iMultipleThreadIdc = 0; // auto to detect cpu cores inside
#else
- iMultipleThreadIdc =
+ param.iMultipleThreadIdc =
1; // 1 # 0: auto(dynamic imp. internal encoder); 1: multiple threads imp. disabled; > 1: count number of threads;
#endif//MT_ENABLED
- iCountThreadsNum = 1; // # derived from disable_multiple_slice_idc (=0 or >1) means;
+ param.iCountThreadsNum = 1; // # derived from disable_multiple_slice_idc (=0 or >1) means;
- iLTRRefNum = 0;
- iLtrMarkPeriod = 30; //the min distance of two int32_t references
+ param.iLTRRefNum = 0;
+ param.iLtrMarkPeriod = 30; //the min distance of two int32_t references
- bMgsT0OnlyStrategy =
- true; // Strategy of have MGS only at T0 frames (0: do not use this strategy; 1: use this strategy)
- bEnableSSEI = true;
- bEnableFrameCroppingFlag = true; // enable frame cropping flag: true alwayse in application
+ param.bEnableSSEI = true;
+ param.bEnableFrameCroppingFlag = true; // enable frame cropping flag: true alwayse in application
// false: Streaming Video Sharing; true: Video Conferencing Meeting;
- iDecompStages = 0; // GOP size dependency, unknown here and be revised later
/* Deblocking loop filter */
- iLoopFilterDisableIdc = 1; // 0: on, 1: off, 2: on except for slice boundaries
- iLoopFilterAlphaC0Offset = 0; // AlphaOffset: valid range [-6, 6], default 0
- iLoopFilterBetaOffset = 0; // BetaOffset: valid range [-6, 6], default 0
- iInterLayerLoopFilterDisableIdc = 1; // Employed based upon inter-layer, same comment as above
- iInterLayerLoopFilterAlphaC0Offset = 0; // InterLayerLoopFilterAlphaC0Offset
- iInterLayerLoopFilterBetaOffset = 0; // InterLayerLoopFilterBetaOffset
+ param.iLoopFilterDisableIdc = 1; // 0: on, 1: off, 2: on except for slice boundaries
+ param.iLoopFilterAlphaC0Offset = 0; // AlphaOffset: valid range [-6, 6], default 0
+ param.iLoopFilterBetaOffset = 0; // BetaOffset: valid range [-6, 6], default 0
+ param.iInterLayerLoopFilterDisableIdc = 1; // Employed based upon inter-layer, same comment as above
+ param.iInterLayerLoopFilterAlphaC0Offset = 0; // InterLayerLoopFilterAlphaC0Offset
+ param.iInterLayerLoopFilterBetaOffset = 0; // InterLayerLoopFilterBetaOffset
/* Rate Control */
- bEnableRc = kbEnableRc;
- iRCMode = 0;
- iPaddingFlag = 0;
+ param.bEnableRc = kbEnableRc;
+ param.iRCMode = 0;
+ param.iPaddingFlag = 0;
- bEnableDenoise = false; // denoise control
- bEnableSceneChangeDetect = true; // scene change detection control
- bEnableBackgroundDetection = true; // background detection control
- bEnableAdaptiveQuant = true; // adaptive quantization control
- bEnableFrameSkip = true; // frame skipping
- bEnableLongTermReference = false; // long term reference control
- bEnableSpsPpsIdAddition = true; // pSps pPps id addition control
- bPrefixNalAddingCtrl = true; // prefix NAL adding control
- iSpatialLayerNum = 1; // number of dependency(Spatial/CGS) layers used to be encoded
- iTemporalLayerNum = 1; // number of temporal layer specified
+ param.bEnableDenoise = false; // denoise control
+ param.bEnableSceneChangeDetect = true; // scene change detection control
+ param.bEnableBackgroundDetection = true; // background detection control
+ param.bEnableAdaptiveQuant = true; // adaptive quantization control
+ param.bEnableFrameSkip = true; // frame skipping
+ param.bEnableLongTermReference = false; // long term reference control
+ param.bEnableSpsPpsIdAddition = true; // pSps pPps id addition control
+ param.bPrefixNalAddingCtrl = true; // prefix NAL adding control
+ param.iSpatialLayerNum = 1; // number of dependency(Spatial/CGS) layers used to be encoded
+ param.iTemporalLayerNum = 1; // number of temporal layer specified
- iMaxQp = 51;
- iMinQp = 0;
- iUsageType = 0;
+ param.iMaxQp = 51;
+ param.iMinQp = 0;
+ param.iUsageType = 0;
+}
+
+void FillDefault (const bool kbEnableRc) {
+ FillDefault(*this, kbEnableRc);
+ uiGopSize = 1; // GOP size (at maximal frame rate: 16)
+
+ SUsedPicRect.iLeft =
+ SUsedPicRect.iTop =
+ SUsedPicRect.iWidth =
+ SUsedPicRect.iHeight = 0; // the rect in input picture that encoder actually used
+
+ pCurPath = NULL; // record current lib path such as:/pData/pData/com.wels.enc/lib/
+
+ bDeblockingParallelFlag = false; // deblocking filter parallelization control flag
+
+ bMgsT0OnlyStrategy =
+ true; // Strategy of have MGS only at T0 frames (0: do not use this strategy; 1: use this strategy)
+ iDecompStages = 0; // GOP size dependency, unknown here and be revised later
+
memset(sDependencyLayers,0,sizeof(SDLayerParam)*MAX_DEPENDENCY_LAYER);
--- a/codec/encoder/plus/inc/welsEncoderExt.h
+++ b/codec/encoder/plus/inc/welsEncoderExt.h
@@ -69,6 +69,8 @@
virtual int EXTAPI Initialize (const SEncParamBase* argv);
virtual int EXTAPI InitializeExt (const SEncParamExt* argv);
+ virtual int EXTAPI GetDefaultParams (SEncParamExt* argv);
+
virtual int EXTAPI Uninitialize();
/*
--- a/codec/encoder/plus/src/welsEncoderExt.cpp
+++ b/codec/encoder/plus/src/welsEncoderExt.cpp
@@ -197,6 +197,11 @@
/* Interfaces override from ISVCEncoder */
+int CWelsH264SVCEncoder::GetDefaultParams (SEncParamExt* argv) {
+ SWelsSvcCodingParam::FillDefault(*argv, true);
+ return cmResultSuccess;
+}
+
/*
* SVC Encoder Initialization
*/
--- a/test/c_interface_test.c
+++ b/test/c_interface_test.c
@@ -12,13 +12,14 @@
void CheckEncoderInterface(ISVCEncoder* p, CheckFunc check) {
CHECK(1, p, Initialize);
CHECK(2, p, InitializeExt);
- CHECK(3, p, Uninitialize);
- CHECK(4, p, EncodeFrame);
- CHECK(5, p, EncodeParameterSets);
- CHECK(6, p, PauseFrame);
- CHECK(7, p, ForceIntraFrame);
- CHECK(8, p, SetOption);
- CHECK(9, p, GetOption);
+ CHECK(3, p, GetDefaultParams);
+ CHECK(4, p, Uninitialize);
+ CHECK(5, p, EncodeFrame);
+ CHECK(6, p, EncodeParameterSets);
+ CHECK(7, p, PauseFrame);
+ CHECK(8, p, ForceIntraFrame);
+ CHECK(9, p, SetOption);
+ CHECK(10, p, GetOption);
}
void CheckDecoderInterface(ISVCDecoder* p, CheckFunc check) {
--- a/test/cpp_interface_test.cpp
+++ b/test/cpp_interface_test.cpp
@@ -30,35 +30,39 @@
EXPECT_TRUE(gThis == this);
return 2;
}
- virtual int EXTAPI Uninitialize() {
+ virtual int EXTAPI GetDefaultParams(SEncParamExt* pParam) {
EXPECT_TRUE(gThis == this);
return 3;
}
+ virtual int EXTAPI Uninitialize() {
+ EXPECT_TRUE(gThis == this);
+ return 4;
+ }
virtual int EXTAPI EncodeFrame(const SSourcePicture* kpSrcPic,
SFrameBSInfo* pBsInfo) {
EXPECT_TRUE(gThis == this);
- return 4;
+ return 5;
}
virtual int EXTAPI EncodeParameterSets(SFrameBSInfo* pBsInfo) {
EXPECT_TRUE(gThis == this);
- return 5;
+ return 6;
}
virtual int EXTAPI PauseFrame(const SSourcePicture* kpSrcPic,
SFrameBSInfo* pBsInfo) {
EXPECT_TRUE(gThis == this);
- return 6;
+ return 7;
}
virtual int EXTAPI ForceIntraFrame(bool bIDR) {
EXPECT_TRUE(gThis == this);
- return 7;
+ return 8;
}
virtual int EXTAPI SetOption(ENCODER_OPTION eOptionId, void* pOption) {
EXPECT_TRUE(gThis == this);
- return 8;
+ return 9;
}
virtual int EXTAPI GetOption(ENCODER_OPTION eOptionId, void* pOption) {
EXPECT_TRUE(gThis == this);
- return 9;
+ return 10;
}
};