diff options
-rw-r--r-- | DOCS/man/en/lua.rst | 3 | ||||
-rw-r--r-- | demux/demux.c | 4 | ||||
-rw-r--r-- | demux/demux.h | 2 | ||||
-rw-r--r-- | libmpv/client.h | 6 | ||||
-rw-r--r-- | player/client.c | 1 | ||||
-rw-r--r-- | player/playloop.c | 3 |
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(); } } |