From 3cde02fe2292bbc6e213b6a619c2bafa21412276 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 28 Oct 2014 15:44:25 +0100 Subject: client API: add an enum for mpv_event_end_file.reason Using magic integer values was an attempt to keep the API less verbose. But it was probably not a good idea. Reason 1 (restart) is not made explicit, because it is not used anymore starting with the previous commit. For ABI compatibility, the value is left as a hole in the enum. --- DOCS/client-api-changes.rst | 1 + libmpv/client.h | 34 ++++++++++++++++++++++++++-------- player/loadfile.c | 7 +++---- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/DOCS/client-api-changes.rst b/DOCS/client-api-changes.rst index a72bf9e398..b6b5dbc6ca 100644 --- a/DOCS/client-api-changes.rst +++ b/DOCS/client-api-changes.rst @@ -25,6 +25,7 @@ API changes :: + 1.9 - add enum mpv_end_file_reason for mpv_event_end_file.reason 1.8 - add qthelper.hpp 1.7 - add mpv_command_node(), mpv_command_node_async() 1.6 - modify "core-idle" property behavior diff --git a/libmpv/client.h b/libmpv/client.h index 8138b2ad5b..ed99715857 100644 --- a/libmpv/client.h +++ b/libmpv/client.h @@ -158,11 +158,13 @@ extern "C" { * number is incremented. This affects only C part, and not properties and * options. * + * Every API bump is described in DOCS/client-api-changes.rst + * * You can use MPV_MAKE_VERSION() and compare the result with integer * relational operators (<, >, <=, >=). */ #define MPV_MAKE_VERSION(major, minor) (((major) << 16) | (minor) | 0UL) -#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 8) +#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 9) /** * Return the MPV_CLIENT_API_VERSION the mpv source has been compiled with. @@ -1113,16 +1115,32 @@ typedef struct mpv_event_log_message { mpv_log_level log_level; } mpv_event_log_message; +typedef enum mpv_end_file_reason { + /** + * The end of file was reached. Sometimes this may also happen on + * incomplete or corrupted files, or if the network connection was + * interrupted when playing a remote file. It also happens if the + * playback range was restricted with --end or --frames or similar. + */ + MPV_END_FILE_REASON_EOF = 0, + /** + * Playback was stopped by an external action (e.g. playlist controls). + */ + MPV_END_FILE_REASON_STOP = 2, + /** + * Playback was stopped by the quit command or player shutdown. + */ + MPV_END_FILE_REASON_QUIT = 3, +} mpv_end_file_reason; + typedef struct mpv_event_end_file { /** - * Identifies the reason why playback was stopped: - * 0: the end of the file was reached or initialization failed - * 1: the file is restarted (e.g. edition switching) - * 2: playback was aborted by an external action (e.g. playlist controls) - * 3: the player received the quit command - * Other values should be treated as unknown. + * Corresponds to the values in enum mpv_end_file_reason (the "int" type + * will be replaced with mpv_end_file_reason on the next ABI bump). + * + * Unknown values should be treated as unknown. */ - int reason; + int reason; } mpv_event_end_file; typedef struct mpv_event_script_input_dispatch { diff --git a/player/loadfile.c b/player/loadfile.c index 68d8f78da1..58b9cf9f68 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -1184,12 +1184,11 @@ terminate_playback: mp_notify(mpctx, MPV_EVENT_TRACKS_CHANGED, NULL); struct mpv_event_end_file end_event = {0}; switch (mpctx->stop_play) { - case AT_END_OF_FILE: end_event.reason = 0; break; + case AT_END_OF_FILE: end_event.reason = MPV_END_FILE_REASON_EOF; break; case PT_NEXT_ENTRY: case PT_CURRENT_ENTRY: - case PT_STOP: end_event.reason = 2; break; - case PT_QUIT: end_event.reason = 3; break; - default: end_event.reason = -1; break; + case PT_STOP: end_event.reason = MPV_END_FILE_REASON_STOP; break; + case PT_QUIT: end_event.reason = MPV_END_FILE_REASON_QUIT; break; }; mp_notify(mpctx, MPV_EVENT_END_FILE, &end_event); -- cgit v1.2.3