vlc/
sys.rs

1// Copyright (c) 2015 T. Okubo
2// This file is part of vlc-rs.
3// Licensed under the MIT license, see the LICENSE file.
4
5#![allow(non_camel_case_types, non_upper_case_globals)]
6
7#[link(name = "vlc")]
8extern "C" {}
9
10use libc::{c_void, c_int, c_uint, c_char, c_float, uintptr_t, FILE};
11
12pub type c_bool = u8;
13
14pub type libvlc_event_type_t = c_int;
15
16// From libvlc_structures.h
17pub enum libvlc_instance_t {}
18pub enum libvlc_log_iterator_t {}
19
20pub type libvlc_time_t = i64;
21
22#[repr(C)]
23#[derive(Clone, Copy)]
24pub struct libvlc_log_message_t {
25    pub i_severity: c_int,
26    pub psz_type: *const c_char,
27    pub psz_name: *const c_char,
28    pub psz_header: *const c_char,
29    pub psz_message: *const c_char,
30}
31
32// From libvlc.h
33pub enum libvlc_event_manager_t {}
34pub enum libvlc_log_t {}
35pub enum vlc_log_t {}
36
37pub type libvlc_callback_t = unsafe extern "C" fn(*const libvlc_event_t, *mut c_void);
38pub type va_list = *mut c_void;
39pub type libvlc_log_cb = unsafe extern "C" fn(*mut c_void, c_int, *const libvlc_log_t, *const c_char, va_list);
40
41pub use LogLevel as libvlc_log_level;
42
43#[repr(C)]
44#[derive(Clone, Copy)]
45pub struct libvlc_module_description_t
46{
47    pub psz_name: *const c_char,
48    pub psz_shortname: *const c_char,
49    pub psz_longname: *const c_char,
50    pub psz_help: *const c_char,
51    pub p_next: *mut libvlc_module_description_t,
52}
53
54extern "C" {
55    pub fn libvlc_errmsg() -> *const c_char;
56    pub fn libvlc_clearerr();
57    pub fn libvlc_new(argc: c_int, argv: *const *const c_char) -> *mut libvlc_instance_t;
58    pub fn libvlc_release(p_instance: *mut libvlc_instance_t);
59    pub fn libvlc_retain(p_instance: *mut libvlc_instance_t);
60    pub fn libvlc_add_intf(p_instance: *mut libvlc_instance_t, name: *const c_char) -> c_int;
61    pub fn libvlc_set_exit_handler(
62        p_instance: *mut libvlc_instance_t,
63        cb: extern "C" fn(*mut c_void), opaque: *mut c_void);
64    pub fn libvlc_wait(p_instance: *mut libvlc_instance_t);
65    pub fn libvlc_set_user_agent(
66        p_instance: *mut libvlc_instance_t, name: *const c_char, http: *const c_char);
67    pub fn libvlc_set_app_id(
68        p_instance: *mut libvlc_instance_t, id: *const c_char, version: *const c_char,
69        icon: *const c_char);
70    pub fn libvlc_get_version() -> *const c_char;
71    pub fn libvlc_get_compiler() -> *const c_char;
72    pub fn libvlc_get_changeset() -> *const c_char;
73    pub fn libvlc_free(ptr: *mut c_void);
74    pub fn libvlc_event_attach(
75        p_event_manager: *mut libvlc_event_manager_t, i_event_type: libvlc_event_type_t,
76        f_callback: libvlc_callback_t, user_data: *mut c_void) -> c_int;
77    pub fn libvlc_event_type_name(event_type: libvlc_event_type_t) -> *const c_char;
78    pub fn libvlc_log_get_context(
79        ctx: *const libvlc_log_t, module: *const *const c_char, file: *const *const c_char,
80        line: *mut c_uint);
81    pub fn libvlc_log_get_object(
82        ctx: *const libvlc_log_t, name: *const *const c_char,
83        header: *const *const c_char, id: *mut uintptr_t);
84    pub fn libvlc_log_unset(_: *mut libvlc_instance_t);
85    pub fn libvlc_log_set(instance: *mut libvlc_instance_t, cb: libvlc_log_cb, data: *mut c_void);
86    pub fn libvlc_log_set_file(_: *mut libvlc_instance_t, stream: *mut FILE);
87    pub fn libvlc_module_description_list_release(p_list: *mut libvlc_module_description_t);
88    pub fn libvlc_audio_filter_list_get(
89        p_instance: *mut libvlc_instance_t) -> *mut libvlc_module_description_t;
90    pub fn libvlc_video_filter_list_get(
91        p_instance: *mut libvlc_instance_t) -> *mut libvlc_module_description_t;
92    pub fn libvlc_clock() -> i64;
93}
94
95pub unsafe fn libvlc_delay(pts: i64) -> i64 {
96    pts - libvlc_clock()
97}
98
99// From libvlc_media.h
100pub enum libvlc_media_t {}
101
102pub use Meta as libvlc_meta_t;
103pub use State as libvlc_state_t;
104
105pub const libvlc_media_option_trusted: u32 = 0x2;
106pub const libvlc_media_option_unique: u32 = 0x100;
107
108pub use TrackType as libvlc_track_type_t;
109
110#[repr(C)]
111#[derive(Clone, Copy)]
112pub struct libvlc_media_stats_t {
113    /* Input */
114    pub i_read_bytes: c_int,
115    pub f_input_bitrate: c_float,
116    /* Demux */
117    pub i_demux_read_bytes: c_int,
118    pub f_demux_bitrate: c_float,
119    pub i_demux_corrupted: c_int,
120    pub i_demux_discontinuity: c_int,
121    /* Decoders */
122    pub i_decoded_video: c_int,
123    pub i_decoded_audio: c_int,
124    /* Video Output */
125    pub i_displayed_pictures: c_int,
126    pub i_lost_pictures: c_int,
127    /* Audio output */
128    pub i_played_abuffers: c_int,
129    pub i_lost_abuffers: c_int,
130    /* Stream output */
131    pub i_sent_packets: c_int,
132    pub i_sent_bytes: c_int,
133    pub f_send_bitrate: c_float,
134}
135
136#[repr(C)]
137#[derive(Clone, Copy)]
138pub struct libvlc_media_track_info_t {
139    /* Codec fourcc */
140    pub i_codec: u32,
141    pub i_id: c_int,
142    pub i_type: libvlc_track_type_t,
143    /* Codec specific */
144    pub i_profile: c_int,
145    pub i_level: c_int,
146    
147    pub u: libvlc_media_track_info_t_types::u,
148}
149
150pub mod libvlc_media_track_info_t_types {
151    use libc::c_uint;
152    #[repr(C)]
153    #[derive(Clone, Copy)]
154    pub union u {
155        pub audio: audio,
156        pub video: video,
157    }
158
159    #[repr(C)]
160    #[derive(Clone, Copy)]
161    pub struct audio {
162        pub i_channels: c_uint,
163        pub i_rate: c_uint,
164    }
165
166    #[repr(C)]
167    #[derive(Clone, Copy)]
168    pub struct video {
169        pub i_height: c_uint,
170        pub i_width: c_uint,
171    }
172}
173
174#[repr(C)]
175#[derive(Clone, Copy)]
176pub struct libvlc_audio_track_t
177{
178    pub i_channels: c_uint,
179    pub i_rate: c_uint,
180}
181
182#[derive(Clone, Copy)]
183#[repr(C)]
184pub struct libvlc_video_track_t
185{
186    pub i_height: c_uint,
187    pub i_width: c_uint,
188    pub i_sar_num: c_uint,
189    pub i_sar_den: c_uint,
190    pub i_frame_rate_num: c_uint,
191    pub i_frame_rate_den: c_uint,
192}
193
194#[repr(C)]
195#[derive(Clone, Copy)]
196pub struct libvlc_subtitle_track_t {
197    pub psz_encoding: *const c_char,
198}
199
200#[repr(C)]
201#[derive(Clone, Copy)]
202pub struct libvlc_media_track_t {
203    pub i_codec: u32,
204    pub i_original_fourcc: u32,
205    pub i_id: c_int,
206    pub i_type: libvlc_track_type_t,
207    pub i_profile: c_int,
208    pub i_level: c_int,
209    pub u: libvlc_media_track_t_types::u,
210    pub i_bitrate: c_uint,
211    pub psz_language: *mut c_char,
212    pub psz_description: *mut c_char,
213}
214
215pub mod libvlc_media_track_t_types {
216    use super::*;
217    #[repr(C)]
218    #[derive(Clone, Copy)]
219    pub union u {
220        pub audio: *mut libvlc_audio_track_t,
221        pub video: *mut libvlc_video_track_t,
222        pub subtitle: *mut libvlc_subtitle_track_t,
223    }
224}
225
226impl libvlc_media_track_t {
227    pub unsafe fn audio(&self) -> *mut libvlc_audio_track_t {
228        self.u.audio
229    }
230    pub unsafe fn video(&self) -> *mut libvlc_video_track_t {
231        self.u.video
232    }
233    pub unsafe fn subtitle(&self) -> *mut libvlc_subtitle_track_t {
234        self.u.subtitle
235    }
236}
237
238extern "C" {
239    pub fn libvlc_media_new_location(p_instance: *mut libvlc_instance_t, psz_mrl: *const c_char)
240                                     -> *mut libvlc_media_t;
241    pub fn libvlc_media_new_path(p_instance: *mut libvlc_instance_t, path: *const c_char)
242                                 -> *mut libvlc_media_t;
243    pub fn libvlc_media_new_fd(p_instance: *mut libvlc_instance_t, fd: c_int)
244                               -> *mut libvlc_media_t;
245    pub fn libvlc_media_as_node(p_instance: *mut libvlc_instance_t, psz_name: *const c_char)
246                                -> *mut libvlc_media_t;
247    pub fn libvlc_media_add_option(p_md: *mut libvlc_media_t, psz_options: *const c_char);
248    pub fn libvlc_media_add_option_flag(
249        p_md: *mut libvlc_media_t, psz_options: *const c_char, i_flags: c_uint);
250    pub fn libvlc_media_retain(p_md: *mut libvlc_media_t);
251    pub fn libvlc_media_release(p_md: *mut libvlc_media_t);
252    pub fn libvlc_media_get_mrl(p_md: *mut libvlc_media_t) -> *mut c_char;
253    pub fn libvlc_media_duplicate(p_md: *mut libvlc_media_t) -> *mut libvlc_media_t;
254    pub fn libvlc_media_get_meta(p_md: *mut libvlc_media_t, e_meta: libvlc_meta_t) -> *mut c_char;
255    pub fn libvlc_media_set_meta(p_md: *mut libvlc_media_t, e_meta: libvlc_meta_t,
256                                 psz_value: *const c_char);
257    pub fn libvlc_media_save_meta(p_md: *mut libvlc_media_t) -> c_int;
258    pub fn libvlc_media_get_state(p_md: *mut libvlc_media_t) -> libvlc_state_t;
259    pub fn libvlc_media_get_stats(p_md: *mut libvlc_media_t, p_stats: *mut libvlc_media_stats_t)
260                                  -> c_int;
261    pub fn libvlc_media_subitems(p_md: *mut libvlc_media_t)
262                                 -> *mut libvlc_media_list_t;
263    pub fn libvlc_media_event_manager(p_md: *mut libvlc_media_t)
264                                      -> *mut libvlc_event_manager_t;
265    pub fn libvlc_media_get_duration(p_md: *mut libvlc_media_t)
266                                     -> libvlc_time_t;
267    pub fn libvlc_media_parse(p_md: *mut libvlc_media_t);
268    pub fn libvlc_media_parse_async(p_md: *mut libvlc_media_t);
269    pub fn libvlc_media_is_parsed(p_md: *mut libvlc_media_t) -> c_int;
270    pub fn libvlc_media_set_user_data(p_md: *mut libvlc_media_t,
271                                      p_new_user_data: *mut c_void);
272    pub fn libvlc_media_get_user_data(p_md: *mut libvlc_media_t) -> *mut c_void;
273    pub fn libvlc_media_tracks_get(p_md: *mut libvlc_media_t,
274                                   tracks: *mut *mut *mut libvlc_media_track_t) -> c_uint;
275    pub fn libvlc_media_tracks_release(p_tracks: *mut *mut libvlc_media_track_t, i_count: c_uint);
276}
277
278// From libvlc_media_player.h
279
280pub enum libvlc_media_player_t {}
281pub enum libvlc_equalizer_t {}
282
283#[repr(C)]
284#[derive(Clone, Copy, Debug)]
285pub struct libvlc_track_description_t {
286    pub i_id: c_int,
287    pub psz_name: *mut c_char,
288    pub p_next: *mut libvlc_track_description_t,
289}
290
291#[repr(C)]
292#[derive(Clone, Copy)]
293pub struct libvlc_audio_output_t {
294    pub psz_name: *mut c_char,
295    pub psz_description: *mut c_char,
296    pub p_next: *mut libvlc_audio_output_t,
297}
298
299#[repr(C)]
300#[derive(Clone, Copy)]
301pub struct libvlc_audio_output_device_t {
302    pub p_next: *mut libvlc_audio_output_device_t,
303    pub psz_device: *mut c_char,
304    pub psz_description: *mut c_char,
305}
306
307#[repr(C)]
308#[derive(Clone, Copy, Debug)]
309pub struct libvlc_rectangle_t {
310    pub top: c_int, pub left: c_int, pub bottom: c_int, pub right: c_int,
311}
312
313#[repr(C)]
314#[derive(Clone, Copy, Debug)]
315pub enum libvlc_video_marquee_option_t {
316    libvlc_marquee_Enable = 0,
317    libvlc_marquee_Text,
318    libvlc_marquee_Color,
319    libvlc_marquee_Opacity,
320    libvlc_marquee_Position,
321    libvlc_marquee_Refresh,
322    libvlc_marquee_Size,
323    libvlc_marquee_Timeout,
324    libvlc_marquee_X,
325    libvlc_marquee_Y,
326}
327
328#[repr(C)]
329#[derive(Clone, Copy, Debug)]
330pub enum libvlc_navigate_mode_t {
331    libvlc_navigate_activate = 0,
332    libvlc_navigate_up,
333    libvlc_navigate_down,
334    libvlc_navigate_left,
335    libvlc_navigate_right,
336}
337
338pub use Position as libvlc_position_t;
339pub use VideoAdjustOption as libvlc_video_adjust_option;
340
341#[repr(C)]
342#[derive(Clone, Copy, Debug)]
343pub enum libvlc_video_logo_option_t {
344    libvlc_logo_enable,
345    libvlc_logo_file,
346    libvlc_logo_x,
347    libvlc_logo_y,
348    libvlc_logo_delay,
349    libvlc_logo_repeat,
350    libvlc_logo_opacity,
351    libvlc_logo_position
352}
353
354#[repr(C)]
355#[derive(Clone, Copy, Debug)]
356pub enum libvlc_audio_output_device_types_t {
357    libvlc_AudioOutputDevice_Error  = -1,
358    libvlc_AudioOutputDevice_Mono   =  1,
359    libvlc_AudioOutputDevice_Stereo =  2,
360    libvlc_AudioOutputDevice_2F2R   =  4,
361    libvlc_AudioOutputDevice_3F2R   =  5,
362    libvlc_AudioOutputDevice_5_1    =  6,
363    libvlc_AudioOutputDevice_6_1    =  7,
364    libvlc_AudioOutputDevice_7_1    =  8,
365    libvlc_AudioOutputDevice_SPDIF  = 10
366}
367
368#[repr(C)]
369#[derive(Clone, Copy, Debug)]
370pub enum libvlc_audio_output_channel_t {
371    libvlc_AudioChannel_Error   = -1,
372    libvlc_AudioChannel_Stereo  =  1,
373    libvlc_AudioChannel_RStereo =  2,
374    libvlc_AudioChannel_Left    =  3,
375    libvlc_AudioChannel_Right   =  4,
376    libvlc_AudioChannel_Dolbys  =  5
377}
378
379pub type libvlc_video_lock_cb = Option<unsafe extern "C" fn(*mut c_void, *mut c_void) -> *mut c_void>;
380pub type libvlc_video_unlock_cb = Option<unsafe extern "C" fn(
381    *mut c_void, *mut c_void, *const *mut c_void)>;
382pub type libvlc_video_display_cb = Option<unsafe extern "C" fn(*mut c_void, *mut c_void)>;
383pub type libvlc_video_format_cb = Option<unsafe extern "C" fn(
384    *mut *mut c_void, *mut c_char, *mut c_uint, *mut c_uint, *mut c_uint, *mut c_uint)>;
385pub type libvlc_video_cleanup_cb = Option<unsafe extern "C" fn(*mut c_void)>;
386pub type libvlc_audio_play_cb = Option<unsafe extern "C" fn(*mut c_void, *const c_void, c_uint, i64)>;
387pub type libvlc_audio_pause_cb = Option<unsafe extern "C" fn(*mut c_void, i64)>;
388pub type libvlc_audio_resume_cb = Option<unsafe extern "C" fn(*mut c_void, i64)>;
389pub type libvlc_audio_flush_cb = Option<unsafe extern "C" fn(*mut c_void, i64)>;
390pub type libvlc_audio_drain_cb = Option<unsafe extern "C" fn(*mut c_void)>;
391pub type libvlc_audio_set_volume_cb = Option<unsafe extern "C" fn(*mut c_void, c_float, c_bool)>;
392pub type libvlc_audio_setup_cb = Option<unsafe extern "C" fn(
393    *mut *mut c_void, *mut c_char, *mut c_uint, *mut c_uint)>;
394pub type libvlc_audio_cleanup_cb = Option<unsafe extern "C" fn(*mut c_void)>;
395
396extern "C" {
397    pub fn libvlc_media_player_new(p_libvlc_instance: *mut libvlc_instance_t)
398                                   -> *mut libvlc_media_player_t;
399    pub fn libvlc_media_player_new_from_media(p_md: *mut libvlc_media_t)
400                                              -> *mut libvlc_media_player_t;
401    pub fn libvlc_media_player_release(p_mi: *mut libvlc_media_player_t);
402    pub fn libvlc_media_player_retain(p_mi: *mut libvlc_media_player_t);
403    pub fn libvlc_media_player_set_media(p_mi: *mut libvlc_media_player_t,
404                                         p_md: *mut libvlc_media_t);
405    pub fn libvlc_media_player_get_media(p_mi: *mut libvlc_media_player_t) -> *mut libvlc_media_t;
406    pub fn libvlc_media_player_event_manager(p_mi: *mut libvlc_media_player_t)
407                                             -> *mut libvlc_event_manager_t;
408    pub fn libvlc_media_player_is_playing(p_mi: *mut libvlc_media_player_t) -> c_int;
409    pub fn libvlc_media_player_play(p_mi: *mut libvlc_media_player_t) -> c_int;
410    pub fn libvlc_media_player_set_pause(mp: *mut libvlc_media_player_t, do_pause: c_int);
411    pub fn libvlc_media_player_pause(p_mi: *mut libvlc_media_player_t);
412    pub fn libvlc_media_player_stop(p_mi: *mut libvlc_media_player_t);
413    pub fn libvlc_video_set_callbacks(
414        mp: *mut libvlc_media_player_t, lock: libvlc_video_lock_cb,
415        unlock: libvlc_video_unlock_cb, display: libvlc_video_display_cb,
416        opaque: *mut c_void);
417    pub fn libvlc_video_set_format(
418        mp: *mut libvlc_media_player_t, chroma: *const c_char, width: c_uint, height: c_uint,
419        pitch: c_uint);
420    pub fn libvlc_video_set_format_callbacks(
421        mp: *mut libvlc_media_player_t, setup: libvlc_video_format_cb,
422        cleanup: libvlc_video_cleanup_cb);
423    pub fn libvlc_media_player_set_nsobject(
424        p_mi: *mut libvlc_media_player_t, drawable: *mut c_void);
425    pub fn libvlc_media_player_get_nsobject(p_mi: *mut libvlc_media_player_t) -> *mut c_void;
426    pub fn libvlc_media_player_set_xwindow(
427        p_mi: *mut libvlc_media_player_t, drawable: u32);
428    pub fn libvlc_media_player_get_xwindow(p_mi: *mut libvlc_media_player_t) -> u32;
429    pub fn libvlc_media_player_set_hwnd(
430        p_mi: *mut libvlc_media_player_t, drawable: *mut c_void);
431    pub fn libvlc_media_player_get_hwnd(p_mi: *mut libvlc_media_player_t) -> *mut c_void;
432    pub fn libvlc_audio_set_callbacks(
433        mp: *mut libvlc_media_player_t, play: libvlc_audio_play_cb, pause: libvlc_audio_pause_cb,
434        resume: libvlc_audio_resume_cb, flush: libvlc_audio_flush_cb,
435        drain: libvlc_audio_drain_cb, opaque: *mut c_void);
436    pub fn libvlc_audio_set_volume_callback(
437        mp: *mut libvlc_media_player_t, set_volume: libvlc_audio_set_volume_cb);
438    pub fn libvlc_audio_set_format_callbacks(
439        mp: *mut libvlc_media_player_t, setup: libvlc_audio_setup_cb,
440        cleanup: libvlc_audio_cleanup_cb);
441    pub fn libvlc_audio_set_format(
442        mp: *mut libvlc_media_player_t, format: *const c_char, rate: c_uint, channels: c_uint);
443    pub fn libvlc_media_player_get_length(p_mi: *mut libvlc_media_player_t) -> libvlc_time_t;
444    pub fn libvlc_media_player_get_time(p_mi: *mut libvlc_media_player_t) -> libvlc_time_t;
445    pub fn libvlc_media_player_set_time(
446        p_mi: *mut libvlc_media_player_t, i_time: libvlc_time_t);
447    pub fn libvlc_media_player_get_position(p_mi: *mut libvlc_media_player_t) -> c_float;
448    pub fn libvlc_media_player_set_position(p_mi: *mut libvlc_media_player_t, f_pos: c_float);
449    pub fn libvlc_media_player_set_chapter(p_mi: *mut libvlc_media_player_t, i_chapter: c_int);
450    pub fn libvlc_media_player_get_chapter(p_mi: *mut libvlc_media_player_t) -> c_int;
451    pub fn libvlc_media_player_get_chapter_count(p_mi: *mut libvlc_media_player_t) -> c_int;
452    pub fn libvlc_media_player_will_play(p_mi: *mut libvlc_media_player_t) -> c_int;
453    pub fn libvlc_media_player_set_title(p_mi: *mut libvlc_media_player_t, i_title: c_int);
454    pub fn libvlc_media_player_get_chapter_count_for_title(
455        p_mi: *mut libvlc_media_player_t, i_title: c_int) -> c_int;
456    pub fn libvlc_media_player_get_title(p_mi: *mut libvlc_media_player_t) -> c_int;
457    pub fn libvlc_media_player_get_title_count(p_mi: *mut libvlc_media_player_t) -> c_int;
458    pub fn libvlc_media_player_previous_chapter(p_mi: *mut libvlc_media_player_t);
459    pub fn libvlc_media_player_next_chapter(p_mi: *mut libvlc_media_player_t);
460    pub fn libvlc_media_player_get_rate(p_mi: *mut libvlc_media_player_t) -> c_float;
461    pub fn libvlc_media_player_set_rate(p_mi: *mut libvlc_media_player_t, rate: c_float) -> c_int;
462    pub fn libvlc_media_player_get_state(p_mi: *mut libvlc_media_player_t) -> libvlc_state_t;
463    pub fn libvlc_media_player_get_fps(p_mi: *mut libvlc_media_player_t) -> c_float;
464    pub fn libvlc_media_player_has_vout(p_mi: *mut libvlc_media_player_t) -> c_uint;
465    pub fn libvlc_media_player_is_seekable(p_mi: *mut libvlc_media_player_t) -> c_int;
466    pub fn libvlc_media_player_can_pause(p_mi: *mut libvlc_media_player_t) -> c_int;
467    pub fn libvlc_media_player_program_scrambled(p_mi: *mut libvlc_media_player_t) -> c_int;
468    pub fn libvlc_media_player_next_frame(p_mi: *mut libvlc_media_player_t);
469    pub fn libvlc_media_player_navigate(p_mi: *mut libvlc_media_player_t, navigate: c_uint);
470    pub fn libvlc_media_player_set_video_title_display(
471        p_mi: *mut libvlc_media_player_t, position: libvlc_position_t, timeout: c_uint);
472    pub fn libvlc_track_description_list_release(p_track_description: *mut libvlc_track_description_t);
473    pub fn libvlc_toggle_fullscreen(p_mi: *mut libvlc_media_player_t);
474    pub fn libvlc_set_fullscreen(p_mi: *mut libvlc_media_player_t, b_fullscreen: c_int);
475    pub fn libvlc_get_fullscreen(p_mi: *mut libvlc_media_player_t) -> c_int;
476    pub fn libvlc_video_set_key_input(p_mi: *mut libvlc_media_player_t, on: c_uint);
477    pub fn libvlc_video_set_mouse_input(p_mi: *mut libvlc_media_player_t, on: c_uint);
478    pub fn libvlc_video_get_size(
479        p_mi: *mut libvlc_media_player_t, num: c_uint, px: *mut c_uint, py: *mut c_uint) -> c_int;
480    pub fn libvlc_video_get_cursor(
481        p_mi: *mut libvlc_media_player_t, num: c_uint, px: *mut c_int, py: *mut c_int) -> c_int;
482    pub fn libvlc_video_get_scale(p_mi: *mut libvlc_media_player_t) -> c_float;
483    pub fn libvlc_video_set_scale(p_mi: *mut libvlc_media_player_t, f_factor: c_float);
484    pub fn libvlc_video_get_aspect_ratio(p_mi: *mut libvlc_media_player_t) -> *mut c_char;
485    pub fn libvlc_video_set_aspect_ratio(p_mi: *mut libvlc_media_player_t, psz_aspect: *const c_char);
486    pub fn libvlc_video_get_spu(p_mi: *mut libvlc_media_player_t) -> c_int;
487    pub fn libvlc_video_get_spu_count(p_mi: *mut libvlc_media_player_t) -> c_int;
488    pub fn libvlc_video_get_spu_description(p_mi: *mut libvlc_media_player_t)
489     -> *mut libvlc_track_description_t;
490    pub fn libvlc_video_set_spu(p_mi: *mut libvlc_media_player_t, i_spu: c_int) -> c_int;
491    pub fn libvlc_video_set_subtitle_file(
492        p_mi: *mut libvlc_media_player_t, psz_subtitle: *const c_char) -> c_int;
493    pub fn libvlc_video_get_spu_delay(p_mi: *mut libvlc_media_player_t) -> i64;
494    pub fn libvlc_video_set_spu_delay(
495        p_mi: *mut libvlc_media_player_t, i_delay: i64) -> c_int;
496    pub fn libvlc_video_get_title_description(
497        p_mi: *mut libvlc_media_player_t) -> *mut libvlc_track_description_t;
498    pub fn libvlc_video_get_chapter_description(
499        p_mi: *mut libvlc_media_player_t, i_title: c_int) -> *mut libvlc_track_description_t;
500    pub fn libvlc_video_get_crop_geometry(p_mi: *mut libvlc_media_player_t) -> *mut c_char;
501    pub fn libvlc_video_set_crop_geometry(
502        p_mi: *mut libvlc_media_player_t, psz_geometry: *const c_char);
503    pub fn libvlc_video_get_teletext(p_mi: *mut libvlc_media_player_t) -> c_int;
504    pub fn libvlc_video_set_teletext(p_mi: *mut libvlc_media_player_t, i_page: c_int);
505    pub fn libvlc_toggle_teletext(p_mi: *mut libvlc_media_player_t);
506    pub fn libvlc_video_get_track_count(p_mi: *mut libvlc_media_player_t) -> c_int;
507    pub fn libvlc_video_get_track_description(
508        p_mi: *mut libvlc_media_player_t) -> *mut libvlc_track_description_t;
509    pub fn libvlc_video_get_track(p_mi: *mut libvlc_media_player_t) -> c_int;
510    pub fn libvlc_video_set_track(p_mi: *mut libvlc_media_player_t, i_track: c_int) -> c_int;
511    pub fn libvlc_video_take_snapshot(
512        p_mi: *mut libvlc_media_player_t, num: c_uint, psz_filepath: *const c_char,
513        i_width: c_uint, i_height: c_uint) -> c_int;
514    pub fn libvlc_video_set_deinterlace(p_mi: *mut libvlc_media_player_t, psz_mode: *const c_char);
515    pub fn libvlc_video_get_marquee_int(p_mi: *mut libvlc_media_player_t, option: c_uint) -> c_int;
516    pub fn libvlc_video_get_marquee_string(
517        p_mi: *mut libvlc_media_player_t, option: c_uint) -> *mut c_char;
518    pub fn libvlc_video_set_marquee_int(
519        p_mi: *mut libvlc_media_player_t, option: c_uint, i_val: c_int);
520    pub fn libvlc_video_set_marquee_string(
521        p_mi: *mut libvlc_media_player_t, option: c_uint, psz_text: *const c_char);
522    pub fn libvlc_video_get_logo_int(p_mi: *mut libvlc_media_player_t, option: c_uint) -> c_int;
523    pub fn libvlc_video_set_logo_int(p_mi: *mut libvlc_media_player_t, option: c_uint, value: c_int);
524    pub fn libvlc_video_set_logo_string(
525        p_mi: *mut libvlc_media_player_t, option: c_uint, psz_value: *const c_char);
526    pub fn libvlc_video_get_adjust_int(
527        p_mi: *mut libvlc_media_player_t, option: c_uint) -> c_int;
528    pub fn libvlc_video_set_adjust_int(
529        p_mi: *mut libvlc_media_player_t, option: c_uint, value: c_int);
530    pub fn libvlc_video_get_adjust_float(
531        p_mi: *mut libvlc_media_player_t, option: c_uint) -> c_float;
532    pub fn libvlc_video_set_adjust_float(
533        p_mi: *mut libvlc_media_player_t, option: c_uint, value: c_float);
534    pub fn libvlc_audio_output_list_get(p_instance: *mut libvlc_instance_t)
535     -> *mut libvlc_audio_output_t;
536    pub fn libvlc_audio_output_list_release(p_list: *mut libvlc_audio_output_t);
537    pub fn libvlc_audio_output_set(p_mi: *mut libvlc_media_player_t, psz_name: *const c_char) -> c_int;
538    pub fn libvlc_audio_output_device_enum(
539        mp: *mut libvlc_media_player_t) -> *mut libvlc_audio_output_device_t;
540    pub fn libvlc_audio_output_device_list_get(
541        p_instance: *mut libvlc_instance_t, aout: *const c_char) -> *mut libvlc_audio_output_device_t;
542    pub fn libvlc_audio_output_device_list_release(p_list: *mut libvlc_audio_output_device_t);
543    pub fn libvlc_audio_output_device_set(
544        mp: *mut libvlc_media_player_t, module: *const c_char, device_id: *const c_char);
545    pub fn libvlc_audio_toggle_mute(p_mi: *mut libvlc_media_player_t);
546    pub fn libvlc_audio_get_mute(p_mi: *mut libvlc_media_player_t) -> c_int;
547    pub fn libvlc_audio_set_mute(p_mi: *mut libvlc_media_player_t, status: c_int);
548    pub fn libvlc_audio_get_volume(p_mi: *mut libvlc_media_player_t) -> c_int;
549    pub fn libvlc_audio_set_volume(p_mi: *mut libvlc_media_player_t, i_volume: c_int) -> c_int;
550    pub fn libvlc_audio_get_track_count(p_mi: *mut libvlc_media_player_t) -> c_int;
551    pub fn libvlc_audio_get_track_description(
552        p_mi: *mut libvlc_media_player_t) -> *mut libvlc_track_description_t;
553    pub fn libvlc_audio_get_track(p_mi: *mut libvlc_media_player_t) -> c_int;
554    pub fn libvlc_audio_set_track(p_mi: *mut libvlc_media_player_t, i_track: c_int) -> c_int;
555    pub fn libvlc_audio_get_channel(p_mi: *mut libvlc_media_player_t) -> c_int;
556    pub fn libvlc_audio_set_channel(p_mi: *mut libvlc_media_player_t, channel: c_int) -> c_int;
557    pub fn libvlc_audio_get_delay(p_mi: *mut libvlc_media_player_t) -> i64;
558    pub fn libvlc_audio_set_delay(p_mi: *mut libvlc_media_player_t, i_delay: i64) -> c_int;
559    pub fn libvlc_audio_equalizer_get_preset_count() -> c_uint;
560    pub fn libvlc_audio_equalizer_get_preset_name(u_index: c_uint) -> *const c_char;
561    pub fn libvlc_audio_equalizer_get_band_count() -> c_uint;
562    pub fn libvlc_audio_equalizer_get_band_frequency(u_index: c_uint) -> c_float;
563    pub fn libvlc_audio_equalizer_new() -> *mut libvlc_equalizer_t;
564    pub fn libvlc_audio_equalizer_new_from_preset(u_index: c_uint) -> *mut libvlc_equalizer_t;
565    pub fn libvlc_audio_equalizer_release(p_equalizer: *mut libvlc_equalizer_t);
566    pub fn libvlc_audio_equalizer_set_preamp(
567        p_equalizer: *mut libvlc_equalizer_t, f_preamp: c_float) -> c_int;
568    pub fn libvlc_audio_equalizer_get_preamp(p_equalizer: *mut libvlc_equalizer_t) -> c_float;
569    pub fn libvlc_audio_equalizer_set_amp_at_index(
570        p_equalizer: *mut libvlc_equalizer_t, f_amp: c_float, u_band: c_uint) -> c_int;
571    pub fn libvlc_audio_equalizer_get_amp_at_index(
572        p_equalizer: *mut libvlc_equalizer_t, u_band: c_uint) -> c_float;
573    pub fn libvlc_media_player_set_equalizer(
574        p_mi: *mut libvlc_media_player_t, p_equalizer: *mut libvlc_equalizer_t) -> c_int;
575}
576
577// From libvlc_events.h
578pub use EventType as libvlc_event_e;
579
580#[repr(C)]
581#[derive(Clone, Copy)]
582pub struct libvlc_event_t {
583    pub _type: c_int,
584    pub p_obj: *mut c_void,
585    pub u: libvlc_event_t_types::u,
586}
587
588pub mod libvlc_event_t_types {
589    use super::*;
590    use libc::{c_int, c_char, c_float};
591    #[repr(C)]
592    #[derive(Clone, Copy)]
593    pub union u {
594        pub media_meta_changed: media_meta_changed,
595        pub media_subitem_added: media_subitem_added,
596        pub media_duration_changed: media_duration_changed,
597        pub media_parsed_changed: media_parsed_changed,
598        pub media_freed: media_freed,
599        pub media_state_changed: media_state_changed,
600        pub media_subitemtree_added: media_subitemtree_added,
601        pub media_player_buffering: media_player_buffering,
602        pub media_player_position_changed: media_player_position_changed,
603        pub media_player_time_changed: media_player_time_changed,
604        pub media_player_title_changed: media_player_title_changed,
605        pub media_player_seekable_changed: media_player_seekable_changed,
606        pub media_player_pausable_changed: media_player_pausable_changed,
607        pub media_player_scrambled_changed: media_player_scrambled_changed,
608        pub media_player_vout: media_player_vout,
609        pub media_list_item_added: media_list_item_added,
610        pub media_list_will_add_item: media_list_will_add_item,
611        pub media_list_item_deleted: media_list_item_deleted,
612        pub media_list_will_delete_item: media_list_will_delete_item,
613        pub media_list_player_next_item_set: media_list_player_next_item_set,
614        pub media_player_snapshot_taken: media_player_snapshot_taken,
615        pub media_player_length_changed: media_player_length_changed,
616        pub vlm_media_event: vlm_media_event,
617        pub media_player_media_changed: media_player_media_changed,
618    }
619    #[repr(C)]
620    #[derive(Clone, Copy)]
621    pub struct media_meta_changed {
622        pub meta_type: libvlc_meta_t,
623    }
624    #[repr(C)]
625    #[derive(Clone, Copy)]
626    pub struct media_subitem_added {
627        pub new_child: *mut libvlc_media_t,
628    }
629    #[repr(C)]
630    #[derive(Clone, Copy)]
631    pub struct media_duration_changed {
632        pub new_duration: i64,
633    }
634    #[repr(C)]
635    #[derive(Clone, Copy)]
636    pub struct media_parsed_changed {
637        pub new_status: c_int,
638    }
639    #[repr(C)]
640    #[derive(Clone, Copy)]
641    pub struct media_freed {
642        pub md: *mut libvlc_media_t,
643    }
644    #[repr(C)]
645    #[derive(Clone, Copy)]
646    pub struct media_state_changed {
647        pub new_state: libvlc_state_t,
648    }
649    #[repr(C)]
650    #[derive(Clone, Copy)]
651    pub struct media_subitemtree_added {
652        pub item: *mut libvlc_media_t,
653    }
654    #[repr(C)]
655    #[derive(Clone, Copy)]
656    pub struct media_player_buffering {
657        pub new_cache: c_float,
658    }
659    #[repr(C)]
660    #[derive(Clone, Copy)]
661    pub struct media_player_position_changed {
662        pub new_position: c_float,
663    }
664    #[repr(C)]
665    #[derive(Clone, Copy)]
666    pub struct media_player_time_changed {
667        pub new_time: libvlc_time_t,
668    }
669    #[repr(C)]
670    #[derive(Clone, Copy)]
671    pub struct media_player_title_changed {
672        pub new_titie: c_int,
673    }
674    #[repr(C)]
675    #[derive(Clone, Copy)]
676    pub struct media_player_seekable_changed {
677        pub new_seekable: c_int,
678    }
679    #[repr(C)]
680    #[derive(Clone, Copy)]
681    pub struct media_player_pausable_changed {
682        pub new_pausable: c_int,
683    }
684    #[repr(C)]
685    #[derive(Clone, Copy)]
686    pub struct media_player_scrambled_changed {
687        pub new_scrambled: c_int,
688    }
689    #[repr(C)]
690    #[derive(Clone, Copy)]
691    pub struct media_player_vout {
692        pub new_count: c_int,
693    }
694    #[repr(C)]
695    #[derive(Clone, Copy)]
696    pub struct media_list_item_added {
697        pub item: *mut libvlc_media_t,
698        pub index: c_int,
699    }
700    #[repr(C)]
701    #[derive(Clone, Copy)]
702    pub struct media_list_will_add_item {
703        pub item: *mut libvlc_media_t,
704        pub index: c_int,
705    }
706    #[repr(C)]
707    #[derive(Clone, Copy)]
708    pub struct media_list_item_deleted {
709        pub item: *mut libvlc_media_t,
710        pub index: c_int,
711    }
712    #[repr(C)]
713    #[derive(Clone, Copy)]
714    pub struct media_list_will_delete_item {
715        pub item: *mut libvlc_media_t,
716        pub index: c_int,
717    }
718    #[repr(C)]
719    #[derive(Clone, Copy)]
720    pub struct media_list_player_next_item_set {
721        pub item: *mut libvlc_media_t,
722    }
723    #[repr(C)]
724    #[derive(Clone, Copy)]
725    pub struct media_player_snapshot_taken {
726        pub psz_filename: *mut c_char,
727    }
728    #[repr(C)]
729    #[derive(Clone, Copy)]
730    pub struct media_player_length_changed {
731        pub new_length: libvlc_time_t,
732    }
733    #[repr(C)]
734    #[derive(Clone, Copy)]
735    pub struct vlm_media_event {
736        pub psz_media_name: *mut c_char,
737        pub psz_instance_name: *mut c_char,
738    }
739    #[repr(C)]
740    #[derive(Clone, Copy)]
741    pub struct media_player_media_changed {
742        pub new_media: *mut libvlc_media_t,
743    }
744}
745
746// From libvlc_media_list.h
747
748pub enum libvlc_media_list_t {}
749
750extern "C" {
751    pub fn libvlc_media_list_new(p_instance: *mut libvlc_instance_t) -> *mut libvlc_media_list_t;
752    pub fn libvlc_media_list_release(p_ml: *mut libvlc_media_list_t);
753    pub fn libvlc_media_list_retain(p_ml: *mut libvlc_media_list_t);
754    pub fn libvlc_media_list_set_media(p_ml: *mut libvlc_media_list_t, p_md: *mut libvlc_media_t);
755    pub fn libvlc_media_list_media(p_ml: *mut libvlc_media_list_t) -> *mut libvlc_media_t;
756    pub fn libvlc_media_list_add_media(
757        p_ml: *mut libvlc_media_list_t, p_md: *mut libvlc_media_t) -> c_int;
758    pub fn libvlc_media_list_insert_media(
759        p_ml: *mut libvlc_media_list_t, p_md: *mut libvlc_media_t, i_pos: c_int) -> c_int;
760    pub fn libvlc_media_list_remove_index(p_ml: *mut libvlc_media_list_t, i_pos: c_int) -> c_int;
761    pub fn libvlc_media_list_count(p_ml: *mut libvlc_media_list_t) -> c_int;
762    pub fn libvlc_media_list_item_at_index(
763        p_ml: *mut libvlc_media_list_t, i_pos: c_int) -> *mut libvlc_media_t;
764    pub fn libvlc_media_list_index_of_item(
765        p_ml: *mut libvlc_media_list_t, p_md: *mut libvlc_media_t) -> c_int;
766    pub fn libvlc_media_list_is_readonly(p_ml: *mut libvlc_media_list_t) -> c_int;
767    pub fn libvlc_media_list_lock(p_ml: *mut libvlc_media_list_t);
768    pub fn libvlc_media_list_unlock(p_ml: *mut libvlc_media_list_t);
769    pub fn libvlc_media_list_event_manager(
770        p_ml: *mut libvlc_media_list_t) -> *mut libvlc_event_manager_t;
771}
772
773// From libvlc_media_library.h
774
775pub enum libvlc_media_library_t {}
776
777extern "C" {
778    pub fn libvlc_media_library_new(p_instance: *mut libvlc_instance_t) -> *mut libvlc_media_library_t;
779    pub fn libvlc_media_library_release(p_mlib: *mut libvlc_media_library_t);
780    pub fn libvlc_media_library_retain(p_mlib: *mut libvlc_media_library_t);
781    pub fn libvlc_media_library_load(p_mlib: *mut libvlc_media_library_t) -> c_int;
782    pub fn libvlc_media_library_media_list(
783        p_mlib: *mut libvlc_media_library_t) -> *mut libvlc_media_list_t;
784}
785
786// From libvlc_media_discoverer.h
787
788pub enum libvlc_media_discoverer_t {}
789
790extern "C" {
791    pub fn libvlc_media_discoverer_new_from_name(
792        p_inst: *mut libvlc_instance_t, psz_name: *const c_char) -> *mut libvlc_media_discoverer_t;
793    pub fn libvlc_media_discoverer_release(p_mdis: *mut libvlc_media_discoverer_t);
794    pub fn libvlc_media_discoverer_localized_name(
795        p_mdis: *mut libvlc_media_discoverer_t) -> *mut c_char;
796    pub fn libvlc_media_discoverer_media_list(
797        p_mdis: *mut libvlc_media_discoverer_t) -> *mut libvlc_media_list_t;
798    pub fn libvlc_media_discoverer_event_manager(
799        p_mdis: *mut libvlc_media_discoverer_t) -> *mut libvlc_event_manager_t;
800    pub fn libvlc_media_discoverer_is_running(p_mdis: *mut libvlc_media_discoverer_t) -> c_int;
801}
802
803// From libvlc_vlm.h
804
805extern "C" {
806    pub fn libvlc_vlm_release(p_instance: *mut libvlc_instance_t);
807    pub fn libvlc_vlm_add_broadcast(
808        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char,
809        psz_output: *const c_char, i_options: c_int, ppsz_options: *const *const c_char,
810        b_enabled: c_int, b_loop: c_int) -> c_int;
811    pub fn libvlc_vlm_add_vod(
812        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char,
813        i_options: c_int, ppsz_options: *const *const c_char, b_enabled: c_int,
814        psz_mux: *const c_char) -> c_int;
815    pub fn libvlc_vlm_del_media(
816        p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> c_int;
817    pub fn libvlc_vlm_set_enabled(
818        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, b_enabled: c_int) -> c_int;
819    pub fn libvlc_vlm_set_output(
820        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_output: *const c_char) -> c_int;
821    pub fn libvlc_vlm_set_input(
822        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char) -> c_int;
823    pub fn libvlc_vlm_add_input(
824        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char) -> c_int;
825    pub fn libvlc_vlm_set_loop(
826        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, b_loop: c_int) -> c_int;
827    pub fn libvlc_vlm_set_mux(
828        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_mux: *const c_char) -> c_int;
829    pub fn libvlc_vlm_change_media(
830        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char,
831        psz_output: *const c_char, i_options: c_int, ppsz_options: *const *const c_char,
832        b_enabled: c_int, b_loop: c_int) -> c_int;
833    pub fn libvlc_vlm_play_media(
834        p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> c_int;
835    pub fn libvlc_vlm_stop_media(
836        p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> c_int;
837    pub fn libvlc_vlm_pause_media(
838        p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> c_int;
839    pub fn libvlc_vlm_seek_media(
840        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, f_percentage: c_float) -> c_int;
841    pub fn libvlc_vlm_show_media(
842        p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> *const c_char;
843    pub fn libvlc_vlm_get_media_instance_position(
844        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, i_instance: c_int) -> c_float;
845    pub fn libvlc_vlm_get_media_instance_time(
846        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, i_instance: c_int) -> c_int;
847    pub fn libvlc_vlm_get_media_instance_length(
848        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, i_instance: c_int) -> c_int;
849    pub fn libvlc_vlm_get_media_instance_rate(
850        p_instance: *mut libvlc_instance_t, psz_name: *const c_char, i_instance: c_int) -> c_int;
851    pub fn libvlc_vlm_get_event_manager(
852        p_instance: *mut libvlc_instance_t) -> *mut libvlc_event_manager_t;
853}