summaryrefslogtreecommitdiffstats
path: root/demux/demux_libarchive.c
diff options
context:
space:
mode:
authorKevin Mitchell <kevmitch@gmail.com>2020-04-27 01:13:59 -0700
committerKevin Mitchell <kevmitch@gmail.com>2020-04-28 22:13:03 -0700
commit2aa5964b43fdd1d584b4f17899aa1ac5e886b7af (patch)
tree4dd23c355052706b203b983706fd6c3ff83109ce /demux/demux_libarchive.c
parent9285a1c05e2c5f55caa5cbaa24a504bb24e7dbc4 (diff)
downloadmpv-2aa5964b43fdd1d584b4f17899aa1ac5e886b7af.tar.bz2
mpv-2aa5964b43fdd1d584b4f17899aa1ac5e886b7af.tar.xz
stream_libarchive: remember archive headers from initial open
The header probing hacks were previously all broken. They only worked the first time the archive file was open. Since subsequent opens (on seek) occured in the middle of the source stream rather than at the beginning, the stream_read_peek calls meant to retrieve the headers were instead returning random bytes in the middle of the file. Perhaps the worst manifestation of this was when seeking within a multi-volume .rar archive with the "legacy" file naming pattern. If the seek required a reopen, the fact that the archive was multi-volume would be forgotten and the file would appear truncated terminating playback. To solve this, only perform the header probling the first time the archive is opened. Save the results and reuse them on subsequent reopens. Put this in a wrapper so this is transparent to demux_libarchive.
Diffstat (limited to 'demux/demux_libarchive.c')
-rw-r--r--demux/demux_libarchive.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/demux/demux_libarchive.c b/demux/demux_libarchive.c
index dc8d201b19..9873232851 100644
--- a/demux/demux_libarchive.c
+++ b/demux/demux_libarchive.c
@@ -66,7 +66,7 @@ static int open_file(struct demuxer *demuxer, enum demux_check check)
mp_get_config_group(demuxer, demuxer->global, demuxer->desc->options);
if (!opts->rar_list_all_volumes)
- flags |= MP_ARCHIVE_FLAG_NO_RAR_VOLUMES;
+ flags |= MP_ARCHIVE_FLAG_NO_VOLUMES;
mpa = mp_archive_new(demuxer->log, demuxer->stream, flags, 0);
if (!mpa)