diff options
author | wm4 <wm4@nowhere> | 2012-08-04 03:46:11 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-08-04 19:59:56 +0200 |
commit | 9a2f4e10e71aa1c0c2970f807fe14000861b602b (patch) | |
tree | 35785a60a5befd494de2a790b44d35d9bfa3a044 /mp_core.h | |
parent | c7be71ae710280f750c14973e303ec3550e94ec3 (diff) | |
download | mpv-9a2f4e10e71aa1c0c2970f807fe14000861b602b.tar.bz2 mpv-9a2f4e10e71aa1c0c2970f807fe14000861b602b.tar.xz |
mplayer: never exit mplayer from within the play loop
The only place exit_player() should be called is the main() function.
exit_player() should be the only function allowed to call exit(). This
makes it easier to guarantee proper deinitialization, and allows using
the --leak-report flag without showing false positives.
The quit slave command now sets a flag only. It uses the same mechanism
that's normally used to advance to the next file on the playlist, so the
rest of the playback path should be able to react to the quit command
quickly enough. That is, the player should react just as fast to quit
requests in practice as before this commit.
In reinit_audio_chain(), the player was actually exited if
init_audio_filters() failed. Reuse the normal error handling path to
handle this condition.
Diffstat (limited to 'mp_core.h')
-rw-r--r-- | mp_core.h | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -54,6 +54,7 @@ enum stop_play_reason { PT_NEXT_ENTRY, // prepare to play next entry in playlist PT_CURRENT_ENTRY, // prepare to play mpctx->playlist->current PT_STOP, // stop playback, clear playlist + PT_QUIT, // stop playback, quit player }; enum exit_reason { @@ -99,6 +100,9 @@ typedef struct MPContext { enum stop_play_reason stop_play; unsigned int initialized_flags; // which subsystems have been initialized + // Return code to use with PT_QUIT + int quit_player_rc; + struct content_source *sources; int num_sources; struct timeline_part *timeline; @@ -227,7 +231,6 @@ void uninit_player(struct MPContext *mpctx, unsigned int mask); void reinit_audio_chain(struct MPContext *mpctx); void init_vo_spudec(struct MPContext *mpctx); double playing_audio_pts(struct MPContext *mpctx); -void exit_player_with_rc(struct MPContext *mpctx, enum exit_reason how, int rc); void add_subtitles(struct MPContext *mpctx, char *filename, float fps, int noerr); int reinit_video_chain(struct MPContext *mpctx); void pause_player(struct MPContext *mpctx); |