1 /* 2 ** Copyright 2003-2010, VisualOn, Inc. 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 File: voAudio.h 18 19 Content: Audio types and functions 20 21 *******************************************************************************/ 22 23 #ifndef __voAudio_H__ 24 #define __voAudio_H__ 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif /* __cplusplus */ 29 30 #include "voIndex.h" 31 #include "voMem.h" 32 33 #define VO_PID_AUDIO_BASE 0x42000000 /*!< The base param ID for AUDIO codec */ 34 #define VO_PID_AUDIO_FORMAT (VO_PID_AUDIO_BASE | 0X0001) /*!< The format data of audio in track */ 35 #define VO_PID_AUDIO_SAMPLEREATE (VO_PID_AUDIO_BASE | 0X0002) /*!< The sample rate of audio */ 36 #define VO_PID_AUDIO_CHANNELS (VO_PID_AUDIO_BASE | 0X0003) /*!< The channel of audio */ 37 #define VO_PID_AUDIO_BITRATE (VO_PID_AUDIO_BASE | 0X0004) /*!< The bit rate of audio */ 38 #define VO_PID_AUDIO_CHANNELMODE (VO_PID_AUDIO_BASE | 0X0005) /*!< The channel mode of audio */ 39 40 #define VO_ERR_AUDIO_BASE 0x82000000 41 #define VO_ERR_AUDIO_UNSCHANNEL (VO_ERR_AUDIO_BASE | 0x0001) 42 #define VO_ERR_AUDIO_UNSSAMPLERATE (VO_ERR_AUDIO_BASE | 0x0002) 43 #define VO_ERR_AUDIO_UNSFEATURE (VO_ERR_AUDIO_BASE | 0x0003) 44 45 46 /** 47 *Enumeration used to define the possible audio coding formats. 48 */ 49 typedef enum VO_AUDIO_CODINGTYPE { 50 VO_AUDIO_CodingUnused = 0, /**< Placeholder value when coding is N/A */ 51 VO_AUDIO_CodingPCM, /**< Any variant of PCM coding */ 52 VO_AUDIO_CodingADPCM, /**< Any variant of ADPCM encoded data */ 53 VO_AUDIO_CodingAMRNB, /**< Any variant of AMR encoded data */ 54 VO_AUDIO_CodingAMRWB, /**< Any variant of AMR encoded data */ 55 VO_AUDIO_CodingAMRWBP, /**< Any variant of AMR encoded data */ 56 VO_AUDIO_CodingQCELP13, /**< Any variant of QCELP 13kbps encoded data */ 57 VO_AUDIO_CodingEVRC, /**< Any variant of EVRC encoded data */ 58 VO_AUDIO_CodingAAC, /**< Any variant of AAC encoded data, 0xA106 - ISO/MPEG-4 AAC, 0xFF - AAC */ 59 VO_AUDIO_CodingAC3, /**< Any variant of AC3 encoded data */ 60 VO_AUDIO_CodingFLAC, /**< Any variant of FLAC encoded data */ 61 VO_AUDIO_CodingMP1, /**< Any variant of MP1 encoded data */ 62 VO_AUDIO_CodingMP3, /**< Any variant of MP3 encoded data */ 63 VO_AUDIO_CodingOGG, /**< Any variant of OGG encoded data */ 64 VO_AUDIO_CodingWMA, /**< Any variant of WMA encoded data */ 65 VO_AUDIO_CodingRA, /**< Any variant of RA encoded data */ 66 VO_AUDIO_CodingMIDI, /**< Any variant of MIDI encoded data */ 67 VO_AUDIO_CodingDRA, /**< Any variant of dra encoded data */ 68 VO_AUDIO_CodingG729, /**< Any variant of dra encoded data */ 69 VO_AUDIO_Coding_MAX = VO_MAX_ENUM_VALUE 70 } VO_AUDIO_CODINGTYPE; 71 72 /*! 73 * the channel type value 74 */ 75 typedef enum { 76 VO_CHANNEL_CENTER = 1, /*!<center channel*/ 77 VO_CHANNEL_FRONT_LEFT = 1<<1, /*!<front left channel*/ 78 VO_CHANNEL_FRONT_RIGHT = 1<<2, /*!<front right channel*/ 79 VO_CHANNEL_SIDE_LEFT = 1<<3, /*!<side left channel*/ 80 VO_CHANNEL_SIDE_RIGHT = 1<<4, /*!<side right channel*/ 81 VO_CHANNEL_BACK_LEFT = 1<<5, /*!<back left channel*/ 82 VO_CHANNEL_BACK_RIGHT = 1<<6, /*!<back right channel*/ 83 VO_CHANNEL_BACK_CENTER = 1<<7, /*!<back center channel*/ 84 VO_CHANNEL_LFE_BASS = 1<<8, /*!<low-frequency effects bass channel*/ 85 VO_CHANNEL_ALL = 0xffff,/*!<[default] include all channels */ 86 VO_CHANNEL_MAX = VO_MAX_ENUM_VALUE 87 } VO_AUDIO_CHANNELTYPE; 88 89 /** 90 * General audio format info 91 */ 92 typedef struct 93 { 94 VO_S32 SampleRate; /*!< Sample rate */ 95 VO_S32 Channels; /*!< Channel count */ 96 VO_S32 SampleBits; /*!< Bits per sample */ 97 } VO_AUDIO_FORMAT; 98 99 /** 100 * General audio output info 101 */ 102 typedef struct 103 { 104 VO_AUDIO_FORMAT Format; /*!< Sample rate */ 105 VO_U32 InputUsed; /*!< Channel count */ 106 VO_U32 Resever; /*!< Resevered */ 107 } VO_AUDIO_OUTPUTINFO; 108 109 /** 110 * General audio codec function set 111 */ 112 typedef struct VO_AUDIO_CODECAPI 113 { 114 /** 115 * Init the audio codec module and return codec handle 116 * \param phCodec [OUT] Return the video codec handle 117 * \param vType [IN] The codec type if the module support multi codec. 118 * \param pUserData [IN] The init param. It is either a memory operator or an allocated memory 119 * \retval VO_ERR_NONE Succeeded. 120 */ 121 VO_U32 (VO_API * Init) (VO_HANDLE * phCodec, VO_AUDIO_CODINGTYPE vType, VO_CODEC_INIT_USERDATA * pUserData ); 122 123 /** 124 * Set input audio data. 125 * \param hCodec [IN]] The codec handle which was created by Init function. 126 * \param pInput [IN] The input buffer param. 127 * \retval VO_ERR_NONE Succeeded. 128 */ 129 VO_U32 (VO_API * SetInputData) (VO_HANDLE hCodec, VO_CODECBUFFER * pInput); 130 131 /** 132 * Get the outut audio data 133 * \param hCodec [IN]] The codec handle which was created by Init function. 134 * \param pOutBuffer [OUT] The output audio data 135 * \param pOutInfo [OUT] The codec fills audio format and the input data size used in current call. 136 * pOutInfo->InputUsed is total used input data size in byte. 137 * \retval VO_ERR_NONE Succeeded. 138 * VO_ERR_INPUT_BUFFER_SMALL. The input was finished or the input data was not enought. Continue to input 139 * data before next call. 140 */ 141 VO_U32 (VO_API * GetOutputData) (VO_HANDLE hCodec, VO_CODECBUFFER * pOutBuffer, VO_AUDIO_OUTPUTINFO * pOutInfo); 142 143 /** 144 * Set the parameter for the specified param ID. 145 * \param hCodec [IN]] The codec handle which was created by Init function. 146 * \param uParamID [IN] The param ID. 147 * \param pData [IN] The param value. 148 * \retval VO_ERR_NONE Succeeded. 149 */ 150 VO_U32 (VO_API * SetParam) (VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData); 151 152 /** 153 * Get the parameter for the specified param ID. 154 * \param hCodec [IN]] The codec handle which was created by Init function. 155 * \param uParamID [IN] The param ID. 156 * \param pData [IN] The param value. 157 * \retval VO_ERR_NONE Succeeded. 158 */ 159 VO_U32 (VO_API * GetParam) (VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData); 160 161 /** 162 * Uninit the Codec. 163 * \param hCodec [IN]] The codec handle which was created by Init function. 164 * \retval VO_ERR_NONE Succeeded. 165 */ 166 VO_U32 (VO_API * Uninit) (VO_HANDLE hCodec); 167 } VO_AUDIO_CODECAPI; 168 169 #ifdef __cplusplus 170 } 171 #endif /* __cplusplus */ 172 173 #endif // __voAudio_H__ 174