summaryrefslogtreecommitdiffstats
path: root/audio/out
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2018-03-07 23:01:52 +0100
committerKevin Mitchell <kevmitch@gmail.com>2018-03-08 17:12:32 -0800
commit2f20168b0b5105566ecb330ea4b83c358e4b4e6d (patch)
treea31be92cd4bcbf18808dd07e9b9fe9a3aab8592b /audio/out
parentf40e0cb0f21f0f322cdb74eb7582f63986d7dab5 (diff)
downloadmpv-2f20168b0b5105566ecb330ea4b83c358e4b4e6d.tar.bz2
mpv-2f20168b0b5105566ecb330ea4b83c358e4b4e6d.tar.xz
ao_sdl: fix default buffer size
If you set desired.samples to 0, SDL will return a default buffer size on obtained.samples. This was broken, because ceil_power_of_two(0) returns 1. Since 0 is usually not considered a power of two, this is probably correct, but we still want to set desired.samples to 0 in this case.
Diffstat (limited to 'audio/out')
-rw-r--r--audio/out/ao_sdl.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/audio/out/ao_sdl.c b/audio/out/ao_sdl.c
index 1564e26120..6144918dfe 100644
--- a/audio/out/ao_sdl.c
+++ b/audio/out/ao_sdl.c
@@ -113,8 +113,7 @@ static int init(struct ao *ao)
ao->format = af_fmt_from_planar(ao->format);
- SDL_AudioSpec desired, obtained;
-
+ SDL_AudioSpec desired = {0};
desired.format = AUDIO_S16SYS;
for (int n = 0; fmtmap[n][0]; n++) {
if (ao->format == fmtmap[n][0]) {
@@ -124,8 +123,10 @@ static int init(struct ao *ao)
}
desired.freq = ao->samplerate;
desired.channels = ao->channels.num;
- desired.samples = MPMIN(32768, ceil_power_of_two(ao->samplerate *
- priv->buflen));
+ if (priv->buflen) {
+ desired.samples = MPMIN(32768, ceil_power_of_two(ao->samplerate *
+ priv->buflen));
+ }
desired.callback = audio_callback;
desired.userdata = ao;
@@ -134,7 +135,7 @@ static int init(struct ao *ao)
(int) desired.freq, (int) desired.channels,
(int) desired.format, (int) desired.samples);
- obtained = desired;
+ SDL_AudioSpec obtained = desired;
if (SDL_OpenAudio(&desired, &obtained)) {
if (!ao->probing)
MP_ERR(ao, "could not open audio: %s\n", SDL_GetError());