VLC
2.1.0-git
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
vlc
libvlc.h
Go to the documentation of this file.
1
/*****************************************************************************
2
* libvlc.h: libvlc external API
3
*****************************************************************************
4
* Copyright (C) 1998-2009 VLC authors and VideoLAN
5
* $Id: 391a892290037269e48a83ac98a353bee50007fa $
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
* \file
28
* This file defines libvlc external API
29
*/
30
31
/**
32
* \defgroup libvlc LibVLC
33
* LibVLC is the external programming interface of the VLC media player.
34
* It is used to embed VLC into other applications or frameworks.
35
* @{
36
*/
37
38
#ifndef VLC_LIBVLC_H
39
#define VLC_LIBVLC_H 1
40
41
#if defined (WIN32) && defined (DLL_EXPORT)
42
# define LIBVLC_API __declspec(dllexport)
43
#elif defined (__GNUC__) && (__GNUC__ >= 4)
44
# define LIBVLC_API __attribute__((visibility("default")))
45
#else
46
# define LIBVLC_API
47
#endif
48
49
#ifdef __LIBVLC__
50
/* Avoid unhelpful warnings from libvlc with our deprecated APIs */
51
# define LIBVLC_DEPRECATED
52
#elif defined(__GNUC__) && \
53
(__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
54
# define LIBVLC_DEPRECATED __attribute__((deprecated))
55
#else
56
# define LIBVLC_DEPRECATED
57
#endif
58
59
#include <stdio.h>
60
#include <stdarg.h>
61
62
# ifdef __cplusplus
63
extern
"C"
{
64
# endif
65
66
#include <
vlc/libvlc_structures.h
>
67
68
/** \defgroup libvlc_core LibVLC core
69
* \ingroup libvlc
70
* Before it can do anything useful, LibVLC must be initialized.
71
* You can create one (or more) instance(s) of LibVLC in a given process,
72
* with libvlc_new() and destroy them with libvlc_release().
73
*
74
* \version Unless otherwise stated, these functions are available
75
* from LibVLC versions numbered 1.1.0 or more.
76
* Earlier versions (0.9.x and 1.0.x) are <b>not</b> compatible.
77
* @{
78
*/
79
80
/** \defgroup libvlc_error LibVLC error handling
81
* @{
82
*/
83
84
/**
85
* A human-readable error message for the last LibVLC error in the calling
86
* thread. The resulting string is valid until another error occurs (at least
87
* until the next LibVLC call).
88
*
89
* @warning
90
* This will be NULL if there was no error.
91
*/
92
LIBVLC_API
const
char
*
libvlc_errmsg
(
void
);
93
94
/**
95
* Clears the LibVLC error status for the current thread. This is optional.
96
* By default, the error status is automatically overridden when a new error
97
* occurs, and destroyed when the thread exits.
98
*/
99
LIBVLC_API
void
libvlc_clearerr
(
void
);
100
101
/**
102
* Sets the LibVLC error status and message for the current thread.
103
* Any previous error is overridden.
104
* \param fmt the format string
105
* \param ap the arguments
106
* \return a nul terminated string in any case
107
*/
108
LIBVLC_API
const
char
*
libvlc_vprinterr
(
const
char
*fmt, va_list ap);
109
110
/**
111
* Sets the LibVLC error status and message for the current thread.
112
* Any previous error is overridden.
113
* \param fmt the format string
114
* \param args the arguments
115
* \return a nul terminated string in any case
116
*/
117
LIBVLC_API
const
char
*
libvlc_printerr
(
const
char
*fmt, ...);
118
119
/**@} */
120
121
/**
122
* Create and initialize a libvlc instance.
123
* This functions accept a list of "command line" arguments similar to the
124
* main(). These arguments affect the LibVLC instance default configuration.
125
*
126
* \version
127
* Arguments are meant to be passed from the command line to LibVLC, just like
128
* VLC media player does. The list of valid arguments depends on the LibVLC
129
* version, the operating system and platform, and set of available LibVLC
130
* plugins. Invalid or unsupported arguments will cause the function to fail
131
* (i.e. return NULL). Also, some arguments may alter the behaviour or
132
* otherwise interfere with other LibVLC functions.
133
*
134
* \warning
135
* There is absolutely no warranty or promise of forward, backward and
136
* cross-platform compatibility with regards to libvlc_new() arguments.
137
* We recommend that you do not use them, other than when debugging.
138
*
139
* \param argc the number of arguments (should be 0)
140
* \param argv list of arguments (should be NULL)
141
* \return the libvlc instance or NULL in case of error
142
*/
143
LIBVLC_API
libvlc_instance_t
*
144
libvlc_new
(
int
argc ,
const
char
*
const
*argv );
145
146
/**
147
* Decrement the reference count of a libvlc instance, and destroy it
148
* if it reaches zero.
149
*
150
* \param p_instance the instance to destroy
151
*/
152
LIBVLC_API
void
libvlc_release
(
libvlc_instance_t
*p_instance );
153
154
/**
155
* Increments the reference count of a libvlc instance.
156
* The initial reference count is 1 after libvlc_new() returns.
157
*
158
* \param p_instance the instance to reference
159
*/
160
LIBVLC_API
void
libvlc_retain
(
libvlc_instance_t
*p_instance );
161
162
/**
163
* Try to start a user interface for the libvlc instance.
164
*
165
* \param p_instance the instance
166
* \param name interface name, or NULL for default
167
* \return 0 on success, -1 on error.
168
*/
169
LIBVLC_API
170
int
libvlc_add_intf
(
libvlc_instance_t
*p_instance,
const
char
*
name
);
171
172
/**
173
* Registers a callback for the LibVLC exit event. This is mostly useful if
174
* the VLC playlist and/or at least one interface are started with
175
* libvlc_playlist_play() or libvlc_add_intf() respectively.
176
* Typically, this function will wake up your application main loop (from
177
* another thread).
178
*
179
* \note This function should be called before the playlist or interface are
180
* started. Otherwise, there is a small race condition: the exit event could
181
* be raised before the handler is registered.
182
*
183
* \param p_instance LibVLC instance
184
* \param cb callback to invoke when LibVLC wants to exit,
185
* or NULL to disable the exit handler (as by default)
186
* \param opaque data pointer for the callback
187
* \warning This function and libvlc_wait() cannot be used at the same time.
188
*/
189
LIBVLC_API
190
void
libvlc_set_exit_handler
(
libvlc_instance_t
*p_instance,
191
void
(*cb) (
void
*),
void
*opaque );
192
193
/**
194
* Waits until an interface causes the instance to exit.
195
* You should start at least one interface first, using libvlc_add_intf().
196
*
197
* \param p_instance the instance
198
* \warning This function wastes one thread doing basically nothing.
199
* libvlc_set_exit_handler() should be used instead.
200
*/
201
LIBVLC_DEPRECATED
LIBVLC_API
202
void
libvlc_wait
(
libvlc_instance_t
*p_instance );
203
204
/**
205
* Sets the application name. LibVLC passes this as the user agent string
206
* when a protocol requires it.
207
*
208
* \param p_instance LibVLC instance
209
* \param name human-readable application name, e.g. "FooBar player 1.2.3"
210
* \param http HTTP User Agent, e.g. "FooBar/1.2.3 Python/2.6.0"
211
* \version LibVLC 1.1.1 or later
212
*/
213
LIBVLC_API
214
void
libvlc_set_user_agent
(
libvlc_instance_t
*p_instance,
215
const
char
*name,
const
char
*http );
216
217
/**
218
* Retrieve libvlc version.
219
*
220
* Example: "1.1.0-git The Luggage"
221
*
222
* \return a string containing the libvlc version
223
*/
224
LIBVLC_API
const
char
*
libvlc_get_version
(
void
);
225
226
/**
227
* Retrieve libvlc compiler version.
228
*
229
* Example: "gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu6)"
230
*
231
* \return a string containing the libvlc compiler version
232
*/
233
LIBVLC_API
const
char
*
libvlc_get_compiler
(
void
);
234
235
/**
236
* Retrieve libvlc changeset.
237
*
238
* Example: "aa9bce0bc4"
239
*
240
* \return a string containing the libvlc changeset
241
*/
242
LIBVLC_API
const
char
*
libvlc_get_changeset
(
void
);
243
244
/**
245
* Frees an heap allocation returned by a LibVLC function.
246
* If you know you're using the same underlying C run-time as the LibVLC
247
* implementation, then you can call ANSI C free() directly instead.
248
*
249
* \param ptr the pointer
250
*/
251
LIBVLC_API
void
libvlc_free
(
void
*ptr );
252
253
/** \defgroup libvlc_event LibVLC asynchronous events
254
* LibVLC emits asynchronous events.
255
*
256
* Several LibVLC objects (such @ref libvlc_instance_t as
257
* @ref libvlc_media_player_t) generate events asynchronously. Each of them
258
* provides @ref libvlc_event_manager_t event manager. You can subscribe to
259
* events with libvlc_event_attach() and unsubscribe with
260
* libvlc_event_detach().
261
* @{
262
*/
263
264
/**
265
* Event manager that belongs to a libvlc object, and from whom events can
266
* be received.
267
*/
268
typedef
struct
libvlc_event_manager_t
libvlc_event_manager_t
;
269
270
struct
libvlc_event_t
;
271
272
/**
273
* Type of a LibVLC event.
274
*/
275
typedef
int
libvlc_event_type_t
;
276
277
/**
278
* Callback function notification
279
* \param p_event the event triggering the callback
280
*/
281
typedef
void ( *
libvlc_callback_t
)(
const
struct
libvlc_event_t
*,
void
* );
282
283
/**
284
* Register for an event notification.
285
*
286
* \param p_event_manager the event manager to which you want to attach to.
287
* Generally it is obtained by vlc_my_object_event_manager() where
288
* my_object is the object you want to listen to.
289
* \param i_event_type the desired event to which we want to listen
290
* \param f_callback the function to call when i_event_type occurs
291
* \param user_data user provided data to carry with the event
292
* \return 0 on success, ENOMEM on error
293
*/
294
LIBVLC_API
int
libvlc_event_attach
(
libvlc_event_manager_t
*p_event_manager,
295
libvlc_event_type_t i_event_type,
296
libvlc_callback_t
f_callback,
297
void
*user_data );
298
299
/**
300
* Unregister an event notification.
301
*
302
* \param p_event_manager the event manager
303
* \param i_event_type the desired event to which we want to unregister
304
* \param f_callback the function to call when i_event_type occurs
305
* \param p_user_data user provided data to carry with the event
306
*/
307
LIBVLC_API
void
libvlc_event_detach
(
libvlc_event_manager_t
*p_event_manager,
308
libvlc_event_type_t i_event_type,
309
libvlc_callback_t
f_callback,
310
void
*p_user_data );
311
312
/**
313
* Get an event's type name.
314
*
315
* \param event_type the desired event
316
*/
317
LIBVLC_API
const
char
*
libvlc_event_type_name
( libvlc_event_type_t event_type );
318
319
/** @} */
320
321
/** \defgroup libvlc_log LibVLC logging
322
* libvlc_log_* functions provide access to the LibVLC messages log.
323
* This is used for logging and debugging.
324
* @{
325
*/
326
327
/**
328
* Logging messages level.
329
* \note Future LibVLC versions may define new levels.
330
*/
331
enum
libvlc_log_level
332
{
333
LIBVLC_DEBUG
=0,
/**< Debug message */
334
LIBVLC_NOTICE
=2,
/**< Important informational message */
335
LIBVLC_WARNING
=3,
/**< Warning (potential error) message */
336
LIBVLC_ERROR
=4
/**< Error message */
337
};
338
339
/**
340
* Callback prototype for LibVLC log message handler.
341
* \param data data pointer as given to libvlc_log_subscribe()
342
* \param level message level (@ref enum libvlc_log_level)
343
* \param fmt printf() format string (as defined by ISO C11)
344
* \param args variable argument list for the format
345
* \note Log message handlers <b>must</b> be thread-safe.
346
*/
347
typedef
void (*
libvlc_log_cb
)(
void
*data,
int
level,
const
char
*fmt,
348
va_list args);
349
350
/**
351
* Data structure for a LibVLC logging callbacks.
352
* \note This structure contains exactly 4 pointers and will never change.
353
* Nevertheless, it should not be accessed directly outside of LibVLC.
354
* (In fact, doing so would fail the thread memory model.)
355
*/
356
typedef
struct
libvlc_log_subscriber
357
{
358
struct
libvlc_log_subscriber
*
prev
, *
next
;
359
libvlc_log_cb
func
;
360
void
*
opaque
;
361
}
libvlc_log_subscriber_t
;
362
363
/**
364
* Registers a logging callback to LibVLC.
365
* This function is thread-safe.
366
*
367
* \param sub uninitialized subscriber structure
368
* \param cb callback function pointer
369
* \param data opaque data pointer for the callback function
370
*
371
* \note Some log messages (especially debug) are emitted by LibVLC while
372
* initializing, before any LibVLC instance even exists.
373
* Thus this function does not require a LibVLC instance parameter.
374
*
375
* \warning As a consequence of not depending on a LibVLC instance,
376
* all logging callbacks are shared by all LibVLC instances within the
377
* process / address space. This also enables log messages to be emitted
378
* by LibVLC components that are not specific to any given LibVLC instance.
379
*
380
* \warning Do not call this function from within a logging callback.
381
* It would trigger a dead lock.
382
* \version LibVLC 2.1.0 or later
383
*/
384
LIBVLC_API
void
libvlc_log_subscribe
(
libvlc_log_subscriber_t
*sub,
385
libvlc_log_cb
cb,
void
*data );
386
387
388
/**
389
* Registers a logging callback to a file.
390
* \param stream FILE pointer opened for writing
391
* (the FILE pointer must remain valid until libvlc_log_unsubscribe())
392
* \version LibVLC 2.1.0 or later
393
*/
394
LIBVLC_API
void
libvlc_log_subscribe_file
(
libvlc_log_subscriber_t
*sub,
395
FILE *stream );
396
397
/**
398
* Deregisters a logging callback from LibVLC.
399
* This function is thread-safe.
400
*
401
* \note After (and only after) libvlc_log_unsubscribe() has returned,
402
* LibVLC warrants that there are no more pending calls of the subscription
403
* callback function.
404
*
405
* \warning Do not call this function from within a logging callback.
406
* It would trigger a dead lock.
407
*
408
* \param sub initialized subscriber structure
409
* \version LibVLC 2.1.0 or later
410
*/
411
LIBVLC_API
void
libvlc_log_unsubscribe
(
libvlc_log_subscriber_t
*sub );
412
413
/**
414
* Always returns minus one.
415
* This function is only provided for backward compatibility.
416
*
417
* \param p_instance ignored
418
* \return always -1
419
*/
420
LIBVLC_DEPRECATED
LIBVLC_API
421
unsigned
libvlc_get_log_verbosity
(
const
libvlc_instance_t
*p_instance );
422
423
/**
424
* This function does nothing.
425
* It is only provided for backward compatibility.
426
*
427
* \param p_instance ignored
428
* \param level ignored
429
*/
430
LIBVLC_DEPRECATED
LIBVLC_API
431
void
libvlc_set_log_verbosity
(
libvlc_instance_t
*p_instance,
unsigned
level );
432
433
/**
434
* This function does nothing useful.
435
* It is only provided for backward compatibility.
436
*
437
* \param p_instance libvlc instance
438
* \return an unique pointer or NULL on error
439
*/
440
LIBVLC_DEPRECATED
LIBVLC_API
441
libvlc_log_t
*
libvlc_log_open
(
libvlc_instance_t
*p_instance );
442
443
/**
444
* Frees memory allocated by libvlc_log_open().
445
*
446
* \param p_log libvlc log instance or NULL
447
*/
448
LIBVLC_DEPRECATED
LIBVLC_API
449
void
libvlc_log_close
(
libvlc_log_t
*p_log );
450
451
/**
452
* Always returns zero.
453
* This function is only provided for backward compatibility.
454
*
455
* \param p_log ignored
456
* \return always zero
457
*/
458
LIBVLC_DEPRECATED
LIBVLC_API
459
unsigned
libvlc_log_count
(
const
libvlc_log_t
*p_log );
460
461
/**
462
* This function does nothing.
463
* It is only provided for backward compatibility.
464
*
465
* \param p_log ignored
466
*/
467
LIBVLC_DEPRECATED
LIBVLC_API
468
void
libvlc_log_clear
(
libvlc_log_t
*p_log );
469
470
/**
471
* This function does nothing useful.
472
* It is only provided for backward compatibility.
473
*
474
* \param p_log ignored
475
* \return an unique pointer or NULL on error or if the parameter was NULL
476
*/
477
LIBVLC_DEPRECATED
LIBVLC_API
478
libvlc_log_iterator_t
*
libvlc_log_get_iterator
(
const
libvlc_log_t
*p_log );
479
480
/**
481
* Frees memory allocated by libvlc_log_get_iterator().
482
*
483
* \param p_iter libvlc log iterator or NULL
484
*/
485
LIBVLC_DEPRECATED
LIBVLC_API
486
void
libvlc_log_iterator_free
(
libvlc_log_iterator_t
*p_iter );
487
488
/**
489
* Always returns zero.
490
* This function is only provided for backward compatibility.
491
*
492
* \param p_iter ignored
493
* \return always zero
494
*/
495
LIBVLC_DEPRECATED
LIBVLC_API
496
int
libvlc_log_iterator_has_next
(
const
libvlc_log_iterator_t
*p_iter );
497
498
/**
499
* Always returns NULL.
500
* This function is only provided for backward compatibility.
501
*
502
* \param p_iter libvlc log iterator or NULL
503
* \param p_buf ignored
504
* \return always NULL
505
*/
506
LIBVLC_DEPRECATED
LIBVLC_API
507
libvlc_log_message_t
*
libvlc_log_iterator_next
(
libvlc_log_iterator_t
*p_iter,
508
libvlc_log_message_t
*p_buf );
509
510
/** @} */
511
512
/**
513
* Description of a module.
514
*/
515
typedef
struct
libvlc_module_description_t
516
{
517
char
*
psz_name
;
518
char
*
psz_shortname
;
519
char
*
psz_longname
;
520
char
*
psz_help
;
521
struct
libvlc_module_description_t
*
p_next
;
522
}
libvlc_module_description_t
;
523
524
/**
525
* Release a list of module descriptions.
526
*
527
* \param p_list the list to be released
528
*/
529
LIBVLC_API
530
void
libvlc_module_description_list_release
(
libvlc_module_description_t
*p_list );
531
532
/**
533
* Returns a list of audio filters that are available.
534
*
535
* \param p_instance libvlc instance
536
*
537
* \return a list of module descriptions. It should be freed with libvlc_module_description_list_release().
538
* In case of an error, NULL is returned.
539
*
540
* \see libvlc_module_description_t
541
* \see libvlc_module_description_list_release
542
*/
543
LIBVLC_API
544
libvlc_module_description_t
*
libvlc_audio_filter_list_get
(
libvlc_instance_t
*p_instance );
545
546
/**
547
* Returns a list of video filters that are available.
548
*
549
* \param p_instance libvlc instance
550
*
551
* \return a list of module descriptions. It should be freed with libvlc_module_description_list_release().
552
* In case of an error, NULL is returned.
553
*
554
* \see libvlc_module_description_t
555
* \see libvlc_module_description_list_release
556
*/
557
LIBVLC_API
558
libvlc_module_description_t
*
libvlc_video_filter_list_get
(
libvlc_instance_t
*p_instance );
559
560
/** @} */
561
562
/** \defgroup libvlc_clock LibVLC time
563
* These functions provide access to the LibVLC time/clock.
564
* @{
565
*/
566
567
/**
568
* Return the current time as defined by LibVLC. The unit is the microsecond.
569
* Time increases monotonically (regardless of time zone changes and RTC
570
* adjustements).
571
* The origin is arbitrary but consistent across the whole system
572
* (e.g. the system uptim, the time since the system was booted).
573
* \note On systems that support it, the POSIX monotonic clock is used.
574
*/
575
LIBVLC_API
576
int64_t
libvlc_clock
(
void
);
577
578
/**
579
* Return the delay (in microseconds) until a certain timestamp.
580
* \param pts timestamp
581
* \return negative if timestamp is in the past,
582
* positive if it is in the future
583
*/
584
static
inline
int64_t
libvlc_delay
(int64_t pts)
585
{
586
return
pts -
libvlc_clock
();
587
}
588
589
/** @} */
590
591
# ifdef __cplusplus
592
}
593
# endif
594
595
#endif
/* <vlc/libvlc.h> */
Generated by
1.8.1.2