diff options
author | wm4 <wm4@nowhere> | 2014-03-30 19:09:31 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-03-30 19:21:33 +0200 |
commit | 392997fa109ec8b6431b16af070cc2dbd043ae8f (patch) | |
tree | 41233f1c723898561855b559c116935c4d5680e8 | |
parent | 3fe6426ae0a6c2cd926d37e8b3c704963a573056 (diff) | |
download | mpv-392997fa109ec8b6431b16af070cc2dbd043ae8f.tar.bz2 mpv-392997fa109ec8b6431b16af070cc2dbd043ae8f.tar.xz |
command: change what the metadata property returns
Change the type of the property from a string list (alternating
key/value entries) to a map. Using the client API, this will return
MPV_FORMAT_NODE_MAP, while Lua mp.get_property_native returns a
dictionary-like table.
-rw-r--r-- | DOCS/man/en/input.rst | 12 | ||||
-rw-r--r-- | player/command.c | 28 |
2 files changed, 29 insertions, 11 deletions
diff --git a/DOCS/man/en/input.rst b/DOCS/man/en/input.rst index 5d383b4f28..6fe4c90759 100644 --- a/DOCS/man/en/input.rst +++ b/DOCS/man/en/input.rst @@ -662,9 +662,15 @@ an option at runtime. Current DVD angle. ``metadata`` - Metadata key/value pairs. The raw property value will return a list of - key and value strings separated by ``,``. (If a key or value contains ``,``, - you're screwed.) + Metadata key/value pairs. + + If the property is accessed with Lua's ``mp.get_property_native``, this + returns a table with metadata keys mapping to metadata values. If it is + accessed with the client API, this returns a ``MPV_FORMAT_NODE_MAP``, + with tag keys mapping to tag values. + + For OSD, it returns a formatted list. Trying to retrieve this property as + a raw string doesn't work. This has a number of sub-properties: diff --git a/player/command.c b/player/command.c index 2807476f47..14654af14b 100644 --- a/player/command.c +++ b/player/command.c @@ -827,14 +827,26 @@ static int tag_property(m_option_t *prop, int action, void *arg, { switch (action) { case M_PROPERTY_GET: { - char **slist = NULL; - int num = 0; + mpv_node_list *list = talloc_zero(NULL, mpv_node_list); + mpv_node node = { + .format = MPV_FORMAT_NODE_MAP, + .u.list = list, + }; + list->num = tags->num_keys; + list->values = talloc_array(list, mpv_node, list->num); + list->keys = talloc_array(list, char*, list->num); for (int n = 0; n < tags->num_keys; n++) { - MP_TARRAY_APPEND(NULL, slist, num, talloc_strdup(NULL, tags->keys[n])); - MP_TARRAY_APPEND(NULL, slist, num, talloc_strdup(NULL, tags->values[n])); + list->keys[n] = talloc_strdup(list, tags->keys[n]); + list->values[n] = (struct mpv_node){ + .format = MPV_FORMAT_STRING, + .u.string = talloc_strdup(list, tags->values[n]), + }; } - MP_TARRAY_APPEND(NULL, slist, num, NULL); - *(char ***)arg = slist; + *(mpv_node*)arg = node; + return M_PROPERTY_OK; + } + case M_PROPERTY_GET_TYPE: { + *(struct m_option *)arg = (struct m_option){.type = CONF_TYPE_NODE}; return M_PROPERTY_OK; } case M_PROPERTY_PRINT: { @@ -2133,8 +2145,8 @@ static const m_option_t mp_properties[] = { 0, 0, 0, NULL }, { "editions", mp_property_editions, CONF_TYPE_INT }, { "angle", mp_property_angle, &m_option_type_dummy }, - { "metadata", mp_property_metadata, CONF_TYPE_STRING_LIST }, - { "chapter-metadata", mp_property_chapter_metadata, CONF_TYPE_STRING_LIST }, + M_PROPERTY("metadata", mp_property_metadata), + M_PROPERTY("chapter-metadata", mp_property_chapter_metadata), M_OPTION_PROPERTY_CUSTOM("pause", mp_property_pause), { "cache", mp_property_cache, CONF_TYPE_INT }, M_OPTION_PROPERTY("pts-association-mode"), |