mirror of https://github.com/mpv-player/mpv
options: get rid of GLOBAL_CONFIG hack
Just an implementation detail that can be cleaned up now. Internally, m_config maintains a tree of m_sub_options structs, except for the root it was not defined explicitly. GLOBAL_CONFIG was a hack to get access to it anyway. Define it explicitly instead.
This commit is contained in:
parent
5083db91eb
commit
1cb085a82e
|
@ -81,7 +81,7 @@ static bool init(struct mp_filter *da, struct mp_codec_params *codec,
|
|||
const char *decoder)
|
||||
{
|
||||
struct priv *ctx = da->priv;
|
||||
struct MPOpts *mpopts = mp_get_config_group(ctx, da->global, GLOBAL_CONFIG);
|
||||
struct MPOpts *mpopts = mp_get_config_group(ctx, da->global, &mp_opt_root);
|
||||
struct ad_lavc_params *opts =
|
||||
mp_get_config_group(ctx, da->global, &ad_lavc_conf);
|
||||
AVCodecContext *lavc_context;
|
||||
|
|
|
@ -515,7 +515,7 @@ void build_ordered_chapter_timeline(struct timeline *tl)
|
|||
.global = tl->global,
|
||||
.tl = tl,
|
||||
.demuxer = demuxer,
|
||||
.opts = mp_get_config_group(ctx, tl->global, GLOBAL_CONFIG),
|
||||
.opts = mp_get_config_group(ctx, tl->global, &mp_opt_root),
|
||||
};
|
||||
|
||||
if (!ctx->opts->ordered_chapters || !demuxer->access_references) {
|
||||
|
|
|
@ -775,7 +775,7 @@ struct mp_decoder_wrapper *mp_decoder_wrapper_create(struct mp_filter *parent,
|
|||
|
||||
struct priv *p = f->priv;
|
||||
struct mp_decoder_wrapper *w = &p->public;
|
||||
p->opt_cache = m_config_cache_alloc(p, f->global, GLOBAL_CONFIG);
|
||||
p->opt_cache = m_config_cache_alloc(p, f->global, &mp_opt_root);
|
||||
p->log = f->log;
|
||||
p->f = f;
|
||||
p->header = src;
|
||||
|
|
|
@ -387,7 +387,7 @@ done:
|
|||
struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
|
||||
struct mpv_global *global)
|
||||
{
|
||||
struct MPOpts *opts = mp_get_config_group(NULL, global, GLOBAL_CONFIG);
|
||||
struct MPOpts *opts = mp_get_config_group(NULL, global, &mp_opt_root);
|
||||
|
||||
struct mp_ipc_ctx *arg = talloc_ptrtype(NULL, arg);
|
||||
*arg = (struct mp_ipc_ctx){
|
||||
|
|
|
@ -450,7 +450,7 @@ done:
|
|||
struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
|
||||
struct mpv_global *global)
|
||||
{
|
||||
struct MPOpts *opts = mp_get_config_group(NULL, global, GLOBAL_CONFIG);
|
||||
struct MPOpts *opts = mp_get_config_group(NULL, global, &mp_opt_root);
|
||||
|
||||
struct mp_ipc_ctx *arg = talloc_ptrtype(NULL, arg);
|
||||
*arg = (struct mp_ipc_ctx){
|
||||
|
|
|
@ -451,23 +451,15 @@ static void config_destroy(void *p)
|
|||
}
|
||||
|
||||
struct m_config *m_config_new(void *talloc_ctx, struct mp_log *log,
|
||||
size_t size, const void *defaults,
|
||||
const struct m_option *options)
|
||||
const struct m_sub_options *root)
|
||||
{
|
||||
struct m_config *config = talloc(talloc_ctx, struct m_config);
|
||||
talloc_set_destructor(config, config_destroy);
|
||||
*config = (struct m_config){.log = log,};
|
||||
|
||||
struct m_sub_options *subopts = talloc_ptrtype(config, subopts);
|
||||
*subopts = (struct m_sub_options){
|
||||
.opts = options,
|
||||
.size = size,
|
||||
.defaults = defaults,
|
||||
};
|
||||
config->shadow = m_config_shadow_new(root);
|
||||
|
||||
config->shadow = m_config_shadow_new(subopts);
|
||||
|
||||
if (size) {
|
||||
if (root->size) {
|
||||
config->data = allocate_option_data(config, config->shadow, 0,
|
||||
config->shadow->data);
|
||||
config->optstruct = config->data->gdata[0].udata;
|
||||
|
@ -500,9 +492,16 @@ static struct m_config *m_config_from_obj_desc(void *talloc_ctx,
|
|||
struct mpv_global *global,
|
||||
struct m_obj_desc *desc)
|
||||
{
|
||||
struct m_config *c =
|
||||
m_config_new(talloc_ctx, log, desc->priv_size, desc->priv_defaults,
|
||||
desc->options);
|
||||
struct m_sub_options *root = talloc_ptrtype(NULL, root);
|
||||
*root = (struct m_sub_options){
|
||||
.opts = desc->options,
|
||||
// (global == NULL got repurposed to mean "no alloc")
|
||||
.size = global ? desc->priv_size : 0,
|
||||
.defaults = desc->priv_defaults,
|
||||
};
|
||||
|
||||
struct m_config *c = m_config_new(talloc_ctx, log, root);
|
||||
talloc_steal(c, root);
|
||||
c->global = global;
|
||||
if (desc->set_defaults && c->global)
|
||||
desc->set_defaults(c->global, c->optstruct);
|
||||
|
@ -513,7 +512,7 @@ struct m_config *m_config_from_obj_desc_noalloc(void *talloc_ctx,
|
|||
struct mp_log *log,
|
||||
struct m_obj_desc *desc)
|
||||
{
|
||||
return m_config_new(talloc_ctx, log, 0, desc->priv_defaults, desc->options);
|
||||
return m_config_from_obj_desc(talloc_ctx, log, NULL, desc);
|
||||
}
|
||||
|
||||
static const struct m_config_group *find_group(struct mpv_global *global,
|
||||
|
@ -1365,8 +1364,7 @@ struct m_config_cache *m_config_cache_alloc(void *ta_parent,
|
|||
int group_index = -1;
|
||||
|
||||
for (int n = 0; n < shadow->num_groups; n++) {
|
||||
// group==NULL is special cased to root group.
|
||||
if (shadow->groups[n].group == group || (!group && !n)) {
|
||||
if (shadow->groups[n].group == group) {
|
||||
group_index = n;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -92,16 +92,10 @@ typedef struct m_config {
|
|||
|
||||
// Create a new config object.
|
||||
// talloc_ctx: talloc parent context for the m_config allocation
|
||||
// size: size of the optstruct (where option values are stored)
|
||||
// size==0 creates a config object with no option struct allocated
|
||||
// defaults: if not NULL, points to a struct of same type as optstruct, which
|
||||
// contains default values for all options
|
||||
// options: list of options. Each option defines a member of the optstruct
|
||||
// and a corresponding option switch or sub-option field.
|
||||
// Note that the m_config object will keep pointers to defaults and options.
|
||||
// root: description of all options
|
||||
// Note that the m_config object will keep pointers to root and log.
|
||||
struct m_config *m_config_new(void *talloc_ctx, struct mp_log *log,
|
||||
size_t size, const void *defaults,
|
||||
const struct m_option *options);
|
||||
const struct m_sub_options *root);
|
||||
|
||||
// Create a m_config for the given desc. This is for --af/--vf, which have
|
||||
// different sub-options for every filter (represented by separate desc
|
||||
|
@ -279,8 +273,6 @@ struct m_config_cache {
|
|||
struct config_cache *internal;
|
||||
};
|
||||
|
||||
#define GLOBAL_CONFIG NULL
|
||||
|
||||
// Create a mirror copy from the global options.
|
||||
// Keep in mind that a m_config_cache object is not thread-safe; it merely
|
||||
// provides thread-safe access to the global options. All API functions for
|
||||
|
@ -290,9 +282,7 @@ struct m_config_cache {
|
|||
// time.
|
||||
// ta_parent: parent for the returned allocation
|
||||
// global: option data source
|
||||
// group: the option group to return. This can be GLOBAL_CONFIG for the global
|
||||
// option struct (MPOpts), or m_sub_options used in a certain
|
||||
// OPT_SUBSTRUCT() item.
|
||||
// group: the option group to return
|
||||
struct m_config_cache *m_config_cache_alloc(void *ta_parent,
|
||||
struct mpv_global *global,
|
||||
const struct m_sub_options *group);
|
||||
|
@ -355,7 +345,6 @@ void m_config_cache_write_opt(struct m_config_cache *cache, void *ptr);
|
|||
// Like m_config_cache_alloc(), but return the struct (m_config_cache->opts)
|
||||
// directly, with no way to update the config. Basically this returns a copy
|
||||
// with a snapshot of the current option values.
|
||||
// group==GLOBAL_CONFIG is a special case, and always returns the root group.
|
||||
void *mp_get_config_group(void *ta_parent, struct mpv_global *global,
|
||||
const struct m_sub_options *group);
|
||||
|
||||
|
|
|
@ -318,7 +318,7 @@ const struct m_sub_options filter_conf = {
|
|||
#undef OPT_BASE_STRUCT
|
||||
#define OPT_BASE_STRUCT struct MPOpts
|
||||
|
||||
const m_option_t mp_opts[] = {
|
||||
static const m_option_t mp_opts[] = {
|
||||
// handled in command line pre-parser (parse_commandline.c)
|
||||
{"v", &m_option_type_dummy_flag, CONF_NOCFG | M_OPT_NOPROP,
|
||||
.offset = -1},
|
||||
|
@ -896,7 +896,7 @@ const m_option_t mp_opts[] = {
|
|||
{0}
|
||||
};
|
||||
|
||||
const struct MPOpts mp_default_opts = {
|
||||
static const struct MPOpts mp_default_opts = {
|
||||
.use_terminal = 1,
|
||||
.msg_color = 1,
|
||||
.audio_decoders = NULL,
|
||||
|
@ -991,4 +991,10 @@ const struct MPOpts mp_default_opts = {
|
|||
.cuda_device = -1,
|
||||
};
|
||||
|
||||
const struct m_sub_options mp_opt_root = {
|
||||
.opts = mp_opts,
|
||||
.size = sizeof(struct MPOpts),
|
||||
.defaults = &mp_default_opts,
|
||||
};
|
||||
|
||||
#endif /* MPLAYER_CFG_MPLAYER_H */
|
||||
|
|
|
@ -355,8 +355,6 @@ struct filter_opts {
|
|||
int deinterlace;
|
||||
};
|
||||
|
||||
extern const m_option_t mp_opts[];
|
||||
extern const struct MPOpts mp_default_opts;
|
||||
extern const struct m_sub_options vo_sub_opts;
|
||||
extern const struct m_sub_options dvd_conf;
|
||||
extern const struct m_sub_options mp_subtitle_sub_opts;
|
||||
|
@ -364,5 +362,6 @@ extern const struct m_sub_options mp_osd_render_sub_opts;
|
|||
extern const struct m_sub_options filter_conf;
|
||||
extern const struct m_sub_options resample_conf;
|
||||
extern const struct m_sub_options stream_conf;
|
||||
extern const struct m_sub_options mp_opt_root;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -296,8 +296,7 @@ struct MPContext *mp_create(void)
|
|||
mpctx->statusline = mp_log_new(mpctx, mpctx->log, "!statusline");
|
||||
|
||||
// Create the config context and register the options
|
||||
mpctx->mconfig = m_config_new(mpctx, mpctx->log, sizeof(struct MPOpts),
|
||||
&mp_default_opts, mp_opts);
|
||||
mpctx->mconfig = m_config_new(mpctx, mpctx->log, &mp_opt_root);
|
||||
mpctx->opts = mpctx->mconfig->optstruct;
|
||||
mpctx->global->config = mpctx->mconfig->shadow;
|
||||
mpctx->mconfig->includefunc = cfg_include;
|
||||
|
|
Loading…
Reference in New Issue