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