Mercurial > mplayer.hg
annotate m_property.h @ 18600:bedbb8922178
fixes by jerome ferrari
author | gpoirier |
---|---|
date | Tue, 06 Jun 2006 14:36:30 +0000 |
parents | 67d35fe89c8d |
children | 75327b24e06f |
rev | line source |
---|---|
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
1 |
18258 | 2 /// \defgroup Properties |
3 /// | |
4 /// Properties provide an interface to query and set the state of various | |
5 /// things in MPlayer. The API is based on the \ref Options API like the | |
6 /// \ref Config, but instead of using variables, properties use an ioctl like | |
7 /// function. The function is used to perform various actions like get and set | |
8 /// (see \ref PropertyActions). | |
9 ///@{ | |
10 | |
11 /// \file | |
12 | |
13 /// \defgroup PropertyActions Property actions | |
14 /// \ingroup Properties | |
15 ///@{ | |
16 | |
17 /// Get the current value. | |
18 /** \param arg Pointer to a variable of the right type. | |
19 */ | |
20 #define M_PROPERTY_GET 0 | |
21 | |
22 /// Get a string representing the current value. | |
23 /** Set the variable to a newly allocated string or NULL. | |
24 * \param arg Pointer to a char* variable. | |
25 */ | |
26 #define M_PROPERTY_PRINT 1 | |
27 | |
28 /// Set a new value. | |
29 /** The variable is updated to the value actually set. | |
30 * \param arg Pointer to a variable of the right type. | |
31 */ | |
32 #define M_PROPERTY_SET 2 | |
33 | |
34 /// Set a new value from a string. | |
35 /** \param arg String containing the value. | |
36 */ | |
37 #define M_PROPERTY_PARSE 3 | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
38 |
18258 | 39 /// Increment the current value. |
40 /** The sign of the argument is also taken into account if applicable. | |
41 * \param arg Pointer to a variable of the right type or NULL. | |
42 */ | |
43 #define M_PROPERTY_STEP_UP 4 | |
44 | |
45 /// Decrement the current value. | |
46 /** The sign of the argument is also taken into account if applicable. | |
47 * \param arg Pointer to a variable of the right type or NULL. | |
48 */ | |
49 #define M_PROPERTY_STEP_DOWN 5 | |
50 | |
51 ///@} | |
52 | |
53 /// \defgroup PropertyActionsReturn Property actions return code | |
54 /// \ingroup Properties | |
55 /// \brief Return values for the control function. | |
56 ///@{ | |
57 | |
58 /// Returned on success. | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
59 #define M_PROPERTY_OK 1 |
18258 | 60 |
61 /// Returned on error. | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
62 #define M_PROPERTY_ERROR 0 |
18258 | 63 |
18283 | 64 /// \brief Returned when the property can't be used, for example something about |
18258 | 65 /// the subs while playing audio only |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
66 #define M_PROPERTY_UNAVAILABLE -1 |
18258 | 67 |
68 /// Returned if the requested action is not implemented. | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
69 #define M_PROPERTY_NOT_IMPLEMENTED -2 |
18258 | 70 |
71 /// Returned when asking for a property that doesn't exist. | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
72 #define M_PROPERTY_UNKNOWN -3 |
18258 | 73 |
74 /// Returned when the action can't be done (like setting the volume when edl mute). | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
75 #define M_PROPERTY_DISABLED -4 |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
76 |
18258 | 77 ///@} |
78 | |
79 /// \ingroup Properties | |
80 /// \brief Property action callback. | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
81 typedef int(*m_property_ctrl_f)(m_option_t* prop,int action,void* arg); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
82 |
18258 | 83 /// Do an action on a property. |
84 /** \param prop The property. | |
85 * \param action See \ref PropertyActions. | |
86 * \param arg Argument, usually a pointer to the data type used by the property. | |
87 * \return See \ref PropertyActionsReturn. | |
88 */ | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
89 int m_property_do(m_option_t* prop, int action, void* arg); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
90 |
18258 | 91 /// Print the current value of a property. |
92 /** \param prop The property. | |
18283 | 93 * \return A newly allocated string with the current value or NULL on error. |
18258 | 94 */ |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
95 char* m_property_print(m_option_t* prop); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
96 |
18258 | 97 /// Set a property. |
98 /** \param prop The property. | |
99 * \param txt The value to set. | |
100 * \return 1 on success, 0 on error. | |
101 */ | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
102 int m_property_parse(m_option_t* prop, char* txt); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
103 |
18258 | 104 /// Print a list of properties. |
17914
f9cb6fc1608a
Add an option to list the properties: -list-properties
albeu
parents:
17911
diff
changeset
|
105 void m_properties_print_help_list(m_option_t* list); |
f9cb6fc1608a
Add an option to list the properties: -list-properties
albeu
parents:
17911
diff
changeset
|
106 |
18258 | 107 /// Expand a property string. |
18283 | 108 /** This function allows to print strings containing property values. |
18258 | 109 * ${NAME} is expanded to the value of property NAME or an empty |
110 * string in case of error. $(NAME:STR) expand STR only if the property | |
111 * NAME is available. | |
112 * | |
113 * \param prop_list An array of \ref m_option describing the available | |
114 * properties. | |
115 * \param str The string to expand. | |
116 * \return The newly allocated expanded string. | |
117 */ | |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
118 char* m_properties_expand_string(m_option_t* prop_list,char* str); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
119 |
18189 | 120 // Helpers to use MPlayer's properties |
121 | |
18258 | 122 /// Get an MPlayer property. |
18189 | 123 m_option_t* mp_property_find(char* name); |
124 | |
18258 | 125 /// Do an action with an MPlayer property. |
18189 | 126 int mp_property_do(char* name,int action, void* val); |
127 | |
18258 | 128 /// \defgroup PropertyImplHelper Property implementation helpers |
129 /// \ingroup Properties | |
130 /// \brief Helper functions for common property types. | |
131 ///@{ | |
18189 | 132 |
18258 | 133 /// Clamp a value according to \ref m_option::min and \ref m_option::max. |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
134 #define M_PROPERTY_CLAMP(prop,val) do { \ |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
135 if(((prop)->flags & M_OPT_MIN) && (val) < (prop)->min) \ |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
136 (val) = (prop)->min; \ |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
137 else if(((prop)->flags & M_OPT_MAX) && (val) > (prop)->max) \ |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
138 (val) = (prop)->max; \ |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
139 } while(0) |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
140 |
18258 | 141 /// Implement get. |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
142 int m_property_int_ro(m_option_t* prop,int action, |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
143 void* arg,int var); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
144 |
18258 | 145 /// Implement set, get and step up/down. |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
146 int m_property_int_range(m_option_t* prop,int action, |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
147 void* arg,int* var); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
148 |
18258 | 149 /// Same as m_property_int_range but cycle. |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
150 int m_property_choice(m_option_t* prop,int action, |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
151 void* arg,int* var); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
152 |
18258 | 153 /// Switch betwen min and max. |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
154 int m_property_flag(m_option_t* prop,int action, |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
155 void* arg,int* var); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
156 |
18258 | 157 /// Implement get, print. |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
158 int m_property_float_ro(m_option_t* prop,int action, |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
159 void* arg,float var); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
160 |
18258 | 161 /// Implement set, get and step up/down |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
162 int m_property_float_range(m_option_t* prop,int action, |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
163 void* arg,float* var); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
164 |
18258 | 165 /// float with a print function which print the time in ms |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
166 int m_property_delay(m_option_t* prop,int action, |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
167 void* arg,float* var); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
168 |
18258 | 169 /// Implement get, print |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
170 int m_property_double_ro(m_option_t* prop,int action, |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
171 void* arg,double var); |
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
172 |
18258 | 173 /// get/print the string |
17911
52f95509cd05
Add the new property API and implement a couple properties.
albeu
parents:
diff
changeset
|
174 int m_property_string_ro(m_option_t* prop,int action,void* arg, char* str); |
18258 | 175 |
176 ///@} | |
177 | |
178 ///@} |