| 1 | /***************************************************************************** |
| 2 | * libvlc.h: libvlc external API |
| 3 | ***************************************************************************** |
| 4 | * Copyright (C) 1998-2009 VLC authors and VideoLAN |
| 5 | * $Id: b12d900469fa6438c41421f2ac7697b93ffc8a35 $ |
| 6 | * |
| 7 | * Authors: Clément Stenac <zorglub@videolan.org> |
| 8 | * Jean-Paul Saman <jpsaman@videolan.org> |
| 9 | * Pierre d'Herbemont <pdherbemont@videolan.org> |
| 10 | * |
| 11 | * This program is free software; you can redistribute it and/or modify it |
| 12 | * under the terms of the GNU Lesser General Public License as published by |
| 13 | * the Free Software Foundation; either version 2.1 of the License, or |
| 14 | * (at your option) any later version. |
| 15 | * |
| 16 | * This program is distributed in the hope that it will be useful, |
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 19 | * GNU Lesser General Public License for more details. |
| 20 | * |
| 21 | * You should have received a copy of the GNU Lesser General Public License |
| 22 | * along with this program; if not, write to the Free Software Foundation, |
| 23 | * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. |
| 24 | *****************************************************************************/ |
| 25 | |
| 26 | /** |
| 27 | * \defgroup libvlc LibVLC |
| 28 | * LibVLC is the external programming interface of the VLC media player. |
| 29 | * It is used to embed VLC into other applications or frameworks. |
| 30 | * @{ |
| 31 | * \file |
| 32 | * LibVLC core external API |
| 33 | */ |
| 34 | |
| 35 | #ifndef VLC_LIBVLC_H |
| 36 | #define VLC_LIBVLC_H 1 |
| 37 | |
| 38 | #if defined (_WIN32) && defined (DLL_EXPORT) |
| 39 | # define LIBVLC_API __declspec(dllexport) |
| 40 | #elif defined (__GNUC__) && (__GNUC__ >= 4) |
| 41 | # define LIBVLC_API __attribute__((visibility("default"))) |
| 42 | #else |
| 43 | # define LIBVLC_API |
| 44 | #endif |
| 45 | |
| 46 | #ifdef __LIBVLC__ |
| 47 | /* Avoid unhelpful warnings from libvlc with our deprecated APIs */ |
| 48 | # define LIBVLC_DEPRECATED |
| 49 | #elif defined(__GNUC__) && \ |
| 50 | (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) |
| 51 | # define LIBVLC_DEPRECATED __attribute__((deprecated)) |
| 52 | #else |
| 53 | # define LIBVLC_DEPRECATED |
| 54 | #endif |
| 55 | |
| 56 | #include <stdio.h> |
| 57 | #include <stdarg.h> |
| 58 | #include <stdint.h> |
| 59 | |
| 60 | # ifdef __cplusplus |
| 61 | extern "C" { |
| 62 | # endif |
| 63 | |
| 64 | /** \defgroup libvlc_core LibVLC core |
| 65 | * \ingroup libvlc |
| 66 | * Before it can do anything useful, LibVLC must be initialized. |
| 67 | * You can create one (or more) instance(s) of LibVLC in a given process, |
| 68 | * with libvlc_new() and destroy them with libvlc_release(). |
| 69 | * |
| 70 | * \version Unless otherwise stated, these functions are available |
| 71 | * from LibVLC versions numbered 1.1.0 or more. |
| 72 | * Earlier versions (0.9.x and 1.0.x) are <b>not</b> compatible. |
| 73 | * @{ |
| 74 | */ |
| 75 | |
| 76 | /** This structure is opaque. It represents a libvlc instance */ |
| 77 | typedef struct libvlc_instance_t libvlc_instance_t; |
| 78 | |
| 79 | typedef int64_t libvlc_time_t; |
| 80 | |
| 81 | /** \defgroup libvlc_error LibVLC error handling |
| 82 | * @{ |
| 83 | */ |
| 84 | |
| 85 | /** |
| 86 | * A human-readable error message for the last LibVLC error in the calling |
| 87 | * thread. The resulting string is valid until another error occurs (at least |
| 88 | * until the next LibVLC call). |
| 89 | * |
| 90 | * @warning |
| 91 | * This will be NULL if there was no error. |
| 92 | */ |
| 93 | LIBVLC_API const char *libvlc_errmsg (void); |
| 94 | |
| 95 | /** |
| 96 | * Clears the LibVLC error status for the current thread. This is optional. |
| 97 | * By default, the error status is automatically overridden when a new error |
| 98 | * occurs, and destroyed when the thread exits. |
| 99 | */ |
| 100 | LIBVLC_API void libvlc_clearerr (void); |
| 101 | |
| 102 | /** |
| 103 | * Sets the LibVLC error status and message for the current thread. |
| 104 | * Any previous error is overridden. |
| 105 | * \param fmt the format string |
| 106 | * \param ap the arguments |
| 107 | * \return a nul terminated string in any case |
| 108 | */ |
| 109 | LIBVLC_API const char *libvlc_vprinterr (const char *fmt, va_list ap); |
| 110 | |
| 111 | /** |
| 112 | * Sets the LibVLC error status and message for the current thread. |
| 113 | * Any previous error is overridden. |
| 114 | * \param fmt the format string |
| 115 | * \param args the arguments |
| 116 | * \return a nul terminated string in any case |
| 117 | */ |
| 118 | LIBVLC_API const char *libvlc_printerr (const char *fmt, ...); |
| 119 | |
| 120 | /**@} */ |
| 121 | |
| 122 | /** |
| 123 | * Create and initialize a libvlc instance. |
| 124 | * This functions accept a list of "command line" arguments similar to the |
| 125 | * main(). These arguments affect the LibVLC instance default configuration. |
| 126 | * |
| 127 | * \note |
| 128 | * LibVLC may create threads. Therefore, any thread-unsafe process |
| 129 | * initialization must be performed before calling libvlc_new(). In particular |
| 130 | * and where applicable: |
| 131 | * - setlocale() and textdomain(), |
| 132 | * - setenv(), unsetenv() and putenv(), |
| 133 | * - with the X11 display system, XInitThreads() |
| 134 | * (see also libvlc_media_player_set_xwindow()) and |
| 135 | * - on Microsoft Windows, SetErrorMode(). |
| 136 | * - sigprocmask() shall never be invoked; pthread_sigmask() can be used. |
| 137 | * |
| 138 | * On POSIX systems, the SIGCHLD signal <b>must not</b> be ignored, i.e. the |
| 139 | * signal handler must set to SIG_DFL or a function pointer, not SIG_IGN. |
| 140 | * Also while LibVLC is active, the wait() function shall not be called, and |
| 141 | * any call to waitpid() shall use a strictly positive value for the first |
| 142 | * parameter (i.e. the PID). Failure to follow those rules may lead to a |
| 143 | * deadlock or a busy loop. |
| 144 | * Also on POSIX systems, it is recommended that the SIGPIPE signal be blocked, |
| 145 | * even if it is not, in principles, necessary, e.g.: |
| 146 | * @code |
| 147 | sigset_t set; |
| 148 | |
| 149 | signal(SIGCHLD, SIG_DFL); |
| 150 | sigemptyset(&set); |
| 151 | sigaddset(&set, SIGPIPE); |
| 152 | pthread_sigmask(SIG_BLOCK, &set, NULL); |
| 153 | * @endcode |
| 154 | * |
| 155 | * On Microsoft Windows Vista/2008, the process error mode |
| 156 | * SEM_FAILCRITICALERRORS flag <b>must</b> be set before using LibVLC. |
| 157 | * On later versions, that is optional and unnecessary. |
| 158 | * Also on Microsoft Windows (Vista and any later version), setting the default |
| 159 | * DLL directories to SYSTEM32 exclusively is strongly recommended for |
| 160 | * security reasons: |
| 161 | * @code |
| 162 | SetErrorMode(SEM_FAILCRITICALERRORS); |
| 163 | SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32); |
| 164 | * @endcode |
| 165 | * |
| 166 | * \version |
| 167 | * Arguments are meant to be passed from the command line to LibVLC, just like |
| 168 | * VLC media player does. The list of valid arguments depends on the LibVLC |
| 169 | * version, the operating system and platform, and set of available LibVLC |
| 170 | * plugins. Invalid or unsupported arguments will cause the function to fail |
| 171 | * (i.e. return NULL). Also, some arguments may alter the behaviour or |
| 172 | * otherwise interfere with other LibVLC functions. |
| 173 | * |
| 174 | * \warning |
| 175 | * There is absolutely no warranty or promise of forward, backward and |
| 176 | * cross-platform compatibility with regards to libvlc_new() arguments. |
| 177 | * We recommend that you do not use them, other than when debugging. |
| 178 | * |
| 179 | * \param argc the number of arguments (should be 0) |
| 180 | * \param argv list of arguments (should be NULL) |
| 181 | * \return the libvlc instance or NULL in case of error |
| 182 | */ |
| 183 | LIBVLC_API libvlc_instance_t * |
| 184 | libvlc_new( int argc , const char *const *argv ); |
| 185 | |
| 186 | /** |
| 187 | * Decrement the reference count of a libvlc instance, and destroy it |
| 188 | * if it reaches zero. |
| 189 | * |
| 190 | * \param p_instance the instance to destroy |
| 191 | */ |
| 192 | LIBVLC_API void libvlc_release( libvlc_instance_t *p_instance ); |
| 193 | |
| 194 | /** |
| 195 | * Increments the reference count of a libvlc instance. |
| 196 | * The initial reference count is 1 after libvlc_new() returns. |
| 197 | * |
| 198 | * \param p_instance the instance to reference |
| 199 | */ |
| 200 | LIBVLC_API void libvlc_retain( libvlc_instance_t *p_instance ); |
| 201 | |
| 202 | /** |
| 203 | * Try to start a user interface for the libvlc instance. |
| 204 | * |
| 205 | * \param p_instance the instance |
| 206 | * \param name interface name, or NULL for default |
| 207 | * \return 0 on success, -1 on error. |
| 208 | */ |
| 209 | LIBVLC_API |
| 210 | int libvlc_add_intf( libvlc_instance_t *p_instance, const char *name ); |
| 211 | |
| 212 | /** |
| 213 | * Registers a callback for the LibVLC exit event. This is mostly useful if |
| 214 | * the VLC playlist and/or at least one interface are started with |
| 215 | * libvlc_playlist_play() or libvlc_add_intf() respectively. |
| 216 | * Typically, this function will wake up your application main loop (from |
| 217 | * another thread). |
| 218 | * |
| 219 | * \note This function should be called before the playlist or interface are |
| 220 | * started. Otherwise, there is a small race condition: the exit event could |
| 221 | * be raised before the handler is registered. |
| 222 | * |
| 223 | * \param p_instance LibVLC instance |
| 224 | * \param cb callback to invoke when LibVLC wants to exit, |
| 225 | * or NULL to disable the exit handler (as by default) |
| 226 | * \param opaque data pointer for the callback |
| 227 | * \warning This function and libvlc_wait() cannot be used at the same time. |
| 228 | */ |
| 229 | LIBVLC_API |
| 230 | void libvlc_set_exit_handler( libvlc_instance_t *p_instance, |
| 231 | void (*cb) (void *), void *opaque ); |
| 232 | |
| 233 | /** |
| 234 | * Sets the application name. LibVLC passes this as the user agent string |
| 235 | * when a protocol requires it. |
| 236 | * |
| 237 | * \param p_instance LibVLC instance |
| 238 | * \param name human-readable application name, e.g. "FooBar player 1.2.3" |
| 239 | * \param http HTTP User Agent, e.g. "FooBar/1.2.3 Python/2.6.0" |
| 240 | * \version LibVLC 1.1.1 or later |
| 241 | */ |
| 242 | LIBVLC_API |
| 243 | void libvlc_set_user_agent( libvlc_instance_t *p_instance, |
| 244 | const char *name, const char *http ); |
| 245 | |
| 246 | /** |
| 247 | * Sets some meta-information about the application. |
| 248 | * See also libvlc_set_user_agent(). |
| 249 | * |
| 250 | * \param p_instance LibVLC instance |
| 251 | * \param id Java-style application identifier, e.g. "com.acme.foobar" |
| 252 | * \param version application version numbers, e.g. "1.2.3" |
| 253 | * \param icon application icon name, e.g. "foobar" |
| 254 | * \version LibVLC 2.1.0 or later. |
| 255 | */ |
| 256 | LIBVLC_API |
| 257 | void libvlc_set_app_id( libvlc_instance_t *p_instance, const char *id, |
| 258 | const char *version, const char *icon ); |
| 259 | |
| 260 | /** |
| 261 | * Retrieve libvlc version. |
| 262 | * |
| 263 | * Example: "1.1.0-git The Luggage" |
| 264 | * |
| 265 | * \return a string containing the libvlc version |
| 266 | */ |
| 267 | LIBVLC_API const char * libvlc_get_version(void); |
| 268 | |
| 269 | /** |
| 270 | * Retrieve libvlc compiler version. |
| 271 | * |
| 272 | * Example: "gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu6)" |
| 273 | * |
| 274 | * \return a string containing the libvlc compiler version |
| 275 | */ |
| 276 | LIBVLC_API const char * libvlc_get_compiler(void); |
| 277 | |
| 278 | /** |
| 279 | * Retrieve libvlc changeset. |
| 280 | * |
| 281 | * Example: "aa9bce0bc4" |
| 282 | * |
| 283 | * \return a string containing the libvlc changeset |
| 284 | */ |
| 285 | LIBVLC_API const char * libvlc_get_changeset(void); |
| 286 | |
| 287 | /** |
| 288 | * Frees an heap allocation returned by a LibVLC function. |
| 289 | * If you know you're using the same underlying C run-time as the LibVLC |
| 290 | * implementation, then you can call ANSI C free() directly instead. |
| 291 | * |
| 292 | * \param ptr the pointer |
| 293 | */ |
| 294 | LIBVLC_API void libvlc_free( void *ptr ); |
| 295 | |
| 296 | /** \defgroup libvlc_event LibVLC asynchronous events |
| 297 | * LibVLC emits asynchronous events. |
| 298 | * |
| 299 | * Several LibVLC objects (such @ref libvlc_instance_t as |
| 300 | * @ref libvlc_media_player_t) generate events asynchronously. Each of them |
| 301 | * provides @ref libvlc_event_manager_t event manager. You can subscribe to |
| 302 | * events with libvlc_event_attach() and unsubscribe with |
| 303 | * libvlc_event_detach(). |
| 304 | * @{ |
| 305 | */ |
| 306 | |
| 307 | /** |
| 308 | * Event manager that belongs to a libvlc object, and from whom events can |
| 309 | * be received. |
| 310 | */ |
| 311 | typedef struct libvlc_event_manager_t libvlc_event_manager_t; |
| 312 | |
| 313 | struct libvlc_event_t; |
| 314 | |
| 315 | /** |
| 316 | * Type of a LibVLC event. |
| 317 | */ |
| 318 | typedef int libvlc_event_type_t; |
| 319 | |
| 320 | /** |
| 321 | * Callback function notification |
| 322 | * \param p_event the event triggering the callback |
| 323 | */ |
| 324 | typedef void ( *libvlc_callback_t )( const struct libvlc_event_t *p_event, void *p_data ); |
| 325 | |
| 326 | /** |
| 327 | * Register for an event notification. |
| 328 | * |
| 329 | * \param p_event_manager the event manager to which you want to attach to. |
| 330 | * Generally it is obtained by vlc_my_object_event_manager() where |
| 331 | * my_object is the object you want to listen to. |
| 332 | * \param i_event_type the desired event to which we want to listen |
| 333 | * \param f_callback the function to call when i_event_type occurs |
| 334 | * \param user_data user provided data to carry with the event |
| 335 | * \return 0 on success, ENOMEM on error |
| 336 | */ |
| 337 | LIBVLC_API int libvlc_event_attach( libvlc_event_manager_t *p_event_manager, |
| 338 | libvlc_event_type_t i_event_type, |
| 339 | libvlc_callback_t f_callback, |
| 340 | void *user_data ); |
| 341 | |
| 342 | /** |
| 343 | * Unregister an event notification. |
| 344 | * |
| 345 | * \param p_event_manager the event manager |
| 346 | * \param i_event_type the desired event to which we want to unregister |
| 347 | * \param f_callback the function to call when i_event_type occurs |
| 348 | * \param p_user_data user provided data to carry with the event |
| 349 | */ |
| 350 | LIBVLC_API void libvlc_event_detach( libvlc_event_manager_t *p_event_manager, |
| 351 | libvlc_event_type_t i_event_type, |
| 352 | libvlc_callback_t f_callback, |
| 353 | void *p_user_data ); |
| 354 | |
| 355 | /** |
| 356 | * Get an event's type name. |
| 357 | * |
| 358 | * \param event_type the desired event |
| 359 | */ |
| 360 | LIBVLC_API const char * libvlc_event_type_name( libvlc_event_type_t event_type ); |
| 361 | |
| 362 | /** @} */ |
| 363 | |
| 364 | /** \defgroup libvlc_log LibVLC logging |
| 365 | * libvlc_log_* functions provide access to the LibVLC messages log. |
| 366 | * This is used for logging and debugging. |
| 367 | * @{ |
| 368 | */ |
| 369 | |
| 370 | /** |
| 371 | * Logging messages level. |
| 372 | * \note Future LibVLC versions may define new levels. |
| 373 | */ |
| 374 | enum libvlc_log_level |
| 375 | { |
| 376 | LIBVLC_DEBUG=0, /**< Debug message */ |
| 377 | LIBVLC_NOTICE=2, /**< Important informational message */ |
| 378 | LIBVLC_WARNING=3, /**< Warning (potential error) message */ |
| 379 | LIBVLC_ERROR=4 /**< Error message */ |
| 380 | }; |
| 381 | |
| 382 | typedef struct vlc_log_t libvlc_log_t; |
| 383 | |
| 384 | /** |
| 385 | * Gets log message debug infos. |
| 386 | * |
| 387 | * This function retrieves self-debug information about a log message: |
| 388 | * - the name of the VLC module emitting the message, |
| 389 | * - the name of the source code module (i.e. file) and |
| 390 | * - the line number within the source code module. |
| 391 | * |
| 392 | * The returned module name and file name will be NULL if unknown. |
| 393 | * The returned line number will similarly be zero if unknown. |
| 394 | * |
| 395 | * \param ctx message context (as passed to the @ref libvlc_log_cb callback) |
| 396 | * \param module module name storage (or NULL) [OUT] |
| 397 | * \param file source code file name storage (or NULL) [OUT] |
| 398 | * \param line source code file line number storage (or NULL) [OUT] |
| 399 | * \warning The returned module name and source code file name, if non-NULL, |
| 400 | * are only valid until the logging callback returns. |
| 401 | * |
| 402 | * \version LibVLC 2.1.0 or later |
| 403 | */ |
| 404 | LIBVLC_API void libvlc_log_get_context(const libvlc_log_t *ctx, |
| 405 | const char **module, const char **file, unsigned *line); |
| 406 | |
| 407 | /** |
| 408 | * Gets log message info. |
| 409 | * |
| 410 | * This function retrieves meta-information about a log message: |
| 411 | * - the type name of the VLC object emitting the message, |
| 412 | * - the object header if any, and |
| 413 | * - a temporaly-unique object identifier. |
| 414 | * |
| 415 | * This information is mainly meant for <b>manual</b> troubleshooting. |
| 416 | * |
| 417 | * The returned type name may be "generic" if unknown, but it cannot be NULL. |
| 418 | * The returned header will be NULL if unset; in current versions, the header |
| 419 | * is used to distinguish for VLM inputs. |
| 420 | * The returned object ID will be zero if the message is not associated with |
| 421 | * any VLC object. |
| 422 | * |
| 423 | * \param ctx message context (as passed to the @ref libvlc_log_cb callback) |
| 424 | * \param name object name storage (or NULL) [OUT] |
| 425 | * \param header object header (or NULL) [OUT] |
| 426 | * \param line source code file line number storage (or NULL) [OUT] |
| 427 | * \warning The returned module name and source code file name, if non-NULL, |
| 428 | * are only valid until the logging callback returns. |
| 429 | * |
| 430 | * \version LibVLC 2.1.0 or later |
| 431 | */ |
| 432 | LIBVLC_API void libvlc_log_get_object(const libvlc_log_t *ctx, |
| 433 | const char **name, const char **, uintptr_t *id); |
| 434 | |
| 435 | /** |
| 436 | * Callback prototype for LibVLC log message handler. |
| 437 | * |
| 438 | * \param data data pointer as given to libvlc_log_set() |
| 439 | * \param level message level (@ref libvlc_log_level) |
| 440 | * \param ctx message context (meta-information about the message) |
| 441 | * \param fmt printf() format string (as defined by ISO C11) |
| 442 | * \param args variable argument list for the format |
| 443 | * \note Log message handlers <b>must</b> be thread-safe. |
| 444 | * \warning The message context pointer, the format string parameters and the |
| 445 | * variable arguments are only valid until the callback returns. |
| 446 | */ |
| 447 | typedef void (*libvlc_log_cb)(void *data, int level, const libvlc_log_t *ctx, |
| 448 | const char *fmt, va_list args); |
| 449 | |
| 450 | /** |
| 451 | * Unsets the logging callback. |
| 452 | * |
| 453 | * This function deregisters the logging callback for a LibVLC instance. |
| 454 | * This is rarely needed as the callback is implicitly unset when the instance |
| 455 | * is destroyed. |
| 456 | * |
| 457 | * \note This function will wait for any pending callbacks invocation to |
| 458 | * complete (causing a deadlock if called from within the callback). |
| 459 | * |
| 460 | * \param p_instance libvlc instance |
| 461 | * \version LibVLC 2.1.0 or later |
| 462 | */ |
| 463 | LIBVLC_API void libvlc_log_unset( libvlc_instance_t *p_instance ); |
| 464 | |
| 465 | /** |
| 466 | * Sets the logging callback for a LibVLC instance. |
| 467 | * |
| 468 | * This function is thread-safe: it will wait for any pending callbacks |
| 469 | * invocation to complete. |
| 470 | * |
| 471 | * \param cb callback function pointer |
| 472 | * \param data opaque data pointer for the callback function |
| 473 | * |
| 474 | * \note Some log messages (especially debug) are emitted by LibVLC while |
| 475 | * is being initialized. These messages cannot be captured with this interface. |
| 476 | * |
| 477 | * \warning A deadlock may occur if this function is called from the callback. |
| 478 | * |
| 479 | * \param p_instance libvlc instance |
| 480 | * \version LibVLC 2.1.0 or later |
| 481 | */ |
| 482 | LIBVLC_API void libvlc_log_set( libvlc_instance_t *p_instance, |
| 483 | libvlc_log_cb cb, void *data ); |
| 484 | |
| 485 | |
| 486 | /** |
| 487 | * Sets up logging to a file. |
| 488 | * \param p_instance libvlc instance |
| 489 | * \param stream FILE pointer opened for writing |
| 490 | * (the FILE pointer must remain valid until libvlc_log_unset()) |
| 491 | * \version LibVLC 2.1.0 or later |
| 492 | */ |
| 493 | LIBVLC_API void libvlc_log_set_file( libvlc_instance_t *p_instance, FILE *stream ); |
| 494 | |
| 495 | /** @} */ |
| 496 | |
| 497 | /** |
| 498 | * Description of a module. |
| 499 | */ |
| 500 | typedef struct libvlc_module_description_t |
| 501 | { |
| 502 | char *psz_name; |
| 503 | char *psz_shortname; |
| 504 | char *psz_longname; |
| 505 | char *psz_help; |
| 506 | struct libvlc_module_description_t *p_next; |
| 507 | } libvlc_module_description_t; |
| 508 | |
| 509 | /** |
| 510 | * Release a list of module descriptions. |
| 511 | * |
| 512 | * \param p_list the list to be released |
| 513 | */ |
| 514 | LIBVLC_API |
| 515 | void libvlc_module_description_list_release( libvlc_module_description_t *p_list ); |
| 516 | |
| 517 | /** |
| 518 | * Returns a list of audio filters that are available. |
| 519 | * |
| 520 | * \param p_instance libvlc instance |
| 521 | * |
| 522 | * \return a list of module descriptions. It should be freed with libvlc_module_description_list_release(). |
| 523 | * In case of an error, NULL is returned. |
| 524 | * |
| 525 | * \see libvlc_module_description_t |
| 526 | * \see libvlc_module_description_list_release |
| 527 | */ |
| 528 | LIBVLC_API |
| 529 | libvlc_module_description_t *libvlc_audio_filter_list_get( libvlc_instance_t *p_instance ); |
| 530 | |
| 531 | /** |
| 532 | * Returns a list of video filters that are available. |
| 533 | * |
| 534 | * \param p_instance libvlc instance |
| 535 | * |
| 536 | * \return a list of module descriptions. It should be freed with libvlc_module_description_list_release(). |
| 537 | * In case of an error, NULL is returned. |
| 538 | * |
| 539 | * \see libvlc_module_description_t |
| 540 | * \see libvlc_module_description_list_release |
| 541 | */ |
| 542 | LIBVLC_API |
| 543 | libvlc_module_description_t *libvlc_video_filter_list_get( libvlc_instance_t *p_instance ); |
| 544 | |
| 545 | /** @} */ |
| 546 | |
| 547 | /** \defgroup libvlc_clock LibVLC time |
| 548 | * These functions provide access to the LibVLC time/clock. |
| 549 | * @{ |
| 550 | */ |
| 551 | |
| 552 | /** |
| 553 | * Return the current time as defined by LibVLC. The unit is the microsecond. |
| 554 | * Time increases monotonically (regardless of time zone changes and RTC |
| 555 | * adjustements). |
| 556 | * The origin is arbitrary but consistent across the whole system |
| 557 | * (e.g. the system uptim, the time since the system was booted). |
| 558 | * \note On systems that support it, the POSIX monotonic clock is used. |
| 559 | */ |
| 560 | LIBVLC_API |
| 561 | int64_t libvlc_clock(void); |
| 562 | |
| 563 | /** |
| 564 | * Return the delay (in microseconds) until a certain timestamp. |
| 565 | * \param pts timestamp |
| 566 | * \return negative if timestamp is in the past, |
| 567 | * positive if it is in the future |
| 568 | */ |
| 569 | static inline int64_t libvlc_delay(int64_t pts) |
| 570 | { |
| 571 | return pts - libvlc_clock(); |
| 572 | } |
| 573 | |
| 574 | /** @} */ |
| 575 | |
| 576 | # ifdef __cplusplus |
| 577 | } |
| 578 | # endif |
| 579 | |
| 580 | #endif /** @} */ |
| 581 | |