summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDudemanguy <random342@airmail.cc>2023-09-30 08:58:56 -0500
committerDudemanguy <random342@airmail.cc>2023-09-30 09:02:57 -0500
commit3a572c7a88329666a803bb8eb4de0a5a19e60cf8 (patch)
tree48b8f9f4d218149a67c12f838a8f0989799e338f
parent84fa7ea411e8e99fced66295c973ecdf94ee07b2 (diff)
downloadmpv-3a572c7a88329666a803bb8eb4de0a5a19e60cf8.tar.bz2
mpv-3a572c7a88329666a803bb8eb4de0a5a19e60cf8.tar.xz
Revert "demux: improve stream selection state"
The stream selection state wasn't improved. I didn't realize this messed with caches. All in all, just not a good idea. Back to drawing board I guess. This reverts commit f40bbfec4fcd2d9a787a4d98ec7698a646e5607e.
-rw-r--r--demux/demux.c17
-rw-r--r--demux/demux.h4
-rw-r--r--demux/demux_disc.c2
-rw-r--r--demux/demux_timeline.c2
-rw-r--r--player/loadfile.c6
-rw-r--r--player/playloop.c9
-rw-r--r--player/sub.c2
-rw-r--r--sub/dec_sub.c4
-rw-r--r--sub/dec_sub.h2
9 files changed, 19 insertions, 29 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 0e125dc660..b5d0bc0bc9 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -864,8 +864,7 @@ static void wakeup_ds(struct demux_stream *ds)
}
static void update_stream_selection_state(struct demux_internal *in,
- struct demux_stream *ds,
- bool paused)
+ struct demux_stream *ds)
{
ds->eof = false;
ds->refreshing = false;
@@ -887,8 +886,8 @@ static void update_stream_selection_state(struct demux_internal *in,
}
// Subtitles are only eagerly read if there are no other eagerly read
- // streams or the player is paused.
- if (any_av_streams && !paused) {
+ // streams.
+ if (any_av_streams) {
for (int n = 0; n < in->num_streams; n++) {
struct demux_stream *s = in->streams[n]->ds;
@@ -1003,7 +1002,7 @@ static void demux_add_sh_stream_locked(struct demux_internal *in,
sh->ds->queue = in->current_range->streams[sh->ds->index];
}
- update_stream_selection_state(in, sh->ds, false);
+ update_stream_selection_state(in, sh->ds);
switch (ds->type) {
case STREAM_AUDIO:
@@ -3962,7 +3961,7 @@ static void initiate_refresh_seek(struct demux_internal *in,
// ref_pts is used only if the stream is enabled. Then it serves as approximate
// start pts for this stream (in the worst case it is ignored).
void demuxer_select_track(struct demuxer *demuxer, struct sh_stream *stream,
- double ref_pts, bool selected, bool paused)
+ double ref_pts, bool selected)
{
struct demux_internal *in = demuxer->in;
struct demux_stream *ds = stream->ds;
@@ -3972,7 +3971,7 @@ void demuxer_select_track(struct demuxer *demuxer, struct sh_stream *stream,
if (ds->selected != selected) {
MP_VERBOSE(in, "%sselect track %d\n", selected ? "" : "de", stream->index);
ds->selected = selected;
- update_stream_selection_state(in, ds, paused);
+ update_stream_selection_state(in, ds);
in->tracks_switched = true;
if (ds->selected) {
if (in->back_demuxing)
@@ -3992,7 +3991,7 @@ void demuxer_select_track(struct demuxer *demuxer, struct sh_stream *stream,
// Execute a refresh seek on the given stream.
// ref_pts has the same meaning as with demuxer_select_track()
void demuxer_refresh_track(struct demuxer *demuxer, struct sh_stream *stream,
- double ref_pts, bool paused)
+ double ref_pts)
{
struct demux_internal *in = demuxer->in;
struct demux_stream *ds = stream->ds;
@@ -4000,7 +3999,7 @@ void demuxer_refresh_track(struct demuxer *demuxer, struct sh_stream *stream,
ref_pts = MP_ADD_PTS(ref_pts, -in->ts_offset);
if (ds->selected) {
MP_VERBOSE(in, "refresh track %d\n", stream->index);
- update_stream_selection_state(in, ds, paused);
+ update_stream_selection_state(in, ds);
if (in->back_demuxing)
ds->back_seek_pos = ref_pts;
if (!in->after_seek)
diff --git a/demux/demux.h b/demux/demux.h
index 4582c544e7..08904f26cc 100644
--- a/demux/demux.h
+++ b/demux/demux.h
@@ -319,9 +319,9 @@ void demux_get_reader_state(struct demuxer *demuxer, struct demux_reader_state *
void demux_block_reading(struct demuxer *demuxer, bool block);
void demuxer_select_track(struct demuxer *demuxer, struct sh_stream *stream,
- double ref_pts, bool selected, bool paused);
+ double ref_pts, bool selected);
void demuxer_refresh_track(struct demuxer *demuxer, struct sh_stream *stream,
- double ref_pts, bool paused);
+ double ref_pts);
int demuxer_help(struct mp_log *log, const m_option_t *opt, struct bstr name);
diff --git a/demux/demux_disc.c b/demux/demux_disc.c
index 5f8885e5e8..3dfff45403 100644
--- a/demux/demux_disc.c
+++ b/demux/demux_disc.c
@@ -59,7 +59,7 @@ static void reselect_streams(demuxer_t *demuxer)
for (int n = 0; n < MPMIN(num_slave, p->num_streams); n++) {
if (p->streams[n]) {
demuxer_select_track(p->slave, demux_get_stream(p->slave, n),
- MP_NOPTS_VALUE, demux_stream_is_selected(p->streams[n]), false);
+ MP_NOPTS_VALUE, demux_stream_is_selected(p->streams[n]));
}
}
}
diff --git a/demux/demux_timeline.c b/demux/demux_timeline.c
index 21fdcdbe5b..5572fb53bf 100644
--- a/demux/demux_timeline.c
+++ b/demux/demux_timeline.c
@@ -170,7 +170,7 @@ static void reselect_streams(struct demuxer *demuxer)
if (!src->current || seg->d != src->current->d)
selected = false;
struct sh_stream *sh = demux_get_stream(seg->d, i);
- demuxer_select_track(seg->d, sh, MP_NOPTS_VALUE, selected, false);
+ demuxer_select_track(seg->d, sh, MP_NOPTS_VALUE, selected);
update_slave_stats(demuxer, seg->d);
}
diff --git a/player/loadfile.c b/player/loadfile.c
index 2730746dd2..745a19a697 100644
--- a/player/loadfile.c
+++ b/player/loadfile.c
@@ -381,9 +381,9 @@ void reselect_demux_stream(struct MPContext *mpctx, struct track *track,
pts -= 10.0;
}
if (refresh_only)
- demuxer_refresh_track(track->demuxer, track->stream, pts, mpctx->paused);
+ demuxer_refresh_track(track->demuxer, track->stream, pts);
else
- demuxer_select_track(track->demuxer, track->stream, pts, track->selected, mpctx->paused);
+ demuxer_select_track(track->demuxer, track->stream, pts, track->selected);
}
static void enable_demux_thread(struct MPContext *mpctx, struct demuxer *demux)
@@ -1178,7 +1178,7 @@ static void *open_demux_thread(void *ctx)
int num_streams = demux_get_num_stream(demux);
for (int n = 0; n < num_streams; n++) {
struct sh_stream *sh = demux_get_stream(demux, n);
- demuxer_select_track(demux, sh, MP_NOPTS_VALUE, true, mpctx->paused);
+ demuxer_select_track(demux, sh, MP_NOPTS_VALUE, true);
}
demux_set_wakeup_cb(demux, wakeup_demux, mpctx);
diff --git a/player/playloop.c b/player/playloop.c
index e7f0a0c3e4..b0df04f2d9 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -180,15 +180,6 @@ void set_pause_state(struct MPContext *mpctx, bool user_pause)
} else {
(void)get_relative_time(mpctx); // ignore time that passed during pause
}
-
- if (mpctx->demuxer) {
- double pts = get_current_time(mpctx);
- for (int n = 0; n < num_ptracks[STREAM_SUB]; n++) {
- struct track *track = mpctx->current_track[n][STREAM_SUB];
- if (track && !track->is_external)
- demuxer_refresh_track(mpctx->demuxer, track->stream, pts, mpctx->paused);
- }
- }
}
update_core_idle_state(mpctx);
diff --git a/player/sub.c b/player/sub.c
index 91627d8c22..7dd1f2ccb6 100644
--- a/player/sub.c
+++ b/player/sub.c
@@ -100,7 +100,7 @@ static bool update_subtitle(struct MPContext *mpctx, double video_pts,
sub_preload(dec_sub);
}
- if (!sub_read_packets(dec_sub, video_pts))
+ if (!sub_read_packets(dec_sub, video_pts, mpctx->paused))
return false;
// Handle displaying subtitles on terminal; never done for secondary subs
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index 84c6b7bfbe..dc26aa027e 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -269,7 +269,7 @@ static bool is_new_segment(struct dec_sub *sub, struct demux_packet *p)
// Read packets from the demuxer stream passed to sub_create(). Return true if
// enough packets were read, false if the player should wait until the demuxer
// signals new packets available (and then should retry).
-bool sub_read_packets(struct dec_sub *sub, double video_pts)
+bool sub_read_packets(struct dec_sub *sub, double video_pts, bool force)
{
bool r = true;
pthread_mutex_lock(&sub->lock);
@@ -291,7 +291,7 @@ bool sub_read_packets(struct dec_sub *sub, double video_pts)
break;
// (Use this mechanism only if sub_delay matters to avoid corner cases.)
- double min_pts = sub->opts->sub_delay < 0 ? video_pts : MP_NOPTS_VALUE;
+ 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);
diff --git a/sub/dec_sub.h b/sub/dec_sub.h
index c2b75f308a..96b8c29807 100644
--- a/sub/dec_sub.h
+++ b/sub/dec_sub.h
@@ -43,7 +43,7 @@ void sub_destroy(struct dec_sub *sub);
bool sub_can_preload(struct dec_sub *sub);
void sub_preload(struct dec_sub *sub);
-bool sub_read_packets(struct dec_sub *sub, double video_pts);
+bool sub_read_packets(struct dec_sub *sub, double video_pts, bool force);
struct sub_bitmaps *sub_get_bitmaps(struct dec_sub *sub, struct mp_osd_res dim,
int format, double pts);
char *sub_get_text(struct dec_sub *sub, double pts, enum sd_text_type type);