diff --git a/janus/src/audio.c b/janus/src/audio.c index b826c94..8ed653c 100644 --- a/janus/src/audio.c +++ b/janus/src/audio.c @@ -146,17 +146,8 @@ void audio_destroy(audio_s *audio) { if (audio->pcm_params) { snd_pcm_hw_params_free(audio->pcm_params); } -# define FREE_QUEUE(_suffix) { \ - while (!queue_get_free(audio->_suffix##_queue)) { \ - _##_suffix##_buffer_s *ptr; \ - assert(!queue_get(audio->_suffix##_queue, (void **)&ptr, 1)); \ - free(ptr); \ - } \ - queue_destroy(audio->_suffix##_queue); \ - } - FREE_QUEUE(enc); - FREE_QUEUE(pcm); -# undef FREE_QUEUE + QUEUE_FREE_ITEMS_AND_DESTROY(audio->enc_queue, free); + QUEUE_FREE_ITEMS_AND_DESTROY(audio->pcm_queue, free); if (audio->tids_created) { JLOG_INFO("audio", "Pipeline closed"); } diff --git a/janus/src/queue.h b/janus/src/queue.h index c96d98d..6929f59 100644 --- a/janus/src/queue.h +++ b/janus/src/queue.h @@ -24,6 +24,7 @@ #include #include +#include #include @@ -46,6 +47,16 @@ typedef struct { } queue_s; +#define QUEUE_FREE_ITEMS_AND_DESTROY(_queue, _free_item) { \ + while (!queue_get_free(_queue)) { \ + void *_ptr; \ + assert(!queue_get(_queue, &_ptr, 1)); \ + _free_item(_ptr); \ + } \ + queue_destroy(_queue); \ + } + + queue_s *queue_init(unsigned capacity); void queue_destroy(queue_s *queue);