forked from videolan/vlc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
libvlc_internal.h
147 lines (129 loc) · 5.16 KB
/
libvlc_internal.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*****************************************************************************
* libvlc_internal.h : Definition of opaque structures for libvlc exported API
* Also contains some internal utility functions
*****************************************************************************
* Copyright (C) 2005-2009 VLC authors and VideoLAN
*
* Authors: Clément Stenac <[email protected]>
*
* 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 Lesser General Public License for more details.
*
* 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.
*****************************************************************************/
#ifndef _LIBVLC_INTERNAL_H
#define _LIBVLC_INTERNAL_H 1
#include <vlc/libvlc.h>
#include <vlc/libvlc_dialog.h>
#include <vlc/libvlc_picture.h>
#include <vlc/libvlc_media.h>
#include <vlc/libvlc_events.h>
#include <vlc_atomic.h>
#include <vlc_common.h>
#include <vlc_arrays.h>
#include <vlc_threads.h>
/* Note well: this header is included from LibVLC core.
* Therefore, static inline functions MUST NOT call LibVLC functions here
* (this can cause linkage failure on some platforms). */
/***************************************************************************
* Internal creation and destruction functions
***************************************************************************/
VLC_API libvlc_int_t *libvlc_InternalCreate( void );
VLC_API int libvlc_InternalInit( libvlc_int_t *, int, const char *ppsz_argv[] );
VLC_API void libvlc_InternalCleanup( libvlc_int_t * );
VLC_API void libvlc_InternalDestroy( libvlc_int_t * );
/**
* Try to start a user interface for the libvlc instance.
*
* \param libvlcint the internal instance
* \param name interface name, or NULL for default
* \return 0 on success, -1 on error.
*/
VLC_API int libvlc_InternalAddIntf( libvlc_int_t *libvlcint, const char *name );
/**
* Start playing the main playlist
*
* The main playlist can only be populated via an interface created by the
* libvlc_InternalAddIntf() function. The control and media flow will only be
* controlled by the interface previously added.
*
* One of these 2 functions (libvlc_InternalAddIntf() or libvlc_InternalPlay())
* will trigger the creation of an internal playlist and player.
*
* \param libvlcint the internal instance
*/
VLC_API void libvlc_InternalPlay( libvlc_int_t *libvlcint );
VLC_API void libvlc_InternalWait( libvlc_int_t * );
/**
* 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_InternalPlay() or libvlc_InternalAddIntf () 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 libvlcint the internal 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
*/
VLC_API void libvlc_SetExitHandler( libvlc_int_t *libvlcint, void (*cb) (void *),
void *opaque );
/***************************************************************************
* Opaque structures for libvlc API
***************************************************************************/
struct libvlc_instance_t
{
libvlc_int_t *p_libvlc_int;
vlc_atomic_rc_t ref_count;
struct libvlc_callback_entry_list_t *p_callback_list;
struct
{
void (*cb) (void *, int, const libvlc_log_t *, const char *, va_list);
void *data;
} log;
struct
{
libvlc_dialog_cbs cbs;
void *data;
} dialog;
};
struct libvlc_event_manager_t
{
void * p_obj;
vlc_array_t listeners;
vlc_mutex_t lock;
};
/***************************************************************************
* Other internal functions
***************************************************************************/
/* Thread context */
void libvlc_threads_init (void);
void libvlc_threads_deinit (void);
/* Events */
void libvlc_event_manager_init(libvlc_event_manager_t *, void *);
void libvlc_event_manager_destroy(libvlc_event_manager_t *);
void libvlc_event_send(
libvlc_event_manager_t * p_em,
libvlc_event_t * p_event );
static inline libvlc_time_t libvlc_time_from_vlc_tick(vlc_tick_t time)
{
return MS_FROM_VLC_TICK(time + VLC_TICK_FROM_US(500));
}
static inline vlc_tick_t vlc_tick_from_libvlc_time(libvlc_time_t time)
{
return VLC_TICK_FROM_MS(time);
}
#endif