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.
This commit is contained in:
wm4 2013-07-21 23:27:09 +02:00
parent 5c610836cd
commit 5b91ba0a8d
7 changed files with 33 additions and 59 deletions

View File

@ -30,6 +30,15 @@ Available audio output drivers are:
``device=<device>``
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.
``mixer-device=<device>``
Set the mixer device used with ``--no-softvol`` (default: ``default``).
``mixer-name=<name>``
Set the name of the mixer element (default: ``Master``). This is for
example ``PCM`` or ``Master``.
``mixer-index=<number>``
Set the index of the mixer channel (default: 0). Consider the output
"``amixer scontrols``", then the index is the number that follows the
name of the element.
.. note::
@ -47,7 +56,9 @@ Available audio output drivers are:
``<mixer-device>``
Sets the audio mixer device (default: ``/dev/mixer``).
``<mixer-channel>``
Sets the audio mixer channel (default: ``pcm``).
Sets the audio mixer channel (default: ``pcm``). Other valid values
include **vol, pcm, line**. For a complete list of options look for
``SOUND_DEVICE_NAMES`` in ``/usr/include/linux/soundcard.h``.
``jack``
JACK (Jack Audio Connection Kit) audio output driver

View File

@ -131,6 +131,8 @@ Command Line Switches
``-lavfdopts`` ``--demuxer-lavf-...``
``-rawaudio ...`` ``--demuxer-rawaudio-...``
``-rawvideo ...`` ``--demuxer-rawvideo-...``
``--mixer`` AO suboptions (``alsa``, ``oss``)
``--mixer-channel`` AO suboptions (``alsa``, ``oss``)
=========================== ========================================
.. note::

View File

@ -1202,24 +1202,6 @@
:fps=<value>: output fps (default: 25)
:type=<value>: input file type (available: jpeg, png, tga, sgi)
``--mixer=<device>``
Use a mixer device different from the default ``/dev/mixer``. For ALSA
this is the mixer name.
``--mixer-channel=<name[,index]>``
(``--ao=oss`` and ``--ao=alsa`` only)
This option will tell mpv to use a different channel for controlling
volume than the default PCM. Options for OSS include **vol, pcm, line**.
For a complete list of options look for ``SOUND_DEVICE_NAMES`` in
``/usr/include/linux/soundcard.h``. For ALSA, you can use the names e.g.
"``amixer scontrols``" displays, like **Master, Line, PCM**.
.. note::
ALSA mixer channel names followed by a number must be specified in the
<name,number> format, i.e. a channel labeled 'PCM 1' in alsamixer must
be converted to PCM,1.
``--monitoraspect=<ratio>``
Set the aspect ratio of your monitor or TV screen. A value of 0 disables a
previous setting (e.g. in the config file). Overrides the

View File

@ -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}
},
};

View File

@ -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;

View File

@ -526,8 +526,6 @@ const m_option_t mp_opts[] = {
OPT_FLAG("ontop", vo.ontop, 0),
OPT_FLAG("border", vo.border, 0),
OPT_STRING("mixer", mixer_device, 0),
OPT_STRING("mixer-channel", mixer_channel, 0),
OPT_CHOICE("softvol", softvol, 0,
({"no", SOFTVOL_NO},
{"yes", SOFTVOL_YES},

View File

@ -49,8 +49,6 @@ typedef struct MPOpts {
struct m_obj_settings *audio_driver_list;
int fixed_vo;
char *mixer_device;
char *mixer_channel;
int softvol;
float mixer_init_volume;
int mixer_init_mute;