From 8f60de98beef61c3631819a4e3a4be1ec56da00d Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 11 Jun 2014 02:04:02 +0200 Subject: encode: make option struct local Similar to previous commits. --- common/encode.h | 27 ++++++++++++++++++++++++--- common/encode_lavc.c | 35 +++++++++++++++++++++++++++++++++-- common/encode_lavc.h | 2 +- options/options.c | 29 ++++------------------------- options/options.h | 23 ++--------------------- player/configfiles.c | 4 +++- player/main.c | 6 +++--- 7 files changed, 70 insertions(+), 56 deletions(-) diff --git a/common/encode.h b/common/encode.h index 530805c76f..996fe66857 100644 --- a/common/encode.h +++ b/common/encode.h @@ -8,15 +8,36 @@ struct mpv_global; struct mp_log; struct encode_lavc_context; -struct encode_output_conf; + +struct encode_opts { + char *file; + char *format; + char **fopts; + float fps; + float maxfps; + char *vcodec; + char **vopts; + char *acodec; + char **aopts; + int harddup; + float voffset; + float aoffset; + int copyts; + int rawts; + int autofps; + int neverdrop; + int video_first; + int audio_first; + int metadata; +}; // interface for mplayer.c -struct encode_lavc_context *encode_lavc_init(struct encode_output_conf *options, +struct encode_lavc_context *encode_lavc_init(struct encode_opts *options, struct mpv_global *global); void encode_lavc_finish(struct encode_lavc_context *ctx); void encode_lavc_free(struct encode_lavc_context *ctx); void encode_lavc_discontinuity(struct encode_lavc_context *ctx); -bool encode_lavc_showhelp(struct mp_log *log, struct encode_output_conf *options); +bool encode_lavc_showhelp(struct mp_log *log, struct encode_opts *options); int encode_lavc_getstatus(struct encode_lavc_context *ctx, char *buf, int bufsize, float relative_position); void encode_lavc_expect_stream(struct encode_lavc_context *ctx, int mt); void encode_lavc_set_metadata(struct encode_lavc_context *ctx, diff --git a/common/encode_lavc.c b/common/encode_lavc.c index 0ec3e93b06..df5710e07a 100644 --- a/common/encode_lavc.c +++ b/common/encode_lavc.c @@ -27,12 +27,43 @@ #include "common/msg.h" #include "common/msg_control.h" #include "video/vfcap.h" +#include "options/m_option.h" #include "options/options.h" #include "osdep/timer.h" #include "video/out/vo.h" #include "talloc.h" #include "stream/stream.h" +#define OPT_BASE_STRUCT struct encode_opts +const struct m_sub_options encode_config = { + .opts = (const m_option_t[]) { + OPT_STRING("o", file, CONF_GLOBAL | CONF_NOCFG | CONF_PRE_PARSE), + OPT_STRING("of", format, CONF_GLOBAL), + OPT_STRINGLIST("ofopts*", fopts, CONF_GLOBAL), + OPT_FLOATRANGE("ofps", fps, CONF_GLOBAL, 0.0, 1000000.0), + OPT_FLOATRANGE("omaxfps", maxfps, CONF_GLOBAL, 0.0, 1000000.0), + OPT_STRING("ovc", vcodec, CONF_GLOBAL), + OPT_STRINGLIST("ovcopts*", vopts, CONF_GLOBAL), + OPT_STRING("oac", acodec, CONF_GLOBAL), + OPT_STRINGLIST("oacopts*", aopts, CONF_GLOBAL), + OPT_FLAG("oharddup", harddup, CONF_GLOBAL), + OPT_FLOATRANGE("ovoffset", voffset, CONF_GLOBAL, -1000000.0, 1000000.0), + OPT_FLOATRANGE("oaoffset", aoffset, CONF_GLOBAL, -1000000.0, 1000000.0), + OPT_FLAG("ocopyts", copyts, CONF_GLOBAL), + OPT_FLAG("orawts", rawts, CONF_GLOBAL), + OPT_FLAG("oautofps", autofps, CONF_GLOBAL), + OPT_FLAG("oneverdrop", neverdrop, CONF_GLOBAL), + OPT_FLAG("ovfirst", video_first, CONF_GLOBAL), + OPT_FLAG("oafirst", audio_first, CONF_GLOBAL), + OPT_FLAG("ometadata", metadata, CONF_GLOBAL), + {0} + }, + .size = sizeof(struct encode_opts), + .defaults = &(const struct encode_opts){ + .metadata = 1, + }, +}; + static int set_to_avdictionary(struct encode_lavc_context *ctx, AVDictionary **dictp, const char *key, @@ -124,7 +155,7 @@ int encode_lavc_oformat_flags(struct encode_lavc_context *ctx) return ctx->avc ? ctx->avc->oformat->flags : 0; } -struct encode_lavc_context *encode_lavc_init(struct encode_output_conf *options, +struct encode_lavc_context *encode_lavc_init(struct encode_opts *options, struct mpv_global *global) { struct encode_lavc_context *ctx; @@ -905,7 +936,7 @@ static void encode_lavc_printoptions(struct mp_log *log, void *obj, } } -bool encode_lavc_showhelp(struct mp_log *log, struct encode_output_conf *opts) +bool encode_lavc_showhelp(struct mp_log *log, struct encode_opts *opts) { bool help_output = false; if (av_codec_next(NULL) == NULL) diff --git a/common/encode_lavc.h b/common/encode_lavc.h index 7a7f86cde1..fc1e754f00 100644 --- a/common/encode_lavc.h +++ b/common/encode_lavc.h @@ -36,7 +36,7 @@ struct encode_lavc_context { struct mpv_global *global; - struct encode_output_conf *options; + struct encode_opts *options; struct mp_log *log; struct mp_tags *metadata; diff --git a/options/options.c b/options/options.c index a34f0e7bf5..7fb4060fca 100644 --- a/options/options.c +++ b/options/options.c @@ -66,6 +66,7 @@ extern const struct m_sub_options demux_lavf_conf; extern const struct m_sub_options vd_lavc_conf; extern const struct m_sub_options ad_lavc_conf; extern const struct m_sub_options input_config; +extern const struct m_sub_options encode_config; extern const struct m_obj_list vf_obj_list; extern const struct m_obj_list af_obj_list; @@ -505,29 +506,11 @@ const m_option_t mp_opts[] = { OPT_PRINT("version", print_version), OPT_PRINT("V", print_version), -#if HAVE_ENCODING - OPT_STRING("o", encode_output.file, CONF_GLOBAL | CONF_NOCFG | CONF_PRE_PARSE), - OPT_STRING("of", encode_output.format, CONF_GLOBAL), - OPT_STRINGLIST("ofopts*", encode_output.fopts, CONF_GLOBAL), - OPT_FLOATRANGE("ofps", encode_output.fps, CONF_GLOBAL, 0.0, 1000000.0), - OPT_FLOATRANGE("omaxfps", encode_output.maxfps, CONF_GLOBAL, 0.0, 1000000.0), - OPT_STRING("ovc", encode_output.vcodec, CONF_GLOBAL), - OPT_STRINGLIST("ovcopts*", encode_output.vopts, CONF_GLOBAL), - OPT_STRING("oac", encode_output.acodec, CONF_GLOBAL), - OPT_STRINGLIST("oacopts*", encode_output.aopts, CONF_GLOBAL), - OPT_FLAG("oharddup", encode_output.harddup, CONF_GLOBAL), - OPT_FLOATRANGE("ovoffset", encode_output.voffset, CONF_GLOBAL, -1000000.0, 1000000.0), - OPT_FLOATRANGE("oaoffset", encode_output.aoffset, CONF_GLOBAL, -1000000.0, 1000000.0), - OPT_FLAG("ocopyts", encode_output.copyts, CONF_GLOBAL), - OPT_FLAG("orawts", encode_output.rawts, CONF_GLOBAL), - OPT_FLAG("oautofps", encode_output.autofps, CONF_GLOBAL), - OPT_FLAG("oneverdrop", encode_output.neverdrop, CONF_GLOBAL), - OPT_FLAG("ovfirst", encode_output.video_first, CONF_GLOBAL), - OPT_FLAG("oafirst", encode_output.audio_first, CONF_GLOBAL), - OPT_FLAG("ometadata", encode_output.metadata, CONF_GLOBAL), +#ifdef HAVE_ENCODING + OPT_SUBSTRUCT("", encode_opts, encode_config, 0), #endif - {NULL, NULL, 0, 0, 0, 0, NULL} + {0} }; const struct MPOpts mp_default_opts = { @@ -643,10 +626,6 @@ const struct MPOpts mp_default_opts = { .dvd_angle = 1, .mf_fps = 1.0, - - .encode_output = { - .metadata = 1, - }, }; #endif /* MPLAYER_CFG_MPLAYER_H */ diff --git a/options/options.h b/options/options.h index ec66b33c8b..c89c6cfb19 100644 --- a/options/options.h +++ b/options/options.h @@ -265,27 +265,8 @@ typedef struct MPOpts { struct input_opts *input_opts; - struct encode_output_conf { - char *file; - char *format; - char **fopts; - float fps; - float maxfps; - char *vcodec; - char **vopts; - char *acodec; - char **aopts; - int harddup; - float voffset; - float aoffset; - int copyts; - int rawts; - int autofps; - int neverdrop; - int video_first; - int audio_first; - int metadata; - } encode_output; + // may be NULL if encoding is not compiled-in + struct encode_opts *encode_opts; } MPOpts; extern const m_option_t mp_opts[]; diff --git a/player/configfiles.c b/player/configfiles.c index 9b20f5af71..2794ddaebf 100644 --- a/player/configfiles.c +++ b/player/configfiles.c @@ -32,6 +32,7 @@ #include "osdep/io.h" #include "common/global.h" +#include "common/encode.h" #include "common/msg.h" #include "options/path.h" #include "options/m_config.h" @@ -58,7 +59,8 @@ bool mp_parse_cfgfiles(struct MPContext *mpctx) bool r = true; char *conffile; char *section = NULL; - bool encoding = opts->encode_output.file && *opts->encode_output.file; + bool encoding = opts->encode_opts && + opts->encode_opts->file && opts->encode_opts->file[0]; // In encoding mode, we don't want to apply normal config options. // So we "divert" normal options into a separate section, and the diverted // section is never used - unless maybe it's explicitly referenced from an diff --git a/player/main.c b/player/main.c index 19c24c036b..e2672a744e 100644 --- a/player/main.c +++ b/player/main.c @@ -236,7 +236,7 @@ static bool handle_help_options(struct MPContext *mpctx) opt_exit = 1; } #if HAVE_ENCODING - if (encode_lavc_showhelp(log, &opts->encode_output)) + if (encode_lavc_showhelp(log, opts->encode_opts)) opt_exit = 1; #endif return opt_exit; @@ -383,8 +383,8 @@ int mp_initialize(struct MPContext *mpctx) mp_dispatch_set_wakeup_fn(mpctx->dispatch, wakeup_playloop, mpctx); #if HAVE_ENCODING - if (opts->encode_output.file && *opts->encode_output.file) { - mpctx->encode_lavc_ctx = encode_lavc_init(&opts->encode_output, + if (opts->encode_opts->file && opts->encode_opts->file[0]) { + mpctx->encode_lavc_ctx = encode_lavc_init(opts->encode_opts, mpctx->global); if(!mpctx->encode_lavc_ctx) { MP_INFO(mpctx, "Encoding initialization failed."); -- cgit v1.2.3