summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-02-19 16:00:37 +0100
committerwm4 <wm4@nowhere>2014-02-19 16:00:37 +0100
commit0ad2211508a513b8e38623fcebfa4937d001c30d (patch)
treed4fa2b6088136f769cbabc96adbf1de44b7d05f1
parent57c9f5236a43efd9d979b7ee18a25de2d3d88dd5 (diff)
downloadmpv-0ad2211508a513b8e38623fcebfa4937d001c30d.tar.bz2
mpv-0ad2211508a513b8e38623fcebfa4937d001c30d.tar.xz
client API: add event for metadata changes
-rw-r--r--DOCS/man/en/lua.rst3
-rw-r--r--demux/demux.c4
-rw-r--r--demux/demux.h2
-rw-r--r--libmpv/client.h6
-rw-r--r--player/client.c1
-rw-r--r--player/playloop.c3
6 files changed, 16 insertions, 3 deletions
diff --git a/DOCS/man/en/lua.rst b/DOCS/man/en/lua.rst
index 9176051231..2d6a7728b6 100644
--- a/DOCS/man/en/lua.rst
+++ b/DOCS/man/en/lua.rst
@@ -388,3 +388,6 @@ List of events
``audio-reconfig``
Happens on audio output or filter reconfig.
+
+``metadata-update``
+ Metadata (like file tags) was updated.
diff --git a/demux/demux.c b/demux/demux.c
index 02e50a53c0..c15d66a8d3 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -745,7 +745,7 @@ char *demux_info_get(demuxer_t *demuxer, const char *opt)
return mp_tags_get_str(demuxer->metadata, opt);
}
-void demux_info_update(struct demuxer *demuxer)
+bool demux_info_update(struct demuxer *demuxer)
{
struct mp_tags *tags = demuxer->metadata;
// Take care of stream metadata as well
@@ -767,8 +767,10 @@ void demux_info_update(struct demuxer *demuxer)
talloc_free(demuxer->previous_metadata);
demuxer->previous_metadata = data;
demux_info_print(demuxer);
+ return true;
} else {
talloc_free(data);
+ return false;
}
}
diff --git a/demux/demux.h b/demux/demux.h
index 3d3a3e5bc8..a8c407e7ba 100644
--- a/demux/demux.h
+++ b/demux/demux.h
@@ -244,7 +244,7 @@ void demux_flush(struct demuxer *demuxer);
int demux_seek(struct demuxer *demuxer, float rel_seek_secs, int flags);
char *demux_info_get(struct demuxer *demuxer, const char *opt);
-void demux_info_update(struct demuxer *demuxer);
+bool demux_info_update(struct demuxer *demuxer);
int demux_control(struct demuxer *demuxer, int cmd, void *arg);
diff --git a/libmpv/client.h b/libmpv/client.h
index 7bc613b15e..5139ceddfa 100644
--- a/libmpv/client.h
+++ b/libmpv/client.h
@@ -638,6 +638,12 @@ typedef enum mpv_event_id {
* because there is no such thing as audio output embedding.
*/
MPV_EVENT_AUDIO_RECONFIG = 18,
+ /**
+ * Happens when metadata (like file tags) is possibly updated. (It's left
+ * unspecified whether this happens on file start or only when it changes
+ * within a file.)
+ */
+ MPV_EVENT_METADATA_UPDATE = 19,
} mpv_event_id;
/**
diff --git a/player/client.c b/player/client.c
index f63611f79c..39c28d2074 100644
--- a/player/client.c
+++ b/player/client.c
@@ -844,6 +844,7 @@ static const char *event_table[] = {
[MPV_EVENT_CLIENT_MESSAGE] = "client-message",
[MPV_EVENT_VIDEO_RECONFIG] = "video-reconfig",
[MPV_EVENT_AUDIO_RECONFIG] = "audio-reconfig",
+ [MPV_EVENT_METADATA_UPDATE] = "metadata-update",
};
const char *mpv_event_name(mpv_event_id event)
diff --git a/player/playloop.c b/player/playloop.c
index 261deaf217..88adf9e35c 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -669,7 +669,8 @@ static bool handle_osd_redraw(struct MPContext *mpctx)
static void handle_metadata_update(struct MPContext *mpctx)
{
if (mp_time_sec() > mpctx->last_metadata_update + 2) {
- demux_info_update(mpctx->demuxer);
+ if (demux_info_update(mpctx->demuxer))
+ mp_notify(mpctx, MPV_EVENT_METADATA_UPDATE, NULL);
mpctx->last_metadata_update = mp_time_sec();
}
}