1
0
mirror of https://github.com/mpv-player/mpv synced 2025-02-17 13:17:13 +00:00

ao_alsa: simplify, remove no-block suboption

If no-block was given, the device would be opened with SND_PCM_NOBLOCK.
Also, after opening, blocking mode was unconditionally enabled anyway
with snd_pcm_nonblock(). Further, if opening with SND_PCM_NOBLOCK
failed, opening was retried without this flag.

This doesn't make any sense to me, and I've never heard of someone using
this suboption. I suspect it has to do with ancient ALSA bugs or API
caveats. Remove it and simplify the code.
This commit is contained in:
wm4 2014-12-05 01:23:09 +01:00
parent bc1b9aa984
commit d6606bcfff
2 changed files with 8 additions and 19 deletions

View File

@ -39,8 +39,6 @@ Available audio output drivers are:
``device=<device>`` ``device=<device>``
Sets the device name. For ac3 output via S/PDIF, use an "iec958" or Sets the device name. For ac3 output via S/PDIF, use an "iec958" or
"spdif" device, unless you really know how to set it correctly. "spdif" device, unless you really know how to set it correctly.
``no-block``
Sets noblock-mode.
``resample=yes`` ``resample=yes``
Enable ALSA resampling plugin. (This is disabled by default, because Enable ALSA resampling plugin. (This is disabled by default, because
some drivers report incorrect audio delay in some cases.) some drivers report incorrect audio delay in some cases.)

View File

@ -58,7 +58,6 @@ struct priv {
int buffersize; // in frames int buffersize; // in frames
int outburst; // in frames int outburst; // in frames
int cfg_block;
char *cfg_device; char *cfg_device;
char *cfg_mixer_device; char *cfg_mixer_device;
char *cfg_mixer_name; char *cfg_mixer_name;
@ -405,7 +404,7 @@ static char *append_params(void *ta_parent, const char *device, const char *p)
abort(); abort();
} }
static int try_open_device(struct ao *ao, const char *device, int open_mode) static int try_open_device(struct ao *ao, const char *device)
{ {
struct priv *p = ao->priv; struct priv *p = ao->priv;
@ -418,13 +417,13 @@ static int try_open_device(struct ao *ao, const char *device, int open_mode)
map_iec958_srate(ao->samplerate)); map_iec958_srate(ao->samplerate));
const char *ac3_device = append_params(tmp, device, params); const char *ac3_device = append_params(tmp, device, params);
int err = snd_pcm_open int err = snd_pcm_open
(&p->alsa, ac3_device, SND_PCM_STREAM_PLAYBACK, open_mode); (&p->alsa, ac3_device, SND_PCM_STREAM_PLAYBACK, 0);
talloc_free(tmp); talloc_free(tmp);
if (!err) if (!err)
return 0; return 0;
} }
return snd_pcm_open(&p->alsa, device, SND_PCM_STREAM_PLAYBACK, open_mode); return snd_pcm_open(&p->alsa, device, SND_PCM_STREAM_PLAYBACK, 0);
} }
static void uninit(struct ao *ao) static void uninit(struct ao *ao)
@ -471,18 +470,12 @@ static int init(struct ao *ao)
MP_VERBOSE(ao, "using device: %s\n", device); MP_VERBOSE(ao, "using device: %s\n", device);
MP_VERBOSE(ao, "using ALSA version: %s\n", snd_asoundlib_version()); MP_VERBOSE(ao, "using ALSA version: %s\n", snd_asoundlib_version());
err = try_open_device(ao, device, p->cfg_block ? 0 : SND_PCM_NONBLOCK); err = try_open_device(ao, device);
if (err < 0) {
if (err == -EBUSY && !user_set_device && strcmp(device, "default") != 0) { if (err == -EBUSY && !user_set_device && strcmp(device, "default") != 0) {
MP_WARN(ao, "Device '%s' busy, retrying default.\n", device); MP_WARN(ao, "Device '%s' busy, retrying default.\n", device);
err = try_open_device(ao, "default", 0); err = try_open_device(ao, "default");
} else if (err != -EBUSY && !p->cfg_block) {
MP_WARN(ao, "Open in nonblock-mode "
"failed, trying to open in block-mode.\n");
err = try_open_device(ao, device, 0);
} }
CHECK_ALSA_ERROR("Playback open error"); CHECK_ALSA_ERROR("Playback open error");
}
err = snd_pcm_nonblock(p->alsa, 0); err = snd_pcm_nonblock(p->alsa, 0);
if (err < 0) { if (err < 0) {
@ -918,7 +911,6 @@ const struct ao_driver audio_out_alsa = {
.list_devs = list_devs, .list_devs = list_devs,
.priv_size = sizeof(struct priv), .priv_size = sizeof(struct priv),
.priv_defaults = &(const struct priv) { .priv_defaults = &(const struct priv) {
.cfg_block = 1,
.cfg_mixer_device = "default", .cfg_mixer_device = "default",
.cfg_mixer_name = "Master", .cfg_mixer_name = "Master",
.cfg_mixer_index = 0, .cfg_mixer_index = 0,
@ -927,7 +919,6 @@ const struct ao_driver audio_out_alsa = {
.options = (const struct m_option[]) { .options = (const struct m_option[]) {
OPT_STRING("device", cfg_device, 0), OPT_STRING("device", cfg_device, 0),
OPT_FLAG("resample", cfg_resample, 0), OPT_FLAG("resample", cfg_resample, 0),
OPT_FLAG("block", cfg_block, 0),
OPT_STRING("mixer-device", cfg_mixer_device, 0), OPT_STRING("mixer-device", cfg_mixer_device, 0),
OPT_STRING("mixer-name", cfg_mixer_name, 0), OPT_STRING("mixer-name", cfg_mixer_name, 0),
OPT_INTRANGE("mixer-index", cfg_mixer_index, 0, 0, 99), OPT_INTRANGE("mixer-index", cfg_mixer_index, 0, 0, 99),