diff options
Diffstat (limited to 'thirdparties/common/include/wels/codec_api.h')
-rw-r--r-- | thirdparties/common/include/wels/codec_api.h | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/thirdparties/common/include/wels/codec_api.h b/thirdparties/common/include/wels/codec_api.h new file mode 100644 index 0000000..6db86f5 --- /dev/null +++ b/thirdparties/common/include/wels/codec_api.h @@ -0,0 +1,206 @@ +/*! + * \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_SVC_API_H__ +#define WELS_VIDEO_CODEC_SVC_API_H__ + +#ifndef __cplusplus +#ifdef _MSC_VER +typedef unsigned char bool; +#else +#include <stdbool.h> +#endif +#endif + +#include "codec_app_def.h" +#include "codec_def.h" + +#if defined(_WIN32) || defined(__cdecl) +#define EXTAPI __cdecl +#else +#define EXTAPI +#endif + +#ifdef __cplusplus +class ISVCEncoder { + public: + /* + * return: CM_RETURN: 0 - success; otherwise - failed; + */ + virtual int EXTAPI Initialize (const SEncParamBase* pParam) = 0; + virtual int EXTAPI InitializeExt (const SEncParamExt* pParam) = 0; + + virtual int EXTAPI GetDefaultParams (SEncParamExt* pParam) = 0; + + virtual int EXTAPI Uninitialize() = 0; + + /* + * return: 0 - success; otherwise -failed; + */ + virtual int EXTAPI EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) = 0; + /* + * return: 0 - success; otherwise - failed; + */ + virtual int EXTAPI EncodeParameterSets (SFrameBSInfo* pBsInfo) = 0; + + /* + * return: 0 - success; otherwise - failed; + */ + virtual int EXTAPI PauseFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) = 0; + + /* + * return: 0 - success; otherwise - failed; + */ + virtual int EXTAPI ForceIntraFrame (bool bIDR) = 0; + + /************************************************************************ + * InDataFormat, IDRInterval, SVC Encode Param, Frame Rate, Bitrate,.. + ************************************************************************/ + /* + * return: CM_RETURN: 0 - success; otherwise - failed; + */ + virtual int EXTAPI SetOption (ENCODER_OPTION eOptionId, void* pOption) = 0; + virtual int EXTAPI GetOption (ENCODER_OPTION eOptionId, void* pOption) = 0; + virtual ~ISVCEncoder() {} +}; + +class ISVCDecoder { + public: + virtual long EXTAPI Initialize (const SDecodingParam* pParam) = 0; + virtual long EXTAPI Uninitialize() = 0; + + virtual DECODING_STATE EXTAPI DecodeFrame (const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + int* pStride, + int& iWidth, + int& iHeight) = 0; + /* + * return: 0 - success; otherwise -failed; + */ + virtual DECODING_STATE EXTAPI DecodeFrame2 (const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + SBufferInfo* pDstInfo) = 0; + + /* + * this API does not work for now!! This is for future use to support non-I420 color format output. + */ + virtual DECODING_STATE EXTAPI DecodeFrameEx (const unsigned char* pSrc, + const int iSrcLen, + unsigned char* pDst, + int iDstStride, + int& iDstLen, + int& iWidth, + int& iHeight, + int& iColorFormat) = 0; + + /************************************************************************* + * OutDataFormat, Eos Flag, EC method, ... + *************************************************************************/ + virtual long EXTAPI SetOption (DECODER_OPTION eOptionId, void* pOption) = 0; + virtual long EXTAPI GetOption (DECODER_OPTION eOptionId, void* pOption) = 0; + virtual ~ISVCDecoder() {} +}; + + +extern "C" +{ +#else + +typedef struct ISVCEncoderVtbl ISVCEncoderVtbl; +typedef const ISVCEncoderVtbl* ISVCEncoder; +struct ISVCEncoderVtbl { + +int (*Initialize) (ISVCEncoder*, const SEncParamBase* pParam); +int (*InitializeExt) (ISVCEncoder*, const SEncParamExt* pParam); + +int (*GetDefaultParams) (ISVCEncoder*, SEncParamExt* pParam); + +int (*Uninitialize) (ISVCEncoder*); + +int (*EncodeFrame) (ISVCEncoder*, const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo); +int (*EncodeParameterSets) (ISVCEncoder*, SFrameBSInfo* pBsInfo); + +int (*PauseFrame) (ISVCEncoder*, const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo); + +int (*ForceIntraFrame) (ISVCEncoder*, bool bIDR); + +int (*SetOption) (ISVCEncoder*, ENCODER_OPTION eOptionId, void* pOption); +int (*GetOption) (ISVCEncoder*, ENCODER_OPTION eOptionId, void* pOption); +}; + +typedef struct ISVCDecoderVtbl ISVCDecoderVtbl; +typedef const ISVCDecoderVtbl* ISVCDecoder; +struct ISVCDecoderVtbl { +long (*Initialize) (ISVCDecoder*, const SDecodingParam* pParam); +long (*Uninitialize) (ISVCDecoder*); + +DECODING_STATE (*DecodeFrame) (ISVCDecoder*, const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + int* pStride, + int* iWidth, + int* iHeight); + +DECODING_STATE (*DecodeFrame2) (ISVCDecoder*, const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + SBufferInfo* pDstInfo); + +DECODING_STATE (*DecodeFrameEx) (ISVCDecoder*, const unsigned char* pSrc, + const int iSrcLen, + unsigned char* pDst, + int iDstStride, + int* iDstLen, + int* iWidth, + int* iHeight, + int* iColorFormat); + +long (*SetOption) (ISVCDecoder*, DECODER_OPTION eOptionId, void* pOption); +long (*GetOption) (ISVCDecoder*, DECODER_OPTION eOptionId, void* pOption); +}; +#endif + +typedef void (*WelsTraceCallback) (void* ctx, int level, const char* string); + +int WelsCreateSVCEncoder (ISVCEncoder** ppEncoder); +void WelsDestroySVCEncoder (ISVCEncoder* pEncoder); + +long WelsCreateDecoder (ISVCDecoder** ppDecoder); +void WelsDestroyDecoder (ISVCDecoder* pDecoder); + +#ifdef __cplusplus +} +#endif + +#endif//WELS_VIDEO_CODEC_SVC_API_H__ |