| /*! |
| * \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__ |