summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-05-22 20:23:47 +0200
committerwm4 <wm4@nowhere>2015-05-22 20:23:47 +0200
commitf9507fe9271329aba8b9f237ef71befde9e8b9f0 (patch)
tree41c9919467361092d845e4a2732bcdbf35c901b3
parent1eaceb5fae4eae3cc767b9329fdeda21ae1338f3 (diff)
downloadmpv-f9507fe9271329aba8b9f237ef71befde9e8b9f0.tar.bz2
mpv-f9507fe9271329aba8b9f237ef71befde9e8b9f0.tar.xz
command: add audio-params and audio-out-params properties
-rw-r--r--DOCS/interface-changes.rst1
-rw-r--r--DOCS/man/input.rst36
-rw-r--r--player/command.c41
3 files changed, 77 insertions, 1 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index 69cf0021a2..69fe7c7a21 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -20,6 +20,7 @@ Interface changes
::
--- mpv 0.10.0 will be released ---
+ - add audio-params and audio-out-params properties
- deprecate "audio-format" property, replaced with "audio-codec-name"
- deprecate --media-title, replaced with --force-media-title
- deprecate "length" property, replaced with "duration"
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index 57823497ad..f12d0eb15a 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -1156,6 +1156,42 @@ Property list
Number of audio channels. The OSD value of this property is actually the
channel layout, while the raw value returns the number of channels only.
+``audio-params``
+ Audio format as output by the audio decoder.
+ This has a number of sub-properties:
+
+ ``audio-params/format``
+ The sample format as string. This uses the same names as used in other
+ places of mpv.
+
+ ``audio-params/samplerate``
+ Samplerate.
+
+ ``audio-params/channels``
+ The channel layout as a string. This is similar to what the
+ ``--audio-channels`` accepts.
+
+ ``audio-params/channel-count``
+ Number of audio channels. This is redundant to the ``channels`` field
+ described above.
+
+ When querying the property with the client API using ``MPV_FORMAT_NODE``,
+ or with Lua ``mp.get_property_native``, this will return a mpv_node with
+ the following contents:
+
+ ::
+
+ MPV_FORMAT_NODE_ARRAY
+ MPV_FORMAT_NODE_MAP (for each track)
+ "format" MPV_FORMAT_STRING
+ "samplerate" MPV_FORMAT_INT64
+ "channels" MPV_FORMAT_STRING
+ "channel-count" MPV_FORMAT_INT64
+
+``audio-out-params``
+ Same as ``audio-params``, but the format of the data written to the audio
+ API.
+
``aid`` (RW)
Current audio track (similar to ``--aid``).
diff --git a/player/command.c b/player/command.c
index 209bcac56b..c6dc5d3fa0 100644
--- a/player/command.c
+++ b/player/command.c
@@ -1656,6 +1656,42 @@ static int mp_property_audio_codec(void *ctx, struct m_property *prop,
return m_property_strdup_ro(action, arg, c);
}
+static int property_audiofmt(struct mp_audio a, int action, void *arg)
+{
+ if (!mp_audio_config_valid(&a))
+ return M_PROPERTY_UNAVAILABLE;
+
+ struct m_sub_property props[] = {
+ {"samplerate", SUB_PROP_INT(a.rate)},
+ {"channel-count", SUB_PROP_INT(a.channels.num)},
+ {"channels", SUB_PROP_STR(mp_chmap_to_str(&a.channels))},
+ {"format", SUB_PROP_STR(af_fmt_to_str(a.format))},
+ {0}
+ };
+
+ return m_property_read_sub(props, action, arg);
+}
+
+static int mp_property_audio_params(void *ctx, struct m_property *prop,
+ int action, void *arg)
+{
+ MPContext *mpctx = ctx;
+ struct mp_audio fmt = {0};
+ if (mpctx->d_audio)
+ fmt = mpctx->d_audio->decode_format;
+ return property_audiofmt(fmt, action, arg);
+}
+
+static int mp_property_audio_out_params(void *ctx, struct m_property *prop,
+ int action, void *arg)
+{
+ MPContext *mpctx = ctx;
+ struct mp_audio fmt = {0};
+ if (mpctx->ao)
+ ao_get_format(mpctx->ao, &fmt);
+ return property_audiofmt(fmt, action, arg);
+}
+
/// Samplerate (RO)
static int mp_property_samplerate(void *ctx, struct m_property *prop,
int action, void *arg)
@@ -3348,6 +3384,8 @@ static const struct m_property mp_properties[] = {
{"audio-delay", mp_property_audio_delay},
{"audio-codec-name", mp_property_audio_codec_name},
{"audio-codec", mp_property_audio_codec},
+ {"audio-params", mp_property_audio_params},
+ {"audio-out-params", mp_property_audio_out_params},
{"audio-samplerate", mp_property_samplerate},
{"audio-channels", mp_property_channels},
{"aid", mp_property_audio},
@@ -3511,7 +3549,8 @@ static const char *const *const mp_event_property_change[] = {
"colormatrix-output-range", "colormatrix-primaries"),
E(MPV_EVENT_AUDIO_RECONFIG, "audio-format", "audio-codec", "audio-bitrate",
"samplerate", "channels", "audio", "volume", "mute", "balance",
- "volume-restore-data", "current-ao", "audio-codec-name"),
+ "volume-restore-data", "current-ao", "audio-codec-name", "audio-params",
+ "audio-out-params"),
E(MPV_EVENT_SEEK, "seeking", "core-idle"),
E(MPV_EVENT_PLAYBACK_RESTART, "seeking", "core-idle"),
E(MPV_EVENT_METADATA_UPDATE, "metadata", "filtered-metadata", "media-title"),