From 70630fb803fde5ddcf9f3bd33ab8d682274d1ee7 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 28 Nov 2014 22:07:46 +0100 Subject: player: simplify and fix ordered chapter EOF handling Ordered chapter EOF was handled as special-case of ending the last segment. This broke --kee-open, because it set AT_END_OF_FILE in an "inconvenient" place (after checking for --keep-open, and before the code that exits playback if EOF is reached). We don't actually need to handle the last segment specially. Instead, we remain in the same segment if it ends. The normal playback logic will recognize EOF, because the end of the segment "cuts off" the file. Now timeline_set_from_time() never "fails", and we can remove the old segment EOF handling code in mp_seek(). --- player/playloop.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) (limited to 'player/playloop.c') diff --git a/player/playloop.c b/player/playloop.c index 635c581def..190bc3f98c 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -214,16 +214,6 @@ static int mp_seek(MPContext *mpctx, struct seek_params seek, bool need_reset = false; demuxer_amount = timeline_set_from_time(mpctx, seek.amount, &need_reset); - if (demuxer_amount == MP_NOPTS_VALUE) { - assert(!need_reset); - mpctx->stop_play = AT_END_OF_FILE; - // When seeking outside of the file, but not when ending last segment. - if (!timeline_fallthrough) { - clear_audio_output_buffers(mpctx); - reset_playback_state(mpctx); - } - return -1; - } if (need_reset) { reinit_video_chain(mpctx); reinit_audio_chain(mpctx); @@ -961,10 +951,11 @@ void run_playloop(struct MPContext *mpctx) mpctx->audio_status == STATUS_EOF && mpctx->video_status == STATUS_EOF) { - if (end_is_new_segment) { + int new_part = mpctx->timeline_part + 1; + if (end_is_new_segment && new_part < mpctx->num_timeline_parts) { mp_seek(mpctx, (struct seek_params){ .type = MPSEEK_ABSOLUTE, - .amount = mpctx->timeline[mpctx->timeline_part+1].start + .amount = mpctx->timeline[new_part].start }, true); } else mpctx->stop_play = AT_END_OF_FILE; -- cgit v1.2.3