summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux_subreader.c1
-rw-r--r--demux/stheader.h1
-rw-r--r--sub/dec_sub.c4
3 files changed, 6 insertions, 0 deletions
diff --git a/demux/demux_subreader.c b/demux/demux_subreader.c
index e95ffda976..f422441b0b 100644
--- a/demux/demux_subreader.c
+++ b/demux/demux_subreader.c
@@ -1500,6 +1500,7 @@ static int d_check_file(struct demuxer *demuxer)
p->sh = new_sh_stream(demuxer, STREAM_SUB);
p->sh->codec = sd->codec;
+ p->sh->sub->frame_based = !sd->sub_uses_time;
add_sub_data(demuxer, sd);
subdata_free(sd);
diff --git a/demux/stheader.h b/demux/stheader.h
index 14418accb0..37bdbcc568 100644
--- a/demux/stheader.h
+++ b/demux/stheader.h
@@ -163,6 +163,7 @@ typedef struct sh_sub {
SH_COMMON
unsigned char *extradata; // extra header data passed from demuxer
int extradata_len;
+ int frame_based; // timestamps are frame-based
struct ass_track *track; // loaded by libass
struct dec_sub *dec_sub; // decoder context
} sh_sub_t;
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index dd1168d0ad..54f3c1ebfe 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -275,6 +275,10 @@ bool sub_read_all_packets(struct dec_sub *sub, struct sh_sub *sh)
MP_TARRAY_APPEND(tmp, subs.packets, subs.num_packets, pkt);
}
+ // 23.976 FPS is used as default timebase for frame based formats
+ if (sub->video_fps && sh->frame_based)
+ multiply_timings(&subs, sub->video_fps / 23.976);
+
if (opts->sub_fps && sub->video_fps)
multiply_timings(&subs, opts->sub_fps / sub->video_fps);