summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDudemanguy <random342@airmail.cc>2023-09-27 21:51:49 -0500
committerDudemanguy <random342@airmail.cc>2023-09-27 21:51:49 -0500
commit09b04fbf0940151f5856aa4396f9b467622371a3 (patch)
treeb7324ca92f240387cc3e42a8e832efd5673dae8e
parentc2c157ebeca3d072d4f48ff36228d01ebe888699 (diff)
downloadmpv-09b04fbf0940151f5856aa4396f9b467622371a3.tar.bz2
mpv-09b04fbf0940151f5856aa4396f9b467622371a3.tar.xz
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.
-rw-r--r--demux/demux.c11
-rw-r--r--demux/demux.h2
-rw-r--r--sub/dec_sub.c2
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