#ifndef WELS_VIDEO_CODEC_APPLICATION_DEFINITION_H__
#define WELS_VIDEO_CODEC_APPLICATION_DEFINITION_H__
#include "codec_def.h"
#define MAX_TEMPORAL_LAYER_NUM 4
#define MAX_SPATIAL_LAYER_NUM 4
#define MAX_QUALITY_LAYER_NUM 4
#define MAX_LAYER_NUM_OF_FRAME 128
#define MAX_NAL_UNITS_IN_LAYER 128
#define MAX_RTP_PAYLOAD_LEN 1000
#define AVERAGE_RTP_PAYLOAD_LEN 800
#define SAVED_NALUNIT_NUM_TMP ( (MAX_SPATIAL_LAYER_NUM*MAX_QUALITY_LAYER_NUM) + 1 + MAX_SPATIAL_LAYER_NUM )
#define MAX_SLICES_NUM_TMP ( ( MAX_NAL_UNITS_IN_LAYER - SAVED_NALUNIT_NUM_TMP ) / 3 )
#define AUTO_REF_PIC_COUNT -1
#define UNSPECIFIED_BIT_RATE 0
typedef struct _tagVersion {
unsigned int uMajor; unsigned int uMinor; unsigned int uRevision; unsigned int uReserved; } OpenH264Version;
typedef enum {
dsErrorFree = 0x00, dsFramePending = 0x01, dsRefLost = 0x02, dsBitstreamError = 0x04, dsDepLayerLost = 0x08, dsNoParamSets = 0x10, dsDataErrorConcealed = 0x20, dsRefListNullPtrs = 0x40,
dsInvalidArgument = 0x1000, dsInitialOptExpected = 0x2000, dsOutOfMemory = 0x4000,
dsDstBufNeedExpan = 0x8000
} DECODING_STATE;
typedef enum {
ENCODER_OPTION_DATAFORMAT = 0,
ENCODER_OPTION_IDR_INTERVAL, ENCODER_OPTION_SVC_ENCODE_PARAM_BASE, ENCODER_OPTION_SVC_ENCODE_PARAM_EXT, ENCODER_OPTION_FRAME_RATE, ENCODER_OPTION_BITRATE,
ENCODER_OPTION_MAX_BITRATE,
ENCODER_OPTION_INTER_SPATIAL_PRED,
ENCODER_OPTION_RC_MODE,
ENCODER_OPTION_RC_FRAME_SKIP,
ENCODER_PADDING_PADDING,
ENCODER_OPTION_PROFILE, ENCODER_OPTION_LEVEL, ENCODER_OPTION_NUMBER_REF, ENCODER_OPTION_DELIVERY_STATUS,
ENCODER_LTR_RECOVERY_REQUEST,
ENCODER_LTR_MARKING_FEEDBACK,
ENCODER_LTR_MARKING_PERIOD,
ENCODER_OPTION_LTR, ENCODER_OPTION_COMPLEXITY,
ENCODER_OPTION_ENABLE_SSEI, ENCODER_OPTION_ENABLE_PREFIX_NAL_ADDING, ENCODER_OPTION_SPS_PPS_ID_STRATEGY,
ENCODER_OPTION_CURRENT_PATH,
ENCODER_OPTION_DUMP_FILE, ENCODER_OPTION_TRACE_LEVEL, ENCODER_OPTION_TRACE_CALLBACK, ENCODER_OPTION_TRACE_CALLBACK_CONTEXT,
ENCODER_OPTION_GET_STATISTICS, ENCODER_OPTION_STATISTICS_LOG_INTERVAL,
ENCODER_OPTION_IS_LOSSLESS_LINK,
ENCODER_OPTION_BITS_VARY_PERCENTAGE } ENCODER_OPTION;
typedef enum {
DECODER_OPTION_END_OF_STREAM = 1, DECODER_OPTION_VCL_NAL, DECODER_OPTION_TEMPORAL_ID, DECODER_OPTION_FRAME_NUM, DECODER_OPTION_IDR_PIC_ID, DECODER_OPTION_LTR_MARKING_FLAG, DECODER_OPTION_LTR_MARKED_FRAME_NUM, DECODER_OPTION_ERROR_CON_IDC, DECODER_OPTION_TRACE_LEVEL,
DECODER_OPTION_TRACE_CALLBACK, DECODER_OPTION_TRACE_CALLBACK_CONTEXT,
DECODER_OPTION_GET_STATISTICS, DECODER_OPTION_GET_SAR_INFO, DECODER_OPTION_PROFILE, DECODER_OPTION_LEVEL, DECODER_OPTION_STATISTICS_LOG_INTERVAL, DECODER_OPTION_IS_REF_PIC, DECODER_OPTION_NUM_OF_FRAMES_REMAINING_IN_BUFFER, DECODER_OPTION_NUM_OF_THREADS, } DECODER_OPTION;
typedef enum {
ERROR_CON_DISABLE = 0,
ERROR_CON_FRAME_COPY,
ERROR_CON_SLICE_COPY,
ERROR_CON_FRAME_COPY_CROSS_IDR,
ERROR_CON_SLICE_COPY_CROSS_IDR,
ERROR_CON_SLICE_COPY_CROSS_IDR_FREEZE_RES_CHANGE,
ERROR_CON_SLICE_MV_COPY_CROSS_IDR,
ERROR_CON_SLICE_MV_COPY_CROSS_IDR_FREEZE_RES_CHANGE
} ERROR_CON_IDC;
typedef enum {
FEEDBACK_NON_VCL_NAL = 0,
FEEDBACK_VCL_NAL,
FEEDBACK_UNKNOWN_NAL
} FEEDBACK_VCL_NAL_IN_AU;
typedef enum {
NON_VIDEO_CODING_LAYER = 0,
VIDEO_CODING_LAYER = 1
} LAYER_TYPE;
typedef enum {
SPATIAL_LAYER_0 = 0,
SPATIAL_LAYER_1 = 1,
SPATIAL_LAYER_2 = 2,
SPATIAL_LAYER_3 = 3,
SPATIAL_LAYER_ALL = 4
} LAYER_NUM;
typedef enum {
VIDEO_BITSTREAM_AVC = 0,
VIDEO_BITSTREAM_SVC = 1,
VIDEO_BITSTREAM_DEFAULT = VIDEO_BITSTREAM_SVC
} VIDEO_BITSTREAM_TYPE;
typedef enum {
NO_RECOVERY_REQUSET = 0,
LTR_RECOVERY_REQUEST = 1,
IDR_RECOVERY_REQUEST = 2,
NO_LTR_MARKING_FEEDBACK = 3,
LTR_MARKING_SUCCESS = 4,
LTR_MARKING_FAILED = 5
} KEY_FRAME_REQUEST_TYPE;
typedef struct {
unsigned int uiFeedbackType; unsigned int uiIDRPicId; int iLastCorrectFrameNum;
int iCurrentFrameNum; int iLayerId; } SLTRRecoverRequest;
typedef struct {
unsigned int uiFeedbackType; unsigned int uiIDRPicId; int iLTRFrameNum; int iLayerId; } SLTRMarkingFeedback;
typedef struct {
bool bEnableLongTermReference; int iLTRRefNum; } SLTRConfig;
typedef enum {
RC_QUALITY_MODE = 0, RC_BITRATE_MODE = 1, RC_BUFFERBASED_MODE = 2, RC_TIMESTAMP_MODE = 3, RC_BITRATE_MODE_POST_SKIP = 4, RC_OFF_MODE = -1, } RC_MODES;
typedef enum {
PRO_UNKNOWN = 0,
PRO_BASELINE = 66,
PRO_MAIN = 77,
PRO_EXTENDED = 88,
PRO_HIGH = 100,
PRO_HIGH10 = 110,
PRO_HIGH422 = 122,
PRO_HIGH444 = 144,
PRO_CAVLC444 = 244,
PRO_SCALABLE_BASELINE = 83,
PRO_SCALABLE_HIGH = 86
} EProfileIdc;
typedef enum {
LEVEL_UNKNOWN = 0,
LEVEL_1_0 = 10,
LEVEL_1_B = 9,
LEVEL_1_1 = 11,
LEVEL_1_2 = 12,
LEVEL_1_3 = 13,
LEVEL_2_0 = 20,
LEVEL_2_1 = 21,
LEVEL_2_2 = 22,
LEVEL_3_0 = 30,
LEVEL_3_1 = 31,
LEVEL_3_2 = 32,
LEVEL_4_0 = 40,
LEVEL_4_1 = 41,
LEVEL_4_2 = 42,
LEVEL_5_0 = 50,
LEVEL_5_1 = 51,
LEVEL_5_2 = 52
} ELevelIdc;
enum {
WELS_LOG_QUIET = 0x00, WELS_LOG_ERROR = 1 << 0, WELS_LOG_WARNING = 1 << 1, WELS_LOG_INFO = 1 << 2, WELS_LOG_DEBUG = 1 << 3, WELS_LOG_DETAIL = 1 << 4, WELS_LOG_RESV = 1 << 5, WELS_LOG_LEVEL_COUNT = 6,
WELS_LOG_DEFAULT = WELS_LOG_WARNING };
typedef enum {
SM_SINGLE_SLICE = 0, SM_FIXEDSLCNUM_SLICE = 1, SM_RASTER_SLICE = 2, SM_SIZELIMITED_SLICE = 3, SM_RESERVED = 4
} SliceModeEnum;
typedef struct {
SliceModeEnum uiSliceMode; unsigned int
uiSliceNum; unsigned int
uiSliceMbNum[MAX_SLICES_NUM_TMP]; unsigned int uiSliceSizeConstraint; } SSliceArgument;
typedef enum {
VF_COMPONENT,
VF_PAL,
VF_NTSC,
VF_SECAM,
VF_MAC,
VF_UNDEF,
VF_NUM_ENUM
} EVideoFormatSPS;
typedef enum {
CP_RESERVED0,
CP_BT709,
CP_UNDEF,
CP_RESERVED3,
CP_BT470M,
CP_BT470BG,
CP_SMPTE170M,
CP_SMPTE240M,
CP_FILM,
CP_BT2020,
CP_NUM_ENUM
} EColorPrimaries;
typedef enum {
TRC_RESERVED0,
TRC_BT709,
TRC_UNDEF,
TRC_RESERVED3,
TRC_BT470M,
TRC_BT470BG,
TRC_SMPTE170M,
TRC_SMPTE240M,
TRC_LINEAR,
TRC_LOG100,
TRC_LOG316,
TRC_IEC61966_2_4,
TRC_BT1361E,
TRC_IEC61966_2_1,
TRC_BT2020_10,
TRC_BT2020_12,
TRC_NUM_ENUM
} ETransferCharacteristics;
typedef enum {
CM_GBR,
CM_BT709,
CM_UNDEF,
CM_RESERVED3,
CM_FCC,
CM_BT470BG,
CM_SMPTE170M,
CM_SMPTE240M,
CM_YCGCO,
CM_BT2020NC,
CM_BT2020C,
CM_NUM_ENUM
} EColorMatrix;
typedef enum {
ASP_UNSPECIFIED = 0,
ASP_1x1 = 1,
ASP_12x11 = 2,
ASP_10x11 = 3,
ASP_16x11 = 4,
ASP_40x33 = 5,
ASP_24x11 = 6,
ASP_20x11 = 7,
ASP_32x11 = 8,
ASP_80x33 = 9,
ASP_18x11 = 10,
ASP_15x11 = 11,
ASP_64x33 = 12,
ASP_160x99 = 13,
ASP_EXT_SAR = 255
} ESampleAspectRatio;
typedef struct {
int iVideoWidth; int iVideoHeight; float fFrameRate; int iSpatialBitrate; int iMaxSpatialBitrate; EProfileIdc uiProfileIdc; ELevelIdc uiLevelIdc; int iDLayerQp;
SSliceArgument sSliceArgument;
bool bVideoSignalTypePresent; unsigned char
uiVideoFormat; bool bFullRange; bool bColorDescriptionPresent; unsigned char
uiColorPrimaries; unsigned char
uiTransferCharacteristics; unsigned char
uiColorMatrix;
bool bAspectRatioPresent; ESampleAspectRatio eAspectRatio; unsigned short sAspectRatioExtWidth; unsigned short sAspectRatioExtHeight;
} SSpatialLayerConfig;
typedef enum {
CAMERA_VIDEO_REAL_TIME, SCREEN_CONTENT_REAL_TIME, CAMERA_VIDEO_NON_REAL_TIME,
SCREEN_CONTENT_NON_REAL_TIME,
INPUT_CONTENT_TYPE_ALL,
} EUsageType;
typedef enum {
LOW_COMPLEXITY = 0, MEDIUM_COMPLEXITY, HIGH_COMPLEXITY } ECOMPLEXITY_MODE;
typedef enum {
CONSTANT_ID = 0, INCREASING_ID = 0x01, SPS_LISTING = 0x02, SPS_LISTING_AND_PPS_INCREASING = 0x03,
SPS_PPS_LISTING = 0x06,
} EParameterSetStrategy;
typedef struct TagEncParamBase {
EUsageType
iUsageType;
int iPicWidth; int iPicHeight; int iTargetBitrate; RC_MODES iRCMode; float fMaxFrameRate;
} SEncParamBase, *PEncParamBase;
typedef struct TagEncParamExt {
EUsageType
iUsageType;
int iPicWidth; int iPicHeight; int iTargetBitrate; RC_MODES iRCMode; float fMaxFrameRate;
int iTemporalLayerNum; int iSpatialLayerNum; SSpatialLayerConfig sSpatialLayers[MAX_SPATIAL_LAYER_NUM];
ECOMPLEXITY_MODE iComplexityMode;
unsigned int uiIntraPeriod; int iNumRefFrame; EParameterSetStrategy
eSpsPpsIdStrategy; bool bPrefixNalAddingCtrl; bool bEnableSSEI; bool bSimulcastAVC; int iPaddingFlag; int iEntropyCodingModeFlag;
bool bEnableFrameSkip; int iMaxBitrate; int iMaxQp; int iMinQp; unsigned int uiMaxNalSize;
bool bEnableLongTermReference; int iLTRRefNum; unsigned int iLtrMarkPeriod;
unsigned short
iMultipleThreadIdc; bool bUseLoadBalancing;
int iLoopFilterDisableIdc; int iLoopFilterAlphaC0Offset; int iLoopFilterBetaOffset;
bool bEnableDenoise; bool bEnableBackgroundDetection; bool bEnableAdaptiveQuant; bool bEnableFrameCroppingFlag; bool bEnableSceneChangeDetect;
bool bIsLosslessLink; bool bFixRCOverShoot; int iIdrBitrateRatio; bool bPsnrY; bool bPsnrU; bool bPsnrV; } SEncParamExt;
typedef struct {
unsigned int size; VIDEO_BITSTREAM_TYPE eVideoBsType; } SVideoProperty;
typedef struct TagSVCDecodingParam {
char* pFileNameRestructed;
unsigned int uiCpuLoad; unsigned char uiTargetDqLayer;
ERROR_CON_IDC eEcActiveIdc; bool bParseOnly;
SVideoProperty sVideoProperty; } SDecodingParam, *PDecodingParam;
typedef struct {
unsigned char uiTemporalId;
unsigned char uiSpatialId;
unsigned char uiQualityId;
EVideoFrameType eFrameType;
unsigned char uiLayerType;
int iSubSeqId; int iNalCount; int* pNalLengthInByte; unsigned char* pBsBuf; float rPsnr[3]; } SLayerBSInfo, *PLayerBSInfo;
typedef struct {
int iLayerNum;
SLayerBSInfo sLayerInfo[MAX_LAYER_NUM_OF_FRAME];
EVideoFrameType eFrameType;
int iFrameSizeInBytes;
long long uiTimeStamp;
} SFrameBSInfo, *PFrameBSInfo;
typedef struct Source_Picture_s {
int iColorFormat; int iStride[4]; unsigned char* pData[4]; int iPicWidth; int iPicHeight; long long uiTimeStamp; bool bPsnrY; bool bPsnrU; bool bPsnrV; } SSourcePicture;
typedef struct TagBitrateInfo {
LAYER_NUM iLayer;
int iBitrate; } SBitrateInfo;
typedef struct TagDumpLayer {
int iLayer;
char* pFileName;
} SDumpLayer;
typedef struct TagProfileInfo {
int iLayer;
EProfileIdc uiProfileIdc; } SProfileInfo;
typedef struct TagLevelInfo {
int iLayer;
ELevelIdc uiLevelIdc; } SLevelInfo;
typedef struct TagDeliveryStatus {
bool bDeliveryFlag; int iDropFrameType; int iDropFrameSize; } SDeliveryStatus;
typedef struct TagDecoderCapability {
int iProfileIdc; int iProfileIop; int iLevelIdc; int iMaxMbps; int iMaxFs; int iMaxCpb; int iMaxDpb; int iMaxBr; bool bRedPicCap; } SDecoderCapability;
typedef struct TagParserBsInfo {
int iNalNum; int* pNalLenInByte; unsigned char* pDstBuff; int iSpsWidthInPixel; int iSpsHeightInPixel; unsigned long long uiInBsTimeStamp; unsigned long long uiOutBsTimeStamp; } SParserBsInfo, *PParserBsInfo;
typedef struct TagVideoEncoderStatistics {
unsigned int uiWidth; unsigned int uiHeight; float fAverageFrameSpeedInMs;
float fAverageFrameRate; float fLatestFrameRate; unsigned int uiBitRate; unsigned int uiAverageFrameQP;
unsigned int uiInputFrameCount; unsigned int uiSkippedFrameCount;
unsigned int uiResolutionChangeTimes; unsigned int uiIDRReqNum; unsigned int uiIDRSentNum; unsigned int uiLTRSentNum;
long long iStatisticsTs;
unsigned long iTotalEncodedBytes;
unsigned long iLastStatisticsBytes;
unsigned long iLastStatisticsFrameCount;
} SEncoderStatistics;
typedef struct TagVideoDecoderStatistics {
unsigned int uiWidth; unsigned int uiHeight; float fAverageFrameSpeedInMs; float fActualAverageFrameSpeedInMs; unsigned int uiDecodedFrameCount; unsigned int uiResolutionChangeTimes; unsigned int uiIDRCorrectNum; unsigned int
uiAvgEcRatio; unsigned int
uiAvgEcPropRatio; unsigned int uiEcIDRNum; unsigned int uiEcFrameNum; unsigned int uiIDRLostNum; unsigned int
uiFreezingIDRNum; unsigned int uiFreezingNonIDRNum; int iAvgLumaQp; int iSpsReportErrorNum; int iSubSpsReportErrorNum; int iPpsReportErrorNum; int iSpsNoExistNalNum; int iSubSpsNoExistNalNum; int iPpsNoExistNalNum;
unsigned int uiProfile; unsigned int uiLevel;
int iCurrentActiveSpsId; int iCurrentActivePpsId;
unsigned int iStatisticsLogInterval; } SDecoderStatistics;
typedef struct TagVuiSarInfo {
unsigned int uiSarWidth; unsigned int uiSarHeight; bool bOverscanAppropriateFlag; } SVuiSarInfo, *PVuiSarInfo;
#endif