diff options
Diffstat (limited to 'audio/out/ao_sdl.c')
-rw-r--r-- | audio/out/ao_sdl.c | 48 |
1 files changed, 19 insertions, 29 deletions
diff --git a/audio/out/ao_sdl.c b/audio/out/ao_sdl.c index ee95e77d44..93f5431679 100644 --- a/audio/out/ao_sdl.c +++ b/audio/out/ao_sdl.c @@ -24,7 +24,7 @@ #include "talloc.h" #include "ao.h" #include "core/mp_msg.h" -#include "core/subopt-helper.h" +#include "core/m_option.h" #include "osdep/timer.h" #include <libavutil/fifo.h> @@ -45,6 +45,8 @@ struct priv int64_t callback_time0; int64_t callback_time1; #endif + float buflen; + float bufcnt; }; static void audio_callback(void *userdata, Uint8 *stream, int len) @@ -119,18 +121,6 @@ static unsigned int ceil_power_of_two(unsigned int x) return y; } -static void print_help(void) { - mp_msg(MSGT_AO, MSGL_FATAL, - "\n-ao sdl commandline help:\n" - "Example: mpv -ao sdl:buflen=len\n" - "\nOptions:\n" - " buflen=len\n" - " Length of audio buffer in seconds\n" - " bufcnt=cnt\n" - " Count of extra audio buffers\n" - ); -} - static int init(struct ao *ao, char *params) { if (SDL_WasInit(SDL_INIT_AUDIO)) { @@ -138,20 +128,7 @@ static int init(struct ao *ao, char *params) return -1; } - float buflen = 0; // use SDL default - float bufcnt = 2; - const opt_t subopts[] = { - {"buflen", OPT_ARG_FLOAT, &buflen, NULL}, - {"bufcnt", OPT_ARG_FLOAT, &bufcnt, NULL}, - {NULL} - }; - if (subopt_parse(params, subopts) != 0) { - print_help(); - return -1; - } - - struct priv *priv = talloc_zero(ao, struct priv); - ao->priv = priv; + struct priv *priv = ao->priv; if (SDL_InitSubSystem(SDL_INIT_AUDIO)) { if (!ao->probing) @@ -192,7 +169,8 @@ static int init(struct ao *ao, char *params) } desired.freq = ao->samplerate; desired.channels = ao->channels.num; - desired.samples = FFMIN(32768, ceil_power_of_two(ao->samplerate * buflen)); + desired.samples = FFMIN(32768, ceil_power_of_two(ao->samplerate * + priv->buflen)); desired.callback = audio_callback; desired.userdata = ao; @@ -248,7 +226,7 @@ static int init(struct ao *ao, char *params) } ao->samplerate = obtained.freq; - priv->buffer = av_fifo_alloc(obtained.size * bufcnt); + priv->buffer = av_fifo_alloc(obtained.size * priv->bufcnt); priv->buffer_mutex = SDL_CreateMutex(); if (!priv->buffer_mutex) { mp_msg(MSGT_AO, MSGL_ERR, "[sdl] SDL_CreateMutex failed\n"); @@ -368,6 +346,8 @@ static float get_delay(struct ao *ao) return delay; } +#define OPT_BASE_STRUCT struct priv + const struct ao_driver audio_out_sdl = { .info = &(const struct ao_info) { "SDL Audio", @@ -383,4 +363,14 @@ const struct ao_driver audio_out_sdl = { .pause = pause, .resume = resume, .reset = reset, + .priv_size = sizeof(struct priv), + .priv_defaults = &(const struct priv) { + .buflen = 0, // use SDL default + .bufcnt = 2, + }, + .options = (const struct m_option[]) { + OPT_FLOAT("buflen", buflen, 0), + OPT_FLOAT("bufcnt", bufcnt, 0), + {0} + }, }; |