summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2015-02-02 23:01:11 +0100
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2015-02-03 00:40:02 +0100
commita3be14683a33211e3e07094246bb3342fc789763 (patch)
tree1db9298908cffa8906f076b4eec39858e49acb35
parentdd287a3276153ec4e43567ed0eddba7d595168cf (diff)
downloadmpv-a3be14683a33211e3e07094246bb3342fc789763.tar.bz2
mpv-a3be14683a33211e3e07094246bb3342fc789763.tar.xz
command: add property returning detected audio device
This can be useful to adjust some other audio related properties at runtime depending on the audio device being used.
-rw-r--r--DOCS/man/input.rst4
-rw-r--r--audio/out/ao.c5
-rw-r--r--audio/out/ao.h1
-rw-r--r--audio/out/ao_coreaudio.c2
-rw-r--r--audio/out/internal.h3
-rw-r--r--player/command.c12
6 files changed, 26 insertions, 1 deletions
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index 7d8ac297f4..9d27f9d98d 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -1589,6 +1589,10 @@ Property list
``current-ao``
Current audio output driver (name as used with ``--ao``).
+``audio-out-detected-device``
+ Return the audio device selected by the AO driver (only implemented for
+ some drivers: currently only ``coreaudio``).
+
``mpv-version``
Return the mpv version/copyright string. Depending on how the binary was
built, it might contain either a release version, or just a git hash.
diff --git a/audio/out/ao.c b/audio/out/ao.c
index f77ae4c24a..dbdcf272cb 100644
--- a/audio/out/ao.c
+++ b/audio/out/ao.c
@@ -440,6 +440,11 @@ bool ao_untimed(struct ao *ao)
return ao->untimed;
}
+const char *ao_get_detected_device(struct ao *ao)
+{
+ return ao->detected_device;
+}
+
struct ao_device_list *ao_get_device_list(struct mpv_global *global)
{
struct ao_device_list *list = talloc_zero(NULL, struct ao_device_list);
diff --git a/audio/out/ao.h b/audio/out/ao.h
index f1c922ae69..dbbed24873 100644
--- a/audio/out/ao.h
+++ b/audio/out/ao.h
@@ -79,6 +79,7 @@ void ao_uninit(struct ao *ao);
void ao_get_format(struct ao *ao, struct mp_audio *format);
const char *ao_get_name(struct ao *ao);
const char *ao_get_description(struct ao *ao);
+const char *ao_get_detected_device(struct ao *ao);
bool ao_untimed(struct ao *ao);
int ao_play(struct ao *ao, void **data, int samples, int flags);
int ao_control(struct ao *ao, enum aocontrol cmd, void *arg);
diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c
index 0c7f769e72..590549bd1a 100644
--- a/audio/out/ao_coreaudio.c
+++ b/audio/out/ao_coreaudio.c
@@ -156,6 +156,8 @@ static int init(struct ao *ao)
OSStatus err = ca_select_device(ao, ao->device, &p->device);
CHECK_CA_ERROR("failed to select device");
+ ao->detected_device = talloc_asprintf(ao, "%d", p->device);
+
if (!init_chmap(ao))
goto coreaudio_error;
diff --git a/audio/out/internal.h b/audio/out/internal.h
index 4d18adef78..9414208923 100644
--- a/audio/out/internal.h
+++ b/audio/out/internal.h
@@ -50,6 +50,9 @@ struct ao {
// default device should be used, this is set to NULL.
char *device;
+ // Device actually chosen by the AO
+ char *detected_device;
+
// Application name to report to the audio API.
char *client_name;
diff --git a/player/command.c b/player/command.c
index e886dd4360..85e5b17be0 100644
--- a/player/command.c
+++ b/player/command.c
@@ -1577,6 +1577,15 @@ static int mp_property_ao(void *ctx, struct m_property *p, int action, void *arg
mpctx->ao ? ao_get_name(mpctx->ao) : NULL);
}
+static int mp_property_ao_detected_device(void *ctx,struct m_property *prop,
+ int action, void *arg)
+{
+ MPContext *mpctx = ctx;
+ if (!mpctx->ao)
+ return M_PROPERTY_UNAVAILABLE;
+ return m_property_strdup_ro(action, arg, ao_get_detected_device(mpctx->ao));
+}
+
/// Audio delay (RW)
static int mp_property_audio_delay(void *ctx, struct m_property *prop,
int action, void *arg)
@@ -3375,6 +3384,7 @@ static const struct m_property mp_properties[] = {
{"audio-device", mp_property_audio_device},
{"audio-device-list", mp_property_audio_devices},
{"current-ao", mp_property_ao},
+ {"audio-out-detected-device", mp_property_ao_detected_device},
// Video
{"fullscreen", mp_property_fullscreen},
@@ -3516,7 +3526,7 @@ static const char *const *const mp_event_property_change[] = {
"detected-hwdec"),
E(MPV_EVENT_AUDIO_RECONFIG, "audio-format", "audio-codec", "audio-bitrate",
"samplerate", "channels", "audio", "volume", "mute", "balance",
- "volume-restore-data", "current-ao"),
+ "volume-restore-data", "current-ao", "audio-out-detected-device"),
E(MPV_EVENT_SEEK, "seeking", "core-idle"),
E(MPV_EVENT_PLAYBACK_RESTART, "seeking", "core-idle"),
E(MPV_EVENT_METADATA_UPDATE, "metadata", "filtered-metadata"),