mirror of https://github.com/mpv-player/mpv
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:
parent
5d1a3fb406
commit
534b08e6ba
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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", },
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue