/*
* Copyright (C) 2011 The Android Open Source Project
*
* 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 M4ENCODER_AudioCommon.h
* @brief VES audio encoders shell interface.
* @note This file defines the types internally used by the VES to abstract audio encoders
******************************************************************************
*/
#ifndef __M4ENCODER_AUDIOCOMMON_H__
#define __M4ENCODER_AUDIOCOMMON_H__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "M4OSA_OptionID.h" /* for M4OSA_OPTION_ID_CREATE() */
#include "M4OSA_CoreID.h"
#define M4ENCODER_AUDIO_NB_CHANNELS_MAX 2
/* WARNING: this value must be equal to the number of samples grabbed */
//#define M4ENCODER_AUDIO_PCM_SAMPLE_NUMBER 960 /* imposed by the AAC encoder. */
#define M4ENCODER_AUDIO_PCM_SAMPLE_NUMBER 1024 /* imposed by the AAC encoder. */
/**
******************************************************************************
* enumeration M4ENCODER_Audio_OptionID
* @brief This enum defines the core AAC shell encoder options
******************************************************************************
*/
typedef enum
{
/* Maximum generated AU size */
M4ENCODER_Audio_maxAUsize = M4OSA_OPTION_ID_CREATE(M4_READ,M4ENCODER_AUDIO, 0x01)
} M4ENCODER_Audio_OptionID;
/**
******************************************************************************
* enum M4ENCODER_SamplingFrequency
* @brief Thie enum defines the audio sampling frequency.
******************************************************************************
*/
typedef enum
{
M4ENCODER_k8000Hz = 8000,
M4ENCODER_k11025Hz = 11025,
M4ENCODER_k12000Hz = 12000,
M4ENCODER_k16000Hz = 16000,
M4ENCODER_k22050Hz = 22050,
M4ENCODER_k24000Hz = 24000,
M4ENCODER_k32000Hz = 32000,
M4ENCODER_k44100Hz = 44100,
M4ENCODER_k48000Hz = 48000
} M4ENCODER_SamplingFrequency;
/**
******************************************************************************
* enum M4ENCODER_AudioFormat
* @brief This enum defines the audio compression formats.
******************************************************************************
*/
typedef enum
{
M4ENCODER_kAMRNB = 0,
M4ENCODER_kAAC,
M4ENCODER_kAudioNULL, /**< No compression */
M4ENCODER_kMP3,
M4ENCODER_kAudio_NB /* number of encoders, keep it as last enum entry */
} M4ENCODER_AudioFormat;
/**
******************************************************************************
* enum M4ENCODER_ChannelNumber
* @brief Thie enum defines the number of audio channels.
******************************************************************************
*/
typedef enum
{
M4ENCODER_kMono = 0,
M4ENCODER_kStereo,
M4ENCODER_kStereoNoInterleave
} M4ENCODER_ChannelNumber;
/**
******************************************************************************
* enum M4ENCODER_AudioBitrate
* @brief Thie enum defines the avalaible bitrates.
******************************************************************************
*/
typedef enum
{
M4ENCODER_kAudio_4_75_KBPS = 4750,
M4ENCODER_kAudio_5_15_KBPS = 5150,
M4ENCODER_kAudio_5_9_KBPS = 5900,
M4ENCODER_kAudio_6_7_KBPS = 6700,
M4ENCODER_kAudio_7_4_KBPS = 7400,
M4ENCODER_kAudio_7_95_KBPS = 7950,
M4ENCODER_kAudio_8_KBPS = 8000,
M4ENCODER_kAudio_10_2_KBPS = 10200,
M4ENCODER_kAudio_12_2_KBPS = 12200,
M4ENCODER_kAudio_16_KBPS = 16000,
M4ENCODER_kAudio_24_KBPS = 24000,
M4ENCODER_kAudio_32_KBPS = 32000,
M4ENCODER_kAudio_40_KBPS = 40000,
M4ENCODER_kAudio_48_KBPS = 48000,
M4ENCODER_kAudio_56_KBPS = 56000,
M4ENCODER_kAudio_64_KBPS = 64000,
M4ENCODER_kAudio_80_KBPS = 80000,
M4ENCODER_kAudio_96_KBPS = 96000,
M4ENCODER_kAudio_112_KBPS = 112000,
M4ENCODER_kAudio_128_KBPS = 128000,
M4ENCODER_kAudio_144_KBPS = 144000,
M4ENCODER_kAudio_160_KBPS = 160000,
M4ENCODER_kAudio_192_KBPS = 192000,
M4ENCODER_kAudio_224_KBPS = 224000,
M4ENCODER_kAudio_256_KBPS = 256000,
M4ENCODER_kAudio_320_KBPS = 320000
} M4ENCODER_AudioBitrate;
/**
******************************************************************************
* enum M4ENCODER_AacRegulation
* @brief The current mode of the bitrate regulation.
******************************************************************************
*/
typedef enum
{
M4ENCODER_kAacRegulNone = 0, /**< no bitrate regulation */
M4ENCODER_kAacBitReservoir /**< better quality, but more CPU consumed */
} M4ENCODER_AacRegulation;
/**
******************************************************************************
* enum M4ENCODER_AmrSID
* @brief This enum defines the SID of the AMR encoder.
******************************************************************************
*/
typedef enum
{
M4ENCODER_kAmrNoSID = 0 /**< no SID */
} M4ENCODER_AmrSID;
/**
******************************************************************************
* struct M4ENCODER_AacParams
* @brief This structure defines all the settings specific to the AAC encoder.
******************************************************************************
*/
typedef struct
{
M4ENCODER_AacRegulation Regulation;
M4OSA_Bool bHighSpeed;
M4OSA_Bool bTNS;
M4OSA_Bool bPNS;
M4OSA_Bool bIS;
M4OSA_Bool bMS;
} M4ENCODER_AacParams;
/**
******************************************************************************
* struct M4ENCODER_AudioParams
* @brief This structure defines all the settings avalaible when encoding audio.
******************************************************************************
*/
typedef struct s_M4ENCODER_AudioParams
{
M4ENCODER_SamplingFrequency Frequency; /**< the sampling frequency */
M4ENCODER_ChannelNumber ChannelNum; /**< the numbe of channels (mono, stereo, ..) */
M4ENCODER_AudioBitrate Bitrate; /**< bitrate, see enum */
M4ENCODER_AudioFormat Format; /**< audio compression format, AMR, AAC ... */
union {
M4ENCODER_AacParams AacParam;
M4ENCODER_AmrSID AmrSID;
} SpecifParam; /**< the audio encoder specific parameters */
} M4ENCODER_AudioParams;
/**
******************************************************************************
* struct M4ENCODER_AudioDecSpecificInfo
* @brief This structure describes the decoder specific info buffer.
******************************************************************************
*/
typedef struct
{
M4OSA_MemAddr8 pInfo; /**< the buffer adress */
M4OSA_UInt32 infoSize; /**< the buffer size in bytes */
} M4ENCODER_AudioDecSpecificInfo;
/**
******************************************************************************
* struct M4ENCODER_AudioBuffer
* @brief This structure defines the data buffer.
******************************************************************************
*/
typedef struct
{
/**< the table of buffers (unused buffers are set to NULL) */
M4OSA_MemAddr8 pTableBuffer[M4ENCODER_AUDIO_NB_CHANNELS_MAX];
/**< the table of the size of corresponding buffer at same index */
M4OSA_UInt32 pTableBufferSize[M4ENCODER_AUDIO_NB_CHANNELS_MAX];
} M4ENCODER_AudioBuffer;
typedef M4OSA_ERR (M4AE_init) (M4OSA_Context* hContext, M4OSA_Void* pUserData);
typedef M4OSA_ERR (M4AE_cleanUp) (M4OSA_Context pContext);
typedef M4OSA_ERR (M4AE_open) (M4OSA_Context pContext, M4ENCODER_AudioParams *params,
M4ENCODER_AudioDecSpecificInfo *decSpecInfo,
M4OSA_Context grabberContext);
typedef M4OSA_ERR (M4AE_close) (M4OSA_Context pContext);
typedef M4OSA_ERR (M4AE_step) (M4OSA_Context pContext, M4ENCODER_AudioBuffer *inBuffer,
M4ENCODER_AudioBuffer *outBuffer);
typedef M4OSA_ERR (M4AE_getOption) (M4OSA_Context pContext, M4OSA_OptionID option,
M4OSA_DataOption *valuePtr);
/**
******************************************************************************
* struct M4ENCODER_AudioGlobalInterface
* @brief Defines all the functions required for an audio encoder shell.
******************************************************************************
*/
typedef struct _M4ENCODER_AudioGlobalInterface
{
M4AE_init* pFctInit;
M4AE_cleanUp* pFctCleanUp;
M4AE_open* pFctOpen;
M4AE_close* pFctClose;
M4AE_step* pFctStep;
M4AE_getOption* pFctGetOption;
} M4ENCODER_AudioGlobalInterface;
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /*__M4ENCODER_AUDIOCOMMON_H__*/