From ae070a6f1eff9f38dcd3ec785dd1f251e3761472 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 6 Feb 2013 22:54:03 +0100 Subject: audio/out, video/out: hide encoding VO/AO mpv -ao help and mpv -vo help shouldn't show the encoding outputs (named "lavc" on both cases). Also make it impossible to select these manually when not encoding. --- audio/out/ao.c | 25 +++++++++++++++++-------- audio/out/ao.h | 1 + audio/out/ao_lavc.c | 1 + video/out/vo.c | 12 ++++++++---- video/out/vo.h | 3 +++ video/out/vo_lavc.c | 1 + 6 files changed, 31 insertions(+), 12 deletions(-) diff --git a/audio/out/ao.c b/audio/out/ao.c index a0faafebfb..9fb201a333 100644 --- a/audio/out/ao.c +++ b/audio/out/ao.c @@ -91,13 +91,14 @@ static const struct ao_driver * const audio_out_drivers[] = { void list_audio_out(void) { - int i=0; mp_tmsg(MSGT_AO, MSGL_INFO, "Available audio output drivers:\n"); mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_OUTPUTS\n"); - while (audio_out_drivers[i]) { - const ao_info_t *info = audio_out_drivers[i++]->info; - mp_msg(MSGT_GLOBAL, MSGL_INFO, "\t%s\t%s\n", info->short_name, - info->name); + for (int i = 0; audio_out_drivers[i]; i++) { + const ao_info_t *info = audio_out_drivers[i]->info; + if (!audio_out_drivers[i]->encode) { + mp_msg(MSGT_GLOBAL, MSGL_INFO, "\t%s\t%s\n", + info->short_name, info->name); + } } mp_msg(MSGT_GLOBAL, MSGL_INFO,"\n"); } @@ -110,6 +111,13 @@ struct ao *ao_create(struct MPOpts *opts, struct input_ctx *input) return r; } +static bool ao_try_init(struct ao *ao, char *params) +{ + if (ao->driver->encode != !!ao->encode_lavc_ctx) + return false; + return ao->driver->init(ao, params) >= 0; +} + void ao_init(struct ao *ao, char **ao_list) { /* Caller adding child blocks is not supported as we may call @@ -148,7 +156,7 @@ void ao_init(struct ao *ao, char **ao_list) if (audio_out) { // name matches, try it ao->driver = audio_out; - if (audio_out->init(ao, params) >= 0) { + if (ao_try_init(ao, params)) { ao->driver = audio_out; ao->initialized = true; return; @@ -167,13 +175,14 @@ void ao_init(struct ao *ao, char **ao_list) try_defaults: mp_tmsg(MSGT_AO, MSGL_V, "Trying every known audio driver...\n"); + ao->probing = false; + // now try the rest... for (int i = 0; audio_out_drivers[i]; i++) { const struct ao_driver *audio_out = audio_out_drivers[i]; ao->driver = audio_out; ao->probing = true; - if (audio_out->init(ao, NULL) >= 0) { - ao->probing = false; + if (ao_try_init(ao, NULL)) { ao->initialized = true; ao->driver = audio_out; return; diff --git a/audio/out/ao.h b/audio/out/ao.h index 2fb8d9ba2c..6b79508943 100644 --- a/audio/out/ao.h +++ b/audio/out/ao.h @@ -75,6 +75,7 @@ struct ao; struct ao_driver { bool is_new; + bool encode; const struct ao_info *info; const struct ao_old_functions *old_functions; int (*control)(struct ao *ao, enum aocontrol cmd, void *arg); diff --git a/audio/out/ao_lavc.c b/audio/out/ao_lavc.c index ab82ad9d6d..062d1b928b 100644 --- a/audio/out/ao_lavc.c +++ b/audio/out/ao_lavc.c @@ -660,6 +660,7 @@ static int play(struct ao *ao, void *data, int len, int flags) const struct ao_driver audio_out_lavc = { .is_new = true, + .encode = true, .info = &(const struct ao_info) { "audio encoding using libavcodec", "lavc", diff --git a/video/out/vo.c b/video/out/vo.c index e2e2d2d675..9a1516930c 100644 --- a/video/out/vo.c +++ b/video/out/vo.c @@ -131,6 +131,8 @@ const struct vo_driver *video_out_drivers[] = static int vo_preinit(struct vo *vo, char *arg) { + if (vo->driver->encode != !!vo->encode_lavc_ctx) + return -1; if (vo->driver->priv_size) { vo->priv = talloc_zero_size(vo, vo->driver->priv_size); if (vo->driver->priv_defaults) @@ -268,12 +270,14 @@ void vo_destroy(struct vo *vo) void list_video_out(void) { - int i = 0; mp_tmsg(MSGT_CPLAYER, MSGL_INFO, "Available video output drivers:\n"); mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_OUTPUTS\n"); - while (video_out_drivers[i]) { - const vo_info_t *info = video_out_drivers[i++]->info; - mp_msg(MSGT_GLOBAL, MSGL_INFO,"\t%s\t%s\n", info->short_name, info->name); + for (int i = 0; video_out_drivers[i]; i++) { + const vo_info_t *info = video_out_drivers[i]->info; + if (!video_out_drivers[i]->encode) { + mp_msg(MSGT_GLOBAL, MSGL_INFO,"\t%s\t%s\n", + info->short_name, info->name); + } } mp_msg(MSGT_GLOBAL, MSGL_INFO,"\n"); } diff --git a/video/out/vo.h b/video/out/vo.h index 73eb19c8d7..a41b5466fb 100644 --- a/video/out/vo.h +++ b/video/out/vo.h @@ -146,6 +146,9 @@ struct vo_driver { // of pts values itself bool buffer_frames; + // Encoding functionality, which can be invoked via --o only. + bool encode; + const vo_info_t *info; /* * Preinitializes driver (real INITIALIZATION) diff --git a/video/out/vo_lavc.c b/video/out/vo_lavc.c index 2aced9351a..2a07a67b0b 100644 --- a/video/out/vo_lavc.c +++ b/video/out/vo_lavc.c @@ -514,6 +514,7 @@ static int control(struct vo *vo, uint32_t request, void *data) const struct vo_driver video_out_lavc = { .buffer_frames = false, + .encode = true, .info = &(const struct vo_info_s){ "video encoding using libavcodec", "lavc", -- cgit v1.2.3