synced with r20119
[mplayer/glamo.git] / m_property.h
blobe43dc597ad454792b829499f7a40c3224e4d01f6
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 ///@{
11 /// \file
13 /// \defgroup PropertyActions Property actions
14 /// \ingroup Properties
15 ///@{
17 /// Get the current value.
18 /** \param arg Pointer to a variable of the right type.
20 #define M_PROPERTY_GET 0
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.
26 #define M_PROPERTY_PRINT 1
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.
32 #define M_PROPERTY_SET 2
34 /// Set a new value from a string.
35 /** \param arg String containing the value.
37 #define M_PROPERTY_PARSE 3
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.
43 #define M_PROPERTY_STEP_UP 4
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.
49 #define M_PROPERTY_STEP_DOWN 5
51 ///@}
53 /// \defgroup PropertyActionsReturn Property actions return code
54 /// \ingroup Properties
55 /// \brief Return values for the control function.
56 ///@{
58 /// Returned on success.
59 #define M_PROPERTY_OK 1
61 /// Returned on error.
62 #define M_PROPERTY_ERROR 0
64 /// \brief Returned when the property can't be used, for example something about
65 /// the subs while playing audio only
66 #define M_PROPERTY_UNAVAILABLE -1
68 /// Returned if the requested action is not implemented.
69 #define M_PROPERTY_NOT_IMPLEMENTED -2
71 /// Returned when asking for a property that doesn't exist.
72 #define M_PROPERTY_UNKNOWN -3
74 /// Returned when the action can't be done (like setting the volume when edl mute).
75 #define M_PROPERTY_DISABLED -4
77 ///@}
79 /// \ingroup Properties
80 /// \brief Property action callback.
81 typedef int(*m_property_ctrl_f)(m_option_t* prop,int action,void* arg);
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.
89 int m_property_do(m_option_t* prop, int action, void* arg);
91 /// Print the current value of a property.
92 /** \param prop The property.
93 * \return A newly allocated string with the current value or NULL on error.
95 char* m_property_print(m_option_t* prop);
97 /// Set a property.
98 /** \param prop The property.
99 * \param txt The value to set.
100 * \return 1 on success, 0 on error.
102 int m_property_parse(m_option_t* prop, char* txt);
104 /// Print a list of properties.
105 void m_properties_print_help_list(m_option_t* list);
107 /// Expand a property string.
108 /** This function allows to print strings containing property values.
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.
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.
118 char* m_properties_expand_string(m_option_t* prop_list,char* str);
120 // Helpers to use MPlayer's properties
122 /// Get an MPlayer property.
123 m_option_t* mp_property_find(const char* name);
125 /// Do an action with an MPlayer property.
126 int mp_property_do(const char* name,int action, void* val);
128 /// \defgroup PropertyImplHelper Property implementation helpers
129 /// \ingroup Properties
130 /// \brief Helper functions for common property types.
131 ///@{
133 /// Clamp a value according to \ref m_option::min and \ref m_option::max.
134 #define M_PROPERTY_CLAMP(prop,val) do { \
135 if(((prop)->flags & M_OPT_MIN) && (val) < (prop)->min) \
136 (val) = (prop)->min; \
137 else if(((prop)->flags & M_OPT_MAX) && (val) > (prop)->max) \
138 (val) = (prop)->max; \
139 } while(0)
141 /// Implement get.
142 int m_property_int_ro(m_option_t* prop,int action,
143 void* arg,int var);
145 /// Implement set, get and step up/down.
146 int m_property_int_range(m_option_t* prop,int action,
147 void* arg,int* var);
149 /// Same as m_property_int_range but cycle.
150 int m_property_choice(m_option_t* prop,int action,
151 void* arg,int* var);
153 /// Switch betwen min and max.
154 int m_property_flag(m_option_t* prop,int action,
155 void* arg,int* var);
157 /// Implement get, print.
158 int m_property_float_ro(m_option_t* prop,int action,
159 void* arg,float var);
161 /// Implement set, get and step up/down
162 int m_property_float_range(m_option_t* prop,int action,
163 void* arg,float* var);
165 /// float with a print function which print the time in ms
166 int m_property_delay(m_option_t* prop,int action,
167 void* arg,float* var);
169 /// Implement get, print
170 int m_property_double_ro(m_option_t* prop,int action,
171 void* arg,double var);
173 /// get/print the string
174 int m_property_string_ro(m_option_t* prop,int action,void* arg, char* str);
176 ///@}
178 ///@}