/*--------------------------------------------------------------------------
Copyright (c) 2011 The Linux Foundation. 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.
    * Neither the name of The Linux Foundation nor
      the names of its contributors may be used to endorse or promote
      products derived from this software without specific prior written
      permission.

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, FITNESS FOR A PARTICULAR PURPOSE AND
NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER 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 __QOMX_FILE_FORMAT_EXTENSIONS_H__
#define __QOMX_FILE_FORMAT_EXTENSIONS_H__

/*============================================================================
*//** @file QOMX_FileFormatExtensions.h
  This header contains constants and type definitions that specify the
  extensions added to the OpenMAX Vendor specific APIs.
*//*========================================================================*/

/*============================================================================
                              Edit History

when       who     what, where, why
--------   ---     -------------------------------------------------------

============================================================================*/

//////////////////////////////////////////////////////////////////////////////
//                             Include Files
//////////////////////////////////////////////////////////////////////////////
#include "OMX_Core.h"


/* :OMX.QCOM.index.param.container.info*/
#define QOMX_QcomIndexParamContainerInfo 0x7F000009

/**<OMX.Qualcomm.index.video.param.encrypttypeconfigparameters*/
#define QOMX_FilemuxIndexEncryptionTypeConfigParameters 0x7F00000A

#define QOMX_INDEX_CONTAINER_INFO_STRING    "QOMX.Qualcomm.index.param.containerinfo"
#define OMX_QCOM_INDEX_FILE_FORMAT          "OMX.QCOM.index.config.FileFormat"
#define QOMX_INDEX_CONFIG_ENCRYPT_TYPE      "QOMX.Qualcomm.index.config.EncryptType"

/**-----------------------------------------------------------------------------
            OMX.QCOM.index.param.container.info
--------------------------------------------------------------------------------
*/

typedef enum QOMX_CONTAINER_FORMATTYPE {
    QOMX_FORMAT_RAW,
    QOMX_FORMAT_MP4,
    QOMX_FORMAT_3GP,
    QOMX_FORMAT_3G2,
    QOMX_FORMAT_AMC,
    QOMX_FORMAT_SKM,
    QOMX_FORMAT_K3G,
    QOMX_FORMAT_VOB,
    QOMX_FORMAT_AVI,
    QOMX_FORMAT_ASF,
    QOMX_FORMAT_RM ,
    QOMX_FORMAT_MPEG_ES,
    QOMX_FORMAT_DIVX,
    QOMX_FORMATMPEG_TS,
    QOMX_FORMAT_QT,
    QOMX_FORMAT_M4A,
    QOMX_FORMAT_MP3,
    QOMX_FORMAT_WAVE,
    QOMX_FORMAT_XMF,
    QOMX_FORMAT_AMR,
    QOMX_FORMAT_AAC,
    QOMX_FORMAT_EVRC,
    QOMX_FORMAT_QCP,
    QOMX_FORMAT_SMF,
    QOMX_FORMAT_OGG,
    QOMX_FORMAT_BMP,
    QOMX_FORMAT_JPG,
    QOMX_FORMAT_JPG2000
}QOMX_CONTAINER_FORMATTYPE;

typedef struct QOMX_CONTAINER_INFOTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    QOMX_CONTAINER_FORMATTYPE eFmtType;
} QOMX_CONTAINER_INFOTYPE;

typedef enum QOMX_FILEFORMATTYPE {
    QOMX_FileFormatNone, /**< no file format naming convention is followed. */
    QOMX_FileFormatDCF, /**< DCF file naming convention. */
    QOMX_FileFormatMax = 0x7FFFFFFF
} QOMX_FILEFORMATTYPE;

/** QOMX_CONFIG_FILEFORMATTYPE is used to determine how the file writer will interpret
the provided content URI and whether it will increment the index of the file name. */
typedef struct QOMX_CONFIG_FILEFORMATTYPE {
    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 */
    QOMX_FILEFORMATTYPE eFileFormat; /** file format type */
} QOMX_CONFIG_FILEFORMATTYPE;

/**The QOMX_RECORDINGSTATISTICSINTERVALTYPE structure is used to enable
IL client to indicate the interval of the statistics notification to file mux
component. Time interval will indicate the frequency(in ms) when client needs
the statistics data*/
typedef struct QOMX_RECORDINGSTATISTICSINTERVALTYPE {
    OMX_U32 nSize; /**< size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;/**< OMX specification version information */
    OMX_TICKS  interval;/**< specifies the time(milliseconds) between updates */
   }QOMX_RECORDINGSTATISTICSINTERVALTYPE;

/**QOMX_RECORDINGSTATISTICSTYPE indicates the current recording
time and space statistics of this session, which can be used by client to
identify current status of recorded data in milliseconds and bytes */
typedef struct QOMX_RECORDINGSTATISTICSTYPE {
    OMX_U32 nSize;/**< size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;/**< OMX specification version information */
    OMX_TICKS  nRecordedTime; /**  duration that we already recorded*/
    OMX_TICKS  nTimeCanRecord;/** the time we can record at the same bitrate*/
    OMX_U64   nSpaceConsumed;/** space that consumed in bytes*/
    OMX_U64  nSpaceLeft;/** space left in bytes*/
} QOMX_RECORDINGSTATISTICSTYPE;

/**QOMX_ENCRYPT_TYPE indicates the type of encryption */
typedef enum QOMX_ENCRYPT_TYPE {
    QOMX_ENCRYPT_TYPE_HDCP,
    QOMX_ENCRYPT_TYPE_INVALID
}QOMX_ENCRYPT_TYPE;

/**QOMX_ENCRYPTIONTYPE indicates the encrypt type */
typedef struct QOMX_ENCRYPTIONTYPE {
    OMX_U32            nSize;  /**< size of the structure in bytes */
    OMX_VERSIONTYPE    nVersion; /**< OMX specification version information */
    OMX_BOOL           nStreamEncrypted;  /** stream is encrypted or not */
    QOMX_ENCRYPT_TYPE  nType;  /** type of Encryption */
    OMX_U32            nEncryptVersion; /** Encrypt version */
} QOMX_ENCRYPTIONTYPE;
#endif /*__QOMX_FILE_FORMAT_EXTENSIONS_H__*/
