Split the encoder Initialize method into two
This avoids the struct type casting and having to pass a parameter that says which kind of struct it actually is.
This commit is contained in:
parent
622694935b
commit
49f4dad1b7
@ -56,7 +56,8 @@ class ISVCEncoder {
|
||||
/*
|
||||
* return: CM_RETURN: 0 - success; otherwise - failed;
|
||||
*/
|
||||
virtual int EXTAPI Initialize (const void* pParam, const INIT_TYPE kiInitType = INIT_TYPE_PARAMETER_BASED) = 0;
|
||||
virtual int EXTAPI Initialize (const SEncParamBase* pParam) = 0;
|
||||
virtual int EXTAPI InitializeExt (const SEncParamExt* pParam) = 0;
|
||||
|
||||
virtual int EXTAPI Uninitialize() = 0;
|
||||
|
||||
@ -140,7 +141,8 @@ typedef struct ISVCEncoderVtbl ISVCEncoderVtbl;
|
||||
typedef const ISVCEncoderVtbl* ISVCEncoder;
|
||||
struct ISVCEncoderVtbl {
|
||||
|
||||
int (*Initialize) (ISVCEncoder*, const void* pParam, const INIT_TYPE kiInitType);
|
||||
int (*Initialize) (ISVCEncoder*, const SEncParamBase* pParam);
|
||||
int (*InitializeExt) (ISVCEncoder*, const SEncParamExt* pParam);
|
||||
|
||||
int (*Uninitialize) (ISVCEncoder*);
|
||||
|
||||
|
@ -763,7 +763,7 @@ int ProcessEncodingSvcWithParam (ISVCEncoder* pPtrEnc, int argc, char** argv) {
|
||||
goto ERROR_RET;
|
||||
}
|
||||
|
||||
if (cmResultSuccess != pPtrEnc->Initialize (&sSvcParam, INIT_TYPE_PARAMETER_EXT)) {
|
||||
if (cmResultSuccess != pPtrEnc->InitializeExt (&sSvcParam)) {
|
||||
fprintf (stderr, "Encoder Initialization failed!\n");
|
||||
ret = 1;
|
||||
goto ERROR_RET;
|
||||
@ -932,7 +932,7 @@ int ProcessEncodingSvcWithConfig (ISVCEncoder* pPtrEnc, int argc, char** argv) {
|
||||
sSvcParam.iPicHeight = sSvcParam.sSpatialLayers[sSvcParam.iSpatialLayerNum - 1].iVideoHeight;
|
||||
|
||||
|
||||
if (cmResultSuccess != pPtrEnc->Initialize (&sSvcParam, INIT_TYPE_PARAMETER_EXT)) { // SVC encoder initialization
|
||||
if (cmResultSuccess != pPtrEnc->InitializeExt (&sSvcParam)) { // SVC encoder initialization
|
||||
fprintf (stderr, "SVC encoder Initialize failed\n");
|
||||
iRet = 1;
|
||||
goto INSIDE_MEM_FREE;
|
||||
|
@ -66,7 +66,8 @@ class CWelsH264SVCEncoder : public ISVCEncoder {
|
||||
/*
|
||||
* return: CM_RETURN: 0 - success; otherwise - failed;
|
||||
*/
|
||||
virtual int EXTAPI Initialize (const void* argv, const INIT_TYPE init_type);
|
||||
virtual int EXTAPI Initialize (const SEncParamBase* argv);
|
||||
virtual int EXTAPI InitializeExt (const SEncParamExt* argv);
|
||||
|
||||
virtual int EXTAPI Uninitialize();
|
||||
|
||||
|
@ -200,33 +200,39 @@ void CWelsH264SVCEncoder::InitEncoder (void) {
|
||||
/*
|
||||
* SVC Encoder Initialization
|
||||
*/
|
||||
int CWelsH264SVCEncoder::Initialize (const void* argv, const INIT_TYPE iInitType) {
|
||||
int CWelsH264SVCEncoder::Initialize (const SEncParamBase* argv) {
|
||||
|
||||
|
||||
if ((INIT_TYPE_PARAMETER_BASED != iInitType && INIT_TYPE_PARAMETER_EXT != iInitType)|| NULL == argv) {
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "CWelsH264SVCEncoder::Initialize(), invalid iInitType= %d, argv= 0x%p\n",
|
||||
iInitType, (void*)argv);
|
||||
if (NULL == argv) {
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "CWelsH264SVCEncoder::Initialize(), invalid argv= 0x%p\n",
|
||||
argv);
|
||||
return cmInitParaError;
|
||||
}
|
||||
|
||||
SWelsSvcCodingParam sConfig (true);
|
||||
if(iInitType == INIT_TYPE_PARAMETER_BASED)
|
||||
{
|
||||
// Convert SEncParamBase into WelsSVCParamConfig here..
|
||||
if (sConfig.ParamBaseTranscode (*(const SEncParamBase*)argv, true)) {
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "CWelsH264SVCEncoder::Initialize(), parameter_translation failed.\n");
|
||||
Uninitialize();
|
||||
return cmInitParaError;
|
||||
}
|
||||
// Convert SEncParamBase into WelsSVCParamConfig here..
|
||||
if (sConfig.ParamBaseTranscode (*argv, true)) {
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "CWelsH264SVCEncoder::Initialize(), parameter_translation failed.\n");
|
||||
Uninitialize();
|
||||
return cmInitParaError;
|
||||
}
|
||||
else if(iInitType == INIT_TYPE_PARAMETER_EXT)
|
||||
{
|
||||
// Convert SEncParamExt into WelsSVCParamConfig here..
|
||||
if (sConfig.ParamTranscode (*(const SEncParamExt*)argv)) {
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "CWelsH264SVCEncoder::Initialize(), parameter_translation failed.\n");
|
||||
Uninitialize();
|
||||
return cmInitParaError;
|
||||
}
|
||||
|
||||
return Initialize2 (&sConfig);
|
||||
}
|
||||
|
||||
int CWelsH264SVCEncoder::InitializeExt (const SEncParamExt* argv) {
|
||||
|
||||
if (NULL == argv) {
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "CWelsH264SVCEncoder::Initialize(), invalid argv= 0x%p\n",
|
||||
argv);
|
||||
return cmInitParaError;
|
||||
}
|
||||
|
||||
SWelsSvcCodingParam sConfig (true);
|
||||
// Convert SEncParamExt into WelsSVCParamConfig here..
|
||||
if (sConfig.ParamTranscode (*argv)) {
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "CWelsH264SVCEncoder::Initialize(), parameter_translation failed.\n");
|
||||
Uninitialize();
|
||||
return cmInitParaError;
|
||||
}
|
||||
|
||||
return Initialize2 (&sConfig);
|
||||
|
@ -15,7 +15,7 @@ static int InitWithParam(ISVCEncoder* encoder, int width,
|
||||
param.iPicHeight = height;
|
||||
param.iTargetBitrate = 5000000;
|
||||
param.iInputCsp = videoFormatI420;
|
||||
return encoder->Initialize(¶m, INIT_TYPE_PARAMETER_BASED);
|
||||
return encoder->Initialize(¶m);
|
||||
}
|
||||
|
||||
BaseEncoderTest::BaseEncoderTest() : encoder_(NULL) {}
|
||||
|
@ -11,6 +11,7 @@ typedef void(*CheckFunc)(int, int, const char*);
|
||||
|
||||
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, EncodeFrame2);
|
||||
|
@ -22,11 +22,14 @@ static void* gThis;
|
||||
*/
|
||||
struct SVCEncoderImpl : public ISVCEncoder {
|
||||
virtual ~SVCEncoderImpl() {}
|
||||
virtual int EXTAPI Initialize(const void* pParam,
|
||||
const INIT_TYPE kiInitType) {
|
||||
virtual int EXTAPI Initialize(const SEncParamBase* pParam) {
|
||||
EXPECT_TRUE(gThis == this);
|
||||
return 1;
|
||||
}
|
||||
virtual int EXTAPI InitializeExt(const SEncParamExt* pParam) {
|
||||
EXPECT_TRUE(gThis == this);
|
||||
return 2;
|
||||
}
|
||||
virtual int EXTAPI Uninitialize() {
|
||||
EXPECT_TRUE(gThis == this);
|
||||
return 3;
|
||||
|
Loading…
x
Reference in New Issue
Block a user