diff options
Diffstat (limited to 'player/loadfile.c')
-rw-r--r-- | player/loadfile.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/player/loadfile.c b/player/loadfile.c index e1ffa5d783..9816dbf4cc 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -312,6 +312,21 @@ static struct sh_stream *select_fallback_stream(struct demuxer *d, return best_stream; } +// Called from the demuxer thread if a new packet is available. +static void wakeup_demux(void *pctx) +{ + struct MPContext *mpctx = pctx; + mp_input_wakeup(mpctx->input); +} + +static void enable_demux_thread(struct MPContext *mpctx) +{ + if (mpctx->demuxer && mpctx->opts->demuxer_thread) { + demux_set_wakeup_cb(mpctx->demuxer, wakeup_demux, mpctx); + demux_start_thread(mpctx->demuxer); + } +} + bool timeline_set_part(struct MPContext *mpctx, int i, bool force) { struct timeline_part *p = mpctx->timeline + mpctx->timeline_part; @@ -353,8 +368,7 @@ bool timeline_set_part(struct MPContext *mpctx, int i, bool force) } reselect_demux_streams(mpctx); - if (mpctx->demuxer && mpctx->opts->demuxer_thread) - demux_start_thread(mpctx->demuxer); + enable_demux_thread(mpctx); return true; } @@ -1188,8 +1202,7 @@ goto_reopen_demuxer: ; update_demuxer_properties(mpctx); - if (mpctx->demuxer && opts->demuxer_thread) - demux_start_thread(mpctx->demuxer); + enable_demux_thread(mpctx); if (mpctx->current_track[0][STREAM_VIDEO] && mpctx->current_track[0][STREAM_VIDEO]->attached_picture) |