/*@@@+++@@@@******************************************************************

 Microsoft Skype Engineering
 Copyright (C) 2014 Microsoft Corporation.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.

*@@@---@@@@******************************************************************/


#ifndef __OMX_SKYPE_VIDEOEXTENSIONS_H__
#define __OMX_SKYPE_VIDEOEXTENSIONS_H__

#ifdef __cplusplus
extern "C"
{
#endif

#include <OMX_Core.h>

#pragma pack(push, 1)


typedef enum OMX_SKYPE_VIDEO_SliceControlMode
{
    OMX_SKYPE_VIDEO_SliceControlModeNone        = 0,
    OMX_SKYPE_VIDEO_SliceControlModeMB          = 1,
    OMX_SKYPE_VIDEO_SliceControlModeByte        = 2,
    OMX_SKYPE_VIDEO_SliceControlModMBRow        = 3,
} OMX_SKYPE_VIDEO_SliceControlMode;


typedef enum OMX_SKYPE_VIDEO_HierarType
{
    OMX_SKYPE_VIDEO_HierarType_P                = 0x01,
    OMX_SKYPE_VIDEO_HierarType_B                = 0x02,
} OMX_SKYPE_VIDEO_HIERAR_HierarType;

typedef enum OMX_VIDEO_EXTENSION_AVCPROFILETYPE
{
    OMX_VIDEO_EXT_AVCProfileConstrainedBaseline = 0x01,
    OMX_VIDEO_EXT_AVCProfileConstrainedHigh     = 0x02,
} OMX_VIDEO_EXTENSION_AVCPROFILETYPE;

typedef struct OMX_SKYPE_VIDEO_ENCODERPARAMS {
    OMX_BOOL bLowLatency;
    OMX_BOOL bUseExtendedProfile;
    OMX_BOOL bSequenceHeaderWithIDR;
    OMX_VIDEO_EXTENSION_AVCPROFILETYPE eProfile;
    OMX_U32 nLTRFrames;
    OMX_SKYPE_VIDEO_HierarType eHierarType;
    OMX_U32 nMaxTemporalLayerCount;
    OMX_SKYPE_VIDEO_SliceControlMode eSliceControlMode;
    OMX_U32 nSarIndex;
    OMX_U32 nSarWidth;
    OMX_U32 nSarHeight;
} OMX_SKYPE_VIDEO_ENCODERPARAMS;

typedef struct OMX_SKYPE_VIDEO_PARAM_ENCODERSETTING {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_SKYPE_VIDEO_ENCODERPARAMS stEncParam;
} OMX_SKYPE_VIDEO_PARAM_ENCODESETTING;

typedef struct OMX_SKYPE_VIDEO_ENCODERCAP {
    OMX_BOOL bLowLatency;
    OMX_U32 nMaxFrameWidth;
    OMX_U32 nMaxFrameHeight;
    OMX_U32 nMaxInstances;
    OMX_U32 nMaxTemporaLayerCount;
    OMX_U32 nMaxRefFrames;
    OMX_U32 nMaxLTRFrames;
    OMX_VIDEO_AVCLEVELTYPE nMaxLevel;
    OMX_U32 nSliceControlModesBM;
    OMX_U32 nMaxMacroblockProcessingRate;
    OMX_U32 xMinScaleFactor;
} OMX_SKYPE_VIDEO_ENCODERCAP;

typedef struct OMX_SKYPE_VIDEO_PARAM_ENCODERCAP {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_SKYPE_VIDEO_ENCODERCAP stEncCap;
} OMX_SKYPE_VIDEO_PARAM_ENCODERCAP;

typedef struct OMX_SKYPE_VIDEO_DECODERCAP {
    OMX_BOOL bLowLatency;
    OMX_U32 nMaxFrameWidth;
    OMX_U32 nMaxFrameHeight;
    OMX_U32 nMaxInstances;
    OMX_VIDEO_AVCLEVELTYPE nMaxLevel;
    OMX_U32 nMaxMacroblockProcessingRate;
} OMX_SKYPE_VIDEO_DECODERCAP;

typedef struct OMX_SKYPE_VIDEO_PARAM_DECODERCAP {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_SKYPE_VIDEO_DECODERCAP stDecoderCap;
} OMX_SKYPE_VIDEO_PARAM_DECODERCAP;

typedef struct OMX_QCOM_VIDEO_CONFIG_QP OMX_SKYPE_VIDEO_CONFIG_QP;

typedef struct OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID{
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nPID;
} OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID;

typedef struct OMX_SKYPE_VIDEO_PARAM_DRIVERVER {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U64 nDriverVersion;
} OMX_SKYPE_VIDEO_PARAM_DRIVERVER;

typedef enum OMX_SKYPE_VIDEO_DownScaleFactor
{
    OMX_SKYPE_VIDEO_DownScaleFactor_1_1         = 0,
    OMX_SKYPE_VIDEO_DownScaleFactor_Equal_AR    = 1,
    OMX_SKYPE_VIDEO_DownScaleFactor_Any         = 2,
} OMX_SKYPE_VIDEO_DownScaleFactor;

#pragma pack(pop)

#ifdef __cplusplus
}
#endif

#endif
