summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-07-21 23:27:09 +0200
committerwm4 <wm4@nowhere>2013-07-21 23:35:14 +0200
commit5b91ba0a8dd052d5d52309e439398f693d390b1b (patch)
tree7e808ef5420e188fdf736261f7a6ed17c0ec174a /audio
parent5c610836cd0a301944d018f2020e0304e8b186fa (diff)
downloadmpv-5b91ba0a8dd052d5d52309e439398f693d390b1b.tar.bz2
mpv-5b91ba0a8dd052d5d52309e439398f693d390b1b.tar.xz
options: remove --mixer and --mixer-channel, turn them into alsa/oss subopts
These two options were supported by ALSA and OSS only. Further, their values were specific to the respective audio systems, so it doesn't make sense to keep them as top-level options.
Diffstat (limited to 'audio')
-rw-r--r--audio/out/ao_alsa.c48
-rw-r--r--audio/out/ao_oss.c7
2 files changed, 19 insertions, 36 deletions
diff --git a/audio/out/ao_alsa.c b/audio/out/ao_alsa.c
index b3544fad24..7428c29a29 100644
--- a/audio/out/ao_alsa.c
+++ b/audio/out/ao_alsa.c
@@ -62,6 +62,9 @@ struct priv {
int cfg_block;
char *cfg_device;
+ char *cfg_mixer_device;
+ char *cfg_mixer_name;
+ int cfg_mixer_index;
};
#define BUFFER_TIME 500000 // 0.5 s
@@ -102,6 +105,7 @@ static void alsa_error_handler(const char *file, int line, const char *function,
/* to set/get/query special features/parameters */
static int control(struct ao *ao, enum aocontrol cmd, void *arg)
{
+ struct priv *p = ao->priv;
snd_mixer_t *handle = NULL;
switch (cmd) {
case AOCONTROL_GET_MUTE:
@@ -113,10 +117,6 @@ static int control(struct ao *ao, enum aocontrol cmd, void *arg)
snd_mixer_elem_t *elem;
snd_mixer_selem_id_t *sid;
- char *mix_name = "Master";
- char *card = "default";
- int mix_index = 0;
-
long pmin, pmax;
long get_vol, set_vol;
float f_multi;
@@ -124,41 +124,17 @@ static int control(struct ao *ao, enum aocontrol cmd, void *arg)
if (AF_FORMAT_IS_IEC61937(ao->format))
return CONTROL_TRUE;
- if (ao->opts->mixer_channel) {
- char *test_mix_index;
-
- mix_name = strdup(ao->opts->mixer_channel);
- if ((test_mix_index = strchr(mix_name, ','))) {
- *test_mix_index = 0;
- test_mix_index++;
- mix_index = strtol(test_mix_index, &test_mix_index, 0);
-
- if (*test_mix_index) {
- mp_tmsg(MSGT_AO, MSGL_ERR,
- "[AO_ALSA] Invalid mixer index. Defaulting to 0.\n");
- mix_index = 0;
- }
- }
- }
- if (ao->opts->mixer_device)
- card = ao->opts->mixer_device;
-
//allocate simple id
snd_mixer_selem_id_alloca(&sid);
//sets simple-mixer index and name
- snd_mixer_selem_id_set_index(sid, mix_index);
- snd_mixer_selem_id_set_name(sid, mix_name);
-
- if (ao->opts->mixer_channel) {
- free(mix_name);
- mix_name = NULL;
- }
+ snd_mixer_selem_id_set_index(sid, p->cfg_mixer_index);
+ snd_mixer_selem_id_set_name(sid, p->cfg_mixer_name);
err = snd_mixer_open(&handle, 0);
CHECK_ALSA_ERROR("Mixer open error");
- err = snd_mixer_attach(handle, card);
+ err = snd_mixer_attach(handle, p->cfg_mixer_device);
CHECK_ALSA_ERROR("Mixer attach error");
err = snd_mixer_selem_register(handle, NULL, NULL);
@@ -791,10 +767,18 @@ const struct ao_driver audio_out_alsa = {
.resume = audio_resume,
.reset = reset,
.priv_size = sizeof(struct priv),
- .priv_defaults = &(const struct priv) { .cfg_block = 1 },
+ .priv_defaults = &(const struct priv) {
+ .cfg_block = 1,
+ .cfg_mixer_device = "default",
+ .cfg_mixer_name = "Master",
+ .cfg_mixer_index = 0,
+ },
.options = (const struct m_option[]) {
OPT_STRING("device", cfg_device, 0),
OPT_FLAG("block", cfg_block, 0),
+ OPT_STRING("mixer-device", cfg_mixer_device, 0),
+ OPT_STRING("mixer-name", cfg_mixer_name, 0),
+ OPT_INTRANGE("mixer-index", cfg_mixer_index, 0, 0, 99),
{0}
},
};
diff --git a/audio/out/ao_oss.c b/audio/out/ao_oss.c
index fa590f7965..6a46bd4db1 100644
--- a/audio/out/ao_oss.c
+++ b/audio/out/ao_oss.c
@@ -193,10 +193,10 @@ static int control(struct ao *ao, enum aocontrol cmd, void *arg)
// return: 0=success -1=fail
static int init(struct ao *ao, char *params)
{
- struct MPOpts *opts = ao->opts;
char *mixer_channels[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_NAMES;
int oss_format;
- char *mdev = opts->mixer_device, *mchan = opts->mixer_channel;
+ char *mdev = PATH_DEV_MIXER;
+ char *mchan = talloc_strdup(ao, mixer_channels[SOUND_MIXER_PCM]);
mp_msg(MSGT_AO, MSGL_V, "ao2: %d Hz %d chans %s\n", ao->samplerate,
ao->channels.num, af_fmt2str_short(ao->format));
@@ -205,8 +205,6 @@ static int init(struct ao *ao, char *params)
*p = (struct priv) {
.dsp = PATH_DEV_DSP,
.audio_fd = -1,
- .oss_mixer_device = mdev ? mdev : PATH_DEV_MIXER,
- .oss_mixer_channel = SOUND_MIXER_PCM,
.audio_delay_method = 2,
.buffersize = -1,
.outburst = 512,
@@ -227,6 +225,7 @@ static int init(struct ao *ao, char *params)
}
p->dsp = talloc_strdup(ao, params);
}
+ p->oss_mixer_device = talloc_strdup(p, mdev);
if (mchan) {
int fd, devs, i;