#ifndef MP4V2_ISMA_H
#define MP4V2_ISMA_H

/**************************************************************************//**
 *
 *  @defgroup mp4_isma MP4v2 ISMA (Internet Streaming Media Alliance)
 *  @{
 *
 *****************************************************************************/

/** something */
typedef struct mp4v2_ismacryp_session_params {
    uint32_t    scheme_type;
    uint16_t    scheme_version;
    uint8_t     key_ind_len;
    uint8_t     iv_len;
    uint8_t     selective_enc;
    const char* kms_uri;
} mp4v2_ismacrypParams;

/*
 * API to initialize ismacryp properties to sensible defaults
 * if input param is null then mallocs a params struct
 */

MP4V2_EXPORT
mp4v2_ismacrypParams* MP4DefaultISMACrypParams( mp4v2_ismacrypParams* ptr );

MP4V2_EXPORT
MP4TrackId MP4AddEncAudioTrack(
    MP4FileHandle         hFile,
    uint32_t              timeScale,
    MP4Duration           sampleDuration,
    mp4v2_ismacrypParams* icPp,
    uint8_t               audioType DEFAULT(MP4_MPEG4_AUDIO_TYPE) );

MP4V2_EXPORT
MP4TrackId MP4AddEncVideoTrack(
    MP4FileHandle         hFile,
    uint32_t              timeScale,
    MP4Duration           sampleDuration,
    uint16_t              width,
    uint16_t              height,
    mp4v2_ismacrypParams* icPp,
    uint8_t               videoType DEFAULT(MP4_MPEG4_VIDEO_TYPE),
    const char*           oFormat DEFAULT(NULL) );

MP4V2_EXPORT
MP4TrackId MP4AddEncH264VideoTrack(
    MP4FileHandle         dstFile,
    uint32_t              timeScale,
    MP4Duration           sampleDuration,
    uint16_t              width,
    uint16_t              height,
    MP4FileHandle         srcFile,
    MP4TrackId            srcTrackId,
    mp4v2_ismacrypParams* icPp );

MP4V2_EXPORT
MP4TrackId MP4EncAndCloneTrack(
    MP4FileHandle         srcFile,
    MP4TrackId            srcTrackId,
    mp4v2_ismacrypParams* icPp,
    MP4FileHandle         dstFile DEFAULT(MP4_INVALID_FILE_HANDLE),
    MP4TrackId            dstHintTrackReferenceTrack DEFAULT(MP4_INVALID_TRACK_ID) );

MP4V2_EXPORT
MP4TrackId MP4EncAndCopyTrack(
    MP4FileHandle         srcFile,
    MP4TrackId            srcTrackId,
    mp4v2_ismacrypParams* icPp,
    encryptFunc_t         encfcnp,
    uint32_t              encfcnparam1,
    MP4FileHandle         dstFile DEFAULT(MP4_INVALID_FILE_HANDLE),
    bool                  applyEdits DEFAULT(false),
    MP4TrackId            dstHintTrackReferenceTrack DEFAULT(MP4_INVALID_TRACK_ID) );

MP4V2_EXPORT
bool MP4MakeIsmaCompliant(
    const char* fileName,
    bool        addIsmaComplianceSdp DEFAULT(true) );

MP4V2_EXPORT
char* MP4MakeIsmaSdpIod(
    uint8_t  videoProfile,
    uint32_t videoBitrate,
    uint8_t* videoConfig,
    uint32_t videoConfigLength,
    uint8_t  audioProfile,
    uint32_t audioBitrate,
    uint8_t* audioConfig,
    uint32_t audioConfigLength );

/** @} ***********************************************************************/

#endif /* MP4V2_ISMA_H */
