提交 d0cbc83d 编写于 作者: R Richard Stanway

libobs: Avoid unnecessary mallocs in audio processing

上级 4b2fe7b5
......@@ -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;
}
......
......@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册