summaryrefslogtreecommitdiffstats
path: root/mp_core.h
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-08-04 03:46:11 +0200
committerwm4 <wm4@nowhere>2012-08-04 19:59:56 +0200
commit9a2f4e10e71aa1c0c2970f807fe14000861b602b (patch)
tree35785a60a5befd494de2a790b44d35d9bfa3a044 /mp_core.h
parentc7be71ae710280f750c14973e303ec3550e94ec3 (diff)
downloadmpv-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.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/mp_core.h b/mp_core.h
index 153869d620..31834d61e9 100644
--- a/mp_core.h
+++ b/mp_core.h
@@ -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);