Home | History | Annotate | Download | only in inc
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 /**
     17  ************************************************************************
     18  * @fil        M4AD_Common.h
     19  * @brief    Audio Shell Decoder common interface declaration
     20  * @note    This file declares the common interfaces that audio decoder shells must implement
     21  ************************************************************************
     22 */
     23 #ifndef __M4AD_COMMON_H__
     24 #define __M4AD_COMMON_H__
     25 
     26 #include "M4OSA_Types.h"
     27 #include "M4OSA_Error.h"
     28 #include "M4OSA_OptionID.h"
     29 #include "M4OSA_CoreID.h"
     30 #include "M4DA_Types.h"
     31 #include "M4TOOL_VersionInfo.h"
     32 
     33 #ifdef __cplusplus
     34 extern "C" {
     35 #endif
     36 
     37 
     38 typedef M4OSA_Void* M4AD_Context;
     39 
     40 /**
     41  ************************************************************************
     42  * enum     M4AD_OptionID
     43  * @brief    This enum defines the Audio decoder options.
     44  * @note    These options can be read from or written to a decoder via
     45  *            M4AD_getOption_fct/M4AD_setOption_fct
     46  ************************************************************************
     47 */
     48 typedef enum
     49 {
     50     /**
     51      * Set the flag of presence of protection */
     52     M4AD_kOptionID_ProtectionAbsent = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4DECODER_AUDIO, 0x01),
     53 
     54     /**
     55      * Set the number of frames per bloc */
     56     M4AD_kOptionID_NbFramePerBloc    = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4DECODER_AUDIO, 0x02),
     57 
     58     /**
     59      * Set the AAC decoder user parameters */
     60     M4AD_kOptionID_UserParam        = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4DECODER_AUDIO, 0x03),
     61 
     62 
     63     /**
     64      * Get the AAC steam type */
     65     M4AD_kOptionID_StreamType        = M4OSA_OPTION_ID_CREATE(M4_READ , M4DECODER_AUDIO, 0x10),
     66 
     67     /**
     68      * Get the number of used bytes in the latest decode
     69      (used only when decoding AAC from ADIF file) */
     70     M4AD_kOptionID_UsedBytes        = M4OSA_OPTION_ID_CREATE(M4_READ , M4DECODER_AUDIO, 0x11),
     71 
     72     /* Reader Interface */
     73     M4AD_kOptionID_3gpReaderInterface = M4OSA_OPTION_ID_CREATE(M4_READ, M4DECODER_AUDIO, 0x012),
     74 
     75     /* Audio Access Unit */
     76     M4AD_kOptionID_AudioAU = M4OSA_OPTION_ID_CREATE(M4_READ, M4DECODER_AUDIO, 0x13),
     77 
     78     /* Reader error code */
     79     M4AD_kOptionID_GetAudioAUErrCode = M4OSA_OPTION_ID_CREATE(M4_READ, M4DECODER_AUDIO, 0x14),
     80 
     81     /* Number of channels */
     82     M4AD_kOptionID_AudioNbChannels = M4OSA_OPTION_ID_CREATE(M4_READ, M4DECODER_AUDIO, 0x15),
     83 
     84     /* Sampling frequency */
     85     M4AD_kOptionID_AudioSampFrequency = M4OSA_OPTION_ID_CREATE(M4_READ, M4DECODER_AUDIO, 0x16),
     86 
     87     /* Audio AU CTS */
     88     M4AD_kOptionID_AuCTS = M4OSA_OPTION_ID_CREATE(M4_READ, M4DECODER_AUDIO, 0x17)
     89 
     90 } M4AD_OptionID;
     91 
     92 
     93 
     94 typedef enum
     95 {
     96     M4_kUnknown = 0,    /* Unknown stream type */
     97     M4_kAAC,            /* M4_kAAC_MAIN or M4_kAAC_LC or M4_kAAC_SSR or M4_kAAC_LTP    */
     98     M4_kAACplus,        /* Decoder type is AAC plus */
     99     M4_keAACplus        /* Decoder type is enhanced AAC plus */
    100 } M4_AACType;
    101 
    102 /**
    103  ************************************************************************
    104  * enum     M4AD_Type
    105  * @brief    This enum defines the audio types used to create decoders
    106  * @note    This enum is used internally by the VPS to identify a currently supported
    107  *            audio decoder interface. Each decoder is registered with one of this type associated.
    108  *            When a decoder instance is needed, this type is used to identify
    109  *            and retrieve its interface.
    110  ************************************************************************
    111 */
    112 typedef enum
    113 {
    114     M4AD_kTypeAMRNB = 0,
    115     M4AD_kTypeAMRWB,
    116     M4AD_kTypeAAC,
    117     M4AD_kTypeMP3,
    118     M4AD_kTypePCM,
    119     M4AD_kTypeBBMusicEngine,
    120     M4AD_kTypeWMA,
    121     M4AD_kTypeRMA,
    122     M4AD_kTypeADPCM,
    123     M4AD_kType_NB  /* number of decoders, keep it as last enum entry */
    124 
    125 } M4AD_Type ;
    126 
    127 
    128 
    129 /**
    130  ************************************************************************
    131  * structure    M4AD_Buffer
    132  * @brief        Structure to describe a buffer
    133  ************************************************************************
    134 */
    135 typedef struct
    136 {
    137     M4OSA_MemAddr8    m_dataAddress;
    138     M4OSA_UInt32    m_bufferSize;
    139     int64_t         m_timeStampUs;
    140 } M4AD_Buffer;
    141 
    142 /**
    143  ************************************************************************
    144  * @brief    Creates an instance of the decoder
    145  * @note    Allocates the context
    146  *
    147  * @param    pContext:        (OUT)    Context of the decoder
    148  * @param    pStreamHandler:    (IN)    Pointer to an audio stream description
    149  * @param    pUserData:        (IN)    Pointer to User data
    150  *
    151  * @return    M4NO_ERROR                 there is no error
    152  * @return  M4ERR_STATE             State automaton is not applied
    153  * @return    M4ERR_ALLOC                a memory allocation has failed
    154  * @return    M4ERR_PARAMETER            at least one parameter is not properly set (in DEBUG only)
    155  ************************************************************************
    156 */
    157 
    158 typedef M4OSA_ERR  (M4AD_create_fct)(M4AD_Context *pContext,
    159                                      M4_AudioStreamHandler *pStreamHandler, void* pUserData);
    160 
    161 
    162 /**
    163  ************************************************************************
    164  * @brief    Destroys the instance of the decoder
    165  * @note    After this call the context is invalid
    166  *
    167  * @param    context:    (IN)    Context of the decoder
    168  *
    169  * @return    M4NO_ERROR             There is no error
    170  * @return  M4ERR_PARAMETER     The context is invalid (in DEBUG only)
    171  ************************************************************************
    172 */
    173 typedef M4OSA_ERR  (M4AD_destroy_fct)    (M4AD_Context context);
    174 
    175 /**
    176  ************************************************************************
    177  * @brief   Decodes the given audio data
    178  * @note    Parses and decodes the next audio frame, from the given buffer.
    179  *            This function changes pInputBufferSize value according to the amount
    180  *            of data actually read.
    181  *
    182  * @param    context:            (IN)    Context of the decoder
    183  * @param    inputBuffer:        (IN/OUT)Input Data buffer. It contains at least one audio frame.
    184  *                                       The size of the buffer must be updated inside the
    185  *                                       function to reflect the size of the actually decoded data.
    186  *                                       (e.g. the first frame in pInputBuffer)
    187  * @param   decodedPCMBuffer:    (OUT)   Output PCM buffer (decoded data).
    188  * @param   jumping:            (IN)    M4OSA_TRUE if a jump was just done, M4OSA_FALSE otherwise.
    189  * @return    M4NO_ERROR                 there is no error
    190  * @return    M4ERR_PARAMETER            at least one parameter is not properly set
    191  ************************************************************************
    192 */
    193 typedef M4OSA_ERR  (M4AD_step_fct)    (M4AD_Context context, M4AD_Buffer *pInputBuffer,
    194                                      M4AD_Buffer *pDecodedPCMBuffer, M4OSA_Bool jumping);
    195 
    196 /**
    197  ************************************************************************
    198  * @brief    Gets the decoder version
    199  * @note    The version is given in a M4_VersionInfo structure
    200  *
    201  * @param    pValue:        (OUT)        Pointer to the version structure
    202  *
    203  * @return    M4NO_ERROR                 there is no error
    204  * @return  M4ERR_PARAMETER         The given pointer is null (in DEBUG only)
    205  ************************************************************************
    206 */
    207 typedef M4OSA_ERR  (M4AD_getVersion_fct)(M4_VersionInfo* pVersionInfo);
    208 
    209 
    210 /**
    211  ************************************************************************
    212  * @brief    This function creates the AAC core decoder according to
    213  *            the stream properties and to the options that may
    214  *            have been set using M4AD_setOption_fct
    215  * @note    Creates an instance of the AAC decoder
    216  * @note    This function is used especially by the AAC decoder
    217  *
    218  * @param    pContext:        (IN/OUT)    Context of the decoder
    219  * @param    pStreamHandler:    (IN)    Pointer to an audio stream description
    220  *
    221  * @return    M4NO_ERROR                 there is no error
    222  * @return  M4ERR_STATE             State automaton is not applied
    223  * @return    M4ERR_ALLOC                a memory allocation has failed
    224  * @return    M4ERR_PARAMETER            at least one parameter is not properly set (in DEBUG only)
    225  ************************************************************************
    226 */
    227 typedef M4OSA_ERR  (M4AD_start_fct)    (M4AD_Context pContext);
    228 
    229 /**
    230  ************************************************************************
    231  * @brief    Reset the instance of the decoder
    232  *
    233  * @param    context:    (IN)    Context of the decoder
    234  *
    235  * @return    M4NO_ERROR             There is no error
    236  * @return  M4ERR_PARAMETER     The context is invalid (in DEBUG only)
    237  ************************************************************************
    238 */
    239 typedef M4OSA_ERR  (M4AD_reset_fct)    (M4AD_Context context);
    240 
    241 
    242 /**
    243  ************************************************************************
    244  * @brief   set en option value of the audio decoder
    245  *
    246  * @param    context:        (IN)    Context of the decoder
    247  * @param    optionId:        (IN)    indicates the option to set
    248  * @param    pValue:            (IN)    pointer to structure or value (allocated by user)
    249  *                                  where option is stored
    250  * @return    M4NO_ERROR                 there is no error
    251  * @return    M4ERR_BAD_CONTEXT        provided context is not a valid one
    252  * @return    M4ERR_PARAMETER            at least one parameter is not properly set
    253  * @return    M4ERR_BAD_OPTION_ID        when the option ID is not a valid one
    254  ************************************************************************
    255 */
    256 typedef M4OSA_ERR (M4AD_setOption_fct) (M4AD_Context context,
    257                                          M4OSA_OptionID optionId, M4OSA_DataOption pValue);
    258 
    259 /**
    260  ************************************************************************
    261  * @brief   Get en option value of the audio decoder
    262  *
    263  * @param    context:        (IN)    Context of the decoder
    264  * @param    optionId:        (IN)    indicates the option to set
    265  * @param    pValue:            (OUT)    pointer to structure or value (allocated by user)
    266  *                                  where option is stored
    267  * @return    M4NO_ERROR                 there is no error
    268  * @return    M4ERR_BAD_CONTEXT        provided context is not a valid one
    269  * @return    M4ERR_PARAMETER            at least one parameter is not properly set
    270  * @return    M4ERR_BAD_OPTION_ID        when the option ID is not a valid one
    271  ************************************************************************
    272 */
    273 typedef M4OSA_ERR (M4AD_getOption_fct) (M4AD_Context context, M4OSA_OptionID optionId,
    274                                          M4OSA_DataOption pValue);
    275 /**
    276  ************************************************************************
    277  * structure    M4AD_Interface
    278  * @brief        This structure defines the generic audio decoder interface
    279  * @note        This structure stores the pointers to functions of one audio decoder type.
    280  *                The decoder type is one of the M4AD_Type
    281  ************************************************************************
    282 */
    283 typedef struct _M4AD_Interface
    284 {
    285 
    286     M4AD_create_fct*        m_pFctCreateAudioDec;
    287     M4AD_start_fct*            m_pFctStartAudioDec;
    288     M4AD_step_fct*            m_pFctStepAudioDec;
    289     M4AD_getVersion_fct*    m_pFctGetVersionAudioDec;
    290     M4AD_destroy_fct*        m_pFctDestroyAudioDec;
    291     M4AD_reset_fct*            m_pFctResetAudioDec;
    292     M4AD_setOption_fct*        m_pFctSetOptionAudioDec;
    293     M4AD_getOption_fct*        m_pFctGetOptionAudioDec;
    294 
    295 } M4AD_Interface;
    296 
    297 #ifdef __cplusplus
    298 }
    299 #endif
    300 
    301 #endif /*__M4AD_COMMON_H__*/
    302 
    303