vlc_variables.h 23 KB
Newer Older
1 2 3
/*****************************************************************************
 * variables.h: variables handling
 *****************************************************************************
4
 * Copyright (C) 2002-2004 the VideoLAN team
5
 * $Id$
6 7
 *
 * Authors: Samuel Hocevar <sam@zoy.org>
8
 *          Gildas Bazin <gbazin@netcourrier.com>
9 10 11 12 13
 *
 * 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
 * (at your option) any later version.
14
 *
15 16 17 18 19 20 21
 * 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
Antoine Cellerier's avatar
Antoine Cellerier committed
22
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23 24
 *****************************************************************************/

25 26
#ifndef VLC_VARIABLES_H
#define VLC_VARIABLES_H 1
27

28 29 30 31 32
/**
 * \file
 * This file defines functions and structures for dynamic variables in vlc
 */

Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
33 34 35 36 37 38 39 40 41 42 43
/**
 * \defgroup variables Variables
 *
 * Functions for using the object variables in vlc.
 *
 * Vlc have a very powerful "object variable" infrastructure useful
 * for many things.
 *
 * @{
 */

44 45 46
/*****************************************************************************
 * Variable types - probably very incomplete
 *****************************************************************************/
47
#define VLC_VAR_TYPE      0x00ff
48
#define VLC_VAR_CLASS     0x00f0
49 50
#define VLC_VAR_FLAGS     0xff00

Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
51 52
/** \defgroup var_flags Additive flags
 * These flags are added to the type field of the variable. Most as a result of
53
 * a var_Change() call, but some may be added at creation time
Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
54 55
 * @{
 */
56
#define VLC_VAR_HASCHOICE 0x0100
57 58 59
#define VLC_VAR_HASMIN    0x0200
#define VLC_VAR_HASMAX    0x0400
#define VLC_VAR_HASSTEP   0x0800
60

61
#define VLC_VAR_ISCOMMAND 0x2000
62

Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
63
/** Creation flag */
basos G's avatar
basos G committed
64 65
/* If the variable is not found on the current module
   search all parents and finally module config until found */
66
#define VLC_VAR_DOINHERIT 0x8000
Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
67
/**@}*/
68

Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
69 70
/**
 * \defgroup var_action Variable actions
71
 * These are the different actions that can be used with var_Change().
Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
72
 * The parameters given are the meaning of the two last parameters of
73
 * var_Change() when this action is being used.
Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
74 75 76 77 78 79 80 81
 * @{
 */

/**
 * Set the minimum value of this variable
 * \param p_val The new minimum value
 * \param p_val2 Unused
 */
Derk-Jan Hartman's avatar
Derk-Jan Hartman committed
82
#define VLC_VAR_SETMIN              0x0010
Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
83 84 85 86 87
/**
 * Set the maximum value of this variable
 * \param p_val The new maximum value
 * \param p_val2 Unused
 */
Derk-Jan Hartman's avatar
Derk-Jan Hartman committed
88 89
#define VLC_VAR_SETMAX              0x0011
#define VLC_VAR_SETSTEP             0x0012
90

Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
91 92 93 94 95
/**
 * Set the value of this variable without triggering any callbacks
 * \param p_val The new value
 * \param p_val2 Unused
 */
Derk-Jan Hartman's avatar
Derk-Jan Hartman committed
96 97 98 99 100
#define VLC_VAR_SETVALUE            0x0013

#define VLC_VAR_SETTEXT             0x0014
#define VLC_VAR_GETTEXT             0x0015

101 102 103 104
#define VLC_VAR_GETMIN              0x0016
#define VLC_VAR_GETMAX              0x0017
#define VLC_VAR_GETSTEP             0x0018

Derk-Jan Hartman's avatar
Derk-Jan Hartman committed
105 106 107 108 109
#define VLC_VAR_ADDCHOICE           0x0020
#define VLC_VAR_DELCHOICE           0x0021
#define VLC_VAR_CLEARCHOICES        0x0022
#define VLC_VAR_SETDEFAULT          0x0023
#define VLC_VAR_GETCHOICES          0x0024
Rémi Duraffort's avatar
Rémi Duraffort committed
110 111
#define VLC_VAR_GETLIST             0x0025
#define VLC_VAR_CHOICESCOUNT        0x0026
Derk-Jan Hartman's avatar
Derk-Jan Hartman committed
112

113
#define VLC_VAR_SETISCOMMAND        0x0040
Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
114
/**@}*/
115

116
/** \defgroup var_GetAndSet Variable actions
117
 * These are the different actions that can be used with var_GetAndSet()
118 119
 * @{
 */
120 121 122 123 124 125
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 */
};
126 127
/**@}*/

128 129 130
/*****************************************************************************
 * Prototypes
 *****************************************************************************/
131 132
VLC_EXPORT( int, var_Create, ( vlc_object_t *, const char *, int ) );
#define var_Create(a,b,c) var_Create( VLC_OBJECT(a), b, c )
133

134 135 136 137 138 139 140 141 142 143 144 145 146 147
VLC_EXPORT( 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 * ) );
#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 );
#define var_Type(a,b) var_Type( VLC_OBJECT(a), b )

VLC_EXPORT( 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 * ) );
#define var_Get(a,b,c) var_Get( VLC_OBJECT(a), b, c )
148

149
VLC_EXPORT( int, var_SetChecked, ( vlc_object_t *, const char *, int, vlc_value_t ) );
150
#define var_SetChecked(o,n,t,v) var_SetChecked(VLC_OBJECT(o),n,t,v)
151
VLC_EXPORT( int, var_GetChecked, ( vlc_object_t *, const char *, int, vlc_value_t * ) );
152
#define var_GetChecked(o,n,t,v) var_GetChecked(VLC_OBJECT(o),n,t,v)
153
VLC_EXPORT( int, var_GetAndSet, ( vlc_object_t *, const char *, int, vlc_value_t * ) );
154

155
VLC_EXPORT( int, var_Inherit, ( vlc_object_t *, const char *, int, vlc_value_t * ) );
156

157 158
VLC_EXPORT( 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 )
159

160 161
VLC_EXPORT( void, var_FreeList, ( vlc_value_t *, vlc_value_t * ) );

162

163 164 165 166 167 168 169 170 171
/*****************************************************************************
 * Variable callbacks
 *****************************************************************************
 * int MyCallback( vlc_object_t *p_this,
 *                 char const *psz_variable,
 *                 vlc_value_t oldvalue,
 *                 vlc_value_t newvalue,
 *                 void *p_data);
 *****************************************************************************/
172 173 174
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 * ) );
175

176 177 178
#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 )
#define var_TriggerCallback(a,b) var_TriggerCallback( VLC_OBJECT(a), b )
179

180 181 182
/*****************************************************************************
 * helpers functions
 *****************************************************************************/
Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
183 184 185 186 187 188 189 190

/**
 * Set the value of an integer variable
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 * \param i The new integer value of this variable
 */
191
static inline int var_SetInteger( vlc_object_t *p_obj, const char *psz_name, int i )
192 193 194
{
    vlc_value_t val;
    val.i_int = i;
195
    return var_SetChecked( p_obj, psz_name, VLC_VAR_INTEGER, val );
196
}
Rémi Duraffort's avatar
Rémi Duraffort committed
197

198 199 200 201 202
/**
 * Set the value of an boolean variable
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
203
 * \param b The new boolean value of this variable
204
 */
205
static inline int var_SetBool( vlc_object_t *p_obj, const char *psz_name, bool b )
206 207 208
{
    vlc_value_t val;
    val.b_bool = b;
209
    return var_SetChecked( p_obj, psz_name, VLC_VAR_BOOL, val );
210 211
}

Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
212 213 214 215 216 217 218
/**
 * Set the value of a time variable
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 * \param i The new time value of this variable
 */
219
static inline int var_SetTime( vlc_object_t *p_obj, const char *psz_name, int64_t i )
220 221 222
{
    vlc_value_t val;
    val.i_time = i;
223
    return var_SetChecked( p_obj, psz_name, VLC_VAR_TIME, val );
224
}
Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
225

226 227 228 229 230 231 232 233 234 235
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)

Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
236 237 238 239 240 241 242
/**
 * Set the value of a float variable
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 * \param f The new float value of this variable
 */
243
static inline int var_SetFloat( vlc_object_t *p_obj, const char *psz_name, float f )
244 245 246
{
    vlc_value_t val;
    val.f_float = f;
247
    return var_SetChecked( p_obj, psz_name, VLC_VAR_FLOAT, val );
248
}
Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
249

250 251 252 253 254 255 256
/**
 * Set the value of a string variable
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 * \param psz_string The new string value of this variable
 */
257
static inline int var_SetString( vlc_object_t *p_obj, const char *psz_name, const char *psz_string )
258 259
{
    vlc_value_t val;
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
260
    val.psz_string = (char *)psz_string;
261
    return var_SetChecked( p_obj, psz_name, VLC_VAR_STRING, val );
262 263
}

264 265 266 267 268 269 270 271
/**
 * Set the value of a pointer variable
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 * \param ptr The new pointer value of this variable
 */
static inline
272
int var_SetAddress( vlc_object_t *p_obj, const char *psz_name, void *ptr )
273 274 275 276 277 278
{
    vlc_value_t val;
    val.p_address = ptr;
    return var_SetChecked( p_obj, psz_name, VLC_VAR_ADDRESS, val );
}

279 280 281 282 283 284
#define var_SetInteger(a,b,c)   var_SetInteger( VLC_OBJECT(a),b,c)
#define var_SetBool(a,b,c)      var_SetBool( VLC_OBJECT(a),b,c)
#define var_SetTime(a,b,c)      var_SetTime( VLC_OBJECT(a),b,c)
#define var_SetFloat(a,b,c)     var_SetFloat( VLC_OBJECT(a),b,c)
#define var_SetString(a,b,c)    var_SetString( VLC_OBJECT(a),b,c)
#define var_SetAddress(o, n, p) var_SetAddress(VLC_OBJECT(o), n, p)
Rémi Duraffort's avatar
Rémi Duraffort committed
285

286

287
/**
288 289
 * Get an integer value
*
290 291 292
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
293
LIBVLC_USED
294
static inline int var_GetInteger( vlc_object_t *p_obj, const char *psz_name )
295
{
296 297
    vlc_value_t val;
    if( !var_GetChecked( p_obj, psz_name, VLC_VAR_INTEGER, &val ) )
298 299 300 301 302
        return val.i_int;
    else
        return 0;
}

303 304 305 306 307 308
/**
 * Get a boolean value
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
309
LIBVLC_USED
310
static inline bool var_GetBool( vlc_object_t *p_obj, const char *psz_name )
311
{
312
    vlc_value_t val; val.b_bool = false;
313

314
    if( !var_GetChecked( p_obj, psz_name, VLC_VAR_BOOL, &val ) )
315 316
        return val.b_bool;
    else
317
        return false;
318 319
}

320 321 322 323 324 325
/**
 * Get a time value
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
326
LIBVLC_USED
327
static inline int64_t var_GetTime( vlc_object_t *p_obj, const char *psz_name )
328
{
Clément Stenac's avatar
Clément Stenac committed
329
    vlc_value_t val; val.i_time = 0L;
330
    if( !var_GetChecked( p_obj, psz_name, VLC_VAR_TIME, &val ) )
331 332 333 334 335
        return val.i_time;
    else
        return 0;
}

336 337 338 339 340 341 342 343 344 345 346 347 348 349 350
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)

351 352 353 354 355 356
/**
 * Get a float value
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
357
LIBVLC_USED
358
static inline float var_GetFloat( vlc_object_t *p_obj, const char *psz_name )
359
{
Clément Stenac's avatar
Clément Stenac committed
360
    vlc_value_t val; val.f_float = 0.0;
361
    if( !var_GetChecked( p_obj, psz_name, VLC_VAR_FLOAT, &val ) )
362 363 364 365 366 367 368 369 370 371 372
        return val.f_float;
    else
        return 0.0;
}

/**
 * Get a string value
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
373
LIBVLC_USED
374
static inline char *var_GetString( vlc_object_t *p_obj, const char *psz_name )
375
{
Clément Stenac's avatar
Clément Stenac committed
376
    vlc_value_t val; val.psz_string = NULL;
377
    if( var_GetChecked( p_obj, psz_name, VLC_VAR_STRING, &val ) )
378
        return NULL;
379
    else
380
        return val.psz_string;
381 382
}

383
LIBVLC_USED
384
static inline char *var_GetNonEmptyString( vlc_object_t *p_obj, const char *psz_name )
385 386
{
    vlc_value_t val;
387
    if( var_GetChecked( p_obj, psz_name, VLC_VAR_STRING, &val ) )
388
        return NULL;
389
    if( val.psz_string && *val.psz_string )
390
        return val.psz_string;
391
    free( val.psz_string );
392 393 394
    return NULL;
}

395
LIBVLC_USED
396
static inline void *var_GetAddress( vlc_object_t *p_obj, const char *psz_name )
397 398 399 400 401 402 403
{
    vlc_value_t val;
    if( var_GetChecked( p_obj, psz_name, VLC_VAR_ADDRESS, &val ) )
        return NULL;
    else
        return val.p_address;
}
404

405 406 407 408 409
/**
 * Increment an integer variable
 * \param p_obj the object that holds the variable
 * \param psz_name the name of the variable
 */
410
static inline int var_IncInteger( vlc_object_t *p_obj, const char *psz_name )
411
{
412 413
    vlc_value_t val;
    val.i_int = 1;
414 415
    var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val );
    return val.i_int;
416
}
417
#define var_IncInteger(a,b) var_IncInteger( VLC_OBJECT(a), b )
418 419 420 421 422 423

/**
 * Decrement an integer variable
 * \param p_obj the object that holds the variable
 * \param psz_name the name of the variable
 */
424
static inline int var_DecInteger( vlc_object_t *p_obj, const char *psz_name )
425
{
426 427
    vlc_value_t val;
    val.i_int = -1;
428 429
    var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val );
    return val.i_int;
430
}
431
#define var_DecInteger(a,b) var_DecInteger( VLC_OBJECT(a), b )
432

433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452
static inline unsigned 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 unsigned 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)

453 454 455 456 457 458
/**
 * 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
 */
459
LIBVLC_USED
460
static inline int var_CreateGetInteger( vlc_object_t *p_obj, const char *psz_name )
461
{
462 463
    var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
    return var_GetInteger( p_obj, psz_name );
464 465
}

466 467 468 469 470 471
/**
 * Create a boolean variable with inherit and get its value.
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
472
LIBVLC_USED
473
static inline bool var_CreateGetBool( vlc_object_t *p_obj, const char *psz_name )
474
{
475 476
    var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
    return var_GetBool( p_obj, psz_name );
477 478
}

479 480 481 482 483 484
/**
 * Create a time variable with inherit and get its value.
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
485
LIBVLC_USED
486
static inline int64_t var_CreateGetTime( vlc_object_t *p_obj, const char *psz_name )
487
{
488 489
    var_Create( p_obj, psz_name, VLC_VAR_TIME | VLC_VAR_DOINHERIT );
    return var_GetTime( p_obj, psz_name );
490 491 492 493 494 495 496 497
}

/**
 * Create a float variable with inherit and get its value.
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
498
LIBVLC_USED
499
static inline float var_CreateGetFloat( vlc_object_t *p_obj, const char *psz_name )
500
{
501 502
    var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT );
    return var_GetFloat( p_obj, psz_name );
503 504 505 506 507 508 509 510
}

/**
 * Create a string variable with inherit and get its value.
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
511
LIBVLC_USED
512
static inline char *var_CreateGetString( vlc_object_t *p_obj,
513
                                           const char *psz_name )
514
{
515 516
    var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT );
    return var_GetString( p_obj, psz_name );
517
}
518

519
LIBVLC_USED
520
static inline char *var_CreateGetNonEmptyString( vlc_object_t *p_obj,
521 522
                                                   const char *psz_name )
{
523 524
    var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT );
    return var_GetNonEmptyString( p_obj, psz_name );
525 526
}

527 528 529 530 531 532 533
/**
 * Create an address 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
534
static inline void *var_CreateGetAddress( vlc_object_t *p_obj,
535 536
                                           const char *psz_name )
{
537 538
    var_Create( p_obj, psz_name, VLC_VAR_ADDRESS | VLC_VAR_DOINHERIT );
    return var_GetAddress( p_obj, psz_name );
539 540
}

541 542 543 544 545 546 547
#define var_CreateGetInteger(a,b)   var_CreateGetInteger( VLC_OBJECT(a),b)
#define var_CreateGetBool(a,b)   var_CreateGetBool( VLC_OBJECT(a),b)
#define var_CreateGetTime(a,b)   var_CreateGetTime( VLC_OBJECT(a),b)
#define var_CreateGetFloat(a,b)   var_CreateGetFloat( VLC_OBJECT(a),b)
#define var_CreateGetString(a,b)   var_CreateGetString( VLC_OBJECT(a),b)
#define var_CreateGetNonEmptyString(a,b)   var_CreateGetNonEmptyString( VLC_OBJECT(a),b)
#define var_CreateGetAddress(a,b)  var_CreateGetAddress( VLC_OBJECT(a),b)
548

549 550 551 552 553 554
/**
 * Create a integer command variable with inherit and get its value.
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
555
LIBVLC_USED
556
static inline int var_CreateGetIntegerCommand( vlc_object_t *p_obj, const char *psz_name )
557
{
558
    var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT
559
                                   | VLC_VAR_ISCOMMAND );
560
    return var_GetInteger( p_obj, psz_name );
561 562 563 564 565 566 567 568
}

/**
 * Create a boolean command variable with inherit and get its value.
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
569
LIBVLC_USED
570
static inline bool var_CreateGetBoolCommand( vlc_object_t *p_obj, const char *psz_name )
571
{
572
    var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT
573
                                   | VLC_VAR_ISCOMMAND );
574
    return var_GetBool( p_obj, psz_name );
575 576 577 578 579 580 581 582
}

/**
 * Create a time command variable with inherit and get its value.
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
583
LIBVLC_USED
584
static inline int64_t var_CreateGetTimeCommand( vlc_object_t *p_obj, const char *psz_name )
585
{
586
    var_Create( p_obj, psz_name, VLC_VAR_TIME | VLC_VAR_DOINHERIT
587
                                   | VLC_VAR_ISCOMMAND );
588
    return var_GetTime( p_obj, psz_name );
589 590 591 592 593 594 595 596
}

/**
 * Create a float command variable with inherit and get its value.
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
597
LIBVLC_USED
598
static inline float var_CreateGetFloatCommand( vlc_object_t *p_obj, const char *psz_name )
599
{
600
    var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT
601
                                   | VLC_VAR_ISCOMMAND );
602
    return var_GetFloat( p_obj, psz_name );
603 604 605 606 607 608 609 610
}

/**
 * Create a string command variable with inherit and get its value.
 *
 * \param p_obj The object that holds the variable
 * \param psz_name The name of the variable
 */
611
LIBVLC_USED
612
static inline char *var_CreateGetStringCommand( vlc_object_t *p_obj,
613 614
                                           const char *psz_name )
{
615
    var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT
616
                                   | VLC_VAR_ISCOMMAND );
617
    return var_GetString( p_obj, psz_name );
618 619
}

620
LIBVLC_USED
621
static inline char *var_CreateGetNonEmptyStringCommand( vlc_object_t *p_obj,
622 623
                                                   const char *psz_name )
{
624
    var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT
625
                                   | VLC_VAR_ISCOMMAND );
626
    return var_GetNonEmptyString( p_obj, psz_name );
627 628
}

629 630 631 632 633 634
#define var_CreateGetIntegerCommand(a,b)   var_CreateGetIntegerCommand( VLC_OBJECT(a),b)
#define var_CreateGetBoolCommand(a,b)   var_CreateGetBoolCommand( VLC_OBJECT(a),b)
#define var_CreateGetTimeCommand(a,b)   var_CreateGetTimeCommand( VLC_OBJECT(a),b)
#define var_CreateGetFloatCommand(a,b)   var_CreateGetFloatCommand( VLC_OBJECT(a),b)
#define var_CreateGetStringCommand(a,b)   var_CreateGetStringCommand( VLC_OBJECT(a),b)
#define var_CreateGetNonEmptyStringCommand(a,b)   var_CreateGetNonEmptyStringCommand( VLC_OBJECT(a),b)
635

636
LIBVLC_USED
637
static inline int var_CountChoices( vlc_object_t *p_obj, const char *psz_name )
638 639
{
    vlc_value_t count;
640
    if( var_Change( p_obj, psz_name, VLC_VAR_CHOICESCOUNT, &count, NULL ) )
641 642 643
        return 0;
    return count.i_int;
}
644
#define var_CountChoices(a,b) var_CountChoices( VLC_OBJECT(a),b)
645

646

647
static inline bool var_ToggleBool( vlc_object_t *p_obj, const char *psz_name )
648 649
{
    vlc_value_t val;
650 651
    var_GetAndSet( p_obj, psz_name, VLC_VAR_BOOL_TOGGLE, &val );
    return val.b_bool;
652
}
653
#define var_ToggleBool(a,b) var_ToggleBool( VLC_OBJECT(a),b )
654

Laurent Aimar's avatar
Laurent Aimar committed
655 656 657 658 659 660 661 662 663 664 665 666

LIBVLC_USED
static inline bool var_InheritBool( vlc_object_t *obj, const char *name )
{
    vlc_value_t val;

    if( var_Inherit( obj, name, VLC_VAR_BOOL, &val ) )
        val.b_bool = false;
    return val.b_bool;
}
#define var_InheritBool(o, n) var_InheritBool(VLC_OBJECT(o), n)

667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714
LIBVLC_USED
static inline int var_InheritInteger( vlc_object_t *obj, const char *name )
{
    vlc_value_t val;

    if( var_Inherit( obj, name, VLC_VAR_INTEGER, &val ) )
        val.i_int = 0;
    return val.i_int;
}
#define var_InheritInteger(o, n) var_InheritInteger(VLC_OBJECT(o), n)

LIBVLC_USED
static inline float var_InheritFloat( vlc_object_t *obj, const char *name )
{
    vlc_value_t val;

    if( var_Inherit( obj, name, VLC_VAR_FLOAT, &val ) )
        val.f_float = 0.;
    return val.f_float;
}
#define var_InheritFloat(o, n) var_InheritFloat(VLC_OBJECT(o), n)

LIBVLC_USED LIBVLC_MALLOC
static inline char *var_InheritString( vlc_object_t *obj, const char *name )
{
    vlc_value_t val;

    if( var_Inherit( obj, name, VLC_VAR_STRING, &val ) )
        val.psz_string = NULL;
    else if( val.psz_string && !*val.psz_string )
    {
        free( val.psz_string );
        val.psz_string = NULL;
    }
    return val.psz_string;
}
#define var_InheritString(o, n) var_InheritString(VLC_OBJECT(o), n)

static inline mtime_t var_InheritTime( vlc_object_t *obj, const char *name )
{
    vlc_value_t val;

    if( var_Inherit( obj, name, VLC_VAR_TIME, &val ) )
        val.i_time = 0;
    return val.i_time;
}
#define var_InheritTime(o, n) var_InheritTime(VLC_OBJECT(o), n)

715 716 717
VLC_EXPORT( 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)

718 719 720 721 722 723 724 725
#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)
#define var_GetFloat(a,b)   var_GetFloat( VLC_OBJECT(a),b)
#define var_GetString(a,b)   var_GetString( VLC_OBJECT(a),b)
#define var_GetNonEmptyString(a,b)   var_GetNonEmptyString( VLC_OBJECT(a),b)
#define var_GetAddress(a,b)  var_GetAddress( VLC_OBJECT(a),b)

Sigmund Augdal Helberg's avatar
Sigmund Augdal Helberg committed
726 727 728
/**
 * @}
 */
729
#endif /*  _VLC_VARIABLES_H */