X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc%2Flibvlc.h;h=0bc0b401a553d2758abddf6f545022a6c2644405;hb=e9571522152087765ab40d074d3d5d8f165db175;hp=6a56774bb95eade041fcfc85962de338462add39;hpb=66bd92014e5d721d8fe74bfd69f601bfd228012a;p=vlc diff --git a/include/vlc/libvlc.h b/include/vlc/libvlc.h index 6a56774bb9..0bc0b401a5 100644 --- a/include/vlc/libvlc.h +++ b/include/vlc/libvlc.h @@ -1,26 +1,26 @@ /***************************************************************************** * libvlc.h: libvlc external API ***************************************************************************** - * Copyright (C) 1998-2009 the VideoLAN team + * Copyright (C) 1998-2009 VLC authors and VideoLAN * $Id$ * * Authors: Clément Stenac * Jean-Paul Saman * Pierre d'Herbemont * - * 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. *****************************************************************************/ /** @@ -29,125 +29,119 @@ */ /** - * \defgroup libvlc libvlc - * This is libvlc, the base library of the VLC program. - * + * \defgroup libvlc LibVLC + * LibVLC is the external programming interface of the VLC media player. + * It is used to embed VLC into other applications or frameworks. * @{ */ #ifndef VLC_LIBVLC_H #define VLC_LIBVLC_H 1 -#if defined (WIN32) && defined (DLL_EXPORT) -# define VLC_PUBLIC_API __declspec(dllexport) +#if defined (_WIN32) && defined (DLL_EXPORT) +# define LIBVLC_API __declspec(dllexport) +#elif defined (__GNUC__) && (__GNUC__ >= 4) +# define LIBVLC_API __attribute__((visibility("default"))) #else -# define VLC_PUBLIC_API +# define LIBVLC_API #endif #ifdef __LIBVLC__ -/* Avoid unuseful warnings from libvlc with our deprecated APIs */ -# define VLC_DEPRECATED_API VLC_PUBLIC_API +/* Avoid unhelpful warnings from libvlc with our deprecated APIs */ +# define LIBVLC_DEPRECATED #elif defined(__GNUC__) && \ (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) -# define VLC_DEPRECATED_API VLC_PUBLIC_API __attribute__((deprecated)) +# define LIBVLC_DEPRECATED __attribute__((deprecated)) #else -# define VLC_DEPRECATED_API VLC_PUBLIC_API +# define LIBVLC_DEPRECATED #endif +#include +#include + # ifdef __cplusplus extern "C" { # endif #include -/***************************************************************************** - * Exception handling - *****************************************************************************/ -/** \defgroup libvlc_exception libvlc_exception - * \ingroup libvlc_core - * LibVLC Exceptions handling +/** \defgroup libvlc_core LibVLC core + * \ingroup libvlc + * Before it can do anything useful, LibVLC must be initialized. + * You can create one (or more) instance(s) of LibVLC in a given process, + * with libvlc_new() and destroy them with libvlc_release(). + * + * \version Unless otherwise stated, these functions are available + * from LibVLC versions numbered 1.1.0 or more. + * Earlier versions (0.9.x and 1.0.x) are not compatible. * @{ */ -/** - * Initialize an exception structure. This can be called several times to - * reuse an exception structure. - * - * \param p_exception the exception to initialize +/** \defgroup libvlc_error LibVLC error handling + * @{ */ -VLC_PUBLIC_API void libvlc_exception_init( libvlc_exception_t *p_exception ); /** - * Has an exception been raised? + * A human-readable error message for the last LibVLC error in the calling + * thread. The resulting string is valid until another error occurs (at least + * until the next LibVLC call). * - * \param p_exception the exception to query - * \return 0 if the exception was raised, 1 otherwise + * @warning + * This will be NULL if there was no error. */ -VLC_PUBLIC_API int -libvlc_exception_raised( const libvlc_exception_t *p_exception ); +LIBVLC_API const char *libvlc_errmsg (void); /** - * Raise an exception using a user-provided message. - * - * \param p_exception the exception to raise - * \param psz_format the exception message format string - * \param ... the format string arguments + * Clears the LibVLC error status for the current thread. This is optional. + * By default, the error status is automatically overridden when a new error + * occurs, and destroyed when the thread exits. */ -VLC_PUBLIC_API void -libvlc_exception_raise( libvlc_exception_t *p_exception, - const char *psz_format, ... ); +LIBVLC_API void libvlc_clearerr (void); /** - * Clear an exception object so it can be reused. - * The exception object must have be initialized. - * - * \param p_exception the exception to clear + * Sets the LibVLC error status and message for the current thread. + * Any previous error is overridden. + * \param fmt the format string + * \param ap the arguments + * \return a nul terminated string in any case */ -VLC_PUBLIC_API void libvlc_exception_clear( libvlc_exception_t * ); +LIBVLC_API const char *libvlc_vprinterr (const char *fmt, va_list ap); /** - * Get an exception's message. - * - * \param p_exception the exception to query - * \return the exception message or NULL if not applicable (exception not - * raised, for example) + * Sets the LibVLC error status and message for the current thread. + * Any previous error is overridden. + * \param fmt the format string + * \param args the arguments + * \return a nul terminated string in any case */ -VLC_PUBLIC_API const char * -libvlc_exception_get_message( const libvlc_exception_t *p_exception ); +LIBVLC_API const char *libvlc_printerr (const char *fmt, ...); /**@} */ -/***************************************************************************** - * Core handling - *****************************************************************************/ - -/** \defgroup libvlc_core libvlc_core - * \ingroup libvlc - * LibVLC Core - * @{ - */ - /** * Create and initialize a libvlc instance. + * This functions accept a list of "command line" arguments similar to the + * main(). These arguments affect the LibVLC instance default configuration. * - * \param argc the number of arguments - * \param argv command-line-type arguments. argv[0] must be the path of the - * calling program. - * \param p_e an initialized exception pointer - * \return the libvlc instance - */ -VLC_PUBLIC_API libvlc_instance_t * -libvlc_new( int , const char *const *, libvlc_exception_t *); - -/** - * Return a libvlc instance identifier for legacy APIs. Use of this - * function is discouraged, you should convert your program to use the - * new API. + * \version + * Arguments are meant to be passed from the command line to LibVLC, just like + * VLC media player does. The list of valid arguments depends on the LibVLC + * version, the operating system and platform, and set of available LibVLC + * plugins. Invalid or unsupported arguments will cause the function to fail + * (i.e. return NULL). Also, some arguments may alter the behaviour or + * otherwise interfere with other LibVLC functions. * - * \param p_instance the instance - * \return the instance identifier + * \warning + * There is absolutely no warranty or promise of forward, backward and + * cross-platform compatibility with regards to libvlc_new() arguments. + * We recommend that you do not use them, other than when debugging. + * + * \param argc the number of arguments (should be 0) + * \param argv list of arguments (should be NULL) + * \return the libvlc instance or NULL in case of error */ -VLC_PUBLIC_API int libvlc_get_vlc_id( libvlc_instance_t *p_instance ); +LIBVLC_API libvlc_instance_t * +libvlc_new( int argc , const char *const *argv ); /** * Decrement the reference count of a libvlc instance, and destroy it @@ -155,7 +149,7 @@ VLC_PUBLIC_API int libvlc_get_vlc_id( libvlc_instance_t *p_instance ); * * \param p_instance the instance to destroy */ -VLC_PUBLIC_API void libvlc_release( libvlc_instance_t * ); +LIBVLC_API void libvlc_release( libvlc_instance_t *p_instance ); /** * Increments the reference count of a libvlc instance. @@ -163,36 +157,85 @@ VLC_PUBLIC_API void libvlc_release( libvlc_instance_t * ); * * \param p_instance the instance to reference */ -VLC_PUBLIC_API void libvlc_retain( libvlc_instance_t * ); +LIBVLC_API void libvlc_retain( libvlc_instance_t *p_instance ); /** * Try to start a user interface for the libvlc instance. * * \param p_instance the instance * \param name interface name, or NULL for default - * \param p_exception an initialized exception pointer + * \return 0 on success, -1 on error. */ -VLC_PUBLIC_API -void libvlc_add_intf( libvlc_instance_t *p_instance, const char *name, - libvlc_exception_t *p_exception ); +LIBVLC_API +int libvlc_add_intf( libvlc_instance_t *p_instance, const char *name ); + +/** + * Registers a callback for the LibVLC exit event. This is mostly useful if + * the VLC playlist and/or at least one interface are started with + * libvlc_playlist_play() or libvlc_add_intf() respectively. + * Typically, this function will wake up your application main loop (from + * another thread). + * + * \note This function should be called before the playlist or interface are + * started. Otherwise, there is a small race condition: the exit event could + * be raised before the handler is registered. + * + * \param p_instance LibVLC instance + * \param cb callback to invoke when LibVLC wants to exit, + * or NULL to disable the exit handler (as by default) + * \param opaque data pointer for the callback + * \warning This function and libvlc_wait() cannot be used at the same time. + */ +LIBVLC_API +void libvlc_set_exit_handler( libvlc_instance_t *p_instance, + void (*cb) (void *), void *opaque ); /** * Waits until an interface causes the instance to exit. * You should start at least one interface first, using libvlc_add_intf(). * * \param p_instance the instance + * \warning This function wastes one thread doing basically nothing. + * libvlc_set_exit_handler() should be used instead. */ -VLC_PUBLIC_API +LIBVLC_DEPRECATED LIBVLC_API void libvlc_wait( libvlc_instance_t *p_instance ); +/** + * Sets the application name. LibVLC passes this as the user agent string + * when a protocol requires it. + * + * \param p_instance LibVLC instance + * \param name human-readable application name, e.g. "FooBar player 1.2.3" + * \param http HTTP User Agent, e.g. "FooBar/1.2.3 Python/2.6.0" + * \version LibVLC 1.1.1 or later + */ +LIBVLC_API +void libvlc_set_user_agent( libvlc_instance_t *p_instance, + const char *name, const char *http ); + +/** + * Sets some meta-information about the application. + * See also libvlc_set_user_agent(). + * + * \param p_instance LibVLC instance + * \param id Java-style application identifier, e.g. "com.acme.foobar" + * \param version application version numbers, e.g. "1.2.3" + * \param icon application icon name, e.g. "foobar" + * \version LibVLC 2.1.0 or later. + */ +LIBVLC_API +void libvlc_set_app_id( libvlc_instance_t *p_instance, const char *id, + const char *version, const char *icon ); + /** * Retrieve libvlc version. * - * Example: "0.9.0-git Grishenko" + * Example: "1.1.0-git The Luggage" * * \return a string containing the libvlc version */ -VLC_PUBLIC_API const char * libvlc_get_version(void); +LIBVLC_API const char * libvlc_get_version(void); /** * Retrieve libvlc compiler version. @@ -201,7 +244,7 @@ VLC_PUBLIC_API const char * libvlc_get_version(void); * * \return a string containing the libvlc compiler version */ -VLC_PUBLIC_API const char * libvlc_get_compiler(void); +LIBVLC_API const char * libvlc_get_compiler(void); /** * Retrieve libvlc changeset. @@ -210,37 +253,25 @@ VLC_PUBLIC_API const char * libvlc_get_compiler(void); * * \return a string containing the libvlc changeset */ -VLC_PUBLIC_API const char * libvlc_get_changeset(void); - -struct vlc_object_t; - -/** - * Return the libvlc internal object, the main object that all other depend on. - * Any of of this function should be considered an ugly hack and avoided at all - * cost. E.g. you need to expose some functionality that is not provided by the - * libvlc API directly with libvlccore. - * Remember to release the object with vlc_object_release( obj* ) - * - * \param p_instance the libvlc instance - */ -VLC_PUBLIC_API struct vlc_object_t *libvlc_get_vlc_instance(libvlc_instance_t *); +LIBVLC_API const char * libvlc_get_changeset(void); /** - * Frees an heap allocation (char *) returned by a LibVLC API. + * Frees an heap allocation returned by a LibVLC function. * If you know you're using the same underlying C run-time as the LibVLC * implementation, then you can call ANSI C free() directly instead. + * + * \param ptr the pointer */ -VLC_PUBLIC_API void libvlc_free( void *ptr ); - -/** @}*/ +LIBVLC_API void libvlc_free( void *ptr ); -/***************************************************************************** - * Event handling - *****************************************************************************/ - -/** \defgroup libvlc_event libvlc_event - * \ingroup libvlc_core - * LibVLC Events +/** \defgroup libvlc_event LibVLC asynchronous events + * LibVLC emits asynchronous events. + * + * Several LibVLC objects (such @ref libvlc_instance_t as + * @ref libvlc_media_player_t) generate events asynchronously. Each of them + * provides @ref libvlc_event_manager_t event manager. You can subscribe to + * events with libvlc_event_attach() and unsubscribe with + * libvlc_event_detach(). * @{ */ @@ -248,18 +279,21 @@ VLC_PUBLIC_API void libvlc_free( void *ptr ); * Event manager that belongs to a libvlc object, and from whom events can * be received. */ - typedef struct libvlc_event_manager_t libvlc_event_manager_t; -typedef struct libvlc_event_t libvlc_event_t; -typedef uint32_t libvlc_event_type_t; - + +struct libvlc_event_t; + +/** + * Type of a LibVLC event. + */ +typedef int libvlc_event_type_t; + /** * Callback function notification * \param p_event the event triggering the callback */ +typedef void ( *libvlc_callback_t )( const struct libvlc_event_t *, void * ); -typedef void ( *libvlc_callback_t )( const libvlc_event_t *, void * ); - /** * Register for an event notification. * @@ -269,13 +303,12 @@ typedef void ( *libvlc_callback_t )( const libvlc_event_t *, void * ); * \param i_event_type the desired event to which we want to listen * \param f_callback the function to call when i_event_type occurs * \param user_data user provided data to carry with the event - * \param p_e an initialized exception pointer + * \return 0 on success, ENOMEM on error */ -VLC_PUBLIC_API void libvlc_event_attach( libvlc_event_manager_t *p_event_manager, - libvlc_event_type_t i_event_type, - libvlc_callback_t f_callback, - void *user_data, - libvlc_exception_t *p_e ); +LIBVLC_API int libvlc_event_attach( libvlc_event_manager_t *p_event_manager, + libvlc_event_type_t i_event_type, + libvlc_callback_t f_callback, + void *user_data ); /** * Unregister an event notification. @@ -284,132 +317,316 @@ VLC_PUBLIC_API void libvlc_event_attach( libvlc_event_manager_t *p_event_manager * \param i_event_type the desired event to which we want to unregister * \param f_callback the function to call when i_event_type occurs * \param p_user_data user provided data to carry with the event - * \param p_e an initialized exception pointer */ -VLC_PUBLIC_API void libvlc_event_detach( libvlc_event_manager_t *p_event_manager, +LIBVLC_API void libvlc_event_detach( libvlc_event_manager_t *p_event_manager, libvlc_event_type_t i_event_type, libvlc_callback_t f_callback, - void *p_user_data, - libvlc_exception_t *p_e ); + void *p_user_data ); /** * Get an event's type name. * - * \param i_event_type the desired event + * \param event_type the desired event */ -VLC_PUBLIC_API const char * libvlc_event_type_name( libvlc_event_type_t event_type ); +LIBVLC_API const char * libvlc_event_type_name( libvlc_event_type_t event_type ); /** @} */ -/***************************************************************************** - * Message log handling - *****************************************************************************/ - -/** \defgroup libvlc_log libvlc_log - * \ingroup libvlc_core - * LibVLC Message Logging +/** \defgroup libvlc_log LibVLC logging + * libvlc_log_* functions provide access to the LibVLC messages log. + * This is used for logging and debugging. * @{ */ /** - * Return the VLC messaging verbosity level. + * Logging messages level. + * \note Future LibVLC versions may define new levels. + */ +enum libvlc_log_level +{ + LIBVLC_DEBUG=0, /**< Debug message */ + LIBVLC_NOTICE=2, /**< Important informational message */ + LIBVLC_WARNING=3, /**< Warning (potential error) message */ + LIBVLC_ERROR=4 /**< Error message */ +}; + +typedef struct vlc_log_t libvlc_log_t; + +/** + * Gets debugging information about a log message: the name of the VLC module + * emitting the message and the message location within the source code. * - * \param p_instance libvlc instance - * \param p_e an initialized exception pointer - * \return verbosity level for messages + * The returned module name and file name will be NULL if unknown. + * The returned line number will similarly be zero if unknown. + * + * \param ctx message context (as passed to the @ref libvlc_log_cb callback) + * \param module module name storage (or NULL) [OUT] + * \param file source code file name storage (or NULL) [OUT] + * \param line source code file line number storage (or NULL) [OUT] + * \warning The returned module name and source code file name, if non-NULL, + * are only valid until the logging callback returns. + * + * \version LibVLC 2.1.0 or later + */ +LIBVLC_API void libvlc_log_get_context(const libvlc_log_t *ctx, + const char **module, const char **file, unsigned *line); + +/** + * Gets VLC object information about a log message: the type name of the VLC + * object emitting the message, the object header if any and a temporaly-unique + * object identifier. This information is mainly meant for manual + * troubleshooting. + * + * The returned type name may be "generic" if unknown, but it cannot be NULL. + * The returned header will be NULL if unset; in current versions, the header + * is used to distinguish for VLM inputs. + * The returned object ID will be zero if the message is not associated with + * any VLC object. + * + * \param ctx message context (as passed to the @ref libvlc_log_cb callback) + * \param name object name storage (or NULL) [OUT] + * \param header object header (or NULL) [OUT] + * \param line source code file line number storage (or NULL) [OUT] + * \warning The returned module name and source code file name, if non-NULL, + * are only valid until the logging callback returns. + * + * \version LibVLC 2.1.0 or later */ -VLC_PUBLIC_API unsigned libvlc_get_log_verbosity( const libvlc_instance_t *p_instance, - libvlc_exception_t *p_e ); +LIBVLC_API void libvlc_log_get_object(const libvlc_log_t *ctx, + const char **name, const char **header, uintptr_t *id); /** - * Set the VLC messaging verbosity level. + * Callback prototype for LibVLC log message handler. + * \param data data pointer as given to libvlc_log_set() + * \param level message level (@ref enum libvlc_log_level) + * \param ctx message context (meta-information about the message) + * \param fmt printf() format string (as defined by ISO C11) + * \param args variable argument list for the format + * \note Log message handlers must be thread-safe. + * \warning The message context pointer, the format string parameters and the + * variable arguments are only valid until the callback returns. + */ +typedef void (*libvlc_log_cb)(void *data, int level, const libvlc_log_t *ctx, + const char *fmt, va_list args); + +/** + * Unsets the logging callback for a LibVLC instance. This is rarely needed: + * the callback is implicitly unset when the instance is destroyed. + * This function will wait for any pending callbacks invocation to complete + * (causing a deadlock if called from within the callback). * - * \param p_instance libvlc log instance - * \param level log level - * \param p_e an initialized exception pointer + * \param p_instance libvlc instance + * \version LibVLC 2.1.0 or later */ -VLC_PUBLIC_API void libvlc_set_log_verbosity( libvlc_instance_t *p_instance, unsigned level, - libvlc_exception_t *p_e ); +LIBVLC_API void libvlc_log_unset( libvlc_instance_t * ); /** - * Open a VLC message log instance. + * Sets the logging callback for a LibVLC instance. + * This function is thread-safe: it will wait for any pending callbacks + * invocation to complete. * + * \param cb callback function pointer + * \param data opaque data pointer for the callback function + * + * \note Some log messages (especially debug) are emitted by LibVLC while + * is being initialized. These messages cannot be captured with this interface. + * + * \warning A deadlock may occur if this function is called from the callback. + * + * \param p_instance libvlc instance + * \version LibVLC 2.1.0 or later + */ +LIBVLC_API void libvlc_log_set( libvlc_instance_t *, + libvlc_log_cb cb, void *data ); + + +/** + * Sets up logging to a file. * \param p_instance libvlc instance - * \param p_e an initialized exception pointer - * \return log message instance + * \param stream FILE pointer opened for writing + * (the FILE pointer must remain valid until libvlc_log_unset()) + * \version LibVLC 2.1.0 or later + */ +LIBVLC_API void libvlc_log_set_file( libvlc_instance_t *, FILE *stream ); + +/** + * Always returns minus one. + * This function is only provided for backward compatibility. + * + * \param p_instance ignored + * \return always -1 */ -VLC_PUBLIC_API libvlc_log_t *libvlc_log_open( libvlc_instance_t *, libvlc_exception_t *); +LIBVLC_DEPRECATED LIBVLC_API +unsigned libvlc_get_log_verbosity( const libvlc_instance_t *p_instance ); /** - * Close a VLC message log instance. + * This function does nothing. + * It is only provided for backward compatibility. * - * \param p_log libvlc log instance - * \param p_e an initialized exception pointer + * \param p_instance ignored + * \param level ignored */ -VLC_PUBLIC_API void libvlc_log_close( libvlc_log_t *, libvlc_exception_t *); +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_set_log_verbosity( libvlc_instance_t *p_instance, unsigned level ); /** - * Returns the number of messages in a log instance. + * This function does nothing useful. + * It is only provided for backward compatibility. * - * \param p_log libvlc log instance - * \param p_e an initialized exception pointer - * \return number of log messages + * \param p_instance libvlc instance + * \return an unique pointer or NULL on error */ -VLC_PUBLIC_API unsigned libvlc_log_count( const libvlc_log_t *, libvlc_exception_t *); +LIBVLC_DEPRECATED LIBVLC_API +libvlc_log_t *libvlc_log_open( libvlc_instance_t *p_instance ); /** - * Clear a log instance. + * Frees memory allocated by libvlc_log_open(). * - * All messages in the log are removed. The log should be cleared on a - * regular basis to avoid clogging. + * \param p_log libvlc log instance or NULL + */ +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_log_close( libvlc_log_t *p_log ); + +/** + * Always returns zero. + * This function is only provided for backward compatibility. * - * \param p_log libvlc log instance - * \param p_e an initialized exception pointer + * \param p_log ignored + * \return always zero */ -VLC_PUBLIC_API void libvlc_log_clear( libvlc_log_t *, libvlc_exception_t *); +LIBVLC_DEPRECATED LIBVLC_API +unsigned libvlc_log_count( const libvlc_log_t *p_log ); /** - * Allocate and returns a new iterator to messages in log. + * This function does nothing. + * It is only provided for backward compatibility. * - * \param p_log libvlc log instance - * \param p_e an initialized exception pointer - * \return log iterator object + * \param p_log ignored */ -VLC_PUBLIC_API libvlc_log_iterator_t *libvlc_log_get_iterator( const libvlc_log_t *, libvlc_exception_t *); +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_log_clear( libvlc_log_t *p_log ); /** - * Release a previoulsy allocated iterator. + * This function does nothing useful. + * It is only provided for backward compatibility. * - * \param p_iter libvlc log iterator - * \param p_e an initialized exception pointer + * \param p_log ignored + * \return an unique pointer or NULL on error or if the parameter was NULL */ -VLC_PUBLIC_API void libvlc_log_iterator_free( libvlc_log_iterator_t *p_iter, libvlc_exception_t *p_e ); +LIBVLC_DEPRECATED LIBVLC_API +libvlc_log_iterator_t *libvlc_log_get_iterator( const libvlc_log_t *p_log ); /** - * Return whether log iterator has more messages. + * Frees memory allocated by libvlc_log_get_iterator(). * - * \param p_iter libvlc log iterator - * \param p_e an initialized exception pointer - * \return true if iterator has more message objects, else false + * \param p_iter libvlc log iterator or NULL */ -VLC_PUBLIC_API int libvlc_log_iterator_has_next( const libvlc_log_iterator_t *p_iter, libvlc_exception_t *p_e ); +LIBVLC_DEPRECATED LIBVLC_API +void libvlc_log_iterator_free( libvlc_log_iterator_t *p_iter ); /** - * Return the next log message. + * Always returns zero. + * This function is only provided for backward compatibility. * - * The message contents must not be freed + * \param p_iter ignored + * \return always zero + */ +LIBVLC_DEPRECATED LIBVLC_API +int libvlc_log_iterator_has_next( const libvlc_log_iterator_t *p_iter ); + +/** + * Always returns NULL. + * This function is only provided for backward compatibility. * - * \param p_iter libvlc log iterator - * \param p_buffer log buffer - * \param p_e an initialized exception pointer - * \return log message object + * \param p_iter libvlc log iterator or NULL + * \param p_buf ignored + * \return always NULL */ -VLC_PUBLIC_API libvlc_log_message_t *libvlc_log_iterator_next( libvlc_log_iterator_t *p_iter, - libvlc_log_message_t *p_buffer, - libvlc_exception_t *p_e ); +LIBVLC_DEPRECATED LIBVLC_API +libvlc_log_message_t *libvlc_log_iterator_next( libvlc_log_iterator_t *p_iter, + libvlc_log_message_t *p_buf ); /** @} */ +/** + * Description of a module. + */ +typedef struct libvlc_module_description_t +{ + char *psz_name; + char *psz_shortname; + char *psz_longname; + char *psz_help; + struct libvlc_module_description_t *p_next; +} libvlc_module_description_t; + +/** + * Release a list of module descriptions. + * + * \param p_list the list to be released + */ +LIBVLC_API +void libvlc_module_description_list_release( libvlc_module_description_t *p_list ); + +/** + * Returns a list of audio filters that are available. + * + * \param p_instance libvlc instance + * + * \return a list of module descriptions. It should be freed with libvlc_module_description_list_release(). + * In case of an error, NULL is returned. + * + * \see libvlc_module_description_t + * \see libvlc_module_description_list_release + */ +LIBVLC_API +libvlc_module_description_t *libvlc_audio_filter_list_get( libvlc_instance_t *p_instance ); + +/** + * Returns a list of video filters that are available. + * + * \param p_instance libvlc instance + * + * \return a list of module descriptions. It should be freed with libvlc_module_description_list_release(). + * In case of an error, NULL is returned. + * + * \see libvlc_module_description_t + * \see libvlc_module_description_list_release + */ +LIBVLC_API +libvlc_module_description_t *libvlc_video_filter_list_get( libvlc_instance_t *p_instance ); + +/** @} */ + +/** \defgroup libvlc_clock LibVLC time + * These functions provide access to the LibVLC time/clock. + * @{ + */ + +/** + * Return the current time as defined by LibVLC. The unit is the microsecond. + * Time increases monotonically (regardless of time zone changes and RTC + * adjustements). + * The origin is arbitrary but consistent across the whole system + * (e.g. the system uptim, the time since the system was booted). + * \note On systems that support it, the POSIX monotonic clock is used. + */ +LIBVLC_API +int64_t libvlc_clock(void); + +/** + * Return the delay (in microseconds) until a certain timestamp. + * \param pts timestamp + * \return negative if timestamp is in the past, + * positive if it is in the future + */ +static inline int64_t libvlc_delay(int64_t pts) +{ + return pts - libvlc_clock(); +} + +/** @} */ + # ifdef __cplusplus } # endif