From 7b9908dda875db404604e87c8b762784d4f774d1 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Sun, 6 Nov 2011 16:54:57 +0200 Subject: 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. --- cfg-mplayer.h | 1 + mplayer.c | 2 ++ options.h | 1 + 3 files changed, 4 insertions(+) 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; -- cgit v1.2.3