libvlc.h 6.15 KB
Newer Older
1
/*****************************************************************************
2
 * libvlc.h: Internal libvlc generic/misc declaration
3
 *****************************************************************************
4
 * Copyright (C) 1999, 2000, 2001, 2002 the VideoLAN team
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
5
 * Copyright © 2006-2007 Rémi Denis-Courmont
Carlo Calabrò's avatar
Carlo Calabrò committed
6
 * $Id$
7
 *
8
9
 * Authors: Vincent Seguin <seguin@via.ecp.fr>
 *
10
11
12
13
14
15
16
17
18
19
20
21
 * 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
dionoea's avatar
dionoea committed
22
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23
24
 *****************************************************************************/

25
26
#ifndef LIBVLC_LIBVLC_H
# define LIBVLC_LIBVLC_H 1
27

28
extern const char vlc_usage[];
29

30
31
extern const struct hotkey libvlc_hotkeys[];
extern const size_t libvlc_hotkeys_size;
32

33
34
35
36
37
38
39
40
41
42
43
44
45

/*
 * Threads subsystem
 */
int __vlc_threads_init( vlc_object_t * );
int __vlc_threads_end( vlc_object_t * );

/*
 * CPU capabilities
 */
extern uint32_t cpu_flags;
uint32_t CPUCapabilities( void );

46
47
48
/*
 * Unicode stuff
 */
49
50
51
52
53

/*
 * LibVLC objects stuff
 */

54
55
56
57
extern vlc_object_t *
vlc_custom_create (vlc_object_t *p_this, size_t i_size, int i_type,
                   const char *psz_type);

Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
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
/*****************************************************************************
 * libvlc_global_data_t (global variable)
 *****************************************************************************
 * This structure has an unique instance, statically allocated in main and
 * never accessed from the outside. It stores once-initialized data such as
 * the CPU capabilities or the global lock.
 *****************************************************************************/
struct libvlc_global_data_t
{
    VLC_COMMON_MEMBERS

    vlc_bool_t             b_ready;     ///< Initialization boolean

   /* Object structure data */
    int                    i_counter;   ///< object counter
    int                    i_objects;   ///< Attached objects count
    vlc_object_t **        pp_objects;  ///< Array of all objects

    module_bank_t *        p_module_bank; ///< The module bank
    intf_thread_t         *p_probe;       ///< Devices prober

    /* Arch-specific variables */
#if !defined( WIN32 )
    vlc_bool_t             b_daemon;
#endif
#if defined( SYS_BEOS )
    vlc_object_t *         p_appthread;
    char *                 psz_vlcpath;
#elif defined( __APPLE__ )
    char *                 psz_vlcpath;
    vlc_iconv_t            iconv_macosx; /* for HFS+ file names */
    vlc_mutex_t            iconv_lock;
#elif defined( WIN32 )
    char *                 psz_vlcpath;
#endif
};

95

96
libvlc_global_data_t *vlc_global (void);
97
libvlc_int_t *vlc_current_object (int i_object);
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
98

99
100
101
/* Private LibVLC data for each objects */
struct vlc_object_internals_t
{
102
    /* Object variables */
103
    variable_t *    p_vars;
104
105
    vlc_mutex_t     var_lock;
    int             i_vars;
106
107

    /* Thread properties, if any */
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
108
109
    vlc_thread_t    thread_id;
    vlc_bool_t      b_thread;
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
110

111
112
    /* Objects thread synchronization */
    int             pipes[2];
113
    vlc_spinlock_t  spin;
114

Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
115
    /* Objects management */
116
    unsigned        i_refcount;
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
117
    vlc_bool_t      b_attached;
118
119
};

120

121
122
123
124
125
static inline vlc_object_internals_t *vlc_internals( vlc_object_t *obj )
{
    return obj->p_internals;
}

126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/*
 * Configuration stuff
 */
#if 0
struct module_config_t
{
    int          i_type;                               /* Configuration type */
    const char  *psz_type;                          /* Configuration subtype */
    const char  *psz_name;                                    /* Option name */
    char         i_short;                      /* Optional short option name */
    const char  *psz_text;      /* Short comment on the configuration option */
    const char  *psz_longtext;   /* Long comment on the configuration option */
    module_value_t value;                                    /* Option value */
    module_value_t orig;
    module_value_t saved;
    module_nvalue_t min;
    module_nvalue_t max;

    /* Function to call when commiting a change */
    vlc_callback_t pf_callback;
    void          *p_callback_data;

    /* Values list */
    const char **ppsz_list;       /* List of possible values for the option */
    int         *pi_list;                              /* Idem for integers */
    const char **ppsz_list_text;          /* Friendly names for list values */
    int          i_list;                               /* Options list size */

    /* Actions list */
    vlc_callback_t *ppf_action;    /* List of possible actions for a config */
    const char    **ppsz_action_text;         /* Friendly names for actions */
    int            i_action;                           /* actions list size */

    /* Misc */
    vlc_mutex_t *p_lock;            /* Lock to use when modifying the config */
    vlc_bool_t   b_dirty;          /* Dirty flag to indicate a config change */
    vlc_bool_t   b_advanced;          /* Flag to indicate an advanced option */
    vlc_bool_t   b_internal;   /* Flag to indicate option is not to be shown */
    vlc_bool_t   b_restart;   /* Flag to indicate the option needs a restart */
                              /* to take effect */

    /* Deprecated */
    const char    *psz_current;                         /* Good option name */
    vlc_bool_t     b_strict;                     /* Transitionnal or strict */

    /* Option values loaded from config file */
    vlc_bool_t   b_autosave;      /* Config will be auto-saved at exit time */
    vlc_bool_t   b_unsaveable;                    /* Config should be saved */
};
#endif

177
extern module_config_t libvlc_config[];
178
179
extern const size_t libvlc_config_count;

180
181
182
183
184
/*
 * Variables stuff
 */
void var_OptionParse (vlc_object_t *, const char *);

185
#endif