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