FreeCalypso > hg > fc-magnetite
changeset 700:800bf29abf31
audio mode load change from Tourmaline
Our FreeCalypso universe now has two kinds of audio mode config files:
the old 164 byte kind and the new 176 byte kind. We are not enabling
L1_NEW_AEC in Magnetite, only in Tourmaline, thus 164 byte audio mode
files are still native to Magnetite. But we still desire graceful
handling of the situation when a running Magnetite fw may load a
176 byte audio mode file (presumably with new AEC config), thus we
incorporate the same audio mode loading change which we implemented
in Tourmaline: if the loaded audio mode file is of the wrong kind,
the AEC config is cleared to default disabled state.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 30 Jul 2021 03:55:52 +0000 |
parents | f12872b7eb21 |
children | 35e7f9d0379f |
files | src/cs/services/audio/audio_mode_load.c |
diffstat | 1 files changed, 36 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cs/services/audio/audio_mode_load.c Wed Jun 09 18:04:26 2021 +0000 +++ b/src/cs/services/audio/audio_mode_load.c Fri Jul 30 03:55:52 2021 +0000 @@ -98,6 +98,9 @@ return(AUDIO_ERROR); \ } \ +/* FreeCalypso added definition for old vs new mode file handling */ +#define MODE_FILE_SIZE_NEWAEC 176 + /********************************************************************************/ /* */ /* Function Name: audio_mode_load_send_status */ @@ -308,6 +311,28 @@ return(AUDIO_OK); } + /* FreeCalypso added function */ + static void set_default_aec(T_AUDIO_AEC_CFG *aec) + { + aec->aec_enable = 0; + #if (L1_NEW_AEC) + aec->continuous_filtering = 0; + aec->granularity_attenuation = 1; + aec->smoothing_coefficient = 0x7FFF; + aec->max_echo_suppression_level = AUDIO_MAX_ECHO_12dB; + aec->vad_factor = 0x4000; + aec->absolute_threshold = 0x32; + aec->factor_asd_filtering = 0x1000; + aec->factor_asd_muting = 0x1000; + aec->aec_visibility = 0; + #else + aec->aec_mode = 0; + aec->echo_suppression_level = 0; + #endif + aec->noise_suppression_enable = 0; + aec->noise_suppression_level = 0; + } + /********************************************************************************/ /* */ /* Function Name: audio_mode_load_manager */ @@ -332,6 +357,7 @@ T_AUDIO_SPEAKER_LEVEL audio_volume; T_RVF_MB_STATUS mb_status; UINT8 message_to_confirm; + T_FFS_SIZE rdsize; #ifdef _WINDOWS INT8 *p_read, *p_write; UINT8 i; @@ -343,7 +369,7 @@ { /* allocate the buffer for the current Audio mode */ mb_status = rvf_get_buf (p_audio_gbl_var->mb_internal, - sizeof (T_AUDIO_MODE), + MODE_FILE_SIZE_NEWAEC, (T_RVF_BUFFER **) (&(p_audio_gbl_var->audio_mode_var.audio_mode_load_var.p_audio_mode))); /* If insufficient resources, then report a memory error and abort. */ if (mb_status == RVF_RED) @@ -366,9 +392,10 @@ #else /* Load the audio mode structure from the FFS */ - if ( ffs_read (((T_AUDIO_MODE_LOAD_REQ *)p_message)->audio_ffs_fd, - (void *)(p_audio_gbl_var->audio_mode_var.audio_mode_load_var.p_audio_mode), - sizeof(T_AUDIO_MODE)) < EFFS_OK ) + rdsize = ffs_read (((T_AUDIO_MODE_LOAD_REQ *)p_message)->audio_ffs_fd, + (void *)(p_audio_gbl_var->audio_mode_var.audio_mode_load_var.p_audio_mode), + MODE_FILE_SIZE_NEWAEC); + if ( rdsize < EFFS_OK ) { AUDIO_SEND_TRACE("AUDIO MODE LOAD: impossible to load the current audio mode", RV_TRACE_LEVEL_ERROR); @@ -383,6 +410,11 @@ audio_mode_load_send_status (AUDIO_ERROR, ((T_AUDIO_MODE_LOAD_REQ *)p_message)->return_path); return; } + if ( rdsize != sizeof(T_AUDIO_MODE) ) + { + /* wrong version - clear the AEC part */ + set_default_aec(&p_audio_gbl_var->audio_mode_var.audio_mode_load_var.p_audio_mode->audio_microphone_speaker_loop_setting.aec); + } #endif /* Set the audio mode structure */