summaryrefslogtreecommitdiffstats
path: root/audio/out/ao.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/out/ao.c')
-rw-r--r--audio/out/ao.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/audio/out/ao.c b/audio/out/ao.c
index 2ad91ab858..9cfa383972 100644
--- a/audio/out/ao.c
+++ b/audio/out/ao.c
@@ -25,6 +25,7 @@
#include "config.h"
#include "ao.h"
+#include "audio/format.h"
#include "core/mp_msg.h"
@@ -115,7 +116,11 @@ static bool ao_try_init(struct ao *ao, char *params)
{
if (ao->driver->encode != !!ao->encode_lavc_ctx)
return false;
- return ao->driver->init(ao, params) >= 0;
+ if (ao->driver->init(ao, params) < 0)
+ return false;
+ ao->bps = ao->channels.num * ao->samplerate * af_fmt2bits(ao->format) / 8;
+ ao->initialized = true;
+ return true;
}
void ao_init(struct ao *ao, char **ao_list)
@@ -156,11 +161,8 @@ void ao_init(struct ao *ao, char **ao_list)
if (audio_out) {
// name matches, try it
ao->driver = audio_out;
- if (ao_try_init(ao, params)) {
- ao->driver = audio_out;
- ao->initialized = true;
+ if (ao_try_init(ao, params))
return;
- }
mp_tmsg(MSGT_AO, MSGL_WARN,
"Failed to initialize audio driver '%s'\n", ao_name);
talloc_free_children(ao);
@@ -182,11 +184,8 @@ void ao_init(struct ao *ao, char **ao_list)
const struct ao_driver *audio_out = audio_out_drivers[i];
ao->driver = audio_out;
ao->probing = true;
- if (ao_try_init(ao, NULL)) {
- ao->initialized = true;
- ao->driver = audio_out;
+ if (ao_try_init(ao, NULL))
return;
- }
talloc_free_children(ao);
*ao = backup;
}