summaryrefslogtreecommitdiffstats
path: root/demux/demux_mkv.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux_mkv.c')
-rw-r--r--demux/demux_mkv.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index dac134e4ec..5b30bc8d35 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -190,7 +190,7 @@ typedef struct mkv_demuxer {
int num_headers;
uint64_t skip_to_timecode;
- int v_skip_to_keyframe, a_skip_to_keyframe;
+ int v_skip_to_keyframe, a_skip_to_keyframe, a_no_timecode_check;
int subtitle_preroll;
} mkv_demuxer_t;
@@ -2351,11 +2351,10 @@ static int handle_block(demuxer_t *demuxer, struct block_info *block_info)
current_pts = tc / 1e9;
if (track->type == MATROSKA_TRACK_AUDIO) {
- use_this_block = 1;
+ if (mkv_d->a_no_timecode_check)
+ use_this_block = !mkv_d->v_skip_to_keyframe;
if (mkv_d->a_skip_to_keyframe)
- use_this_block = keyframe;
- if (mkv_d->v_skip_to_keyframe)
- use_this_block = 0;
+ use_this_block &= keyframe;
} else if (track->type == MATROSKA_TRACK_SUBTITLE) {
if (!use_this_block && mkv_d->subtitle_preroll)
use_this_block = 1;
@@ -2739,6 +2738,10 @@ static void demux_mkv_seek(demuxer_t *demuxer, float rel_seek_secs, int flags)
mkv_d->v_skip_to_keyframe = st_active[STREAM_VIDEO];
mkv_d->a_skip_to_keyframe = st_active[STREAM_AUDIO];
+
+ // This is probably not needed, but can't be sure.
+ mkv_d->a_no_timecode_check = st_active[STREAM_VIDEO];
+
if (flags & SEEK_FORWARD) {
mkv_d->skip_to_timecode = target_timecode;
} else {