summaryrefslogtreecommitdiffstats
path: root/mpvcore/mplayer.c
diff options
context:
space:
mode:
Diffstat (limited to 'mpvcore/mplayer.c')
-rw-r--r--mpvcore/mplayer.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/mpvcore/mplayer.c b/mpvcore/mplayer.c
index fbba387681..50c3db10d7 100644
--- a/mpvcore/mplayer.c
+++ b/mpvcore/mplayer.c
@@ -149,6 +149,8 @@
#include "mpvcore/mp_core.h"
#include "mpvcore/options.h"
+#include "mp_lua.h"
+
const char mp_help_text[] = _(
"Usage: mpv [options] [url|path/]filename\n"
"\n"
@@ -548,6 +550,10 @@ static MP_NORETURN void exit_player(struct MPContext *mpctx,
mpctx->encode_lavc_ctx = NULL;
+#ifdef CONFIG_LUA
+ mp_lua_uninit(mpctx);
+#endif
+
#if defined(__MINGW32__) || defined(__CYGWIN__)
timeEndPeriod(1);
#endif
@@ -1028,6 +1034,8 @@ static struct track *add_stream_track(struct MPContext *mpctx,
demuxer_select_track(track->demuxer, stream, false);
+ mp_notify(mpctx, MP_EVENT_TRACKS_CHANGED, NULL);
+
return track;
}
@@ -1057,6 +1065,8 @@ static void add_dvd_tracks(struct MPContext *mpctx)
struct stream_lang_req req = {.type = STREAM_SUB, .id = n};
stream_control(stream, STREAM_CTRL_GET_LANG, &req);
track->lang = talloc_strdup(track, req.name);
+
+ mp_notify(mpctx, MP_EVENT_TRACKS_CHANGED, NULL);
}
}
demuxer_enable_autoselect(demuxer);
@@ -2035,12 +2045,15 @@ void mp_switch_track(struct MPContext *mpctx, enum stream_type type,
if (type == STREAM_VIDEO) {
mpctx->opts->video_id = user_tid;
reinit_video_chain(mpctx);
+ mp_notify_property(mpctx, "vid");
} else if (type == STREAM_AUDIO) {
mpctx->opts->audio_id = user_tid;
reinit_audio_chain(mpctx);
+ mp_notify_property(mpctx, "aid");
} else if (type == STREAM_SUB) {
mpctx->opts->sub_id = user_tid;
reinit_subs(mpctx);
+ mp_notify_property(mpctx, "sid");
}
talloc_free(mpctx->track_layout_hash);
@@ -2083,6 +2096,9 @@ bool mp_remove_track(struct MPContext *mpctx, struct track *track)
}
mpctx->num_tracks--;
talloc_free(track);
+
+ mp_notify(mpctx, MP_EVENT_TRACKS_CHANGED, NULL);
+
return true;
}
@@ -2761,6 +2777,8 @@ static double update_video(struct MPContext *mpctx, double endpts)
void pause_player(struct MPContext *mpctx)
{
+ mp_notify_property(mpctx, "pause");
+
mpctx->opts->pause = 1;
if (mpctx->video_out)
@@ -2790,6 +2808,8 @@ void pause_player(struct MPContext *mpctx)
void unpause_player(struct MPContext *mpctx)
{
+ mp_notify_property(mpctx, "pause");
+
mpctx->opts->pause = 0;
if (mpctx->video_out && mpctx->opts->stop_screensaver)
@@ -3418,6 +3438,8 @@ static void handle_cursor_autohide(struct MPContext *mpctx)
static void handle_input_and_seek_coalesce(struct MPContext *mpctx)
{
+ mp_flush_events(mpctx);
+
mp_cmd_t *cmd;
while ((cmd = mp_input_get_cmd(mpctx->input, 0, 1)) != NULL) {
/* Allow running consecutive seek commands to combine them,
@@ -4216,6 +4238,7 @@ static void idle_loop(struct MPContext *mpctx)
false)));
run_command(mpctx, cmd);
mp_cmd_free(cmd);
+ mp_flush_events(mpctx);
}
}
@@ -4269,6 +4292,10 @@ static void play_current_file(struct MPContext *mpctx)
double playback_start = -1e100;
mpctx->initialized_flags |= INITIALIZED_PLAYBACK;
+
+ mp_notify(mpctx, MP_EVENT_START_FILE, NULL);
+ mp_flush_events(mpctx);
+
mpctx->stop_play = 0;
mpctx->filename = NULL;
@@ -4612,6 +4639,10 @@ terminate_playback: // don't jump here after ao/vo/getch initialization!
(playback_start < 0 || mp_time_sec() - playback_start < 3.0);
if (mpctx->playlist->current && !mpctx->playlist->current_was_replaced)
mpctx->playlist->current->playback_failed = playback_failed;
+
+ mp_notify(mpctx, MP_EVENT_TRACKS_CHANGED, NULL);
+ mp_notify(mpctx, MP_EVENT_END_FILE, NULL);
+ mp_flush_events(mpctx);
}
// Determine the next file to play. Note that if this function returns non-NULL,
@@ -4840,6 +4871,7 @@ static int mpv_main(int argc, char *argv[])
GetCpuCaps(&gCpuCaps);
screenshot_init(mpctx);
mpctx->mixer = mixer_init(mpctx, opts);
+ command_init(mpctx);
// Preparse the command line
m_config_preparse_command_line(mpctx->mconfig, argc, argv);
@@ -4902,6 +4934,12 @@ static int mpv_main(int argc, char *argv[])
mpctx->osd = osd_create(opts, mpctx->ass_library);
+#ifdef CONFIG_LUA
+ // Lua user scripts can call arbitrary functions. Load them at a point
+ // where this is safe.
+ mp_lua_init(mpctx);
+#endif
+
if (opts->shuffle)
playlist_shuffle(mpctx->playlist);