summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2011-11-06 16:54:57 +0200
committerUoti Urpala <uau@mplayer2.org>2011-11-14 20:24:39 +0200
commit7b9908dda875db404604e87c8b762784d4f774d1 (patch)
tree226f35d1bec69356d18f087faf0a8515467daccf
parent0aa8df2b7d95ba270394c1a1d2a11ccd73956a56 (diff)
downloadmpv-7b9908dda875db404604e87c8b762784d4f774d1.tar.bz2
mpv-7b9908dda875db404604e87c8b762784d4f774d1.tar.xz
options, core/hrseek: add --hr-seek-demuxer-offset
Some demuxers do not accurately seek to a keyframe before a given time but instead start too late. This means that precise seeks cannot work either. Most notably the libavformat mpeg demuxer exhibits this behavior depending on the file being played (with the internal mpeg demuxer precise seeks don't work at all). Add new option --hr-seek-demuxer-offset which can be used as a workaround with such demuxers. The value of the option is subtracted from the seek target position given to the demuxer when doing a precise seek.
-rw-r--r--cfg-mplayer.h1
-rw-r--r--mplayer.c2
-rw-r--r--options.h1
3 files changed, 4 insertions, 0 deletions
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index 9c97caa93a..c8ca92e3a3 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -901,6 +901,7 @@ const m_option_t mplayer_opts[]={
OPT_MAKE_FLAGS("initial-audio-sync", initial_audio_sync, 0),
OPT_CHOICE("hr-seek", hr_seek, 0,
({"off", -1}, {"absolute", 0}, {"always", 1}, {"on", 1})),
+ OPT_FLOATRANGE("hr-seek-demuxer-offset", hr_seek_demuxer_offset, 0, -9, 99),
OPT_FLAG_CONSTANTS("noautosync", autosync, 0, 0, -1),
OPT_INTRANGE("autosync", autosync, 0, 0, 10000),
diff --git a/mplayer.c b/mplayer.c
index c13f56a143..eef8302aed 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -3306,6 +3306,8 @@ static int seek(MPContext *mpctx, struct seek_params seek,
else if (seek.direction > 0)
demuxer_style |= SEEK_FORWARD;
+ if (hr_seek)
+ demuxer_amount -= opts->hr_seek_demuxer_offset;
int seekresult = demux_seek(mpctx->demuxer, demuxer_amount, audio_delay,
demuxer_style);
if (need_reset)
diff --git a/options.h b/options.h
index 3aee5dedc5..9f1352d98f 100644
--- a/options.h
+++ b/options.h
@@ -54,6 +54,7 @@ typedef struct MPOpts {
int user_pts_assoc_mode;
int initial_audio_sync;
int hr_seek;
+ float hr_seek_demuxer_offset;
int autosync;
int softsleep;
int rtc;