summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-09-22 22:56:00 +0200
committerwm4 <wm4@nowhere>2014-09-22 22:56:00 +0200
commit9fe076f02a67a87a79856e9583fc76aeb211c330 (patch)
tree80e9d226bbd700f26bb829fa35b7147b239948e7
parent9ce45261399e2ee99f468c5016b378fd5360ae12 (diff)
downloadmpv-9fe076f02a67a87a79856e9583fc76aeb211c330.tar.bz2
mpv-9fe076f02a67a87a79856e9583fc76aeb211c330.tar.xz
player: allow passing number of loops to --loop-file
E.g. --loop-file=2 will play the file 3 times (one time normally, and 2 repeats). Minor syntax issue: "--loop-file 5" won't work, you have to use "--loop-file=5". This is because "--loop-file" still has to work for compatibility, so the "old" syntax with a space between option name and value can't work.
-rw-r--r--DOCS/man/options.rst14
-rw-r--r--options/options.c4
-rw-r--r--player/playloop.c2
3 files changed, 14 insertions, 6 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index c6df057834..33431a03e7 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -205,11 +205,15 @@ Playback Control
Note that ``--playlist`` always loads all entries, so you use that instead
if you really have the need for this functionality.
-``--loop-file``
- Loop a single file. The difference to ``--loop=inf`` is that this doesn't
- loop the playlist, just the file itself. If the playlist contains only a
- single file, the difference between the two option is that this option
- performs a seek on loop, instead of reloading the file.
+``--loop-file=<N|inf|no>``
+ Loop a single file N times. ``inf`` means forever, ``no`` means normal
+ playback. For compatibility, ``--loop-file`` and ``--loop-file=yes`` are
+ also accepted, and are the same as ``--loop-file=inf``.
+
+ The difference to ``--loop`` is that this doesn't loop the playlist, just
+ the file itself. If the playlist contains only a single file, the difference
+ between the two option is that this option performs a seek on loop, instead
+ of reloading the file.
``--ordered-chapters``, ``--no-ordered-chapters``
Enabled by default.
diff --git a/options/options.c b/options/options.c
index 5085366389..0e570705ef 100644
--- a/options/options.c
+++ b/options/options.c
@@ -481,7 +481,9 @@ const m_option_t mp_opts[] = {
OPT_CHOICE_OR_INT("loop", loop_times, M_OPT_GLOBAL, 2, 10000,
({"no", -1}, {"1", -1},
{"inf", 0})),
- OPT_FLAG("loop-file", loop_file, 0),
+ OPT_CHOICE_OR_INT("loop-file", loop_file, M_OPT_OPTIONAL_PARAM, 0, 10000,
+ ({"yes", -1}, {"", -1}, {"no", 0}, // compat
+ {"inf", -1})),
OPT_FLAG("resume-playback", position_resume, 0),
OPT_FLAG("save-position-on-quit", position_save_on_quit, 0),
diff --git a/player/playloop.c b/player/playloop.c
index 647a864513..b9e35b41eb 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -756,6 +756,8 @@ static void handle_loop_file(struct MPContext *mpctx)
mpctx->stop_play = KEEP_PLAYING;
set_osd_function(mpctx, OSD_FFW);
queue_seek(mpctx, MPSEEK_ABSOLUTE, get_start_time(mpctx), 0, true);
+ if (opts->loop_file > 0)
+ opts->loop_file--;
}
}