/*****************************************************************************
* libvlc.h: libvlc external API
*****************************************************************************
* Copyright (C) 1998-2005 the VideoLAN team
* $Id$
*
* Authors: Clément Stenac <zorglub@videolan.org>
* Jean-Paul Saman <jpsaman@videolan.org>
* Pierre d'Herbemont <pdherbemont@videolan.org>
*
* 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.
*
* 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
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/**
* \file
* This file defines libvlc external API
*/
/**
* \defgroup libvlc libvlc
* This is libvlc, the base library of the VLC program.
*
* @{
*/
#ifndef VLC_LIBVLC_H
#define VLC_LIBVLC_H 1
#if defined (WIN32) && defined (DLL_EXPORT)
# define VLC_PUBLIC_API __declspec(dllexport)
#else
# define VLC_PUBLIC_API
#endif
#ifdef __LIBVLC__
/* Avoid unuseful warnings from libvlc with our deprecated APIs */
# define VLC_DEPRECATED_API VLC_PUBLIC_API
#elif defined(__GNUC__) && \
(__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
# define VLC_DEPRECATED_API VLC_PUBLIC_API __attribute__((deprecated))
#else
# define VLC_DEPRECATED_API VLC_PUBLIC_API
#endif
# ifdef __cplusplus
extern "C" {
# endif
/*****************************************************************************
* Exception handling
*****************************************************************************/
/** \defgroup libvlc_exception libvlc_exception
* \ingroup libvlc_core
* LibVLC Exceptions handling
* @{
*/
/**
* Initialize an exception structure. This can be called several times to
* reuse an exception structure.
*
* \param p_exception the exception to initialize
*/
VLC_PUBLIC_API void libvlc_exception_init( libvlc_exception_t *p_exception );
/**
* Has an exception been raised?
*
* \param p_exception the exception to query
* \return 0 if the exception was raised, 1 otherwise
*/
VLC_PUBLIC_API int
libvlc_exception_raised( const libvlc_exception_t *p_exception );
/**
* 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
*/
VLC_PUBLIC_API void
libvlc_exception_raise( libvlc_exception_t *p_exception,
const char *psz_format, ... );
/**
* Clear an exception object so it can be reused.
* The exception object must have be initialized.
*
* \param p_exception the exception to clear
*/
VLC_PUBLIC_API void libvlc_exception_clear( libvlc_exception_t * );
/**
* 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)
*/
VLC_PUBLIC_API const char *
libvlc_exception_get_message( const libvlc_exception_t *p_exception );
/**@} */
/*****************************************************************************
* Core handling
*****************************************************************************/
/** \defgroup libvlc_core libvlc_core
* \ingroup libvlc
* LibVLC Core
* @{
*/
/**
* Create and initialize a libvlc instance.
*
* \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.
*
* \param p_instance the instance
* \return the instance identifier
*/
VLC_PUBLIC_API int libvlc_get_vlc_id( libvlc_instance_t *p_instance );
/**
* Decrement the reference count of a libvlc instance, and destroy it
* if it reaches zero.
*
* \param p_instance the instance to destroy
*/
VLC_PUBLIC_API void libvlc_release( libvlc_instance_t * );
/**
* Increments the reference count of a libvlc instance.
* The initial reference count is 1 after libvlc_new() returns.
*
* \param p_instance the instance to reference
*/
VLC_PUBLIC_API void libvlc_retain( libvlc_instance_t * );
/**
* Try to start a user interface for the libvlc instance, and wait until the
* user exits.
*
* \param p_instance the instance
* \param name interface name, or NULL for default
* \param p_exception an initialized exception pointer
*/
VLC_PUBLIC_API
void libvlc_add_intf( libvlc_instance_t *p_instance, const char *name,
libvlc_exception_t *p_exception );
/**
* 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
*/
VLC_PUBLIC_API
void libvlc_wait( libvlc_instance_t *p_instance );
/**
* Retrieve libvlc version.
*
* Example: "0.9.0-git Grishenko"
*
* \return a string containing the libvlc version
*/
VLC_PUBLIC_API const char * libvlc_get_version(void);
/**
* Retrieve libvlc compiler version.
*
* Example: "gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu6)"
*
* \return a string containing the libvlc compiler version
*/
VLC_PUBLIC_API const char * libvlc_get_compiler(void);
/**
* Retrieve libvlc changeset.
*
* Example: "aa9bce0bc4"
*
* \return a string containing the libvlc changeset
*/
VLC_PUBLIC_API const char * libvlc_get_changeset(void);
/** @}*/
/*****************************************************************************
* media
*****************************************************************************/
/** \defgroup libvlc_media libvlc_media
* \ingroup libvlc
* LibVLC Media
* @{
*/
/**
* Create a media with the given MRL.
*
* \param p_instance the instance
* \param psz_mrl the MRL to read
* \param p_e an initialized exception pointer
* \return the newly created media
*/
VLC_PUBLIC_API libvlc_media_t * libvlc_media_new(
libvlc_instance_t *p_instance,
const char * psz_mrl,
libvlc_exception_t *p_e );
/**
* Create a media as an empty node with the passed name.
*
* \param p_instance the instance
* \param psz_name the name of the node
* \param p_e an initialized exception pointer
* \return the new empty media
*/
VLC_PUBLIC_API libvlc_media_t * libvlc_media_new_as_node(
libvlc_instance_t *p_instance,
const char * psz_name,
libvlc_exception_t *p_e );
/**
* Add an option to the media.
*
* This option will be used to determine how the media_player will
* read the media. This allows to use VLC's advanced
* reading/streaming options on a per-media basis.
*
* The options are detailed in vlc --long-help, for instance "--sout-all"
*
* \param p_instance the instance
* \param ppsz_options the options (as a string)
* \param p_e an initialized exception pointer
*/
VLC_PUBLIC_API void libvlc_media_add_option(
libvlc_media_t * p_md,
const char * ppsz_options,
libvlc_exception_t * p_e );
/**
* Retain a refer
评论1