summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/common/include/voAudio.h
blob: 64c9dfbb6c67ea4b328824ac9d467a010de0401e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/*
 ** Copyright 2003-2010, VisualOn, Inc.
 **
 ** Licensed under the Apache License, Version 2.0 (the "License");
 ** you may not use this file except in compliance with the License.
 ** You may obtain a copy of the License at
 **
 **     http://www.apache.org/licenses/LICENSE-2.0
 **
 ** Unless required by applicable law or agreed to in writing, software
 ** distributed under the License is distributed on an "AS IS" BASIS,
 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 ** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
/*******************************************************************************
	File:		voAudio.h

	Content:	Audio types and functions

*******************************************************************************/

#ifndef __voAudio_H__
#define __voAudio_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#include "voIndex.h"
#include "voMem.h"

#define	VO_PID_AUDIO_BASE			 0x42000000							/*!< The base param ID for AUDIO codec */
#define	VO_PID_AUDIO_FORMAT			(VO_PID_AUDIO_BASE | 0X0001)		/*!< The format data of audio in track */
#define	VO_PID_AUDIO_SAMPLEREATE	(VO_PID_AUDIO_BASE | 0X0002)		/*!< The sample rate of audio  */
#define	VO_PID_AUDIO_CHANNELS		(VO_PID_AUDIO_BASE | 0X0003)		/*!< The channel of audio */
#define	VO_PID_AUDIO_BITRATE		(VO_PID_AUDIO_BASE | 0X0004)		/*!< The bit rate of audio */
#define VO_PID_AUDIO_CHANNELMODE	(VO_PID_AUDIO_BASE | 0X0005)		/*!< The channel mode of audio */

#define	VO_ERR_AUDIO_BASE			0x82000000
#define VO_ERR_AUDIO_UNSCHANNEL		VO_ERR_AUDIO_BASE | 0x0001
#define VO_ERR_AUDIO_UNSSAMPLERATE	VO_ERR_AUDIO_BASE | 0x0002
#define VO_ERR_AUDIO_UNSFEATURE		VO_ERR_AUDIO_BASE | 0x0003


/**
 *Enumeration used to define the possible audio coding formats.
 */
typedef enum VO_AUDIO_CODINGTYPE {
	VO_AUDIO_CodingUnused = 0,  /**< Placeholder value when coding is N/A  */
	VO_AUDIO_CodingPCM,         /**< Any variant of PCM coding */
	VO_AUDIO_CodingADPCM,       /**< Any variant of ADPCM encoded data */
	VO_AUDIO_CodingAMRNB,       /**< Any variant of AMR encoded data */
	VO_AUDIO_CodingAMRWB,       /**< Any variant of AMR encoded data */
	VO_AUDIO_CodingAMRWBP,      /**< Any variant of AMR encoded data */
	VO_AUDIO_CodingQCELP13,     /**< Any variant of QCELP 13kbps encoded data */
	VO_AUDIO_CodingEVRC,        /**< Any variant of EVRC encoded data */
	VO_AUDIO_CodingAAC,         /**< Any variant of AAC encoded data, 0xA106 - ISO/MPEG-4 AAC, 0xFF - AAC */
	VO_AUDIO_CodingAC3,         /**< Any variant of AC3 encoded data */
	VO_AUDIO_CodingFLAC,        /**< Any variant of FLAC encoded data */
	VO_AUDIO_CodingMP1,			/**< Any variant of MP1 encoded data */
	VO_AUDIO_CodingMP3,         /**< Any variant of MP3 encoded data */
	VO_AUDIO_CodingOGG,         /**< Any variant of OGG encoded data */
	VO_AUDIO_CodingWMA,         /**< Any variant of WMA encoded data */
	VO_AUDIO_CodingRA,          /**< Any variant of RA encoded data */
	VO_AUDIO_CodingMIDI,        /**< Any variant of MIDI encoded data */
	VO_AUDIO_CodingDRA,         /**< Any variant of dra encoded data */
	VO_AUDIO_CodingG729,        /**< Any variant of dra encoded data */
	VO_AUDIO_Coding_MAX		= VO_MAX_ENUM_VALUE
} VO_AUDIO_CODINGTYPE;

/*!
* the channel type value
*/
typedef enum {
	VO_CHANNEL_CENTER				= 1,	/*!<center channel*/
	VO_CHANNEL_FRONT_LEFT			= 1<<1,	/*!<front left channel*/
	VO_CHANNEL_FRONT_RIGHT			= 1<<2,	/*!<front right channel*/
	VO_CHANNEL_SIDE_LEFT  			= 1<<3, /*!<side left channel*/
	VO_CHANNEL_SIDE_RIGHT			= 1<<4, /*!<side right channel*/
	VO_CHANNEL_BACK_LEFT			= 1<<5,	/*!<back left channel*/
	VO_CHANNEL_BACK_RIGHT			= 1<<6,	/*!<back right channel*/
	VO_CHANNEL_BACK_CENTER			= 1<<7,	/*!<back center channel*/
	VO_CHANNEL_LFE_BASS				= 1<<8,	/*!<low-frequency effects bass channel*/
	VO_CHANNEL_ALL					= 0xffff,/*!<[default] include all channels */
	VO_CHANNEL_MAX					= VO_MAX_ENUM_VALUE
} VO_AUDIO_CHANNELTYPE;

/**
 * General audio format info
 */
typedef struct
{
	VO_S32	SampleRate;  /*!< Sample rate */
	VO_S32	Channels;    /*!< Channel count */
	VO_S32	SampleBits;  /*!< Bits per sample */
} VO_AUDIO_FORMAT;

/**
 * General audio output info
 */
typedef struct
{
	VO_AUDIO_FORMAT	Format;			/*!< Sample rate */
	VO_U32			InputUsed;		/*!< Channel count */
	VO_U32			Resever;		/*!< Resevered */
} VO_AUDIO_OUTPUTINFO;

/**
 * General audio codec function set
 */
typedef struct VO_AUDIO_CODECAPI
{
	/**
	 * Init the audio codec module and return codec handle
	 * \param phCodec [OUT] Return the video codec handle
	 * \param vType	[IN] The codec type if the module support multi codec.
	 * \param pUserData	[IN] The init param. It is either a memory operator or an allocated memory
	 * \retval VO_ERR_NONE Succeeded.
	 */
	VO_U32 (VO_API * Init) (VO_HANDLE * phCodec, VO_AUDIO_CODINGTYPE vType, VO_CODEC_INIT_USERDATA * pUserData );

	/**
	 * Set input audio data.
	 * \param hCodec [IN]] The codec handle which was created by Init function.
	 * \param pInput [IN] The input buffer param.
	 * \retval VO_ERR_NONE Succeeded.
	 */
	VO_U32 (VO_API * SetInputData) (VO_HANDLE hCodec, VO_CODECBUFFER * pInput);

	/**
	 * Get the outut audio data
	 * \param hCodec [IN]] The codec handle which was created by Init function.
	 * \param pOutBuffer [OUT] The output audio data
	 * \param pOutInfo [OUT] The codec fills audio format and the input data size used in current call.
	 *						 pOutInfo->InputUsed is total used input data size in byte.
	 * \retval  VO_ERR_NONE Succeeded.
	 *			VO_ERR_INPUT_BUFFER_SMALL. The input was finished or the input data was not enought. Continue to input 
	 *										data before next call.
	 */
	VO_U32 (VO_API * GetOutputData) (VO_HANDLE hCodec, VO_CODECBUFFER * pOutBuffer, VO_AUDIO_OUTPUTINFO * pOutInfo);

	/**
	 * Set the parameter for the specified param ID.
	 * \param hCodec [IN]] The codec handle which was created by Init function.
	 * \param uParamID [IN] The param ID.
	 * \param pData [IN] The param value.
	 * \retval VO_ERR_NONE Succeeded.
	 */
	VO_U32 (VO_API * SetParam) (VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData);

	/**
	 * Get the parameter for the specified param ID.
	 * \param hCodec [IN]] The codec handle which was created by Init function.
	 * \param uParamID [IN] The param ID.
	 * \param pData [IN] The param value.
	 * \retval VO_ERR_NONE Succeeded.
	 */
	VO_U32 (VO_API * GetParam) (VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData);

	/**
	 * Uninit the Codec.
	 * \param hCodec [IN]] The codec handle which was created by Init function.
	 * \retval VO_ERR_NONE Succeeded.
	 */
	VO_U32 (VO_API * Uninit) (VO_HANDLE hCodec);
} VO_AUDIO_CODECAPI;

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif // __voAudio_H__