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