1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-18 21:06:00 +00:00
mpv/demux
wm4 10d0963d85 demux: improve and optimize cache pruning and seek range determination
The main purpose of this commit is avoiding any hidden O(n^2) algorithms
in the code for pruning the demuxer cache, and for determining the
seekable boundaries of the cache. The old code could loop over the whole
packet queue on every packet pruned in certain corner cases.

There are two ways how to reach the goal:
 1) commit a cardinal sin
 2) do everything incrementally

The cardinal sin is adding an extra field to demux_packet, which caches
the determined seekable range for a keyframe range. demux_packet is a
rather general data structure and thus shouldn't have any fields that
are not inherent to its use, and are only needed as an implementation
detail of code using it. But what are you gonna do, sue me?

In the future, demux.c might have its own packet struct though. Then the
other existing cardinal sin (the "next" field, from MPlayer times) could
be removed as well.

This commit also changes slightly how the seek end is determined. There
is a note on the manpage in case anyone finds the new behavior
confusing. It's somewhat cleaner and  might be needed for supporting
multiple ranges (although that's unclear).
2017-11-04 23:18:42 +01:00
..
codec_tags.c demux_mkv: remove incorrect comment 2017-06-03 23:23:35 +02:00
codec_tags.h Relicense some non-MPlayer source files to LGPL 2.1 or later 2016-01-19 18:36:06 +01:00
cue.c cue: accept lower-case cue commands 2017-01-24 08:57:51 +01:00
cue.h Relicense some non-MPlayer source files to LGPL 2.1 or later 2016-01-19 18:36:06 +01:00
demux_cue.c demux: get rid of DEMUXER_CTRL_GET_TIME_LENGTH 2017-06-20 14:22:10 +02:00
demux_disc.c demux_disc: fix bluray subtitle language retrieval 2017-07-16 19:02:35 +02:00
demux_edl.c demux: get rid of DEMUXER_CTRL_GET_TIME_LENGTH 2017-06-20 14:22:10 +02:00
demux_lavf.c Bump libav* API use 2017-10-30 20:55:42 +01:00
demux_libarchive.c demux, stream: add option to prevent opening referenced files 2016-12-04 23:15:31 +01:00
demux_mf.c build: switch preliminary LGPL mode from v3 to v2.1 2017-10-05 15:57:30 +02:00
demux_mkv_timeline.c demux: get rid of DEMUXER_CTRL_GET_TIME_LENGTH 2017-06-20 14:22:10 +02:00
demux_mkv.c demux_mkv: add V_SNOW tag to mkv_video_tags 2017-11-03 01:03:39 +01:00
demux_null.c demux_null: fix segfault with --cache enabled 2016-03-05 00:56:55 +01:00
demux_playlist.c win32: add more-POSIXy versions of open() and fstat() 2017-10-25 22:37:20 +11:00
demux_rar.c demux, stream: add option to prevent opening referenced files 2016-12-04 23:15:31 +01:00
demux_raw.c demux_raw: change license to LGPL 2017-06-24 13:56:53 +02:00
demux_timeline.c demux_timeline: don't use segments for DASH 2017-10-26 00:38:20 +02:00
demux_tv.c demux_tv.c: add missing copyright header 2017-06-21 18:13:53 +02:00
demux.c demux: improve and optimize cache pruning and seek range determination 2017-11-04 23:18:42 +01:00
demux.h demux: refactor to export seek ranges 2017-10-30 15:28:59 +01:00
ebml.c ebml, matroska.h: change license to LGPL 2017-04-21 13:34:10 +02:00
ebml.h ebml, matroska.h: change license to LGPL 2017-04-21 13:34:10 +02:00
matroska.h ebml, matroska.h: change license to LGPL 2017-04-21 13:34:10 +02:00
packet.c demux: improve and optimize cache pruning and seek range determination 2017-11-04 23:18:42 +01:00
packet.h demux: improve and optimize cache pruning and seek range determination 2017-11-04 23:18:42 +01:00
stheader.h demux: improvements to previous commits 2017-10-20 22:30:59 +02:00
timeline.c ytdl_hook, edl: implement pseudo-DASH support 2017-02-04 22:34:38 +01:00
timeline.h ytdl_hook, edl: implement pseudo-DASH support 2017-02-04 22:34:38 +01:00