command: add an ab_loop command

As suggested in #1241; to make using the feature easier.

Also add better OSD-formatting for the ab-loop-a/b properties.
This commit is contained in:
wm4 2014-11-18 21:33:15 +01:00
parent 5d1a3fb406
commit 534b08e6ba
5 changed files with 31 additions and 2 deletions

View File

@ -544,6 +544,11 @@ Input Commands that are Possibly Subject to Change
(Scripts use this internally to dispatch key bindings, and this can also
be used in input.conf to reassign such bindings.)
``ab_loop``
Cycle through A-B loop states. The first command will set the ``A`` point
(the ``ab-loop-a`` property); the second the ``B`` point, and the third
will clear both points.
Undocumented commands: ``tv_last_channel`` (TV/DVB only), ``get_property`` (?),
``vo_cmdline`` (experimental), ``ao_reload`` (experimental/internal).
@ -779,7 +784,7 @@ Property list
"default" MPV_FORMAT_FLAG
``ab-loop-a``, ``ab-loop-b`` (TW)
Set/get A-B loop points. See corresponding options.
Set/get A-B loop points. See corresponding options and ``ab_loop`` command.
``angle`` (RW)
Current DVD angle.

View File

@ -233,7 +233,7 @@ Playback Control
Set loop points. If playback passes the ``b`` timestamp, it will seek to
the ``a`` timestamp. Seeking past the ``b`` point doesn't loop (this is
intentional). The loop-points can be adjusted at runtime with the
corresponding properties.
corresponding properties. See also ``ab_loop`` command.
``--ordered-chapters``, ``--no-ordered-chapters``
Enabled by default.

View File

@ -155,6 +155,8 @@ const struct mp_cmd_def mp_cmds[] = {
{ MP_CMD_DISCNAV, "discnav", { ARG_STRING } },
{ MP_CMD_AB_LOOP, "ab_loop", },
{ MP_CMD_AF, "af", { ARG_STRING, ARG_STRING } },
{ MP_CMD_AO_RELOAD, "ao_reload", },

View File

@ -78,6 +78,8 @@ enum mp_command_type {
MP_CMD_DISCNAV,
MP_CMD_AB_LOOP,
/// Audio Filter commands
MP_CMD_AF,
MP_CMD_AO_RELOAD,

View File

@ -3527,6 +3527,8 @@ static const struct property_osd_display {
{ "tv-hue", "Hue", .osd_progbar = OSD_HUE},
{ "tv-saturation", "Saturation", .osd_progbar = OSD_SATURATION },
{ "tv-contrast", "Contrast", .osd_progbar = OSD_CONTRAST },
{ "ab-loop-a", "A-B loop point A"},
{ "ab-loop-b", "A-B loop point B"},
// By default, don't display the following properties on OSD
{ "pause", NULL },
{ "fullscreen", NULL },
@ -4420,6 +4422,24 @@ int run_command(MPContext *mpctx, mp_cmd_t *cmd)
mp_nav_user_input(mpctx, cmd->args[0].v.s);
break;
case MP_CMD_AB_LOOP: {
double now = get_current_time(mpctx);
int r = 0;
if (opts->ab_loop[0] == MP_NOPTS_VALUE) {
r = mp_property_do("ab-loop-a", M_PROPERTY_SET, &now, mpctx);
show_property_osd(mpctx, "ab-loop-a", on_osd);
} else if (opts->ab_loop[1] == MP_NOPTS_VALUE) {
r = mp_property_do("ab-loop-b", M_PROPERTY_SET, &now, mpctx);
show_property_osd(mpctx, "ab-loop-b", on_osd);
} else {
now = MP_NOPTS_VALUE;
r = mp_property_do("ab-loop-a", M_PROPERTY_SET, &now, mpctx);
r = mp_property_do("ab-loop-b", M_PROPERTY_SET, &now, mpctx);
set_osd_msg(mpctx, osdl, osd_duration, "Clear A-B loop");
}
return r > 0;
}
case MP_CMD_VO_CMDLINE:
if (mpctx->video_out) {
char *s = cmd->args[0].v.s;