From c185b0ba4a09eab1bf969e40acc660454921f460 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 15 May 2013 02:17:47 +0200 Subject: command: replace some show_ commands with properties show_chapters, show_tracks, and show_playlist are killed and replaced with the properties chapter-list, track-list, and playlist. The code and the output of these stays the same, this is just moving a lot of code around and reducing the number of properties. The "old" commands will still be supported for a while (to avoid making everyone angry), so handle them with the legacy layer. Add something to suppress printing the legacy warnings for these commands. --- DOCS/man/en/changes.rst | 7 +- DOCS/man/en/input.rst | 11 +-- core/command.c | 215 +++++++++++++++++++++++++----------------------- core/input/input.c | 29 +++---- core/input/input.h | 4 - 5 files changed, 135 insertions(+), 131 deletions(-) diff --git a/DOCS/man/en/changes.rst b/DOCS/man/en/changes.rst index 4c80af6b25..c1d924e224 100644 --- a/DOCS/man/en/changes.rst +++ b/DOCS/man/en/changes.rst @@ -168,7 +168,12 @@ input.conf and slave commands | | syntax slightly changed. | +--------------------------------+----------------------------------------+ | osd_show_text | Now does the same as | - | | osd_show_property_text. | + | | osd_show_property_text. Use the raw | + | | prefix to disable property expansion. | + +--------------------------------+----------------------------------------+ + | show_tracks | show_text ${track-list} | + +--------------------------------+----------------------------------------+ + | show_chapters | show_text ${chapter-list} | +--------------------------------+----------------------------------------+ Other diff --git a/DOCS/man/en/input.rst b/DOCS/man/en/input.rst index 59d48f5a28..72d8cb7c92 100644 --- a/DOCS/man/en/input.rst +++ b/DOCS/man/en/input.rst @@ -213,13 +213,6 @@ show_progress Show the progress bar, the elapsed time and the total duration of the file on the OSD. -show_chapters - Show a list of chapters on the OSD. - -show_tracks - Show a list of video/audio/subtitle tracks on the OSD. - - Input commands that are possibly subject to change -------------------------------------------------- @@ -271,7 +264,6 @@ vf set|add|toggle|del "filter1=params,filter2,..." - ``b vf set ""`` remove all video filters on ``b`` - ``c vf toggle lavfi=gradfun`` toggle debanding on ``c`` - Undocumented commands: tv_start_scan, tv_step_channel, tv_step_norm, tv_step_chanlist, tv_set_channel, tv_last_channel, tv_set_freq, tv_step_freq, tv_set_norm, dvb_set_channel, radio_step_channel, radio_set_channel, @@ -401,4 +393,7 @@ tv-brightness x tv-contrast x tv-saturation x tv-hue x +track-list list of audio/video/sub tracks, cur. entr. marked +chapter-list list of chapters, current entry marked +playlist playlist, current entry marked =========================== = ================================================== diff --git a/core/command.c b/core/command.c index 2b902eef58..31097e1030 100644 --- a/core/command.c +++ b/core/command.c @@ -393,6 +393,38 @@ static int mp_property_chapter(m_option_t *prop, int action, void *arg, return M_PROPERTY_NOT_IMPLEMENTED; } +static int mp_property_list_chapters(m_option_t *prop, int action, void *arg, + MPContext *mpctx) +{ + if (action == M_PROPERTY_GET) { + int count = get_chapter_count(mpctx); + int cur = mpctx->num_sources ? get_current_chapter(mpctx) : -1; + char *res = NULL; + int n; + + if (count < 1) { + res = talloc_asprintf_append(res, "No chapters."); + } + + for (n = 0; n < count; n++) { + char *name = chapter_display_name(mpctx, n); + double t = chapter_start_time(mpctx, n); + char* time = mp_format_time(t, false); + res = talloc_asprintf_append(res, "%s", time); + talloc_free(time); + char *m1 = "> ", *m2 = " <"; + if (n != cur) + m1 = m2 = ""; + res = talloc_asprintf_append(res, " %s%s%s\n", m1, name, m2); + talloc_free(name); + } + + *(char **)arg = res; + return M_PROPERTY_OK; + } + return M_PROPERTY_NOT_IMPLEMENTED; +} + static int mp_property_edition(m_option_t *prop, int action, void *arg, MPContext *mpctx) { @@ -832,6 +864,60 @@ static int property_switch_track(m_option_t *prop, int action, void *arg, return mp_property_generic_option(prop, action, arg, mpctx); } +static const char *track_type_name(enum stream_type t) +{ + switch (t) { + case STREAM_VIDEO: return "Video"; + case STREAM_AUDIO: return "Audio"; + case STREAM_SUB: return "Sub"; + } + return NULL; +} + +static int property_list_tracks(m_option_t *prop, int action, void *arg, + MPContext *mpctx, enum stream_type type) +{ + if (action == M_PROPERTY_GET) { + char *res = NULL; + + for (int type = 0; type < STREAM_TYPE_COUNT; type++) { + for (int n = 0; n < mpctx->num_tracks; n++) { + struct track *track = mpctx->tracks[n]; + if (track->type != type) + continue; + + bool selected = mpctx->current_track[track->type] == track; + res = talloc_asprintf_append(res, "%s: ", + track_type_name(track->type)); + if (selected) + res = talloc_asprintf_append(res, "> "); + res = talloc_asprintf_append(res, "(%d) ", track->user_tid); + if (track->title) + res = talloc_asprintf_append(res, "'%s' ", track->title); + if (track->lang) + res = talloc_asprintf_append(res, "(%s) ", track->lang); + if (track->is_external) + res = talloc_asprintf_append(res, "(external) "); + if (selected) + res = talloc_asprintf_append(res, "<"); + res = talloc_asprintf_append(res, "\n"); + } + + res = talloc_asprintf_append(res, "\n"); + } + + struct demuxer *demuxer = mpctx->master_demuxer; + if (demuxer && demuxer->num_editions > 1) + res = talloc_asprintf_append(res, "\nEdition: %d of %d\n", + demuxer->edition + 1, + demuxer->num_editions); + + *(char **)arg = res; + return M_PROPERTY_OK; + } + return M_PROPERTY_NOT_IMPLEMENTED; +} + /// Selected audio id (RW) static int mp_property_audio(m_option_t *prop, int action, void *arg, MPContext *mpctx) @@ -1347,6 +1433,27 @@ static int mp_property_tv_color(m_option_t *prop, int action, void *arg, #endif +static int mp_property_playlist(m_option_t *prop, int action, void *arg, + MPContext *mpctx) +{ + if (action == M_PROPERTY_GET) { + char *res = talloc_strdup(NULL, ""); + + for (struct playlist_entry *e = mpctx->playlist->first; e; e = e->next) + { + if (mpctx->playlist->current == e) { + res = talloc_asprintf_append(res, "> %s <\n", e->filename); + } else { + res = talloc_asprintf_append(res, "%s\n", e->filename); + } + } + + *(char **)arg = res; + return M_PROPERTY_OK; + } + return M_PROPERTY_NOT_IMPLEMENTED; +} + static int mp_property_alias(m_option_t *prop, int action, void *arg, MPContext *mpctx) { @@ -1431,6 +1538,10 @@ static const m_option_t mp_properties[] = { { "clock", mp_property_clock, CONF_TYPE_STRING, 0, 0, 0, NULL }, + { "chapter-list", mp_property_list_chapters, CONF_TYPE_STRING }, + { "track-list", property_list_tracks, CONF_TYPE_STRING }, + { "playlist", mp_property_playlist, CONF_TYPE_STRING }, + // Audio { "volume", mp_property_volume, CONF_TYPE_FLOAT, M_OPT_RANGE, 0, 100, NULL }, @@ -1699,101 +1810,6 @@ static const char *property_error_string(int error_value) return "UNKNOWN"; } -static void show_chapters_on_osd(MPContext *mpctx) -{ - int count = get_chapter_count(mpctx); - int cur = mpctx->num_sources ? get_current_chapter(mpctx) : -1; - char *res = NULL; - int n; - - if (count < 1) { - res = talloc_asprintf_append(res, "No chapters."); - } - - for (n = 0; n < count; n++) { - char *name = chapter_display_name(mpctx, n); - double t = chapter_start_time(mpctx, n); - char* time = mp_format_time(t, false); - res = talloc_asprintf_append(res, "%s", time); - talloc_free(time); - char *m1 = "> ", *m2 = " <"; - if (n != cur) - m1 = m2 = ""; - res = talloc_asprintf_append(res, " %s%s%s\n", m1, name, m2); - talloc_free(name); - } - - set_osd_msg(mpctx, OSD_MSG_TEXT, 1, mpctx->opts.osd_duration, "%s", res); - talloc_free(res); -} - -static const char *track_type_name(enum stream_type t) -{ - switch (t) { - case STREAM_VIDEO: return "Video"; - case STREAM_AUDIO: return "Audio"; - case STREAM_SUB: return "Sub"; - } - return NULL; -} - -static void show_tracks_on_osd(MPContext *mpctx) -{ - struct MPOpts *opts = &mpctx->opts; - char *res = NULL; - - for (int type = 0; type < STREAM_TYPE_COUNT; type++) { - for (int n = 0; n < mpctx->num_tracks; n++) { - struct track *track = mpctx->tracks[n]; - if (track->type != type) - continue; - - bool selected = mpctx->current_track[track->type] == track; - res = talloc_asprintf_append(res, "%s: ", track_type_name(track->type)); - if (selected) - res = talloc_asprintf_append(res, "> "); - res = talloc_asprintf_append(res, "(%d) ", track->user_tid); - if (track->title) - res = talloc_asprintf_append(res, "'%s' ", track->title); - if (track->lang) - res = talloc_asprintf_append(res, "(%s) ", track->lang); - if (track->is_external) - res = talloc_asprintf_append(res, "(external) "); - if (selected) - res = talloc_asprintf_append(res, "<"); - res = talloc_asprintf_append(res, "\n"); - } - - res = talloc_asprintf_append(res, "\n"); - } - - struct demuxer *demuxer = mpctx->master_demuxer; - if (demuxer && demuxer->num_editions > 1) - res = talloc_asprintf_append(res, "\nEdition: %d of %d\n", - demuxer->edition + 1, - demuxer->num_editions); - - set_osd_msg(mpctx, OSD_MSG_TEXT, 1, opts->osd_duration, "%s", res); - talloc_free(res); -} - -static void show_playlist_on_osd(MPContext *mpctx) -{ - struct MPOpts *opts = &mpctx->opts; - char *res = NULL; - - for (struct playlist_entry *e = mpctx->playlist->first; e; e = e->next) { - if (mpctx->playlist->current == e) { - res = talloc_asprintf_append(res, "> %s <\n", e->filename); - } else { - res = talloc_asprintf_append(res, "%s\n", e->filename); - } - } - - set_osd_msg(mpctx, OSD_MSG_TEXT, 1, opts->osd_duration, "%s", res); - talloc_free(res); -} - static void change_video_filters(MPContext *mpctx, const char *cmd, const char *arg) { @@ -2380,15 +2396,6 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd) case MP_CMD_VF: change_video_filters(mpctx, cmd->args[0].v.s, cmd->args[1].v.s); break; - case MP_CMD_SHOW_CHAPTERS: - show_chapters_on_osd(mpctx); - break; - case MP_CMD_SHOW_TRACKS: - show_tracks_on_osd(mpctx); - break; - case MP_CMD_SHOW_PLAYLIST: - show_playlist_on_osd(mpctx); - break; default: mp_msg(MSGT_CPLAYER, MSGL_V, diff --git a/core/input/input.c b/core/input/input.c index 8bc877ce79..2d7569c8e9 100644 --- a/core/input/input.c +++ b/core/input/input.c @@ -204,10 +204,6 @@ static const mp_cmd_t mp_cmds[] = { { MP_CMD_VF, "vf", { ARG_STRING, ARG_STRING } }, - { MP_CMD_SHOW_CHAPTERS, "show_chapters", }, - { MP_CMD_SHOW_TRACKS, "show_tracks", }, - { MP_CMD_SHOW_PLAYLIST, "show_playlist", }, - { MP_CMD_VO_CMDLINE, "vo_cmdline", { ARG_STRING } }, {0} @@ -258,8 +254,12 @@ static const struct legacy_cmd legacy_cmds[] = { {"osd_show_text", "show_text"}, {"osd_show_property_text", "show_text"}, {"osd_show_progression", "show_progress"}, - {"show_chapters_osd", "show_chapters"}, - {"show_tracks_osd", "show_tracks"}, + {"show_chapters_osd", "show_text ${chapter-list}"}, + {"!show_chapters", "show_text ${chapter-list}"}, + {"show_tracks_osd", "show_text ${track-list}"}, + {"!show_tracks", "show_text ${track-list}"}, + {"!show_playlist", "show_text ${playlist}"}, + // Approximate (can fail if user added additional whitespace) {"pt_step 1", "playlist_next"}, {"pt_step -1", "playlist_prev"}, @@ -826,14 +826,15 @@ mp_cmd_t *mp_input_parse_cmd(bstr str, const char *loc) str = bstr_lstrip(str); for (const struct legacy_cmd *entry = legacy_cmds; entry->old; entry++) { - size_t old_len = strlen(entry->old); - if (bstrcasecmp(bstr_splice(str, 0, old_len), - (bstr) {(char *)entry->old, old_len}) == 0) - { - mp_tmsg(MSGT_INPUT, MSGL_WARN, "Warning: command '%s' is " - "deprecated, replaced with '%s' at %s.\n", - entry->old, entry->new, loc); - bstr s = bstr_cut(str, old_len); + bstr old = bstr0(entry->old); + bool silent = bstr_eatstart0(&old, "!"); + if (bstrcasecmp(bstr_splice(str, 0, old.len), old) == 0) { + if (!silent) { + mp_tmsg(MSGT_INPUT, MSGL_WARN, "Warning: command '%.*s' is " + "deprecated, replaced with '%s' at %s.\n", + BSTR_P(old), entry->new, loc); + } + bstr s = bstr_cut(str, old.len); str = bstr0(talloc_asprintf(tmp, "%s%.*s", entry->new, BSTR_P(s))); start = str; break; diff --git a/core/input/input.h b/core/input/input.h index 944debd847..b9bc295646 100644 --- a/core/input/input.h +++ b/core/input/input.h @@ -81,10 +81,6 @@ enum mp_command_type { /// Video filter commands MP_CMD_VF, - MP_CMD_SHOW_CHAPTERS, - MP_CMD_SHOW_TRACKS, - MP_CMD_SHOW_PLAYLIST, - /// Video output commands MP_CMD_VO_CMDLINE, }; -- cgit v1.2.3