X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_variables.h;h=e5885876f1508c2689b21179faf2218b907e09ec;hb=13db37f57fc6053816fd41204e38b9999e0aa746;hp=24be87f013ac273e51c43bb0b14ac804d914d9f3;hpb=3a29031f75fe51fb7e3a95c0b074626608ccca0a;p=vlc diff --git a/include/vlc_variables.h b/include/vlc_variables.h index 24be87f013..e5885876f1 100644 --- a/include/vlc_variables.h +++ b/include/vlc_variables.h @@ -1,25 +1,25 @@ /***************************************************************************** - * variables.h: variables handling + * vlc_variables.h: variables handling ***************************************************************************** - * Copyright (C) 2002-2004 the VideoLAN team + * Copyright (C) 2002-2004 VLC authors and VideoLAN * $Id$ * * Authors: Samuel Hocevar * Gildas Bazin * - * This program 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 + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program 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. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #ifndef VLC_VARIABLES_H @@ -41,13 +41,27 @@ * @{ */ -/***************************************************************************** - * Variable types - probably very incomplete - *****************************************************************************/ #define VLC_VAR_TYPE 0x00ff #define VLC_VAR_CLASS 0x00f0 #define VLC_VAR_FLAGS 0xff00 +/** + * \defgroup var_type Variable types + * These are the different types a vlc variable can have. + * @{ + */ +#define VLC_VAR_VOID 0x0010 +#define VLC_VAR_BOOL 0x0020 +#define VLC_VAR_INTEGER 0x0030 +#define VLC_VAR_HOTKEY 0x0031 +#define VLC_VAR_STRING 0x0040 +#define VLC_VAR_VARIABLE 0x0044 +#define VLC_VAR_FLOAT 0x0050 +#define VLC_VAR_TIME 0x0060 +#define VLC_VAR_ADDRESS 0x0070 +#define VLC_VAR_COORDS 0x00A0 +/**@}*/ + /** \defgroup var_flags Additive flags * These flags are added to the type field of the variable. Most as a result of * a var_Change() call, but some may be added at creation time @@ -117,50 +131,47 @@ * These are the different actions that can be used with var_GetAndSet() * @{ */ -/** - * Toggle the value of this boolean - * \param val Unused - */ -#define VLC_VAR_TOGGLE_BOOL 0x0010 -/** - * Increment or decrement an integer of a given value - * \param val the value - */ -#define VLC_VAR_INTEGER_INCDEC 0x0020 +enum { + VLC_VAR_BOOL_TOGGLE, /**< Invert a boolean value (param ignored) */ + VLC_VAR_INTEGER_ADD, /**< Add parameter to an integer value */ + VLC_VAR_INTEGER_OR, /**< Binary OR over an integer bits field */ + VLC_VAR_INTEGER_NAND,/**< Binary NAND over an integer bits field */ +}; /**@}*/ /***************************************************************************** * Prototypes *****************************************************************************/ -VLC_EXPORT( int, var_Create, ( vlc_object_t *, const char *, int ) ); +VLC_API int var_Create( vlc_object_t *, const char *, int ); #define var_Create(a,b,c) var_Create( VLC_OBJECT(a), b, c ) -VLC_EXPORT( int, var_Destroy, ( vlc_object_t *, const char * ) ); +VLC_API int var_Destroy( vlc_object_t *, const char * ); #define var_Destroy(a,b) var_Destroy( VLC_OBJECT(a), b ) -VLC_EXPORT( int, var_Change, ( vlc_object_t *, const char *, int, vlc_value_t *, vlc_value_t * ) ); +VLC_API int var_Change( vlc_object_t *, const char *, int, vlc_value_t *, vlc_value_t * ); #define var_Change(a,b,c,d,e) var_Change( VLC_OBJECT(a), b, c, d, e ) -VLC_EXPORT( int, var_Type, ( vlc_object_t *, const char * ) LIBVLC_USED ); +VLC_API int var_Type( vlc_object_t *, const char * ) VLC_USED; #define var_Type(a,b) var_Type( VLC_OBJECT(a), b ) -VLC_EXPORT( int, var_Set, ( vlc_object_t *, const char *, vlc_value_t ) ); +VLC_API int var_Set( vlc_object_t *, const char *, vlc_value_t ); #define var_Set(a,b,c) var_Set( VLC_OBJECT(a), b, c ) -VLC_EXPORT( int, var_Get, ( vlc_object_t *, const char *, vlc_value_t * ) ); +VLC_API int var_Get( vlc_object_t *, const char *, vlc_value_t * ); #define var_Get(a,b,c) var_Get( VLC_OBJECT(a), b, c ) -VLC_EXPORT( int, var_SetChecked, ( vlc_object_t *, const char *, int, vlc_value_t ) ); -VLC_EXPORT( int, var_GetChecked, ( vlc_object_t *, const char *, int, vlc_value_t * ) ); -VLC_EXPORT( int, var_GetAndSet, ( vlc_object_t *, const char *, int, vlc_value_t ) ); -#define var_GetAndSet(a,b,c,d) var_GetAndSet(VLC_OBJECT(a), b, c, d) +VLC_API int var_SetChecked( vlc_object_t *, const char *, int, vlc_value_t ); +#define var_SetChecked(o,n,t,v) var_SetChecked(VLC_OBJECT(o),n,t,v) +VLC_API int var_GetChecked( vlc_object_t *, const char *, int, vlc_value_t * ); +#define var_GetChecked(o,n,t,v) var_GetChecked(VLC_OBJECT(o),n,t,v) +VLC_API int var_GetAndSet( vlc_object_t *, const char *, int, vlc_value_t * ); -VLC_EXPORT( int, var_Inherit, ( vlc_object_t *, const char *, int, vlc_value_t * ) ); +VLC_API int var_Inherit( vlc_object_t *, const char *, int, vlc_value_t * ); -VLC_EXPORT( int, var_Command, ( vlc_object_t *, const char *, const char *, const char *, char ** ) ); +VLC_API int var_Command( vlc_object_t *, const char *, const char *, const char *, char ** ); #define var_Command(a,b,c,d,e) var_Command( VLC_OBJECT( a ), b, c, d, e ) -VLC_EXPORT( void, var_FreeList, ( vlc_value_t *, vlc_value_t * ) ); +VLC_API void var_FreeList( vlc_value_t *, vlc_value_t * ); /***************************************************************************** @@ -172,9 +183,9 @@ VLC_EXPORT( void, var_FreeList, ( vlc_value_t *, vlc_value_t * ) ); * vlc_value_t newvalue, * void *p_data); *****************************************************************************/ -VLC_EXPORT( int, var_AddCallback, ( vlc_object_t *, const char *, vlc_callback_t, void * ) ); -VLC_EXPORT( int, var_DelCallback, ( vlc_object_t *, const char *, vlc_callback_t, void * ) ); -VLC_EXPORT( int, var_TriggerCallback, ( vlc_object_t *, const char * ) ); +VLC_API int var_AddCallback( vlc_object_t *, const char *, vlc_callback_t, void * ); +VLC_API int var_DelCallback( vlc_object_t *, const char *, vlc_callback_t, void * ); +VLC_API int var_TriggerCallback( vlc_object_t *, const char * ); #define var_AddCallback(a,b,c,d) var_AddCallback( VLC_OBJECT(a), b, c, d ) #define var_DelCallback(a,b,c,d) var_DelCallback( VLC_OBJECT(a), b, c, d ) @@ -191,7 +202,8 @@ VLC_EXPORT( int, var_TriggerCallback, ( vlc_object_t *, const char * ) ); * \param psz_name The name of the variable * \param i The new integer value of this variable */ -static inline int var_SetInteger( vlc_object_t *p_obj, const char *psz_name, int i ) +static inline int var_SetInteger( vlc_object_t *p_obj, const char *psz_name, + int64_t i ) { vlc_value_t val; val.i_int = i; @@ -226,6 +238,16 @@ static inline int var_SetTime( vlc_object_t *p_obj, const char *psz_name, int64_ return var_SetChecked( p_obj, psz_name, VLC_VAR_TIME, val ); } +static inline int var_SetCoords( vlc_object_t *obj, const char *name, + int32_t x, int32_t y ) +{ + vlc_value_t val; + val.coords.x = x; + val.coords.y = y; + return var_SetChecked (obj, name, VLC_VAR_COORDS, val); +} +#define var_SetCoords(o,n,x,y) var_SetCoords(VLC_OBJECT(o),n,x,y) + /** * Set the value of a float variable * @@ -283,8 +305,8 @@ int var_SetAddress( vlc_object_t *p_obj, const char *psz_name, void *ptr ) * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED -static inline int var_GetInteger( vlc_object_t *p_obj, const char *psz_name ) +VLC_USED +static inline int64_t var_GetInteger( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; if( !var_GetChecked( p_obj, psz_name, VLC_VAR_INTEGER, &val ) ) @@ -299,7 +321,7 @@ static inline int var_GetInteger( vlc_object_t *p_obj, const char *psz_name ) * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline bool var_GetBool( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; val.b_bool = false; @@ -316,7 +338,7 @@ static inline bool var_GetBool( vlc_object_t *p_obj, const char *psz_name ) * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline int64_t var_GetTime( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; val.i_time = 0L; @@ -326,13 +348,28 @@ static inline int64_t var_GetTime( vlc_object_t *p_obj, const char *psz_name ) return 0; } +static inline void var_GetCoords( vlc_object_t *obj, const char *name, + int32_t *px, int32_t *py ) +{ + vlc_value_t val; + + if (likely(!var_GetChecked (obj, name, VLC_VAR_COORDS, &val))) + { + *px = val.coords.x; + *py = val.coords.y; + } + else + *px = *py = 0; +} +#define var_GetCoords(o,n,x,y) var_GetCoords(VLC_OBJECT(o),n,x,y) + /** * Get a float value * * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline float var_GetFloat( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; val.f_float = 0.0; @@ -348,7 +385,7 @@ static inline float var_GetFloat( vlc_object_t *p_obj, const char *psz_name ) * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED VLC_MALLOC static inline char *var_GetString( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; val.psz_string = NULL; @@ -358,7 +395,7 @@ static inline char *var_GetString( vlc_object_t *p_obj, const char *psz_name ) return val.psz_string; } -LIBVLC_USED +VLC_USED VLC_MALLOC static inline char *var_GetNonEmptyString( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; @@ -370,7 +407,7 @@ static inline char *var_GetNonEmptyString( vlc_object_t *p_obj, const char *psz_ return NULL; } -LIBVLC_USED +VLC_USED static inline void *var_GetAddress( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; @@ -385,11 +422,12 @@ static inline void *var_GetAddress( vlc_object_t *p_obj, const char *psz_name ) * \param p_obj the object that holds the variable * \param psz_name the name of the variable */ -static inline void var_IncInteger( vlc_object_t *p_obj, const char *psz_name ) +static inline int64_t var_IncInteger( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; val.i_int = 1; - var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_INCDEC, val ); + var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val ); + return val.i_int; } #define var_IncInteger(a,b) var_IncInteger( VLC_OBJECT(a), b ) @@ -398,22 +436,43 @@ static inline void var_IncInteger( vlc_object_t *p_obj, const char *psz_name ) * \param p_obj the object that holds the variable * \param psz_name the name of the variable */ -static inline void var_DecInteger( vlc_object_t *p_obj, const char *psz_name ) +static inline int64_t var_DecInteger( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; val.i_int = -1; - var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_INCDEC, val ); + var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val ); + return val.i_int; } #define var_DecInteger(a,b) var_DecInteger( VLC_OBJECT(a), b ) +static inline uint64_t var_OrInteger( vlc_object_t *obj, const char *name, + unsigned v ) +{ + vlc_value_t val; + val.i_int = v; + var_GetAndSet( obj, name, VLC_VAR_INTEGER_OR, &val ); + return val.i_int; +} +#define var_OrInteger(a,b,c) var_OrInteger(VLC_OBJECT(a),b,c) + +static inline uint64_t var_NAndInteger( vlc_object_t *obj, const char *name, + unsigned v ) +{ + vlc_value_t val; + val.i_int = v; + var_GetAndSet( obj, name, VLC_VAR_INTEGER_NAND, &val ); + return val.i_int; +} +#define var_NAndInteger(a,b,c) var_NAndInteger(VLC_OBJECT(a),b,c) + /** * Create a integer variable with inherit and get its value. * * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED -static inline int var_CreateGetInteger( vlc_object_t *p_obj, const char *psz_name ) +VLC_USED +static inline int64_t var_CreateGetInteger( vlc_object_t *p_obj, const char *psz_name ) { var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); return var_GetInteger( p_obj, psz_name ); @@ -425,7 +484,7 @@ static inline int var_CreateGetInteger( vlc_object_t *p_obj, const char *psz_nam * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline bool var_CreateGetBool( vlc_object_t *p_obj, const char *psz_name ) { var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); @@ -438,7 +497,7 @@ static inline bool var_CreateGetBool( vlc_object_t *p_obj, const char *psz_name * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline int64_t var_CreateGetTime( vlc_object_t *p_obj, const char *psz_name ) { var_Create( p_obj, psz_name, VLC_VAR_TIME | VLC_VAR_DOINHERIT ); @@ -451,7 +510,7 @@ static inline int64_t var_CreateGetTime( vlc_object_t *p_obj, const char *psz_na * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline float var_CreateGetFloat( vlc_object_t *p_obj, const char *psz_name ) { var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT ); @@ -464,7 +523,7 @@ static inline float var_CreateGetFloat( vlc_object_t *p_obj, const char *psz_nam * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED VLC_MALLOC static inline char *var_CreateGetString( vlc_object_t *p_obj, const char *psz_name ) { @@ -472,7 +531,7 @@ static inline char *var_CreateGetString( vlc_object_t *p_obj, return var_GetString( p_obj, psz_name ); } -LIBVLC_USED +VLC_USED VLC_MALLOC static inline char *var_CreateGetNonEmptyString( vlc_object_t *p_obj, const char *psz_name ) { @@ -486,7 +545,7 @@ static inline char *var_CreateGetNonEmptyString( vlc_object_t *p_obj, * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline void *var_CreateGetAddress( vlc_object_t *p_obj, const char *psz_name ) { @@ -508,8 +567,8 @@ static inline void *var_CreateGetAddress( vlc_object_t *p_obj, * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED -static inline int var_CreateGetIntegerCommand( vlc_object_t *p_obj, const char *psz_name ) +VLC_USED +static inline int64_t var_CreateGetIntegerCommand( vlc_object_t *p_obj, const char *psz_name ) { var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT | VLC_VAR_ISCOMMAND ); @@ -522,7 +581,7 @@ static inline int var_CreateGetIntegerCommand( vlc_object_t *p_obj, const char * * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline bool var_CreateGetBoolCommand( vlc_object_t *p_obj, const char *psz_name ) { var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT @@ -536,7 +595,7 @@ static inline bool var_CreateGetBoolCommand( vlc_object_t *p_obj, const char *ps * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline int64_t var_CreateGetTimeCommand( vlc_object_t *p_obj, const char *psz_name ) { var_Create( p_obj, psz_name, VLC_VAR_TIME | VLC_VAR_DOINHERIT @@ -550,7 +609,7 @@ static inline int64_t var_CreateGetTimeCommand( vlc_object_t *p_obj, const char * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED static inline float var_CreateGetFloatCommand( vlc_object_t *p_obj, const char *psz_name ) { var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT @@ -564,7 +623,7 @@ static inline float var_CreateGetFloatCommand( vlc_object_t *p_obj, const char * * \param p_obj The object that holds the variable * \param psz_name The name of the variable */ -LIBVLC_USED +VLC_USED VLC_MALLOC static inline char *var_CreateGetStringCommand( vlc_object_t *p_obj, const char *psz_name ) { @@ -573,7 +632,7 @@ static inline char *var_CreateGetStringCommand( vlc_object_t *p_obj, return var_GetString( p_obj, psz_name ); } -LIBVLC_USED +VLC_USED VLC_MALLOC static inline char *var_CreateGetNonEmptyStringCommand( vlc_object_t *p_obj, const char *psz_name ) { @@ -589,7 +648,7 @@ static inline char *var_CreateGetNonEmptyStringCommand( vlc_object_t *p_obj, #define var_CreateGetStringCommand(a,b) var_CreateGetStringCommand( VLC_OBJECT(a),b) #define var_CreateGetNonEmptyStringCommand(a,b) var_CreateGetNonEmptyStringCommand( VLC_OBJECT(a),b) -LIBVLC_USED +VLC_USED static inline int var_CountChoices( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t count; @@ -600,15 +659,16 @@ static inline int var_CountChoices( vlc_object_t *p_obj, const char *psz_name ) #define var_CountChoices(a,b) var_CountChoices( VLC_OBJECT(a),b) -static inline int var_ToggleBool( vlc_object_t *p_obj, const char *psz_name ) +static inline bool var_ToggleBool( vlc_object_t *p_obj, const char *psz_name ) { vlc_value_t val; - return var_GetAndSet( p_obj, psz_name, VLC_VAR_TOGGLE_BOOL, val ); + var_GetAndSet( p_obj, psz_name, VLC_VAR_BOOL_TOGGLE, &val ); + return val.b_bool; } #define var_ToggleBool(a,b) var_ToggleBool( VLC_OBJECT(a),b ) -LIBVLC_USED +VLC_USED static inline bool var_InheritBool( vlc_object_t *obj, const char *name ) { vlc_value_t val; @@ -619,8 +679,8 @@ static inline bool var_InheritBool( vlc_object_t *obj, const char *name ) } #define var_InheritBool(o, n) var_InheritBool(VLC_OBJECT(o), n) -LIBVLC_USED -static inline int var_InheritInteger( vlc_object_t *obj, const char *name ) +VLC_USED +static inline int64_t var_InheritInteger( vlc_object_t *obj, const char *name ) { vlc_value_t val; @@ -630,7 +690,7 @@ static inline int var_InheritInteger( vlc_object_t *obj, const char *name ) } #define var_InheritInteger(o, n) var_InheritInteger(VLC_OBJECT(o), n) -LIBVLC_USED +VLC_USED static inline float var_InheritFloat( vlc_object_t *obj, const char *name ) { vlc_value_t val; @@ -641,7 +701,7 @@ static inline float var_InheritFloat( vlc_object_t *obj, const char *name ) } #define var_InheritFloat(o, n) var_InheritFloat(VLC_OBJECT(o), n) -LIBVLC_USED LIBVLC_MALLOC +VLC_USED VLC_MALLOC static inline char *var_InheritString( vlc_object_t *obj, const char *name ) { vlc_value_t val; @@ -657,6 +717,7 @@ static inline char *var_InheritString( vlc_object_t *obj, const char *name ) } #define var_InheritString(o, n) var_InheritString(VLC_OBJECT(o), n) +VLC_USED static inline mtime_t var_InheritTime( vlc_object_t *obj, const char *name ) { vlc_value_t val; @@ -667,6 +728,20 @@ static inline mtime_t var_InheritTime( vlc_object_t *obj, const char *name ) } #define var_InheritTime(o, n) var_InheritTime(VLC_OBJECT(o), n) +VLC_USED +static inline void *var_InheritAddress( vlc_object_t *obj, const char *name ) +{ + vlc_value_t val; + + if( var_Inherit( obj, name, VLC_VAR_ADDRESS, &val ) ) + val.p_address = NULL; + return val.p_address; +} +#define var_InheritAddress(o, n) var_InheritAddress(VLC_OBJECT(o), n) + +VLC_API int var_InheritURational( vlc_object_t *, unsigned *num, unsigned *den, const char *var ); +#define var_InheritURational(a,b,c,d) var_InheritURational(VLC_OBJECT(a), b, c, d) + #define var_GetInteger(a,b) var_GetInteger( VLC_OBJECT(a),b) #define var_GetBool(a,b) var_GetBool( VLC_OBJECT(a),b) #define var_GetTime(a,b) var_GetTime( VLC_OBJECT(a),b) @@ -675,6 +750,9 @@ static inline mtime_t var_InheritTime( vlc_object_t *obj, const char *name ) #define var_GetNonEmptyString(a,b) var_GetNonEmptyString( VLC_OBJECT(a),b) #define var_GetAddress(a,b) var_GetAddress( VLC_OBJECT(a),b) +VLC_API int var_LocationParse(vlc_object_t *, const char *mrl, const char *prefix); +#define var_LocationParse(o, m, p) var_LocationParse(VLC_OBJECT(o), m, p) + /** * @} */