Update to MPlayer SVN rev 32628 and FFmpeg SVN rev 25754.
[vaapi:dantemasons-mplayer.git] / .svn / text-base / m_config.h.svn-base
1 /*
2  * This file is part of MPlayer.
3  *
4  * MPlayer is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * MPlayer is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18
19 #ifndef MPLAYER_M_CONFIG_H
20 #define MPLAYER_M_CONFIG_H
21
22 /// \defgroup Config Config manager
23 ///
24 /// m_config provides an API to manipulate the config variables in MPlayer.
25 /// It makes use of the \ref Options API to provide a context stack that
26 /// allows saving and later restoring the state of all variables.
27 ///@{
28
29 /// \file
30
31 typedef struct m_config_option m_config_option_t;
32 typedef struct m_config_save_slot m_config_save_slot_t;
33 /// \ingroup ConfigProfiles
34 typedef struct m_profile m_profile_t;
35 struct m_option;
36 struct m_option_type;
37
38 /// Config option save slot
39 struct m_config_save_slot {
40   /// Previous level slot.
41   m_config_save_slot_t* prev;
42   /// Level at which the save was made.
43   int lvl;
44   // We have to store other datatypes in this as well,
45   // so make sure we get properly aligned addresses.
46   unsigned char data[0] __attribute__ ((aligned (8)));
47 };
48
49 /// Config option
50 struct m_config_option {
51   m_config_option_t* next;
52   /// Full name (ie option:subopt).
53   char* name;
54   /// Option description.
55   const struct m_option* opt;
56   /// Save slot stack.
57   m_config_save_slot_t* slots;
58   /// See \ref ConfigOptionFlags.
59   unsigned int flags;
60 };
61
62 /// \defgroup ConfigProfiles Config profiles
63 /// \ingroup Config
64 ///
65 /// Profiles allow to predefine some sets of options that can then
66 /// be applied later on with the internal -profile option.
67 ///
68 ///@{
69
70 /// Config profile
71 struct m_profile {
72   m_profile_t* next;
73   char* name;
74   char* desc;
75   int num_opts;
76   /// Option/value pair array.
77   char** opts;
78 };
79
80 ///@}
81
82 /// Config object
83 /** \ingroup Config */
84 typedef struct m_config {
85   /// Registered options.
86   /** This contains all options and suboptions.
87    */
88   m_config_option_t* opts;
89   /// Current stack level.
90   int lvl;
91   /// \ref OptionParserModes
92   int mode;
93   /// List of defined profiles.
94   m_profile_t* profiles;
95   /// Depth when recursively including profiles.
96   int profile_depth;
97   /// Options defined by the config itself.
98   struct m_option* self_opts;
99 } m_config_t;
100
101 /// \defgroup ConfigOptionFlags Config option flags
102 /// \ingroup Config
103 ///@{
104
105 /// Set if an option has been set at the current level.
106 #define M_CFG_OPT_SET    (1<<0)
107
108 /// Set if another option already uses the same variable.
109 #define M_CFG_OPT_ALIAS  (1<<1)
110
111 ///@}
112
113 /// Create a new config object.
114 /** \ingroup Config
115  */
116 m_config_t*
117 m_config_new(void);
118
119 /// Free a config object.
120 void
121 m_config_free(m_config_t* config);
122
123 /// Push a new context.
124 /** \param config The config object.
125  */
126 void
127 m_config_push(m_config_t* config);
128
129 /// Pop the current context restoring the previous context state.
130 /** \param config The config object.
131  */
132 void
133 m_config_pop(m_config_t* config);
134
135 /// Register some options to be used.
136 /** \param config The config object.
137  *  \param args An array of \ref m_option struct.
138  *  \return 1 on success, 0 on failure.
139  */
140 int
141 m_config_register_options(m_config_t *config, const struct m_option *args);
142
143 /// Set an option.
144 /** \param config The config object.
145  *  \param arg The option's name.
146  *  \param param The value of the option, can be NULL.
147  *  \return See \ref OptionParserReturn.
148  */
149 int
150 m_config_set_option(m_config_t *config, char* arg, char* param);
151
152 /// Check if an option setting is valid.
153 /** \param config The config object.
154  *  \param arg The option's name.
155  *  \param param The value of the option, can be NULL.
156  *  \return See \ref OptionParserReturn.
157  */
158 int
159 m_config_check_option(const m_config_t *config, char *arg, char *param);
160
161 /// Get the option matching the given name.
162 /** \param config The config object.
163  *  \param arg The option's name.
164  */
165 const struct m_option*
166 m_config_get_option(const m_config_t *config, char *arg);
167
168 /// Print a list of all registered options.
169 /** \param config The config object.
170  */
171 void
172 m_config_print_option_list(const m_config_t *config);
173
174 /// \addtogroup ConfigProfiles
175 ///@{
176
177 /// Find the profile with the given name.
178 /** \param config The config object.
179  *  \param arg The profile's name.
180  *  \return The profile object or NULL.
181  */
182 m_profile_t*
183 m_config_get_profile(const m_config_t *config, char *name);
184
185 /// Get the profile with the given name, creating it if necessary.
186 /** \param config The config object.
187  *  \param arg The profile's name.
188  *  \return The profile object.
189  */
190 m_profile_t*
191 m_config_add_profile(m_config_t* config, char* name);
192
193 /// Set the description of a profile.
194 /** Used by the config file parser when defining a profile.
195  *
196  *  \param p The profile object.
197  *  \param arg The profile's name.
198  */
199 void
200 m_profile_set_desc(m_profile_t* p, char* desc);
201
202 /// Add an option to a profile.
203 /** Used by the config file parser when defining a profile.
204  *
205  *  \param config The config object.
206  *  \param p The profile object.
207  *  \param name The option's name.
208  *  \param val The option's value.
209  */
210 int
211 m_config_set_profile_option(m_config_t* config, m_profile_t* p,
212                             char* name, char* val);
213
214 /// Enables profile usage
215 /** Used by the config file parser when loading a profile.
216  *
217  *  \param config The config object.
218  *  \param p The profile object.
219  */
220 void
221 m_config_set_profile(m_config_t* config, m_profile_t* p);
222
223 ///@}
224
225 ///@}
226
227 #endif /* MPLAYER_M_CONFIG_H */