summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-06-11 21:39:48 +0200
committerwm4 <wm4@nowhere>2015-06-11 21:42:09 +0200
commite53cb0890e8071ca86271c8b100343944dbbefe7 (patch)
tree155073a38d2f073f412baf1c6fd7da2eea9b803d
parent87b60ded88f2cfb54636f88324a715a943f14fb9 (diff)
downloadmpv-e53cb0890e8071ca86271c8b100343944dbbefe7.tar.bz2
mpv-e53cb0890e8071ca86271c8b100343944dbbefe7.tar.xz
client API: add MPV_END_FILE_REASON_REDIRECT
Requested. Minor incompatible behavior change, as it was signalling MPV_END_FILE_REASON_EOF previously.
-rw-r--r--DOCS/client-api-changes.rst3
-rw-r--r--libmpv/client.h11
-rw-r--r--player/loadfile.c6
3 files changed, 17 insertions, 3 deletions
diff --git a/DOCS/client-api-changes.rst b/DOCS/client-api-changes.rst
index e821d077c7..241b7569d4 100644
--- a/DOCS/client-api-changes.rst
+++ b/DOCS/client-api-changes.rst
@@ -32,6 +32,9 @@ API changes
::
+ 1.18 - add MPV_END_FILE_REASON_REDIRECT, and change behavior of
+ MPV_EVENT_END_FILE accordingly
+ - a bunch of interface-changes.rst changes
1.17 - mpv_initialize() now blocks SIGPIPE (details see client.h)
--- mpv 0.9.0 is released ---
1.16 - add mpv_opengl_cb_report_flip()
diff --git a/libmpv/client.h b/libmpv/client.h
index 8958865c79..3bfced25ca 100644
--- a/libmpv/client.h
+++ b/libmpv/client.h
@@ -198,7 +198,7 @@ extern "C" {
* relational operators (<, >, <=, >=).
*/
#define MPV_MAKE_VERSION(major, minor) (((major) << 16) | (minor) | 0UL)
-#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 17)
+#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 18)
/**
* Return the MPV_CLIENT_API_VERSION the mpv source has been compiled with.
@@ -1307,6 +1307,15 @@ typedef enum mpv_end_file_reason {
* mpv_event_end_file.error will be set.
*/
MPV_END_FILE_REASON_ERROR = 4,
+ /**
+ * The file was a playlist or similar. When the playlist is read, its
+ * entries will be appended to the playlist after the entry of the current
+ * file, the entry of the current file is removed, and a MPV_EVENT_END_FILE
+ * event is sent with reason set to MPV_END_FILE_REASON_REDIRECT. Then
+ * playback continues with the playlist contents.
+ * Since API version 1.18.
+ */
+ MPV_END_FILE_REASON_REDIRECT = 5,
} mpv_end_file_reason;
typedef struct mpv_event_end_file {
diff --git a/player/loadfile.c b/player/loadfile.c
index 93ebd73df6..6b25706055 100644
--- a/player/loadfile.c
+++ b/player/loadfile.c
@@ -1130,7 +1130,7 @@ goto_reopen_demuxer: ;
e->stream_flags |= entry_stream_flags;
transfer_playlist(mpctx, pl);
mp_notify_property(mpctx, "playlist");
- mpctx->error_playing = 1;
+ mpctx->error_playing = 2;
goto terminate_playback;
}
@@ -1300,11 +1300,13 @@ terminate_playback:
case PT_ERROR:
case AT_END_OF_FILE:
{
- if (mpctx->error_playing >= 0 && nothing_played)
+ if (mpctx->error_playing == 0 && nothing_played)
mpctx->error_playing = MPV_ERROR_NOTHING_TO_PLAY;
if (mpctx->error_playing < 0) {
end_event.error = mpctx->error_playing;
end_event.reason = MPV_END_FILE_REASON_ERROR;
+ } else if (mpctx->error_playing == 2) {
+ end_event.reason = MPV_END_FILE_REASON_REDIRECT;
} else {
end_event.reason = MPV_END_FILE_REASON_EOF;
}