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