#if !defined(WELS_PLUS_WELSENCODEREXT_H)
#define WELS_PLUS_WELSENCODEREXT_H
#include "codec_api.h"
#include "codec_def.h"
#include "codec_app_def.h"
#include "welsCodecTrace.h"
#include "encoder_context.h"
#include "param_svc.h"
#include "extern.h"
#include "cpu.h"
class ISVCEncoder;
namespace WelsEnc {
class CWelsH264SVCEncoder : public ISVCEncoder {
public:
CWelsH264SVCEncoder();
virtual ~CWelsH264SVCEncoder();
virtual int EXTAPI Initialize (const SEncParamBase* argv);
virtual int EXTAPI InitializeExt (const SEncParamExt* argv);
virtual int EXTAPI GetDefaultParams (SEncParamExt* argv);
virtual int EXTAPI Uninitialize();
virtual int EXTAPI EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo);
virtual int EncodeFrameInternal (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo);
virtual int EXTAPI EncodeParameterSets (SFrameBSInfo* pBsInfo);
virtual int EXTAPI ForceIntraFrame (bool bIDR,int32_t iLayerId = -1);
virtual int EXTAPI SetOption (ENCODER_OPTION opt_id, void* option);
virtual int EXTAPI GetOption (ENCODER_OPTION opt_id, void* option);
private:
int InitializeInternal (SWelsSvcCodingParam* argv);
void TraceParamInfo(SEncParamExt *pParam);
void LogStatistics (const int64_t kiCurrentFrameTs,int32_t iMaxDid);
void UpdateStatistics(SFrameBSInfo* pBsInfo, const int64_t kiCurrentFrameMs);
sWelsEncCtx* m_pEncContext;
welsCodecTrace* m_pWelsTrace;
int32_t m_iMaxPicWidth;
int32_t m_iMaxPicHeight;
int32_t m_iCspInternal;
bool m_bInitialFlag;
#ifdef OUTPUT_BIT_STREAM
FILE* m_pFileBs;
FILE* m_pFileBsSize;
bool m_bSwitch;
int32_t m_iSwitchTimes;
#endif
#ifdef REC_FRAME_COUNT
int32_t m_uiCountFrameNum;
#endif
void InitEncoder (void);
void DumpSrcPicture (const SSourcePicture* pSrcPic, const int iUsageType);
};
}
#endif