1 /*****************************************************************************
2 * LibVlc.java: VLC Java Bindings JNA Glue
3 *****************************************************************************
4 * Copyright (C) 1998-2008 the VideoLAN team
6 * Authors: Filippo Carone <filippo@carone.org>
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
24 *****************************************************************************/
26 package org.videolan.jvlc.internal;
28 import com.sun.jna.Callback;
29 import com.sun.jna.Library;
30 import com.sun.jna.Native;
31 import com.sun.jna.NativeLong;
32 import com.sun.jna.Platform;
33 import com.sun.jna.Pointer;
34 import com.sun.jna.PointerType;
35 import com.sun.jna.Structure;
36 import com.sun.jna.Union;
39 public interface LibVlc extends Library
41 LibVlc INSTANCE = (LibVlc) Native.loadLibrary(Platform.isWindows()? "libvlc" : "vlc", LibVlc.class);
43 LibVlc SYNC_INSTANCE = (LibVlc) Native.synchronizedLibrary(INSTANCE);
45 public static class libvlc_exception_t extends Structure
50 public static class libvlc_log_message_t extends Structure
53 public int sizeof_msg; /* sizeof() of message structure, must be filled in by user */
55 public int i_severity; /* 0=INFO, 1=ERR, 2=WARN, 3=DBG */
57 public String psz_type; /* module type */
59 public String psz_name; /* module name */
61 public String psz_header; /* optional header */
63 public String psz_message; /* message */
66 public static class libvlc_event_t extends Structure
73 public event_type_specific event_type_specific;
77 public class media_meta_changed extends Structure
80 public Pointer meta_type;
83 public class media_subitem_added extends Structure
86 public LibVlcMedia new_child;
89 public class media_duration_changed extends Structure
92 public NativeLong new_duration;
95 public class media_preparsed_changed extends Structure
98 public int new_status;
101 public class media_freed extends Structure
104 public LibVlcMedia md;
107 public class media_state_changed extends Structure
110 // @todo: check this one
111 public int new_state;
116 public class media_player_position_changed extends Structure
119 public float new_position;
122 public class media_player_time_changed extends Structure
125 // @todo: check this one
126 public long new_time;
129 public class media_player_title_changed extends Structure
131 public int new_title;
134 public class media_player_seekable_changed extends Structure
136 public NativeLong new_seekable;
139 public class media_player_pausable_changed extends Structure
141 public NativeLong new_pausable;
145 public class media_list_item_added extends Structure
148 public LibVlcMedia item;
153 public class media_list_will_add_item extends Structure
156 public LibVlcMedia item;
161 public class media_list_item_deleted extends Structure
164 public LibVlcMedia item;
169 public class media_list_will_delete_item extends Structure
172 public LibVlcMedia item;
177 /* media list view */
178 public class media_list_view_item_added extends Structure
181 public LibVlcMedia item;
186 public class media_list_view_will_add_item extends Structure
189 public LibVlcMedia item;
194 public class media_list_view_item_deleted extends Structure
197 public LibVlcMedia item;
202 public class media_list_view_will_delete_item extends Structure
205 public LibVlcMedia item;
210 public class media_list_player_next_item_set extends Structure
212 public LibVlcMedia item;
215 public class media_player_snapshot_taken extends Structure
217 public String psz_filename;
220 public class media_player_length_changed extends Structure
222 // @todo: check the type
223 public long new_length;
226 public class vlm_media_event extends Structure
228 public String psz_media_name;
229 public String psz_instance_name;
232 public class event_type_specific extends Union
235 public media_meta_changed media_meta_changed;
237 public media_subitem_added media_subitem_added;
239 public media_duration_changed media_duration_changed;
241 public media_preparsed_changed media_preparsed_changed;
243 public media_freed media_freed;
245 public media_state_changed media_state_changed;
247 public media_player_position_changed media_player_position_changed;
249 public media_player_time_changed media_player_time_changed;
251 public media_player_title_changed media_player_title_changed;
253 public media_player_seekable_changed media_player_seekable_changed;
255 public media_player_pausable_changed media_player_pausable_changed;
257 public media_list_item_added media_list_item_added;
259 public media_list_will_add_item media_list_will_add_item;
261 public media_list_item_deleted media_list_item_deleted;
263 public media_list_will_delete_item media_list_will_delete_item;
265 public media_list_view_item_added media_list_view_item_added;
267 public media_list_view_will_add_item media_list_view_will_add_item;
269 public media_list_view_item_deleted media_list_view_item_deleted;
271 public media_list_view_will_delete_item media_list_view_will_delete_item;
273 public media_list_player_next_item_set media_list_player_next_item_set;
275 public media_player_snapshot_taken media_player_snapshot_taken;
277 public media_player_length_changed media_player_length_changed;
279 public vlm_media_event vlm_media_event;
282 public class LibVlcInstance extends PointerType
286 public class LibVlcMedia extends PointerType
290 public class LibVlcMediaPlayer extends PointerType
294 public class LibVlcMediaList extends PointerType
298 public class LibVlcMediaListPlayer extends PointerType
302 public class LibVlcEventManager extends PointerType
306 public class LibVlcLog extends PointerType
310 public class LibVlcLogIterator extends PointerType
314 // exception handling
315 void libvlc_exception_init(libvlc_exception_t exception);
317 int libvlc_exception_raised(final libvlc_exception_t exception);
319 void libvlc_exception_raise(libvlc_exception_t exception, String format, Object... args);
321 void libvlc_exception_clear(libvlc_exception_t exception);
323 String libvlc_exception_get_message(libvlc_exception_t exception);
326 LibVlcInstance libvlc_new(int argc, String[] argv, libvlc_exception_t exception);
328 void libvlc_release(LibVlcInstance libvlc_instance_t);
330 void libvlc_add_intf(LibVlcInstance libvlc_instance_t, String name, libvlc_exception_t exception);
332 void libvlc_wait(LibVlcInstance libvlc_instance_t);
334 String libvlc_get_version();
336 String libvlc_get_compiler();
338 String libvlc_get_changeset();
342 void libvlc_media_player_set_hwnd(LibVlcMediaPlayer mediaplayer_instance, long drawable, libvlc_exception_t exception);
344 long libvlc_media_player_get_hwnd(LibVlcMediaPlayer mediaplayer_instance);
346 void libvlc_media_player_set_xwindow(LibVlcMediaPlayer mediaplayer_instance, long drawable, libvlc_exception_t exception);
348 long libvlc_media_player_get_xwindow(LibVlcMediaPlayer mediaplayer_instance);
350 void libvlc_toggle_fullscreen(LibVlcMediaPlayer libvlc_instance);
352 void libvlc_set_fullscreen(LibVlcMediaPlayer instance, int fullscreen, libvlc_exception_t exception);
354 int libvlc_get_fullscreen(LibVlcMediaPlayer instance, libvlc_exception_t exception);
356 int libvlc_video_get_height(LibVlcMediaPlayer instance, libvlc_exception_t exception);
358 int libvlc_video_get_width(LibVlcMediaPlayer instance, libvlc_exception_t exception);
360 String libvlc_video_get_aspect_ration(LibVlcMediaPlayer instance, libvlc_exception_t exception);
362 void libvlc_video_set_aspect_ration(LibVlcMediaPlayer instance, String ratio, libvlc_exception_t exception);
364 int libvlc_video_get_spu(LibVlcMediaPlayer instance, libvlc_exception_t exception);
366 int libvlc_video_set_spu(LibVlcMediaPlayer instance, int spu, libvlc_exception_t exception);
368 String libvlc_video_get_crop_geometry(LibVlcMediaPlayer instance, libvlc_exception_t exception);
370 void libvlc_video_set_crop_geometry(LibVlcMediaPlayer instance, String geometry, libvlc_exception_t exception);
372 void libvlc_video_take_snapshot(LibVlcMediaPlayer instance, String filename, int width, int height,
373 libvlc_exception_t exception);
375 void libvlc_video_destroy(LibVlcMediaPlayer instance, libvlc_exception_t exception);
377 void libvlc_video_resize(LibVlcMediaPlayer instance, int width, int height, libvlc_exception_t exception);
379 void libvlc_video_reparent(LibVlcMediaPlayer instance, long drawable, libvlc_exception_t exception);
381 void libvlc_video_set_size(LibVlcInstance instance, int width, int height, libvlc_exception_t exception);
385 void libvlc_audio_toggle_mute(LibVlcInstance instance, libvlc_exception_t exception);
387 void libvlc_audio_set_mute(LibVlcInstance instance, int mute, libvlc_exception_t exception);
389 int libvlc_audio_get_mute(LibVlcInstance instance, libvlc_exception_t exception);
391 int libvlc_audio_get_volume(LibVlcInstance instance, libvlc_exception_t exception);
393 int libvlc_audio_set_volume(LibVlcInstance instance, int volume, libvlc_exception_t exception);
395 int libvlc_audio_get_track_count(LibVlcMediaPlayer mediaInstance, libvlc_exception_t exception);
397 int libvlc_audio_get_track(LibVlcMediaPlayer mediaInstance, libvlc_exception_t exception);
399 void libvlc_audio_set_track(LibVlcMediaPlayer mediaInstance, int channel, libvlc_exception_t exception);
401 int libvlc_audio_get_channel(LibVlcInstance instance, libvlc_exception_t exception);
403 void libvlc_audio_set_channel(LibVlcInstance instance, int channel, libvlc_exception_t exception);
405 int libvlc_audio_output_device_count(LibVlcInstance instance, libvlc_exception_t exception);
407 String libvlc_audio_output_device_id(LibVlcInstance instance, String audio_output, int i_device);
409 String libvlc_audio_output_device_longname(LibVlcInstance instance, String audio_output, int i_device);
411 String libvlc_audio_output_device_set(LibVlcInstance instance, String audio_output, String device_name, String deviceId);
413 int libvlc_audio_output_get_device_type(LibVlcInstance instance, libvlc_exception_t exception);
417 void libvlc_playlist_loop(LibVlcInstance instance, int loop, libvlc_exception_t exception);
419 void libvlc_playlist_play(LibVlcInstance instance, int itemIndex, int optionsCount, String[] options,
420 libvlc_exception_t exception);
422 void libvlc_playlist_pause(LibVlcInstance instance, libvlc_exception_t exception);
424 void libvlc_playlist_stop(LibVlcInstance instance, libvlc_exception_t exception);
426 int libvlc_playlist_isplaying(LibVlcInstance instance, libvlc_exception_t exception);
428 int libvlc_playlist_items_count(LibVlcInstance instance, libvlc_exception_t exception);
430 void libvlc_playlist_next(LibVlcInstance instance, libvlc_exception_t exception);
432 void libvlc_playlist_prev(LibVlcInstance instance, libvlc_exception_t exception);
434 void libvlc_playlist_clear(LibVlcInstance instance, libvlc_exception_t exception);
436 int libvlc_playlist_add(LibVlcInstance instance, String uri, String name, libvlc_exception_t exception);
438 int libvlc_playlist_delete_item(LibVlcInstance instance, int itemIndex, libvlc_exception_t exception);
440 LibVlcMediaPlayer libvlc_playlist_get_media_player(LibVlcInstance instance, libvlc_exception_t exception);
442 int libvlc_media_player_is_seekable(LibVlcMediaPlayer instance, libvlc_exception_t exception);
444 int libvlc_media_player_can_pause(LibVlcMediaPlayer instance, libvlc_exception_t exception);
448 LibVlcMedia libvlc_media_new(LibVlcInstance libvlc_instance, String mrl, libvlc_exception_t exception);
450 void libvlc_media_add_option(LibVlcMedia media, String option, libvlc_exception_t exception);
452 LibVlcMedia libvlc_media_duplicate(LibVlcMedia media);
454 String libvlc_media_get_mrl(LibVlcMedia media);
456 void libvlc_media_retain(LibVlcMedia media);
458 void libvlc_media_release(LibVlcMedia media);
460 int libvlc_media_get_state(LibVlcMedia media, libvlc_exception_t exception);
462 LibVlcMediaList libvlc_media_subitems(LibVlcMedia media, libvlc_exception_t exception);
464 LibVlcEventManager libvlc_media_event_manager(LibVlcMedia media, libvlc_exception_t exception);
466 long libvlc_get_duration(LibVlcMedia media, libvlc_exception_t exception);
468 int libvlc_media_is_preparsed(LibVlcMedia media, libvlc_exception_t exception);
472 LibVlcMediaPlayer libvlc_media_player_new(LibVlcInstance instance, libvlc_exception_t exception);
474 LibVlcMediaPlayer libvlc_media_player_new_from_media(LibVlcMedia media, libvlc_exception_t exception);
476 void libvlc_media_player_play(LibVlcMediaPlayer media_player, libvlc_exception_t exception);
478 void libvlc_media_player_pause(LibVlcMediaPlayer media_player, libvlc_exception_t exception);
480 void libvlc_media_player_stop(LibVlcMediaPlayer media_player, libvlc_exception_t exception);
482 void libvlc_media_player_set_drawable(LibVlcMediaPlayer libvlc_media_player, int drawable,
483 libvlc_exception_t exception);
485 long libvlc_media_player_get_length(LibVlcMediaPlayer instance, libvlc_exception_t exception);
487 long libvlc_media_player_get_time(LibVlcMediaPlayer instance, libvlc_exception_t exception);
489 void libvlc_media_player_set_time(LibVlcMediaPlayer instance, long time, libvlc_exception_t exception);
491 float libvlc_media_player_get_position(LibVlcMediaPlayer instance, libvlc_exception_t exception);
493 void libvlc_media_player_set_position(LibVlcMediaPlayer instance, float position, libvlc_exception_t exception);
495 int libvlc_media_player_is_playing(LibVlcMediaPlayer instance, libvlc_exception_t exception);
497 int libvlc_media_player_will_play(LibVlcMediaPlayer instance, libvlc_exception_t exception);
499 void libvlc_media_player_set_rate(LibVlcMediaPlayer instance, float rate, libvlc_exception_t exception);
501 float libvlc_media_player_get_rate(LibVlcMediaPlayer instance, libvlc_exception_t exception);
503 int libvlc_media_player_has_vout(LibVlcMediaPlayer instance2, libvlc_exception_t exception);
505 float libvlc_media_player_get_fps(LibVlcMediaPlayer instance2, libvlc_exception_t exception);
507 void libvlc_media_player_release(LibVlcMediaPlayer instance);
509 LibVlcEventManager libvlc_media_player_event_manager(LibVlcMediaPlayer media_player, libvlc_exception_t exception);
513 LibVlcMediaList libvlc_media_list_new(LibVlcInstance libvlc_instance, libvlc_exception_t exception);
515 void libvlc_media_list_release(LibVlcMediaList libVlcMediaList);
517 void libvlc_media_list_add_file_content(LibVlcMediaList libvlc_media_list, String fileName,
518 libvlc_exception_t exception);
520 void libvlc_media_list_set_media(LibVlcMediaList libvlc_media_list, LibVlcMedia libvlc_media,
521 libvlc_exception_t exception);
523 LibVlcMedia libvlc_media_list_media(LibVlcMediaList libvlc_media_list, libvlc_exception_t exception);
525 void libvlc_media_list_add_media(LibVlcMediaList libvlc_media_list, LibVlcMedia libvlc_media,
526 libvlc_exception_t exception);
528 void libvlc_media_list_insert_media(LibVlcMediaList libvlc_media_list, LibVlcMedia libvlc_media,
529 int position, libvlc_exception_t exception);
531 void libvlc_media_list_remove_index(LibVlcMediaList libvlc_media_list, int position, libvlc_exception_t exception);
533 int libvlc_media_list_count(LibVlcMediaList libvlc_media_list, libvlc_exception_t exception);
535 LibVlcMedia libvlc_media_list_item_at_index(LibVlcMediaList libvlc_media_list, int position,
536 libvlc_exception_t exception);
538 int libvlc_media_list_index_of_item(LibVlcMediaList libvlc_media_list, LibVlcMedia libvlc_media,
539 libvlc_exception_t exception);
541 int libvlc_media_list_is_readonly(LibVlcMediaList libvlc_media_list);
543 LibVlcEventManager libvlc_media_list_event_manager(LibVlcMediaList libvlc_media_list, libvlc_exception_t exception);
545 // libvlc_media_list_player
547 LibVlcMediaListPlayer libvlc_media_list_player_new(LibVlcInstance libvlc_media_player, libvlc_exception_t exception);
549 void libvlc_media_list_player_release(LibVlcMediaListPlayer libvlc_media_list_player);
551 void libvlc_media_list_player_set_media_player(LibVlcMediaListPlayer libvlc_media_list_player,
552 LibVlcMediaPlayer libvlc_media_player, libvlc_exception_t exception);
554 void libvlc_media_list_player_set_media_list(LibVlcMediaListPlayer libvlc_media_list_player,
555 LibVlcMediaList libvlc_media_list, libvlc_exception_t exception);
557 void libvlc_media_list_player_play(LibVlcMediaListPlayer libvlc_media_list_player, libvlc_exception_t exception);
559 void libvlc_media_list_player_pause(LibVlcMediaListPlayer libvlc_media_list_player, libvlc_exception_t exception);
561 int libvlc_media_list_player_is_playing(LibVlcMediaListPlayer libvlc_media_list_player, libvlc_exception_t exception);
563 int libvlc_media_list_player_get_state(LibVlcMediaListPlayer libvlc_media_list_player, libvlc_exception_t exception);
565 void libvlc_media_list_player_play_item_at_index(LibVlcMediaListPlayer libvlc_media_list_player, int position,
566 libvlc_exception_t exception);
568 void libvlc_media_list_player_play_item(LibVlcMediaListPlayer libvlc_media_list_player,
569 LibVlcMedia libvlc_media, libvlc_exception_t exception);
571 void libvlc_media_list_player_stop(LibVlcMediaListPlayer libvlc_media_list_player, libvlc_exception_t exception);
573 void libvlc_media_list_player_next(LibVlcMediaListPlayer libvlc_media_list_player, libvlc_exception_t exception);
577 void libvlc_vlm_add_broadcast(LibVlcInstance p_instance, String psz_name, String psz_input, String psz_output,
578 int i_options, String[] ppsz_options, int b_enabled, int b_loop, libvlc_exception_t p_e);
580 void libvlc_vlm_add_vod(LibVlcInstance p_instance, String psz_name, String psz_input, int i_options,
581 String[] ppsz_options, int b_enabled, String psz_mux, libvlc_exception_t p_e);
583 void libvlc_vlm_del_media(LibVlcInstance p_instance, String psz_name, libvlc_exception_t p_e);
585 void libvlc_vlm_set_enabled(LibVlcInstance p_instance, String psz_name, int b_enabled, libvlc_exception_t p_e);
587 void libvlc_vlm_set_output(LibVlcInstance p_instance, String psz_name, String psz_output, libvlc_exception_t p_e);
589 void libvlc_vlm_set_input(LibVlcInstance p_instance, String psz_name, String psz_input, libvlc_exception_t p_e);
591 void libvlc_vlm_add_input(LibVlcInstance p_instance, String psz_name, String psz_input, libvlc_exception_t p_e);
593 void libvlc_vlm_set_loop(LibVlcInstance p_instance, String psz_name, int b_loop, libvlc_exception_t p_e);
595 void libvlc_vlm_set_mux(LibVlcInstance p_instance, String psz_name, String psz_mux, libvlc_exception_t p_e);
597 void libvlc_vlm_change_media(LibVlcInstance p_instance, String psz_name, String psz_input, String psz_output,
598 int i_options, String[] ppsz_options, int b_enabled, int b_loop, libvlc_exception_t p_e);
600 void libvlc_vlm_play_media(LibVlcInstance p_instance, String psz_name, libvlc_exception_t p_e);
602 void libvlc_vlm_stop_media(LibVlcInstance p_instance, String psz_name, libvlc_exception_t p_e);
604 void libvlc_vlm_pause_media(LibVlcInstance p_instance, String psz_name, libvlc_exception_t p_e);
606 void libvlc_vlm_seek_media(LibVlcInstance p_instance, String psz_name, float f_percentage, libvlc_exception_t p_e);
608 String libvlc_vlm_show_media(LibVlcInstance p_instance, String psz_name, libvlc_exception_t p_e);
610 void libvlc_vlm_release(LibVlcInstance p_instance, libvlc_exception_t p_e);
614 public static interface LibVlcCallback extends Callback
617 void callback(libvlc_event_t libvlc_event, Pointer userData);
620 void libvlc_event_attach(LibVlcEventManager event_manager, int event_type, LibVlcCallback callback,
621 Pointer userData, libvlc_exception_t exception);
623 void libvlc_event_detach(LibVlcEventManager event_manager, int event_type, LibVlcCallback callback,
624 Pointer userData, libvlc_exception_t excecption);
626 void libvlc_toggle_fullscreen(LibVlcMediaPlayer instance, libvlc_exception_t exception);
630 int libvlc_get_log_verbosity(LibVlcInstance p_instance, libvlc_exception_t p_e);
632 void libvlc_set_log_verbosity(LibVlcInstance p_instance, int level, libvlc_exception_t p_e);
634 LibVlcLog libvlc_log_open(LibVlcInstance p_instance, libvlc_exception_t p_e);
636 void libvlc_log_close(LibVlcLog p_log, libvlc_exception_t p_e);
638 int libvlc_log_count(LibVlcLog p_log, libvlc_exception_t p_e);
640 void libvlc_log_clear(LibVlcLog p_log, libvlc_exception_t p_e);
642 LibVlcLogIterator libvlc_log_get_iterator(LibVlcLog p_log, libvlc_exception_t p_e);
644 void libvlc_log_iterator_free(LibVlcLogIterator p_iter, libvlc_exception_t p_e);
646 int libvlc_log_iterator_has_next(LibVlcLogIterator p_iter, libvlc_exception_t p_e);
648 libvlc_log_message_t libvlc_log_iterator_next(LibVlcLogIterator p_iter, libvlc_log_message_t p_buffer,
649 libvlc_exception_t p_e);