control-freak-ide/server/nodejs/vlc-ffi/lib/libvlc.js
plastic-hub-dev-node-saturn 538369cff7 latest
2021-05-12 18:35:18 +02:00

293 lines
16 KiB
JavaScript

var fs = require('fs');
var semver = require('semver');
var FFI = require('ffi');
var ref = require('ref');
var types = require('./libvlc_types');
var MediaStatsPtr = types.MediaStatsPtr;
var ModuleDescriptionPtr = types.ModuleDescriptionPtr;
var TrackDescriptionPtr = types.TrackDescriptionPtr;
var Audio_OutputPtr = types.Audio_OutputPtr;
var Audio_Output_Device_Ptr = types.Audio_Output_Device_Ptr;
var check_library = function(p) {
var l, v;
try {
l = new FFI.Library(p, {libvlc_get_version:['string',[]]});
v = l.libvlc_get_version().split(' ')[0];
if (semver.satisfies(v, '>= 2.0.1'))
return l;
} catch (e) {
l = undefined;
console.error("error",e);
}
return l;
};
exports.initialize = function(paths) {
var i, p, l, v;
for (i = 0; i < paths.length; i++) {
p = paths[i];
if (fs.existsSync(p)) {
l = check_library(p);
if (l)
break;
}
}
if (!l) {
p = 'libvlc';
check_library(p);
}
if (!l)
throw new Error("Failed to find LibVLC >= 2.0.1, make sure it's installed and that you have set LIBRARY_PATHS");
module.exports = new FFI.Library(p, {
libvlc_errmsg: ['string', []],
libvlc_clearerr: ['void', []],
libvlc_vprinterr: ['string', ['string', 'pointer']],
libvlc_printerr: ['string', ['string']],
libvlc_new: ['pointer', ['int32', 'pointer']],
libvlc_release: ['void', ['pointer']],
libvlc_retain: ['void', ['pointer']],
libvlc_add_intf: ['int32', ['pointer', 'string']],
libvlc_set_exit_handler: ['void', ['pointer', 'pointer', 'pointer']],
libvlc_wait: ['void', ['pointer']],
libvlc_set_user_agent: ['void', ['pointer', 'string', 'string']],
libvlc_get_version: ['string', []],
libvlc_get_compiler: ['string', []],
libvlc_get_changeset: ['string', []],
//libvlc_free: ['void', ['pointer']],
libvlc_event_attach: ['int32', ['pointer', 'int32', 'pointer', 'pointer']],
libvlc_event_detach: ['void', ['pointer', 'int32', 'pointer', 'pointer']],
libvlc_event_type_name: ['string', ['int32']],
libvlc_module_description_list_release: ['void', [ModuleDescriptionPtr]],
libvlc_audio_filter_list_get: [ModuleDescriptionPtr, ['pointer']],
libvlc_video_filter_list_get: [ModuleDescriptionPtr, ['pointer']],
libvlc_clock: ['longlong', []],
//libvlc_delay: ['longlong', ['longlong']],
libvlc_media_new_location: ['pointer', ['pointer', 'string']],
libvlc_media_new_path: ['pointer', ['pointer', 'string']],
libvlc_media_new_fd: ['pointer', ['pointer', 'int32']],
libvlc_media_new_as_node: ['pointer', ['pointer', 'string']],
libvlc_media_add_option: ['void', ['pointer', 'string']],
libvlc_media_add_option_flag: ['void', ['pointer', 'string', 'uint32']],
libvlc_media_retain: ['void', ['pointer']],
libvlc_media_release: ['void', ['pointer']],
libvlc_media_get_mrl: ['string', ['pointer']],
libvlc_media_duplicate: ['pointer', ['pointer']],
libvlc_media_get_meta: ['string', ['pointer', 'uint32']],
libvlc_media_set_meta: ['void', ['pointer', 'uint32', 'string']],
libvlc_media_save_meta: ['int32', ['pointer']],
libvlc_media_get_state: ['uint32', ['pointer']],
libvlc_media_get_stats: ['int32', ['pointer', MediaStatsPtr]],
libvlc_media_subitems: ['pointer', ['pointer']],
libvlc_media_event_manager: ['pointer', ['pointer']],
libvlc_media_get_duration: ['longlong', ['pointer']],
libvlc_media_parse: ['void', ['pointer']],
libvlc_media_parse_async: ['void', ['pointer']],
libvlc_media_is_parsed: ['int32', ['pointer']],
libvlc_media_set_user_data: ['void', ['pointer', 'pointer']],
libvlc_media_get_user_data: ['pointer', ['pointer']],
libvlc_media_get_tracks_info: ['int32', ['pointer', 'pointer']],
libvlc_media_player_new: ['pointer', ['pointer']],
libvlc_media_player_new_from_media: ['pointer', ['pointer']],
libvlc_media_player_release: ['void', ['pointer']],
libvlc_media_player_retain: ['void', ['pointer']],
libvlc_media_player_set_media: ['void', ['pointer', 'pointer']],
libvlc_media_player_get_media: ['pointer', ['pointer']],
libvlc_media_player_event_manager: ['pointer', ['pointer']],
libvlc_media_player_is_playing: ['int32', ['pointer']],
libvlc_media_player_play: ['int32', ['pointer']],
libvlc_media_player_set_pause: ['void', ['pointer', 'int32']],
libvlc_media_player_pause: ['void', ['pointer']],
libvlc_media_player_stop: ['void', ['pointer']],
libvlc_video_set_callbacks: ['void', ['pointer', 'pointer', 'pointer', 'pointer', 'pointer']],
libvlc_video_set_format: ['void', ['pointer', 'string', 'uint32', 'uint32', 'uint32']],
libvlc_video_set_format_callbacks: ['void', ['pointer', 'pointer', 'pointer']],
libvlc_media_player_set_nsobject: ['void', ['pointer', 'pointer']],
libvlc_media_player_get_nsobject: ['pointer', ['pointer']],
libvlc_media_player_set_agl: ['void', ['pointer', 'uint32']],
libvlc_media_player_get_agl: ['uint32', ['pointer']],
libvlc_media_player_set_xwindow: ['void', ['pointer', 'uint32']],
libvlc_media_player_get_xwindow: ['uint32', ['pointer']],
libvlc_media_player_set_hwnd: ['void', ['pointer', 'pointer']],
libvlc_media_player_get_hwnd: ['pointer', ['pointer']],
libvlc_audio_set_callbacks: ['void', ['pointer', 'pointer', 'pointer', 'pointer', 'pointer', 'pointer', 'pointer']],
libvlc_audio_set_volume_callback: ['void', ['pointer', 'pointer']],
libvlc_audio_set_format_callbacks: ['void', ['pointer', 'pointer', 'pointer']],
libvlc_audio_set_format: ['void', ['pointer', 'string', 'uint32', 'uint32']],
libvlc_media_player_get_length: ['longlong', ['pointer']],
libvlc_media_player_get_time: ['longlong', ['pointer']],
libvlc_media_player_set_time: ['void', ['pointer', 'longlong']],
libvlc_media_player_get_position: ['float', ['pointer']],
libvlc_media_player_set_position: ['void', ['pointer', 'float']],
libvlc_media_player_set_chapter: ['void', ['pointer', 'int32']],
libvlc_media_player_get_chapter: ['int32', ['pointer']],
libvlc_media_player_get_chapter_count: ['int32', ['pointer']],
libvlc_media_player_will_play: ['int32', ['pointer']],
libvlc_media_player_get_chapter_count_for_title: ['int32', ['pointer', 'int32']],
libvlc_media_player_set_title: ['void', ['pointer', 'int32']],
libvlc_media_player_get_title: ['int32', ['pointer']],
libvlc_media_player_get_title_count: ['int32', ['pointer']],
libvlc_media_player_previous_chapter: ['void', ['pointer']],
libvlc_media_player_next_chapter: ['void', ['pointer']],
libvlc_media_player_get_rate: ['float', ['pointer']],
libvlc_media_player_set_rate: ['int32', ['pointer', 'float']],
libvlc_media_player_get_state: ['uint32', ['pointer']],
libvlc_media_player_get_fps: ['float', ['pointer']],
libvlc_media_player_has_vout: ['uint32', ['pointer']],
libvlc_media_player_is_seekable: ['int32', ['pointer']],
libvlc_media_player_can_pause: ['int32', ['pointer']],
libvlc_media_player_next_frame: ['void', ['pointer']],
libvlc_media_player_navigate: ['void', ['pointer', 'uint32']],
libvlc_track_description_list_release: ['void', ['pointer']],
libvlc_track_description_release: ['void', ['pointer']],
libvlc_toggle_fullscreen: ['void', ['pointer']],
libvlc_set_fullscreen: ['void', ['pointer', 'int32']],
libvlc_get_fullscreen: ['int32', ['pointer']],
libvlc_video_set_key_input: ['void', ['pointer', 'uint32']],
libvlc_video_set_mouse_input: ['void', ['pointer', 'uint32']],
libvlc_video_get_size: ['int32', ['pointer', 'uint32', 'pointer', 'pointer']],
libvlc_video_get_height: ['int32', ['pointer']],
libvlc_video_get_width: ['int32', ['pointer']],
libvlc_video_get_cursor: ['int32', ['pointer', 'uint32', 'pointer', 'pointer']],
libvlc_video_get_scale: ['float', ['pointer']],
libvlc_video_set_scale: ['void', ['pointer', 'float']],
libvlc_video_get_aspect_ratio: ['string', ['pointer']],
libvlc_video_set_aspect_ratio: ['void', ['pointer', 'string']],
libvlc_video_get_spu: ['int32', ['pointer']],
libvlc_video_get_spu_count: ['int32', ['pointer']],
libvlc_video_get_spu_description: ['pointer', ['pointer']],
libvlc_video_set_spu: ['int32', ['pointer', 'uint32']],
libvlc_video_set_subtitle_file: ['int32', ['pointer', 'string']],
libvlc_video_get_spu_delay: ['longlong', ['pointer']],
libvlc_video_set_spu_delay: ['int32', ['pointer', 'longlong']],
libvlc_video_get_title_description: ['pointer', ['pointer']],
libvlc_video_get_chapter_description: ['pointer', ['pointer', 'int32']],
libvlc_video_get_crop_geometry: ['string', ['pointer']],
libvlc_video_set_crop_geometry: ['void', ['pointer', 'string']],
libvlc_video_get_teletext: ['int32', ['pointer']],
libvlc_video_set_teletext: ['void', ['pointer', 'int32']],
libvlc_toggle_teletext: ['void', ['pointer']],
libvlc_video_get_track_count: ['int32', ['pointer']],
libvlc_video_get_track_description: [TrackDescriptionPtr, ['pointer']],
libvlc_video_get_track: ['int32', ['pointer']],
libvlc_video_set_track: ['int32', ['pointer', 'int32']],
libvlc_video_take_snapshot: ['int32', ['pointer', 'uint32', 'string', 'uint32', 'uint32']],
libvlc_video_set_deinterlace: ['void', ['pointer', 'string']],
libvlc_video_get_marquee_int: ['int32', ['pointer', 'uint32']],
libvlc_video_get_marquee_string: ['string', ['pointer', 'uint32']],
libvlc_video_set_marquee_int: ['void', ['pointer', 'uint32', 'int32']],
libvlc_video_set_marquee_string: ['void', ['pointer', 'uint32', 'string']],
libvlc_video_get_logo_int: ['int32', ['pointer', 'uint32']],
libvlc_video_set_logo_int: ['void', ['pointer', 'uint32', 'int32']],
libvlc_video_set_logo_string: ['void', ['pointer', 'uint32', 'string']],
libvlc_video_get_adjust_int: ['int32', ['pointer', 'uint32']],
libvlc_video_set_adjust_int: ['void', ['pointer', 'uint32', 'int32']],
libvlc_video_get_adjust_float: ['float', ['pointer', 'uint32']],
libvlc_video_set_adjust_float: ['void', ['pointer', 'uint32', 'float']],
libvlc_audio_output_list_get: [Audio_OutputPtr, ['pointer']],
//libvlc_audio_output_list_release: ['', ['pointer']],
//libvlc_audio_output_device_list_get: [Audio_Output_Device_Ptr, ['pointer','string']],
//libvlc_audio_output_device_list_release: ['void', ['pointer']],
libvlc_audio_output_list_release: ['void', ['pointer']],
//libvlc_audio_output_device_enum: [Audio_OutputPtr, ['pointer']],
libvlc_audio_output_set: ['int32', ['pointer', 'string']],
libvlc_audio_output_device_count: ['int32', ['pointer', 'string']],
libvlc_audio_output_device_longname: ['string', ['pointer', 'string', 'int32']],
libvlc_audio_output_device_id: ['string', ['pointer', 'string', 'int32']],
libvlc_audio_output_device_set: ['void', ['pointer', 'string', 'string']],
libvlc_audio_output_get_device_type: ['int32', ['pointer']],
libvlc_audio_output_set_device_type: ['void', ['pointer', 'int32']],
libvlc_audio_toggle_mute: ['void', ['pointer']],
libvlc_audio_get_mute: ['int32', ['pointer']],
libvlc_audio_set_mute: ['void', ['pointer', 'int32']],
libvlc_audio_get_volume: ['int32', ['pointer']],
libvlc_audio_set_volume: ['int32', ['pointer', 'int32']],
libvlc_audio_get_track_count: ['int32', ['pointer']],
libvlc_audio_get_track_description: [TrackDescriptionPtr, ['pointer']],
libvlc_audio_get_track: ['int32', ['pointer']],
libvlc_audio_set_track: ['int32', ['pointer', 'int32']],
libvlc_audio_get_channel: ['int32', ['pointer']],
libvlc_audio_set_channel: ['int32', ['pointer', 'int32']],
libvlc_audio_get_delay: ['longlong', ['pointer']],
libvlc_audio_set_delay: ['int32', ['pointer', 'longlong']],
libvlc_media_list_new: ['pointer', ['pointer']],
libvlc_media_list_release: ['void', ['pointer']],
libvlc_media_list_retain: ['void', ['pointer']],
//libvlc_media_list_add_file_content: ['int32', ['pointer', 'string']],
libvlc_media_list_set_media: ['void', ['pointer', 'pointer']],
libvlc_media_list_media: ['pointer', ['pointer']],
libvlc_media_list_add_media: ['int32', ['pointer', 'pointer']],
libvlc_media_list_insert_media: ['int32', ['pointer', 'pointer', 'int32']],
libvlc_media_list_remove_index: ['int32', ['pointer', 'int32']],
libvlc_media_list_count: ['int32', ['pointer']],
libvlc_media_list_item_at_index: ['pointer', ['pointer', 'int32']],
libvlc_media_list_index_of_item: ['int32', ['pointer', 'pointer']],
libvlc_media_list_is_readonly: ['int32', ['pointer']],
libvlc_media_list_lock: ['void', ['pointer']],
libvlc_media_list_unlock: ['void', ['pointer']],
libvlc_media_list_event_manager: ['pointer', ['pointer']],
libvlc_media_list_player_new: ['pointer', ['pointer']],
libvlc_media_list_player_release: ['void', ['pointer']],
libvlc_media_list_player_retain: ['void', ['pointer']],
libvlc_media_list_player_event_manager: ['pointer', ['pointer']],
libvlc_media_list_player_set_media_player: ['void', ['pointer', 'pointer']],
libvlc_media_list_player_set_media_list: ['void', ['pointer', 'pointer']],
libvlc_media_list_player_play: ['void', ['pointer']],
libvlc_media_list_player_pause: ['void', ['pointer']],
libvlc_media_list_player_is_playing: ['int32', ['pointer']],
libvlc_media_list_player_get_state: ['uint32', ['pointer']],
libvlc_media_list_player_play_item_at_index: ['int32', ['pointer', 'int32']],
libvlc_media_list_player_play_item: ['int32', ['pointer', 'pointer']],
libvlc_media_list_player_stop: ['void', ['pointer']],
libvlc_media_list_player_next: ['int32', ['pointer']],
libvlc_media_list_player_previous: ['int32', ['pointer']],
libvlc_media_list_player_set_playback_mode: ['void', ['pointer', 'uint32']],
libvlc_media_library_new: ['pointer', ['pointer']],
libvlc_media_library_release: ['void', ['pointer']],
libvlc_media_library_retain: ['void', ['pointer']],
libvlc_media_library_load: ['int32', ['pointer']],
libvlc_media_library_media_list: ['pointer', ['pointer']],
libvlc_media_discoverer_new_from_name: ['pointer', ['pointer', 'string']],
libvlc_media_discoverer_release: ['void', ['pointer']],
libvlc_media_discoverer_localized_name: ['string', ['pointer']],
libvlc_media_discoverer_media_list: ['pointer', ['pointer']],
libvlc_media_discoverer_event_manager: ['pointer', ['pointer']],
libvlc_media_discoverer_is_running: ['int32', ['pointer']],
libvlc_vlm_release: ['void', ['pointer']],
libvlc_vlm_add_broadcast: ['int32', ['pointer', 'string', 'string', 'string', 'int32', 'pointer', 'int32', 'int32']],
libvlc_vlm_add_vod: ['int32', ['pointer', 'string', 'string', 'int32', 'pointer', 'int32', 'string']],
libvlc_vlm_del_media: ['int32', ['pointer', 'string']],
libvlc_vlm_set_enabled: ['int32', ['pointer', 'string', 'int32']],
libvlc_vlm_set_output: ['int32', ['pointer', 'string', 'string']],
libvlc_vlm_set_input: ['int32', ['pointer', 'string', 'string']],
libvlc_vlm_add_input: ['int32', ['pointer', 'string', 'string']],
libvlc_vlm_set_loop: ['int32', ['pointer', 'string', 'int32']],
libvlc_vlm_set_mux: ['int32', ['pointer', 'string', 'string']],
libvlc_vlm_change_media: ['int32', ['pointer', 'string', 'string', 'string', 'int32', 'pointer', 'int32', 'int32']],
libvlc_vlm_play_media: ['int32', ['pointer', 'string']],
libvlc_vlm_stop_media: ['int32', ['pointer', 'string']],
libvlc_vlm_pause_media: ['int32', ['pointer', 'string']],
libvlc_vlm_seek_media: ['int32', ['pointer', 'string', 'float']],
libvlc_vlm_show_media: ['string', ['pointer', 'string']],
libvlc_vlm_get_media_instance_position: ['float', ['pointer', 'string', 'int32']],
libvlc_vlm_get_media_instance_time: ['int32', ['pointer', 'string', 'int32']],
libvlc_vlm_get_media_instance_length: ['int32', ['pointer', 'string', 'int32']],
libvlc_vlm_get_media_instance_rate: ['int32', ['pointer', 'string', 'int32']],
libvlc_vlm_get_event_manager: ['pointer', ['pointer']],
libvlc_playlist_play: ['void', ['pointer', 'int32', 'int32', 'pointer']]
});
return module.exports;
};