1
0
mirror of https://github.com/mpv-player/mpv synced 2025-03-30 07:18:17 +00:00
mpv/demux
wm4 b3d12c3d54 demux_mkv: fix seeking with index generation
Relative seeks backwards didn't work too well with incomplete files, or
other files that are missing the seek index. The problem was that the
on-the-fly seek index generation simply added cluster positions as seek
entries. While this is perfectly fine, the seek code had no information
about the location of video key frames. For example, a 5 second long
cluster can have only 1 video key frame, which is located 4 seconds into
the cluster. Seeking backwards by one second while still located in the
same cluster would select this cluster as seek target again. Decoding
would resume with the key frame, giving the impression that seeking is
"stuck" at this frame.

Make the generated index aware of key frame and track information, so
that video can always be seeked in an idea way. This also uses the
normal block parsing code for indexing the clusters, instead of the
suspicious looking special code. (This code didn't parse the Matroska
elements correctly, but was fine for files with normal structure. Files
with corrupted clusters or clusters formatted for streaming were not
handled properly.)

Skipping is now quite a bit slower (takes about twice as long as
before), but it removes the special cased skipping code, and it's still
much faster (at least twice as fast) than libavformat. It needs to do
more I/O (no more skipping entire clusters, all data is read), and has
more CPU usage (more data needs to be parsed).
2013-04-20 23:28:22 +02:00
..
asf.h
asfguid.h
asfheader.c core: redo how codecs are mapped, remove codecs.conf 2013-02-10 17:25:56 +01:00
asfheader.h
aviheader.c core: redo how codecs are mapped, remove codecs.conf 2013-02-10 17:25:56 +01:00
aviheader.h stream, demux: replace off_t with int64_t 2012-11-20 18:00:15 +01:00
aviprint.c
aviprint.h
codec_tags.c demux_mkv: support ALAC 2013-03-15 12:17:39 +01:00
codec_tags.h core: redo how codecs are mapped, remove codecs.conf 2013-02-10 17:25:56 +01:00
demux_asf.c core: use playback time to determine playback percent position 2013-02-26 02:01:48 +01:00
demux_avi.c core: use playback time to determine playback percent position 2013-02-26 02:01:48 +01:00
demux_cue.c
demux_edl.c
demux_lavf.c demux_lavf: use avg_frame_rate instead of r_frame_rate 2013-03-13 23:51:30 +01:00
demux_mf.c demux_mf: fix crashes when '*' matches directories 2013-03-19 01:54:45 +01:00
demux_mkv.c demux_mkv: fix seeking with index generation 2013-04-20 23:28:22 +02:00
demux_mng.c core: use playback time to determine playback percent position 2013-02-26 02:01:48 +01:00
demux_mpg.c core: fix SEEK_FACTOR 2013-03-01 14:44:53 +01:00
demux_packet.h stream, demux: replace off_t with int64_t 2012-11-20 18:00:15 +01:00
demux_rawaudio.c core: redo how codecs are mapped, remove codecs.conf 2013-02-10 17:25:56 +01:00
demux_rawvideo.c demux_rawvideo: allow setting video codec 2013-02-24 16:46:35 +01:00
demux_ts.c core: fix SEEK_FACTOR 2013-03-01 14:44:53 +01:00
demux_ts.h
demux.c demux: simplify chapter appending code 2013-04-12 14:38:22 +02:00
demux.h demux: always sort chapters 2013-04-12 14:38:04 +02:00
ebml.c demux_mkv: improve robustness against broken files 2013-03-28 21:45:16 +01:00
ebml.h demux_mkv: improve robustness against broken files 2013-03-28 21:45:16 +01:00
extension.c
matroska.h demux_mkv: support ALAC 2013-03-15 12:17:39 +01:00
mf.c demux_mf: fix crashes when '*' matches directories 2013-03-19 01:54:45 +01:00
mf.h demux_mf: allow displaying single image files, various cleanups 2012-11-16 21:21:16 +01:00
mp3_hdr.c
mp3_hdr.h
mpeg_hdr.c
mpeg_hdr.h
ms_hdr.h
parse_es.c
parse_es.h
stheader.h demux_lavf, ad_lavc, vd_lavc: pass codec header data directly 2013-02-10 17:25:57 +01:00
video.c demux: apply sparse video hack only to demux_lavf and demux_mkv 2013-02-14 19:53:15 +01:00