216 lines · 7.5 KB · C
RawDownload
/*! * \copy *     Copyright (c)  2013, Cisco Systems *     All rights reserved. * *     Redistribution and use in source and binary forms, with or without *     modification, are permitted provided that the following conditions *     are met: * *        * Redistributions of source code must retain the above copyright *          notice, this list of conditions and the following disclaimer. * *        * Redistributions in binary form must reproduce the above copyright *          notice, this list of conditions and the following disclaimer in *          the documentation and/or other materials provided with the *          distribution. * *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *     FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *     COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, *     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER *     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT *     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN *     ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *     POSSIBILITY OF SUCH DAMAGE. * */ #ifndef WELS_VIDEO_CODEC_DEFINITION_H__#define WELS_VIDEO_CODEC_DEFINITION_H__ /**  * @file  codec_def.h*/ /*** @brief Enumerate the type of video format*/typedef enum {  videoFormatRGB        = 1,             ///< rgb color formats  videoFormatRGBA       = 2,  videoFormatRGB555     = 3,  videoFormatRGB565     = 4,  videoFormatBGR        = 5,  videoFormatBGRA       = 6,  videoFormatABGR       = 7,  videoFormatARGB       = 8,   videoFormatYUY2       = 20,            ///< yuv color formats  videoFormatYVYU       = 21,  videoFormatUYVY       = 22,  videoFormatI420       = 23,            ///< the same as IYUV  videoFormatYV12       = 24,  videoFormatInternal   = 25,            ///< only used in SVC decoder testbed   videoFormatNV12       = 26,            ///< new format for output by DXVA decoding   videoFormatVFlip      = 0x80000000} EVideoFormatType; /*** @brief Enumerate  video frame type*/typedef enum {  videoFrameTypeInvalid,    ///< encoder not ready or parameters are invalidate  videoFrameTypeIDR,        ///< IDR frame in H.264  videoFrameTypeI,          ///< I frame type  videoFrameTypeP,          ///< P frame type  videoFrameTypeSkip,       ///< skip the frame based encoder kernel  videoFrameTypeIPMixed     ///< a frame where I and P slices are mixing, not supported yet} EVideoFrameType; /*** @brief Enumerate  return type*/typedef enum {  cmResultSuccess,          ///< successful  cmInitParaError,          ///< parameters are invalid  cmUnknownReason,  cmMallocMemeError,        ///< malloc a memory error  cmInitExpected,           ///< initial action is expected  cmUnsupportedData} CM_RETURN; /*** @brief Enumulate the nal unit type*/enum ENalUnitType {  NAL_UNKNOWN     = 0,  NAL_SLICE       = 1,  NAL_SLICE_DPA   = 2,  NAL_SLICE_DPB   = 3,  NAL_SLICE_DPC   = 4,  NAL_SLICE_IDR   = 5,      ///< ref_idc != 0  NAL_SEI         = 6,      ///< ref_idc == 0  NAL_SPS         = 7,  NAL_PPS         = 8                    ///< ref_idc == 0 for 6,9,10,11,12}; /*** @brief NRI: eNalRefIdc*/enum ENalPriority {  NAL_PRIORITY_DISPOSABLE = 0,  NAL_PRIORITY_LOW        = 1,  NAL_PRIORITY_HIGH       = 2,  NAL_PRIORITY_HIGHEST    = 3}; #define IS_PARAMETER_SET_NAL(eNalRefIdc, eNalType) \( (eNalRefIdc == NAL_PRIORITY_HIGHEST) && (eNalType == (NAL_SPS|NAL_PPS) || eNalType == NAL_SPS) ) #define IS_IDR_NAL(eNalRefIdc, eNalType) \( (eNalRefIdc == NAL_PRIORITY_HIGHEST) && (eNalType == NAL_SLICE_IDR) ) #define FRAME_NUM_PARAM_SET     (-1)#define FRAME_NUM_IDR           0 /** * @brief eDeblockingIdc */enum {  DEBLOCKING_IDC_0 = 0,  DEBLOCKING_IDC_1 = 1,  DEBLOCKING_IDC_2 = 2};#define DEBLOCKING_OFFSET (6)#define DEBLOCKING_OFFSET_MINUS (-6) /* Error Tools definition */typedef unsigned short ERR_TOOL; /** @brief to do*/enum {  ET_NONE = 0x00,           ///< NONE Error Tools  ET_IP_SCALE = 0x01,       ///< IP Scalable  ET_FMO = 0x02,            ///< Flexible Macroblock Ordering  ET_IR_R1 = 0x04,          ///< Intra Refresh in predifined 2% MB  ET_IR_R2 = 0x08,          ///< Intra Refresh in predifined 5% MB  ET_IR_R3 = 0x10,          ///< Intra Refresh in predifined 10% MB  ET_FEC_HALF = 0x20,       ///< Forward Error Correction in 50% redundency mode  ET_FEC_FULL = 0x40,       ///< Forward Error Correction in 100% redundency mode  ET_RFS = 0x80             ///< Reference Frame Selection}; /*** @brief Information of coded Slice(=NAL)(s)*/typedef struct SliceInformation {  unsigned char* pBufferOfSlices;    ///< base buffer of coded slice(s)  int            iCodedSliceCount;   ///< number of coded slices  unsigned int*  pLengthOfSlices;    ///< array of slices length accordingly by number of slice  int            iFecType;           ///< FEC type[0, 50%FEC, 100%FEC]  unsigned char  uiSliceIdx;         ///< index of slice in frame [FMO: 0,..,uiSliceCount-1; No FMO: 0]  unsigned char  uiSliceCount;       ///< count number of slice in frame [FMO: 2-8; No FMO: 1]  char           iFrameIndex;        ///< index of frame[-1, .., idr_interval-1]  unsigned char  uiNalRefIdc;        ///< NRI, priority level of slice(NAL)  unsigned char  uiNalType;          ///< NAL type  unsigned char  uiContainingFinalNal;              ///< whether final NAL is involved in buffer of coded slices, flag used in Pause feature in T27} SliceInfo, *PSliceInfo; /*** @brief thresholds of the initial, maximal and minimal rate*/typedef struct {  int   iWidth;                   ///< frame width  int   iHeight;                  ///< frame height  int   iThresholdOfInitRate;     ///< threshold of initial rate  int   iThresholdOfMaxRate;      ///< threshold of maximal rate  int   iThresholdOfMinRate;      ///< threshold of minimal rate  int   iMinThresholdFrameRate;   ///< min frame rate min  int   iSkipFrameRate;           ///< skip to frame rate min  int   iSkipFrameStep;           ///< how many frames to skip} SRateThresholds, *PRateThresholds; /*** @brief  Structure for decoder memery*/typedef struct TagSysMemBuffer {  int iWidth;                    ///< width of decoded pic for display  int iHeight;                   ///< height of decoded pic for display  int iFormat;                   ///< type is "EVideoFormatType"  int iStride[2];                ///< stride of 2 component} SSysMEMBuffer; /*** @brief  Buffer info*/typedef struct TagBufferInfo {  int iBufferStatus;             ///< 0: one frame data is not ready; 1: one frame data is ready  unsigned long long uiInBsTimeStamp;     ///< input BS timestamp  unsigned long long uiOutYuvTimeStamp;     ///< output YUV timestamp, when bufferstatus is 1  union {    SSysMEMBuffer sSystemBuffer; ///<  memory info for one picture  } UsrData;                     ///<  output buffer info  unsigned char* pDst[3];  //point to picture YUV data} SBufferInfo;  /*** @brief In a GOP, multiple of the key frame number, derived from*        the number of layers(index or array below)*/static const char kiKeyNumMultiple[] = {  1, 1, 2, 4, 8, 16,}; #endif//WELS_VIDEO_CODEC_DEFINITION_H__

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