libvlc.h 5.44 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
/* Hotkey stuff */
31 32
extern const struct hotkey libvlc_hotkeys[];
extern const size_t libvlc_hotkeys_size;
33 34
extern int vlc_key_to_action (vlc_object_t *, const char *,
                              vlc_value_t, vlc_value_t, void *);
35

36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
/*
 * OS-specific initialization
 */
void system_Init      ( libvlc_int_t *, int *, const char *[] );
void system_Configure ( libvlc_int_t *, int *, const char *[] );
void system_End       ( libvlc_int_t * );

#if defined( SYS_BEOS )
/* Nothing at the moment, create beos_specific.h when needed */
#elif defined( __APPLE__ )
/* Nothing at the moment, create darwin_specific.h when needed */
#elif defined( WIN32 ) || defined( UNDER_CE )
VLC_EXPORT( const char * , system_VLCPath, (void));
#else
# define system_Init( a, b, c )      (void)0
# define system_Configure( a, b, c ) (void)0
# define system_End( a )             (void)0
#endif


56 57 58 59 60 61 62 63 64 65 66 67
/*
 * 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 );

68 69 70
/*
 * Unicode stuff
 */
71 72 73 74 75

/*
 * LibVLC objects stuff
 */

76 77 78 79 80 81 82 83 84 85 86 87 88 89
/**
 * Creates a VLC object.
 *
 * Note that because the object name pointer must remain valid, potentially
 * even after the destruction of the object (through the message queues), this
 * function CANNOT be exported to plugins as is. In this case, the old
 * vlc_object_create() must be used instead.
 *
 * @param p_this an existing VLC object
 * @param i_size byte size of the object structure
 * @param i_type object type, usually VLC_OBJECT_CUSTOM
 * @param psz_type object type name
 * @return the created object, or NULL.
 */
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
90
extern void *
91 92 93
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
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
/*****************************************************************************
 * 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
};

131

132
libvlc_global_data_t *vlc_global (void);
133
libvlc_int_t *vlc_current_object (int i_object);
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
134

135 136 137
/* Private LibVLC data for each objects */
struct vlc_object_internals_t
{
138
    /* Object variables */
139
    variable_t *    p_vars;
140 141
    vlc_mutex_t     var_lock;
    int             i_vars;
142 143

    /* Thread properties, if any */
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
144 145
    vlc_thread_t    thread_id;
    vlc_bool_t      b_thread;
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
146

147 148
    /* Objects thread synchronization */
    int             pipes[2];
149
    vlc_spinlock_t  spin;
150

Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
151
    /* Objects management */
152 153 154
    unsigned         i_refcount;
    vlc_destructor_t pf_destructor;
    vlc_bool_t       b_attached;
155 156
};

157 158 159 160 161
#define ZOOM_SECTION N_("Zoom")
#define ZOOM_QUARTER_KEY_TEXT N_("1:4 Quarter")
#define ZOOM_HALF_KEY_TEXT N_("1:2 Half")
#define ZOOM_ORIGINAL_KEY_TEXT N_("1:1 Original")
#define ZOOM_DOUBLE_KEY_TEXT N_("2:1 Double")
162

163 164 165 166 167
static inline vlc_object_internals_t *vlc_internals( vlc_object_t *obj )
{
    return obj->p_internals;
}

168
extern module_config_t libvlc_config[];
169 170
extern const size_t libvlc_config_count;

171 172 173
/*
 * Variables stuff
 */
174
void var_OptionParse (vlc_object_t *, const char *, bool trusted);
175

176
#endif