omxil/omxilapi/shai/OMX_Symbian_VideoExt.h
author Jeremy Murray-Wakefield <jeremy.murray-wakefield@nokia.com>
Fri, 07 May 2010 16:25:23 +0100
branchOpenMAX-IL_SHAI
changeset 16 eedf2dcd43c6
permissions -rw-r--r--
Implementation of OpenMAX-IL with SHAI

/*
  OMX_Symbian_VideoExt.h
  
  Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
  All rights reserved.

  This program and the accompanying materials are made available 
  under the terms of the Eclipse Public License v1.0 which accompanies 
  this distribution, and is available at 
  http://www.eclipse.org/legal/epl-v10.html

  Initial Contributors:
  Nokia Corporation - initial contribution.
*/

/** @file
@brief Symbian OpenMAX IL Extension Data Structures in the Video Domain.

This file contains the extension structures for the Symbian IL extensions that
pertain to video components.

@publishedDeviceAbstraction
*/

#ifndef OMX_Symbian_VideoExt_h
#define OMX_Symbian_VideoExt_h

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/* Each OMX header must include all required header files to allow the
 * header to compile without errors.  The includes below are required
 * for this header file to compile successfully 
 */
#include <OMX_Types.h>
#include <OMX_Video.h>


/** Video format extensions. */
typedef enum OMX_SYMBIAN_VIDEO_CODINGTYPE {
    OMX_SYMBIAN_VIDEO_CodingVC1 = OMX_VIDEO_CodingVendorStartUnused + 0x1,
    OMX_SYMBIAN_VIDEO_CodingVP6,
    OMX_SYMBIAN_VIDEO_CodingMax = 0x7FFFFFFF
} OMX_SYMBIAN_VIDEO_CODINGTYPE;

/** Sequence Headers.

The index specified for this structure is retrieved using 
OMX_GetExtensionIndex() with the extension string 
"OMX.Symbian.Index.Param.Video.SequenceHeader".
 */
typedef struct OMX_SYMBIAN_VIDEO_PARAM_SEQUENCEHEADERTYPE
{ 
    OMX_U32 nSize;                  /**< Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;       /**< OMX specification version information */
    OMX_U32 nPortIndex;             /**< Port that this structure applies to */
    OMX_U32 nSequenceHeaderSize;    /**< Size of the sequence header in bytes */
    OMX_U8 SequenceHeader[1];       /**< Sequence header. VOS, VO and VOL for MPEG-4. SPS and PPS for AVC */
} OMX_SYMBIAN_VIDEO_PARAM_SEQUENCEHEADERTYPE;


typedef enum OMX_SYMBIAN_VIDEO_AVCSEITYPE {
    OMX_SYMBIAN_VIDEO_AvcSeiBufferinPeriod = 0x01,
    OMX_SYMBIAN_VIDEO_AvcSeiPictureTiming = 0x02,
    OMX_SYMBIAN_VIDEO_AvcSeiPanScanRectangle = 0x04,
    OMX_SYMBIAN_VIDEO_AvcSeiFillerPayload = 0x08,
    OMX_SYMBIAN_VIDEO_AvcSeiUserDataRegisteredByITUT35 = 0x10,
    OMX_SYMBIAN_VIDEO_AvcSeiUserDataUnregistered = 0x20,
    OMX_SYMBIAN_VIDEO_AvcSeiRecoveryPoint = 0x40,
    OMX_SYMBIAN_VIDEO_AvcSeiDecReferencePictureMarkingRepetition = 0x80,
    OMX_SYMBIAN_VIDEO_AvcSeiSparePicture = 0x100,
    OMX_SYMBIAN_VIDEO_AvcSeiSceneInformation = 0x200,
    OMX_SYMBIAN_VIDEO_AvcSeiSubSequenceInformation = 0x400,
    OMX_SYMBIAN_VIDEO_AvcSeiSubSequenceLayerCharacteristics = 0x800,
    OMX_SYMBIAN_VIDEO_AvcSeiSubSequenceCharacteristics = 0x1000,
    OMX_SYMBIAN_VIDEO_AvcSeiFullFrameFreeze = 0x2000,
    OMX_SYMBIAN_VIDEO_AvcSeiFullFrameFreezeRelease = 0x4000,
    OMX_SYMBIAN_VIDEO_AvcSeiFullFrameSnaphot = 0x8000,
    OMX_SYMBIAN_VIDEO_AvcSeiProgressiveRefinementSegmentStart = 0x10000,
    OMX_SYMBIAN_VIDEO_AvcSeiProgressiveRefinementSegmentEnd = 0x20000,
    OMX_SYMBIAN_VIDEO_AvcSeiMotionContstrainedSliceGroup = 0x40000,
    OMX_SYMBIAN_VIDEO_AvcSeiFilmGrainCharacteristics = 0x80000,
    OMX_SYMBIAN_VIDEO_AvcSeiDeblockingFilterDispPreference = 0x100000,
    OMX_SYMBIAN_VIDEO_AvcSeiStereoVideoInformation = 0x200000,
    OMX_SYMBIAN_VIDEO_AvcSeiMax = 0x7FFFFFFF
} OMX_SYMBIAN_VIDEO_AVCSEITYPE;

/** SEI messages.

The index specified for this structure is retrieved using 
OMX_GetExtensionIndex() with the extension string 
"OMX.Symbian.Index.Param.Video.AVCSei".
*/
typedef struct OMX_SYMBIAN_VIDEO_PARAM_AVCSEITYPE
{
    OMX_U32 nSize;              /**< Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
    OMX_U32 nPortIndex;         /**< Port that this structure applies to */
    OMX_BOOL bEnableSEI;        /**< Enable SEI messages */
    OMX_SYMBIAN_VIDEO_AVCSEITYPE eSEI;  /**< Requested SEI messages. Several messages can be requested. */
} OMX_SYMBIAN_VIDEO_PARAM_AVCSEITYPE;

/** AVC output order.

The index specified for this structure is retrieved using 
OMX_GetExtensionIndex() with the extension string 
"OMX.Symbian.Index.Param.Video.AVCOutputOrder".
*/
typedef struct OMX_SYMBIAN_VIDEO_PARAM_AVCOUTPUTORDERTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bOutputInDisplayOrder;
} OMX_SYMBIAN_VIDEO_PARAM_AVCOUTPUTORDERTYPE;


/** Refresh mode.

The index specified for this structure is retrieved using 
OMX_GetExtensionIndex() with the extension string 
"OMX.Symbian.Index.Config.Video.RefreshMode".
*/
typedef struct OMX_SYMBIAN_VIDEO_CONFIG_REFRESHMODETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bRefreshLatestOutputFrame;
} OMX_SYMBIAN_VIDEO_CONFIG_REFRESHMODETYPE;

/** VC1 profile enum. */
typedef enum OMX_SYMBIAN_VIDEO_VC1PROFILETYPE {
    OMX_SYMBIAN_VIDEO_VC1ProfileSimple,
    OMX_SYMBIAN_VIDEO_VC1ProfileMain,
    OMX_SYMBIAN_VIDEO_VC1ProfileAdvanced,
    OMX_SYMBIAN_VIDEO_VC1ProfileMax = 0x7FFFFFFF
} OMX_SYMBIAN_VIDEO_VC1PROFILETYPE;

/** VC1 level enum. */
typedef enum OMX_SYMBIAN_VIDEO_VC1LEVELTYPE {
    OMX_SYMBIAN_VIDEO_VC1LevelLow,
    OMX_SYMBIAN_VIDEO_VC1LevelMedium,
    OMX_SYMBIAN_VIDEO_VC1LevelHigh,
    OMX_SYMBIAN_VIDEO_VC1LevelL0,
    OMX_SYMBIAN_VIDEO_VC1LevelL1,
    OMX_SYMBIAN_VIDEO_VC1LevelL2,
    OMX_SYMBIAN_VIDEO_VC1LevelL3,
    OMX_SYMBIAN_VIDEO_VC1LevelL4,
    OMX_SYMBIAN_VIDEO_VC1LevelMax = 0x7FFFFFFF
} OMX_SYMBIAN_VIDEO_VC1LEVELTYPE;

/** VC1 parameters for simple and main profiles. */
typedef struct OMX_SYMBIAN_VIDEO_VC1SIMPLEMAINPROFILETYPE {
    OMX_U32 nHRDBufferSize;
    OMX_U32 nHRDBufferRate;
    OMX_BOOL bEnableLoopFilter;
    OMX_BOOL bEnableMultiRes;
    OMX_BOOL bEnableFastUVMC;
    OMX_BOOL bEnableExtendedMV;
    OMX_U32 bDQuant;
    OMX_BOOL bEnableVSTransform;
    OMX_BOOL bEnableOverlap;
    OMX_BOOL bEnableSyncMarker;
    OMX_BOOL bEnableRangeRed;
    OMX_U32 nMaxBFrames;
    OMX_U32 bQuantizer;
} OMX_SYMBIAN_VIDEO_VC1SIMPLEMAINPROFILETYPE;

/** VC1 parameters for the advaanced profile. */
typedef struct OMX_SYMBIAN_VIDEO_VC1ADVANCEDPROFILETYPE {
    OMX_U32 nColorDifferenceFormat;
    OMX_BOOL bPostProcFlag;
    OMX_U32 nMaxCodedWidth;
    OMX_U32 nMaxCodedHeight;
    OMX_BOOL bPullDown;
    OMX_BOOL bInterlace;
    OMX_BOOL bTFCounterFlag;
    OMX_BOOL bProgressiveSegmentedFrame;
    OMX_BOOL bDisplayExtensionFlag;
    OMX_U32 nDisplayHorizontalSize;
    OMX_U32 nDisplayVerticalSize;
    OMX_BOOL bAspectRatioFlag;
    OMX_U32 nAspectRatio;
    OMX_U32 nAspectHorizontalSize;
    OMX_U32 nAspectVerticalSize;
    OMX_BOOL bFrameRateFlag;
    OMX_BOOL bFrameRateIndicator;
    OMX_U32 nFrameRateNumerator;
    OMX_U32 nFrameRateDenominator;
    OMX_U32 nFrameRateExplicit;
    OMX_BOOL bColorFormatFlag;
    OMX_U32 nColorPrimaries;
    OMX_U32 nTransferCharacteristics;
    OMX_U32 nMatrixCoefficients;
    OMX_BOOL bHRDIndicatorFlag;
    OMX_U32 nHRDNumberOfLeakyBuckets;
    OMX_U32 nHRDRateExponent;
    OMX_U32 nHRDBufferExponent;
} OMX_SYMBIAN_VIDEO_VC1ADVANCEDPROFILETYPE;

/** VC1 settings.

The index specified for this structure is retrieved using 
OMX_GetExtensionIndex() with the extension string 
"OMX.Symbian.Index.Config.Video.Vc1".
*/
typedef struct OMX_SYMBIAN_VIDEO_PARAM_VC1TYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_SYMBIAN_VIDEO_VC1PROFILETYPE eProfile;
    OMX_SYMBIAN_VIDEO_VC1LEVELTYPE eLevel;
    OMX_U32 bFrmRtQPostProc;
    OMX_U32 bBitRtQPostProc;
    OMX_BOOL bEnableFInterpFlag;
    union {
        OMX_SYMBIAN_VIDEO_VC1SIMPLEMAINPROFILETYPE simple;
        OMX_SYMBIAN_VIDEO_VC1ADVANCEDPROFILETYPE advanced;
    } profile;
} OMX_SYMBIAN_VIDEO_PARAM_VC1TYPE;

/** VP6 profile enum. */
typedef enum OMX_SYMBIAN_VIDEO_VP6PROFILETYPE {
    OMX_SYMBIAN_VIDEO_VP6ProfileSimple,
    OMX_SYMBIAN_VIDEO_VP6ProfileAdvanced,
    OMX_SYMBIAN_VIDEO_VP6ProfileHeightenedSharpness,
    OMX_SYMBIAN_VIDEO_VP6ProfileMax = 0x7FFFFFFF
} OMX_SYMBIAN_VIDEO_VP6PROFILETYPE;

/** VP6 level enum. */
typedef enum OMX_SYMBIAN_VIDEO_VP6LEVELTYPE {
    OMX_SYMBIAN_VIDEO_VP6LevelMax = 0x7FFFFFFF
} OMX_SYMBIAN_VIDEO_VP6LEVELTYPE;

/** VP6 settings.

The index specified for this structure is retrieved using 
OMX_GetExtensionIndex() with the extension string 
"OMX.Symbian.Index.Config.Video.Vc6".
*/
typedef struct OMX_SYMBIAN_VIDEO_PARAM_VP6TYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_SYMBIAN_VIDEO_VP6PROFILETYPE eProfile;
    OMX_SYMBIAN_VIDEO_VP6LEVELTYPE eLevel;
} OMX_SYMBIAN_VIDEO_PARAM_VP6TYPE;

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* OMX_Symbian_VideoExt_h */