summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--audio/audio.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/audio/audio.c b/audio/audio.c
index e8ff96ddc3..57096eaa38 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -173,10 +173,15 @@ void mp_audio_realloc(struct mp_audio *mpa, int samples)
}
// Like mp_audio_realloc(), but only reallocate if the audio grows in size.
+// If the buffer is reallocated, also preallocate.
void mp_audio_realloc_min(struct mp_audio *mpa, int samples)
{
- if (samples > mp_audio_get_allocated_size(mpa))
- mp_audio_realloc(mpa, samples);
+ if (samples > mp_audio_get_allocated_size(mpa)) {
+ size_t alloc = ta_calc_prealloc_elems(samples);
+ if (alloc > INT_MAX)
+ abort(); // oom
+ mp_audio_realloc(mpa, alloc);
+ }
}
/* Get the size allocated for the data, in number of samples. If the allocated