From 09b04fbf0940151f5856aa4396f9b467622371a3 Mon Sep 17 00:00:00 2001 From: Dudemanguy Date: Wed, 27 Sep 2023 21:51:49 -0500 Subject: Revert "demux: eagerly read subtitle streams when switching tracks while paused" Actually, I thought of a better way of handling this shortly after merging this. Revert it and redo it in the next commit. This reverts commit c2c157ebeca3d072d4f48ff36228d01ebe888699. --- demux/demux.c | 11 +++-------- demux/demux.h | 2 +- sub/dec_sub.c | 2 +- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/demux/demux.c b/demux/demux.c index 3dbca9cafb..f198cfc9af 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -2767,7 +2767,7 @@ static int dequeue_packet(struct demux_stream *ds, double min_pts, // minutes away). In this situation, this function will just return -1. int demux_read_packet_async(struct sh_stream *sh, struct demux_packet **out_pkt) { - return demux_read_packet_async_until(sh, MP_NOPTS_VALUE, out_pkt, false); + return demux_read_packet_async_until(sh, MP_NOPTS_VALUE, out_pkt); } // Like demux_read_packet_async(). They are the same for min_pts==MP_NOPTS_VALUE. @@ -2775,25 +2775,20 @@ int demux_read_packet_async(struct sh_stream *sh, struct demux_packet **out_pkt) // subtitles), then return 0 until demuxing has reached min_pts, or the queue // overflowed, or EOF was reached, or a packet was read for this stream. int demux_read_packet_async_until(struct sh_stream *sh, double min_pts, - struct demux_packet **out_pkt, bool force_eager) + struct demux_packet **out_pkt) { struct demux_stream *ds = sh ? sh->ds : NULL; *out_pkt = NULL; if (!ds) return -1; - if (force_eager) - ds->eager = true; struct demux_internal *in = ds->in; pthread_mutex_lock(&in->lock); int r = -1; while (1) { r = dequeue_packet(ds, min_pts, out_pkt); - if (in->threading || in->blocked || r != 0) { - if (force_eager) - ds->eager = false; + if (in->threading || in->blocked || r != 0) break; - } // Needs to actually read packets until we got a packet or EOF. thread_work(in); } diff --git a/demux/demux.h b/demux/demux.h index c84a39fed9..08904f26cc 100644 --- a/demux/demux.h +++ b/demux/demux.h @@ -284,7 +284,7 @@ void demuxer_feed_caption(struct sh_stream *stream, demux_packet_t *dp); int demux_read_packet_async(struct sh_stream *sh, struct demux_packet **out_pkt); int demux_read_packet_async_until(struct sh_stream *sh, double min_pts, - struct demux_packet **out_pkt, bool force_eager); + struct demux_packet **out_pkt); bool demux_stream_is_selected(struct sh_stream *stream); void demux_set_stream_wakeup_cb(struct sh_stream *sh, void (*cb)(void *ctx), void *ctx); diff --git a/sub/dec_sub.c b/sub/dec_sub.c index f48eea83e2..dc26aa027e 100644 --- a/sub/dec_sub.c +++ b/sub/dec_sub.c @@ -294,7 +294,7 @@ bool sub_read_packets(struct dec_sub *sub, double video_pts, bool force) double min_pts = sub->opts->sub_delay < 0 || force ? video_pts : MP_NOPTS_VALUE; struct demux_packet *pkt; - int st = demux_read_packet_async_until(sub->sh, min_pts, &pkt, force); + int st = demux_read_packet_async_until(sub->sh, min_pts, &pkt); // Note: "wait" (st==0) happens with non-interleaved streams only, and // then we should stop the playloop until a new enough packet has been // seen (or the subtitle decoder's queue is full). This usually does not -- cgit v1.2.3