@@ -457,37 +457,39 @@ uint32_t i2s_get_buf_size(i2s_chan_handle_t handle, uint32_t data_bit_width, uin
457457esp_err_t i2s_free_dma_desc (i2s_chan_handle_t handle )
458458{
459459 I2S_NULL_POINTER_CHECK (TAG , handle );
460- if (!handle -> dma .desc ) {
461- return ESP_OK ;
462- }
463- for (int i = 0 ; i < handle -> dma .desc_num ; i ++ ) {
464- if (handle -> dma .bufs [i ]) {
465- free (handle -> dma .bufs [i ]);
466- handle -> dma .bufs [i ] = NULL ;
467- }
468- if (handle -> dma .desc [i ]) {
469- free (handle -> dma .desc [i ]);
470- handle -> dma .desc [i ] = NULL ;
460+ handle -> dma .buf_size = 0 ;
461+
462+ if (handle -> dma .desc ) {
463+ for (int i = 0 ; i < handle -> dma .desc_num ; i ++ ) {
464+ if (handle -> dma .desc [i ]) {
465+ free (handle -> dma .desc [i ]);
466+ handle -> dma .desc [i ] = NULL ;
467+ }
471468 }
469+ free (handle -> dma .desc );
470+ handle -> dma .desc = NULL ;
472471 }
472+
473473 if (handle -> dma .bufs ) {
474+ for (int i = 0 ; i < handle -> dma .desc_num ; i ++ ) {
475+ if (handle -> dma .bufs [i ]) {
476+ free (handle -> dma .bufs [i ]);
477+ handle -> dma .bufs [i ] = NULL ;
478+ }
479+ }
474480 free (handle -> dma .bufs );
475481 handle -> dma .bufs = NULL ;
476482 }
477- if (handle -> dma .desc ) {
478- free (handle -> dma .desc );
479- handle -> dma .desc = NULL ;
480- }
481483
482484 return ESP_OK ;
483485}
484486
485- esp_err_t i2s_alloc_dma_desc (i2s_chan_handle_t handle , uint32_t num , uint32_t bufsize )
487+ esp_err_t i2s_alloc_dma_desc (i2s_chan_handle_t handle , uint32_t bufsize )
486488{
487489 I2S_NULL_POINTER_CHECK (TAG , handle );
488490 esp_err_t ret = ESP_OK ;
489491 ESP_RETURN_ON_FALSE (bufsize <= I2S_DMA_BUFFER_MAX_SIZE , ESP_ERR_INVALID_ARG , TAG , "dma buffer can't be bigger than %d" , I2S_DMA_BUFFER_MAX_SIZE );
490- handle -> dma .desc_num = num ;
492+ uint32_t num = handle -> dma .desc_num ;
491493 handle -> dma .buf_size = bufsize ;
492494
493495 /* Descriptors must be in the internal RAM */
0 commit comments