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