From d0cbc83da2d172fc042dfbf81581ded17c6d34f6 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Thu, 3 Sep 2020 01:49:54 +0200 Subject: [PATCH] libobs: Avoid unnecessary mallocs in audio processing --- libobs/obs-scene.c | 16 ++++------------ libobs/obs-source.c | 4 +--- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 687da946c..5a8a8e81c 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -951,19 +951,12 @@ static uint32_t scene_getheight(void *data) } static void apply_scene_item_audio_actions(struct obs_scene_item *item, - float **p_buf, uint64_t ts, + float *buf, uint64_t ts, size_t sample_rate) { bool cur_visible = item->visible; uint64_t frame_num = 0; size_t deref_count = 0; - float *buf = NULL; - - if (p_buf) { - if (!*p_buf) - *p_buf = malloc(AUDIO_OUTPUT_FRAMES * sizeof(float)); - buf = *p_buf; - } pthread_mutex_lock(&item->actions_mutex); @@ -1010,7 +1003,7 @@ static void apply_scene_item_audio_actions(struct obs_scene_item *item, } } -static bool apply_scene_item_volume(struct obs_scene_item *item, float **buf, +static bool apply_scene_item_volume(struct obs_scene_item *item, float *buf, uint64_t ts, size_t sample_rate) { bool actions_pending; @@ -1074,7 +1067,7 @@ static bool scene_audio_render(void *data, uint64_t *ts_out, size_t sample_rate) { uint64_t timestamp = 0; - float *buf = NULL; + float buf[AUDIO_OUTPUT_FRAMES]; struct obs_source_audio_mix child_audio; struct obs_scene *scene = data; struct obs_scene_item *item; @@ -1113,7 +1106,7 @@ static bool scene_audio_render(void *data, uint64_t *ts_out, size_t pos, count; bool apply_buf; - apply_buf = apply_scene_item_volume(item, &buf, timestamp, + apply_buf = apply_scene_item_volume(item, buf, timestamp, sample_rate); if (obs_source_audio_pending(item->source)) { @@ -1159,7 +1152,6 @@ static bool scene_audio_render(void *data, uint64_t *ts_out, *ts_out = timestamp; audio_unlock(scene); - free(buf); return true; } diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 9aea45c73..b87a7eacb 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -4532,7 +4532,7 @@ static inline void apply_audio_action(obs_source_t *source, static void apply_audio_actions(obs_source_t *source, size_t channels, size_t sample_rate) { - float *vol_data = malloc(sizeof(float) * AUDIO_OUTPUT_FRAMES); + float vol_data[AUDIO_OUTPUT_FRAMES]; float cur_vol = get_source_volume(source, source->audio_ts); size_t frame_num = 0; @@ -4573,8 +4573,6 @@ static void apply_audio_actions(obs_source_t *source, size_t channels, if ((source->audio_mixers & (1 << mix)) != 0) multiply_vol_data(source, mix, channels, vol_data); } - - free(vol_data); } static void apply_audio_volume(obs_source_t *source, uint32_t mixers,