#ifndef IMAGEAPP_VOICE_H #define IMAGEAPP_VOICE_H #include "hdal.h" #include #include "FileSysTsk.h" /// ========== Enum area ========== enum { IAVOICE_CONFIG_AUDIO_INFO = 0xF000F100, IAVOICE_CONFIG_MEM_POOL_INFO, }; typedef enum { _IAVOICE_FILE_FORMAT_UNKNOWN = 0, _IAVOICE_FILE_FORMAT_PCM, _IAVOICE_FILE_FORMAT_WAV, _IAVOICE_FILE_FORMAT_AAC, ENUM_DUMMY4WORD(IAVOICE_FILE_FORMAT) } IAVOICE_FILE_FORMAT; typedef enum { _IAVOICE_CFG_AUDIO_CH_LEFT, ///< Left _IAVOICE_CFG_AUDIO_CH_RIGHT, ///< Right _IAVOICE_CFG_AUDIO_CH_STEREO, ///< Stereo ENUM_DUMMY4WORD(IAVOICE_CFG_AUDIO_CH) } IAVOICE_CFG_AUDIO_CH; /// ========== Data structure area ========== typedef _PACKED_BEGIN struct _WAV_RIFF { UINT32 ChunkID; /* "RIFF" */ UINT32 ChunkSize; /* 36 + Subchunk2Size */ UINT32 Format; /* "WAVE" */ } _PACKED_END WAV_RIFF; typedef _PACKED_BEGIN struct _WAV_FMT { UINT32 Subchunk1ID; /* "fmt " */ UINT32 Subchunk1Size; /* 16 for PCM */ UINT16 AudioFormat; /* PCM = 1*/ UINT16 NumChannels; /* Mono = 1, Stereo = 2, etc. */ UINT32 SampleRate; /* 8000, 44100, etc. */ UINT32 ByteRate; /* = SampleRate * NumChannels * BitsPerSample/8 */ UINT16 BlockAlign; /* = NumChannels * BitsPerSample/8 */ UINT16 BitsPerSample; /* 8bits, 16bits, etc. */ } _PACKED_END WAV_FMT; typedef _PACKED_BEGIN struct _WAV_DATA { UINT32 Subchunk2ID; /* "data" */ UINT32 Subchunk2Size; /* data size */ } _PACKED_END WAV_DATA; typedef _PACKED_BEGIN struct _WAV_HEADER { WAV_RIFF riff; WAV_FMT fmt; WAV_DATA data; } _PACKED_END WAV_HEADER; typedef struct { UINT32 aud_rate; UINT32 aud_ch; UINT32 aud_ch_num; HD_AUDIO_MONO aud_out_mono; HD_AUDIOOUT_OUTPUT adu_out_type; } IAVOICE_AUDIO_INFO; typedef struct { FST_FILE fd; IAVOICE_FILE_FORMAT format; UINT32 aud_rate; UINT32 aud_ch_num; } IAVOICE_AUDIO_PLAY_INFO; // =================== User Event Callback =================== typedef enum { IAVOICE_USER_CB_EVENT_START = 0x0000E500, // EVENT IAVOICE_USER_CB_EVENT_FILENAMING_CB = IAVOICE_USER_CB_EVENT_START, IAVOICE_USER_CB_EVENT_APLAY_DONE, // ERROR ENUM_DUMMY4WORD(IAVOICE_USER_CB_EVENT) } IAVOICE_USER_CB_EVENT; typedef void (IAVoiceUserEventCb)(UINT32 id, IAVOICE_USER_CB_EVENT event_id, UINT32 value); typedef void (IAVoiceAudCapCb)(UINT32 pa, UINT32 va, UINT32 size); typedef void (IAVoiceAudBsCb)(UINT32 id, HD_AUDIO_BS *paenc_data); // =================== Parameters =================== enum { IAVOICE_PARAM_START = 0x0000EE000, // audio codec group IAVOICE_PARAM_AUD_GROUP_BEGIN = IAVOICE_PARAM_START, IAVOICE_PARAM_AUD_ACAP_REG_CB = IAVOICE_PARAM_AUD_GROUP_BEGIN + 0x100, IAVOICE_PARAM_AUD_ACAP_BY_HDAL, /// var + acap IAVOICE_PARAM_AUD_ACAP_VOL, IAVOICE_PARAM_AUD_ACAP_ALC_EN, IAVOICE_PARAM_AUD_ACAP_ANR, /// Set before ImageApp_MovieMulti_Open IAVOICE_PARAM_AUD_ACAP_DEFAULT_SETTING, /// Set after ImageApp_Voice_Open and before audio start. VENDOR_AUDIOCAP_DEFAULT_SETTING_10DB ~ 30DB IAVOICE_PARAM_AUD_ACAP_NOISEGATE_THRESHOLD, /// Set after ImageApp_Voice_Open and before audio start. -76 ~ -31 (dB) IAVOICE_PARAM_AUD_ENC_REG_CB = IAVOICE_PARAM_AUD_GROUP_BEGIN + 0x200, IAVOICE_PARAM_AUD_MUTE_ENC_FUNC_EN, /// keep acap but only mute aenc IAVOICE_PARAM_AUD_MUTE_ENC, /// var + acap (mute from acap if MOVIEMULTI_PARAM_AUD_MUTE_ENC_FUNC_EN is not set) IAVOICE_PARAM_AUD_AOUT_VOL = IAVOICE_PARAM_AUD_GROUP_BEGIN + 0x400, IAVOICE_PARAM_AUD_GROUP_END, }; /// ========== Function Prototype area ========== /// ImageApp_Voice extern ER ImageApp_Voice_Open(void); extern ER ImageApp_Voice_Close(void); extern ER ImageApp_Voice_Config(UINT32 config_id, UINT32 value); /// ImageApp_Voice_AudCapLink extern ER ImageApp_Voice_AudCapStart(UINT32 id); extern ER ImageApp_Voice_AudCapStop(UINT32 id); extern ER ImageApp_Voice_AudEncStart(UINT32 id); extern ER ImageApp_Voice_AudEncStop(UINT32 id); extern ER ImageApp_Voice_AudOutStart(UINT32 id); extern ER ImageApp_Voice_AudOutStop(UINT32 id); extern ER ImageApp_Voice_AudCapGetFrame(UINT32 id, UINT8 *p_buf, UINT32 *p_len, INT32 wait_ms); /// ImageApp_Voice_CB extern ER ImageApp_Voice_RegUserCB(IAVoiceUserEventCb *fncb); /// ImageApp_Voice_Operation_Play extern ER ImageApp_Voice_PlayStart(UINT32 id, IAVOICE_AUDIO_PLAY_INFO *p_info); extern ER ImageApp_Voice_PlayStop(UINT32 id); extern ER ImageApp_Voice_PlayPause(UINT32 id); extern ER ImageApp_Voice_PlayResume(UINT32 id); /// ImageApp_Voice_Operation_Record extern ER ImageApp_Voice_RecStart(UINT32 id); extern ER ImageApp_Voice_RecStop(UINT32 id); /// ImageApp_Voice_Param extern ER ImageApp_Voice_SetParam(UINT32 id, UINT32 param, UINT32 value); extern ER ImageApp_Voice_GetParam(UINT32 id, UINT32 param, UINT32* value); #endif//IMAGEAPP_VOICE_H