diff options
author | wm4 <wm4@nowhere> | 2012-11-05 17:02:04 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-11-12 20:06:14 +0100 |
commit | d4bdd0473d6f43132257c9fb3848d829755167a3 (patch) | |
tree | 8021c2f7da1841393c8c832105e20cd527826d6c /core/m_config.h | |
parent | bd48deba77bd5582c5829d6fe73a7d2571088aba (diff) | |
download | mpv-d4bdd0473d6f43132257c9fb3848d829755167a3.tar.bz2 mpv-d4bdd0473d6f43132257c9fb3848d829755167a3.tar.xz |
Rename directories, move files (step 1 of 2) (does not compile)
Tis drops the silly lib prefixes, and attempts to organize the tree in
a more logical way. Make the top-level directory less cluttered as
well.
Renames the following directories:
libaf -> audio/filter
libao2 -> audio/out
libvo -> video/out
libmpdemux -> demux
Split libmpcodecs:
vf* -> video/filter
vd*, dec_video.* -> video/decode
mp_image*, img_format*, ... -> video/
ad*, dec_audio.* -> audio/decode
libaf/format.* is moved to audio/ - this is similar to how mp_image.*
is located in video/.
Move most top-level .c/.h files to core. (talloc.c/.h is left on top-
level, because it's external.) Park some of the more annoying files
in compat/. Some of these are relicts from the time mplayer used
ffmpeg internals.
sub/ is not split, because it's too much of a mess (subtitle code is
mixed with OSD display and rendering).
Maybe the organization of core is not ideal: it mixes playback core
(like mplayer.c) and utility helpers (like bstr.c/h). Should the need
arise, the playback core will be moved somewhere else, while core
contains all helper and common code.
Diffstat (limited to 'core/m_config.h')
-rw-r--r-- | core/m_config.h | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/core/m_config.h b/core/m_config.h new file mode 100644 index 0000000000..9098a23c97 --- /dev/null +++ b/core/m_config.h @@ -0,0 +1,209 @@ +/* + * This file is part of MPlayer. + * + * MPlayer is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MPlayer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with MPlayer; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPLAYER_M_CONFIG_H +#define MPLAYER_M_CONFIG_H + +#include <stdbool.h> + +#include "bstr.h" + +// m_config provides an API to manipulate the config variables in MPlayer. +// It makes use of the Options API to provide a context stack that +// allows saving and later restoring the state of all variables. + +typedef struct m_profile m_profile_t; +struct m_option; +struct m_option_type; +struct m_sub_options; + +// Config option +struct m_config_option { + struct m_config_option *next; + // Full name (ie option:subopt). + char *name; + // Option description. + const struct m_option *opt; + // Raw value of the option. + void *data; + // Raw value of the backup of the global value (or NULL). + void *global_backup; + // If this is a suboption, the option that contains this option. + struct m_config_option *parent; + // If this option aliases another, more important option. The alias_owner + // option is the one that has the most correct option type for the data + // variable, and which is considered the original. + struct m_config_option *alias_owner; +}; + +// Profiles allow to predefine some sets of options that can then +// be applied later on with the internal -profile option. + +// Config profile +struct m_profile { + struct m_profile *next; + char *name; + char *desc; + int num_opts; + // Option/value pair array. + char **opts; +}; + +enum option_source { + // Set when parsing command line arguments. + M_COMMAND_LINE, + // Set when parsing from a config file. + M_CONFIG_FILE, +}; + +// Config object +/** \ingroup Config */ +typedef struct m_config { + // Registered options. + /** This contains all options and suboptions. + */ + struct m_config_option *opts; + enum option_source mode; + // When options are set (via m_config_set_option or m_config_set_profile), + // back up the old value (unless it's already backed up). Used for restoring + // global options when per-file options are set. + bool file_local_mode; + + // List of defined profiles. + struct m_profile *profiles; + // Depth when recursively including profiles. + int profile_depth; + + void *optstruct; // struct mpopts or other + int (*includefunc)(struct m_config *conf, char *filename); +} m_config_t; + +// Create a new config object. +struct m_config * +m_config_new(void *optstruct, + int includefunc(struct m_config *conf, char *filename)); + +struct m_config *m_config_simple(void *optstruct); + +// Free a config object. +void m_config_free(struct m_config *config); + +void m_config_enter_file_local(struct m_config *config); +void m_config_leave_file_local(struct m_config *config); + +/* Register some options to be used. + * \param config The config object. + * \param args An array of \ref m_option struct. + * \return 1 on success, 0 on failure. + */ +int m_config_register_options(struct m_config *config, + const struct m_option *args); + +/* Set an option. + * \param config The config object. + * \param name The option's name. + * \param param The value of the option, can be NULL. + * \return See \ref OptionParserReturn. + */ +int m_config_set_option(struct m_config *config, struct bstr name, + struct bstr param); + +static inline int m_config_set_option0(struct m_config *config, + const char *name, const char *param) +{ + return m_config_set_option(config, bstr0(name), bstr0(param)); +} + +/* Check if an option setting is valid. + * Same as above m_config_set_option() but doesn't actually set anything. + */ +int m_config_check_option(struct m_config *config, struct bstr name, + struct bstr param); + +static inline int m_config_check_option0(struct m_config *config, + const char *name, const char *param) +{ + return m_config_check_option(config, bstr0(name), bstr0(param)); +} + +int m_config_parse_suboptions(struct m_config *config, char *name, + char *subopts); + + +/* Get the option matching the given name. + * \param config The config object. + * \param name The option's name. + */ +const struct m_option *m_config_get_option(const struct m_config *config, + struct bstr name); + +struct m_config_option *m_config_get_co(const struct m_config *config, + struct bstr name); + +/* Print a list of all registered options. + * \param config The config object. + */ +void m_config_print_option_list(const struct m_config *config); + + +/* Find the profile with the given name. + * \param config The config object. + * \param arg The profile's name. + * \return The profile object or NULL. + */ +struct m_profile *m_config_get_profile(const struct m_config *config, + char *name); + +/* Get the profile with the given name, creating it if necessary. + * \param config The config object. + * \param arg The profile's name. + * \return The profile object. + */ +struct m_profile *m_config_add_profile(struct m_config *config, char *name); + +/* Set the description of a profile. + * Used by the config file parser when defining a profile. + * + * \param p The profile object. + * \param arg The profile's name. + */ +void m_profile_set_desc(struct m_profile *p, char *desc); + +/* Add an option to a profile. + * Used by the config file parser when defining a profile. + * + * \param config The config object. + * \param p The profile object. + * \param name The option's name. + * \param val The option's value. + */ +int m_config_set_profile_option(struct m_config *config, struct m_profile *p, + char *name, char *val); + +/* Enables profile usage + * Used by the config file parser when loading a profile. + * + * \param config The config object. + * \param p The profile object. + */ +void m_config_set_profile(struct m_config *config, struct m_profile *p); + +void *m_config_alloc_struct(void *talloc_parent, + const struct m_sub_options *subopts); + +#endif /* MPLAYER_M_CONFIG_H */ |