libvlc.h 7.24 KB
Newer Older
1
/*****************************************************************************
2
 * libvlc.h: Internal libvlc generic/misc declaration
3
 *****************************************************************************
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
4
 * Copyright (C) 1999, 2000, 2001, 2002 VLC authors and VideoLAN
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
5
 * Copyright © 2006-2007 Rémi Denis-Courmont
6
 *
7 8
 * Authors: Vincent Seguin <seguin@via.ecp.fr>
 *
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
9 10 11
 * 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
12 13 14 15
 * (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
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
16 17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
18
 *
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
19 20 21
 * 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.
22 23
 *****************************************************************************/

24 25
#ifndef LIBVLC_LIBVLC_H
# define LIBVLC_LIBVLC_H 1
26

27 28
#include <vlc_input_item.h>

29 30
extern const char psz_vlc_changeset[];

31 32
typedef struct variable_t variable_t;

33 34 35
/*
 * OS-specific initialization
 */
36
void system_Init      ( void );
37
void system_Configure ( libvlc_int_t *, int, const char *const [] );
38
#if defined(_WIN32) || defined(__OS2__)
39
void system_End(void);
40
#endif
41 42
void vlc_CPU_dump(vlc_object_t *);

43 44 45 46
/*
 * Threads subsystem
 */

47
/* This cannot be used as is from plugins yet: */
48
int vlc_clone_detach (vlc_thread_t *, void *(*)(void *), void *, int);
49

50 51
int vlc_set_priority( vlc_thread_t, int );

52 53
void vlc_threads_setup (libvlc_int_t *);

54 55
void vlc_trace (const char *fn, const char *file, unsigned line);
#define vlc_backtrace() vlc_trace(__func__, __FILE__, __LINE__)
56

57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
#ifndef NDEBUG
/**
 * Marks a mutex locked.
 */
void vlc_mutex_mark(const vlc_mutex_t *);

/**
 * Unmarks a mutex.
 */
void vlc_mutex_unmark(const vlc_mutex_t *);
#else
# define vlc_mutex_mark(m) ((void)(m))
# define vlc_mutex_unmark(m) ((void)(m))
#endif

72 73 74
/*
 * Logging
 */
75
typedef struct vlc_logger vlc_logger_t;
76

77 78
int vlc_LogPreinit(libvlc_int_t *) VLC_USED;
void vlc_LogInit(libvlc_int_t *);
79

80 81 82 83 84 85 86 87 88 89 90 91 92
/*
 * LibVLC exit event handling
 */
typedef struct vlc_exit
{
    vlc_mutex_t lock;
    void (*handler) (void *);
    void *opaque;
} vlc_exit_t;

void vlc_ExitInit( vlc_exit_t * );
void vlc_ExitDestroy( vlc_exit_t * );

93 94 95 96
/*
 * LibVLC objects stuff
 */

97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
/**
 * Initializes a VLC object.
 *
 * @param obj storage space for object to initialize [OUT]
 * @param parent parent object (or NULL to initialize the root) [IN]
 * @param type_name object type name
 *
 * @note The type name pointer must remain valid even after the object is
 * deinitialized, as it might be passed by address to log message queue.
 * Using constant string literals is appropriate.
 *
 * @retval 0 on success
 * @retval -1 on (out of memory) error
 */
int vlc_object_init(vlc_object_t *obj, vlc_object_t *parent,
                    const char *type_name);

/**
 * Deinitializes a VLC object.
 *
 * This frees resources allocated by vlc_object_init().
 */
void vlc_object_deinit(vlc_object_t *obj);

121 122 123 124 125 126 127 128 129 130 131 132 133
/**
 * 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 psz_type object type name
 * @return the created object, or NULL.
 */
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
134
extern void *
135 136 137
vlc_custom_create (vlc_object_t *p_this, size_t i_size, const char *psz_type);
#define vlc_custom_create(o, s, n) \
        vlc_custom_create(VLC_OBJECT(o), s, n)
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 177 178 179 180
/**
 * Allocates an object resource.
 *
 * @param size storage size in bytes of the resource data
 * @param release callback to release the resource
 *
 * @return a pointer to the (uninitialized) storage space, or NULL on error
 */
void *vlc_objres_new(size_t size, void (*release)(void *));

/**
 * Pushes an object resource on the object resources stack.
 *
 * @param obj object to allocate the resource for
 * @param data resource base address (as returned by vlc_objres_new())
 */
void vlc_objres_push(vlc_object_t *obj, void *data);

/**
 * Releases all resources of an object.
 *
 * All resources added with vlc_objres_add() are released in reverse order.
 * The resource list is reset to empty.
 *
 * @param obj object whose resources to release
 */
void vlc_objres_clear(vlc_object_t *obj);

/**
 * Releases one object resource explicitly.
 *
 * If a resource associated with an object needs to be released explicitly
 * earlier than normal, call this function. This is relatively slow and should
 * be avoided.
 *
 * @param obj object whose resource to release
 * @param data private data for the comparison function
 * @param match comparison function to match the targeted resource
 */
void vlc_objres_remove(vlc_object_t *obj, void *data,
                       bool (*match)(void *, void *));

181 182 183 184 185
#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")
186

187 188 189
/**
 * Private LibVLC instance data.
 */
190
typedef struct vlc_dialog_provider vlc_dialog_provider;
191
typedef struct vlc_keystore vlc_keystore;
192
typedef struct vlc_actions_t vlc_actions_t;
193
typedef struct vlc_playlist vlc_playlist_t;
194
typedef struct vlc_media_source_provider_t vlc_media_source_provider_t;
Thomas Guillem's avatar
Thomas Guillem committed
195
typedef struct intf_thread_t intf_thread_t;
196

197 198
typedef struct libvlc_priv_t
{
199 200
    libvlc_int_t       public_data;

201
    /* Singleton objects */
202
    vlc_mutex_t lock; ///< protect playlist and interfaces
203
    vlm_t             *p_vlm;  ///< the VLM singleton (or NULL)
204
    vlc_dialog_provider *p_dialog_provider; ///< dialog provider
205
    vlc_keystore      *p_memory_keystore; ///< memory keystore
206
    intf_thread_t *interfaces;  ///< Linked-list of interfaces
207
    vlc_playlist_t *main_playlist;
208
    struct input_preparser_t *parser; ///< Input item meta data handler
209
    vlc_media_source_provider_t *media_source_provider;
210
    vlc_actions_t *actions; ///< Hotkeys handler
211
    struct vlc_medialibrary_t *p_media_library; ///< Media library instance
212
    struct vlc_thumbnailer_t *p_thumbnailer; ///< Lazily instantiated media thumbnailer
213

214 215
    /* Exit callback */
    vlc_exit_t       exit;
216 217 218 219
} libvlc_priv_t;

static inline libvlc_priv_t *libvlc_priv (libvlc_int_t *libvlc)
{
220
    return container_of(libvlc, libvlc_priv_t, public_data);
221 222
}

223 224
int intf_InsertItem(libvlc_int_t *, const char *mrl, unsigned optc,
                    const char * const *optv, unsigned flags);
225
void intf_DestroyAll( libvlc_int_t * );
226

227 228
int vlc_MetadataRequest(libvlc_int_t *libvlc, input_item_t *item,
                        input_item_meta_request_option_t i_options,
229 230
                        const input_preparser_callbacks_t *cbs,
                        void *cbs_userdata,
231 232
                        int timeout, void *id);

233 234 235
/*
 * Variables stuff
 */
236
void var_OptionParse (vlc_object_t *, const char *, bool trusted);
237

238
#endif