@@ -203,24 +203,22 @@ esp_gmf_err_t esp_gmf_audio_helper_get_audio_type_by_uri(const char *uri, esp_au
203203
204204esp_gmf_err_t esp_gmf_audio_helper_reconfig_dec_by_uri (const char * uri , esp_gmf_info_sound_t * info , esp_audio_simple_dec_cfg_t * dec_cfg )
205205{
206+ // free sub cfg first
207+ if (dec_cfg -> dec_cfg ) {
208+ esp_gmf_oal_free (dec_cfg -> dec_cfg );
209+ dec_cfg -> dec_cfg = NULL ;
210+ dec_cfg -> cfg_size = 0 ;
211+ }
206212 if (strstr (uri , ".aac" )) {
207213 dec_cfg -> dec_type = ESP_AUDIO_SIMPLE_DEC_TYPE_AAC ;
208214 esp_aac_dec_cfg_t aac_cfg = {
209215 .no_adts_header = false,
210216 .aac_plus_enable = true,
211217 };
212- if ((dec_cfg -> dec_cfg == NULL )
213- || (dec_cfg -> cfg_size != sizeof (esp_aac_dec_cfg_t ))) {
214- if (dec_cfg -> dec_cfg ) {
215- esp_gmf_oal_free (dec_cfg -> dec_cfg );
216- dec_cfg -> dec_cfg = NULL ;
217- dec_cfg -> cfg_size = 0 ;
218- }
219- dec_cfg -> dec_cfg = esp_gmf_oal_calloc (1 , sizeof (esp_aac_dec_cfg_t ));
220- ESP_GMF_MEM_CHECK (TAG , dec_cfg -> dec_cfg , return ESP_GMF_ERR_MEMORY_LACK ;);
221- dec_cfg -> cfg_size = sizeof (esp_aac_dec_cfg_t );
222- memcpy (dec_cfg -> dec_cfg , & aac_cfg , dec_cfg -> cfg_size );
223- }
218+ dec_cfg -> dec_cfg = esp_gmf_oal_calloc (1 , sizeof (esp_aac_dec_cfg_t ));
219+ ESP_GMF_MEM_CHECK (TAG , dec_cfg -> dec_cfg , return ESP_GMF_ERR_MEMORY_LACK ;);
220+ dec_cfg -> cfg_size = sizeof (esp_aac_dec_cfg_t );
221+ memcpy (dec_cfg -> dec_cfg , & aac_cfg , dec_cfg -> cfg_size );
224222 } else if (strstr (uri , ".mp3" )) {
225223 dec_cfg -> dec_type = ESP_AUDIO_SIMPLE_DEC_TYPE_MP3 ;
226224 } else if (strstr (uri , ".amrwb" )) {
@@ -240,33 +238,17 @@ esp_gmf_err_t esp_gmf_audio_helper_reconfig_dec_by_uri(const char *uri, esp_gmf_
240238 esp_opus_dec_cfg_t opus_cfg = ESP_OPUS_DEC_CONFIG_DEFAULT ();
241239 opus_cfg .channel = info -> channels ;
242240 opus_cfg .sample_rate = info -> sample_rates ;
243- if ((dec_cfg -> dec_cfg == NULL )
244- || (dec_cfg -> cfg_size != sizeof (esp_opus_dec_cfg_t ))) {
245- if (dec_cfg -> dec_cfg ) {
246- esp_gmf_oal_free (dec_cfg -> dec_cfg );
247- dec_cfg -> dec_cfg = NULL ;
248- dec_cfg -> cfg_size = 0 ;
249- }
250- dec_cfg -> dec_cfg = esp_gmf_oal_calloc (1 , sizeof (esp_opus_dec_cfg_t ));
251- ESP_GMF_MEM_CHECK (TAG , dec_cfg -> dec_cfg , return ESP_GMF_ERR_MEMORY_LACK ;);
252- dec_cfg -> cfg_size = sizeof (esp_opus_dec_cfg_t );
253- memcpy (dec_cfg -> dec_cfg , & opus_cfg , dec_cfg -> cfg_size );
254- }
241+ dec_cfg -> dec_cfg = esp_gmf_oal_calloc (1 , sizeof (esp_opus_dec_cfg_t ));
242+ ESP_GMF_MEM_CHECK (TAG , dec_cfg -> dec_cfg , return ESP_GMF_ERR_MEMORY_LACK ;);
243+ dec_cfg -> cfg_size = sizeof (esp_opus_dec_cfg_t );
244+ memcpy (dec_cfg -> dec_cfg , & opus_cfg , dec_cfg -> cfg_size );
255245 } else if (strstr (uri , ".pcm" )) {
256246 dec_cfg -> dec_type = ESP_AUDIO_SIMPLE_DEC_TYPE_PCM ;
257247 esp_pcm_dec_cfg_t * cfg = dec_cfg -> dec_cfg ;
258- if ((dec_cfg -> dec_cfg == NULL )
259- || (dec_cfg -> cfg_size != sizeof (esp_pcm_dec_cfg_t ))) {
260- if (dec_cfg -> dec_cfg ) {
261- esp_gmf_oal_free (dec_cfg -> dec_cfg );
262- dec_cfg -> dec_cfg = NULL ;
263- dec_cfg -> cfg_size = 0 ;
264- }
265- cfg = esp_gmf_oal_calloc (1 , sizeof (esp_pcm_dec_cfg_t ));
266- ESP_GMF_MEM_CHECK (TAG , cfg , return ESP_GMF_ERR_MEMORY_LACK ;);
267- dec_cfg -> cfg_size = sizeof (esp_pcm_dec_cfg_t );
268- dec_cfg -> dec_cfg = cfg ;
269- }
248+ cfg = esp_gmf_oal_calloc (1 , sizeof (esp_pcm_dec_cfg_t ));
249+ ESP_GMF_MEM_CHECK (TAG , cfg , return ESP_GMF_ERR_MEMORY_LACK ;);
250+ dec_cfg -> cfg_size = sizeof (esp_pcm_dec_cfg_t );
251+ dec_cfg -> dec_cfg = cfg ;
270252 cfg -> sample_rate = info -> sample_rates ;
271253 cfg -> channel = info -> channels ;
272254 cfg -> bits_per_sample = info -> bits ;
0 commit comments