summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-11-18 18:02:14 +0100
committerwm4 <wm4@nowhere>2012-11-20 18:00:11 +0100
commitf5e2ee513862da957858be4963cd6535fa23f861 (patch)
treee406d96b9bafb6d041e08b3c0d422188a57d83d5 /core
parent39428525c372e593f042c107e35e38b5409afc07 (diff)
downloadmpv-f5e2ee513862da957858be4963cd6535fa23f861.tar.bz2
mpv-f5e2ee513862da957858be4963cd6535fa23f861.tar.xz
options: support chapters for --start and --end
The --start and --end switch now accept a chapter number. The chapter number is prefixed with '#', e.g. "--start=#2" jumps to chapter 2. The chapter support might be able to replace --chapter completely, but for now I am not sure how well this works out with e.g. DVDs and BDs, and a separate --chapter option is useful interface-wise. (This was supposed to be added in 51503a, but apparently the fixup commit adding it was lost in a rebase. This might also be the reason for the mess-up fixed in 394285.)
Diffstat (limited to 'core')
-rw-r--r--core/m_option.c12
-rw-r--r--core/m_option.h1
-rw-r--r--core/mplayer.c4
3 files changed, 16 insertions, 1 deletions
diff --git a/core/m_option.c b/core/m_option.c
index dcb849a34d..58e93dfff9 100644
--- a/core/m_option.c
+++ b/core/m_option.c
@@ -1268,6 +1268,16 @@ static int parse_rel_time(const m_option_t *opt, struct bstr name,
}
}
+ // Chapter pos
+ if (bstr_startswith0(param, "#")) {
+ int chapter = bstrtoll(bstr_cut(param, 1), &param, 10);
+ if (param.len == 0 && chapter >= 1) {
+ t.type = REL_TIME_CHAPTER;
+ t.pos = chapter - 1;
+ goto out;
+ }
+ }
+
bool sign = bstr_eatstart0(&param, "-");
double time;
if (parse_timestring(param, &time, 0)) {
@@ -1277,7 +1287,7 @@ static int parse_rel_time(const m_option_t *opt, struct bstr name,
}
mp_msg(MSGT_CFGPARSER, MSGL_ERR,
- "Option %.*s: invalid time or size: '%.*s'\n",
+ "Option %.*s: invalid time or position: '%.*s'\n",
BSTR_P(name), BSTR_P(param));
return M_OPT_INVALID;
diff --git a/core/m_option.h b/core/m_option.h
index d7041f9cf4..ed9cc33f5f 100644
--- a/core/m_option.h
+++ b/core/m_option.h
@@ -63,6 +63,7 @@ enum m_rel_time_type {
REL_TIME_ABSOLUTE,
REL_TIME_NEGATIVE,
REL_TIME_PERCENT,
+ REL_TIME_CHAPTER,
};
struct m_rel_time {
diff --git a/core/mplayer.c b/core/mplayer.c
index a48bd4b37c..8f974c5bc2 100644
--- a/core/mplayer.c
+++ b/core/mplayer.c
@@ -270,6 +270,10 @@ static double rel_time_to_abs(struct MPContext *mpctx, struct m_rel_time t,
if (length != 0)
return length * (t.pos / 100.0);
break;
+ case REL_TIME_CHAPTER:
+ if (chapter_start_time(mpctx, t.pos) >= 0)
+ return chapter_start_time(mpctx, t.pos);
+ break;
}
return fallback_time;
}