Загрузка данных


// ============================================================================
// 3. ЛОКАЛЬНЫЙ УМНЫЙ SPEEX_FREE
// ============================================================================
static void custom_speex_free_smart(void *ptr)
{
   if (ptr == NULL) {
      return;
   }

   // Проверяем, лежит ли указатель внутри нашего пула DTCM
   if ((uint8_t *)ptr >= speex_dtcm_pool && 
       (uint8_t *)ptr < (speex_dtcm_pool + SPEEX_DTCM_POOL_SIZE)) 
   {
      // Это память из DTCM-арены. Индивидуально её освобождать не нужно.
      return; 
   }

   // Проверяем, лежит ли указатель внутри нашего пула OCRAM
   if ((uint8_t *)ptr >= speex_ocram_pool && 
       (uint8_t *)ptr < (speex_ocram_pool + SPEEX_OCRAM_POOL_SIZE)) 
   {
      // Это память из OCRAM-арены. Тоже пропускаем.
      return; 
   }

   // Если указатель не принадлежит пулам, значит это был системный malloc (например, play_buf).
   // Возвращаем память операционной системе.
   free(ptr); 
}

// Переопределяем макрос освобождения памяти для текущего файла mdf.c
#undef speex_free
#define speex_free(ptr) custom_speex_free_smart(ptr)