Merge remote-tracking branch 'origin/use-bindgen' into 2-bindgen
commit
536e9dff19
|
@ -12,4 +12,5 @@
|
||||||
|
|
||||||
# Generated by Cargo
|
# Generated by Cargo
|
||||||
/target/
|
/target/
|
||||||
|
/libvlc-sys/target
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
|
|
|
@ -4,7 +4,9 @@ version = "0.3.0"
|
||||||
authors = ["T. Okubo <t.okubo.rx78+github@gmail.com>"]
|
authors = ["T. Okubo <t.okubo.rx78+github@gmail.com>"]
|
||||||
|
|
||||||
description = "Rust bindings for libVLC media framework."
|
description = "Rust bindings for libVLC media framework."
|
||||||
keywords = ["libVLC", "bindings"]
|
keywords = ["libVLC", "bindings", "multimedia"]
|
||||||
|
categories = ["external-ffi-bindings", "multimedia"]
|
||||||
|
documentation = "https://docs.rs/vlc-rs"
|
||||||
repository = "https://github.com/garkimasera/vlc-rs"
|
repository = "https://github.com/garkimasera/vlc-rs"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
[package]
|
||||||
|
name = "libvlc-sys"
|
||||||
|
version = "0.2.0"
|
||||||
|
authors = ["T. Okubo <t.okubo.rx78+devel@gmail.com>"]
|
||||||
|
|
||||||
|
description = "libVLC C API"
|
||||||
|
keywords = ["libVLC", "bindings"]
|
||||||
|
categories = ["external-ffi-bindings", "multimedia"]
|
||||||
|
repository = "https://github.com/garkimasera/vlc-rs"
|
||||||
|
license = "MIT"
|
||||||
|
edition = "2018"
|
||||||
|
build = "build.rs"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
name = "vlc_sys"
|
||||||
|
crate-type = ["rlib"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
libc = "0.2"
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
bindgen = "0.52"
|
||||||
|
pkg-config = "0.3"
|
|
@ -0,0 +1,34 @@
|
||||||
|
use bindgen;
|
||||||
|
|
||||||
|
use std::env;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("cargo:rerun-if-changed=wrapper.h");
|
||||||
|
|
||||||
|
let mut bindings = bindgen::Builder::default()
|
||||||
|
.header("wrapper.h")
|
||||||
|
// For no_std
|
||||||
|
.use_core()
|
||||||
|
// Use libc
|
||||||
|
.ctypes_prefix("libc")
|
||||||
|
// Whitelist
|
||||||
|
.whitelist_type(".*vlc.*")
|
||||||
|
.whitelist_function(".*vlc.*")
|
||||||
|
.whitelist_var(".*vlc.*")
|
||||||
|
.whitelist_function("vsnprintf")
|
||||||
|
.parse_callbacks(Box::new(bindgen::CargoCallbacks));
|
||||||
|
|
||||||
|
// Set header include paths
|
||||||
|
let pkg_config_library = pkg_config::Config::new().probe("libvlc").unwrap();
|
||||||
|
for include_path in &pkg_config_library.include_paths {
|
||||||
|
bindings = bindings.clang_arg(format!("-I{}", include_path.display()));
|
||||||
|
}
|
||||||
|
|
||||||
|
let bindings = bindings.generate().expect("Unable to generate bindings");
|
||||||
|
|
||||||
|
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
|
||||||
|
bindings
|
||||||
|
.write_to_file(out_path.join("bindings.rs"))
|
||||||
|
.expect("Couldn't write bindings!");
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#![allow(non_upper_case_globals)]
|
||||||
|
#![allow(non_camel_case_types)]
|
||||||
|
#![allow(non_snake_case)]
|
||||||
|
#![no_std]
|
||||||
|
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
|
|
@ -0,0 +1 @@
|
||||||
|
#include <vlc/vlc.h>
|
|
@ -2,7 +2,7 @@
|
||||||
// This file is part of vlc-rs.
|
// This file is part of vlc-rs.
|
||||||
// Licensed under the MIT license, see the LICENSE file.
|
// Licensed under the MIT license, see the LICENSE file.
|
||||||
|
|
||||||
use crate::sys;
|
use vlc_sys as sys;
|
||||||
use crate::MediaPlayer;
|
use crate::MediaPlayer;
|
||||||
use crate::TrackDescription;
|
use crate::TrackDescription;
|
||||||
use crate::tools::from_cstr;
|
use crate::tools::from_cstr;
|
||||||
|
|
25
src/core.rs
25
src/core.rs
|
@ -5,10 +5,11 @@
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use std::ffi::{CString, CStr};
|
use std::ffi::CString;
|
||||||
use std::i32;
|
use std::i32;
|
||||||
|
use std::convert::TryInto;
|
||||||
use libc::{c_void, c_char, c_int};
|
use libc::{c_void, c_char, c_int};
|
||||||
use crate::sys;
|
use vlc_sys as sys;
|
||||||
use crate::tools::{to_cstr, from_cstr, from_cstr_ref};
|
use crate::tools::{to_cstr, from_cstr, from_cstr_ref};
|
||||||
use crate::enums::*;
|
use crate::enums::*;
|
||||||
|
|
||||||
|
@ -135,7 +136,7 @@ impl Instance {
|
||||||
let cb: Box<Box<dyn Fn(LogLevel, Log, Cow<str>) + Send + 'static>> = Box::new(Box::new(f));
|
let cb: Box<Box<dyn Fn(LogLevel, Log, Cow<str>) + Send + 'static>> = Box::new(Box::new(f));
|
||||||
|
|
||||||
unsafe{
|
unsafe{
|
||||||
sys::libvlc_log_set(self.ptr, logging_cb, Box::into_raw(cb) as *mut _);
|
sys::libvlc_log_set(self.ptr, Some(logging_cb), Box::into_raw(cb) as *mut _);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,19 +154,16 @@ impl Drop for Instance {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
fn vsnprintf(s: *mut c_char, n: usize, fmt: *const c_char, arg: sys::va_list);
|
|
||||||
}
|
|
||||||
const BUF_SIZE: usize = 1024; // Write log message to the buffer by vsnprintf.
|
const BUF_SIZE: usize = 1024; // Write log message to the buffer by vsnprintf.
|
||||||
unsafe extern "C" fn logging_cb(
|
unsafe extern "C" fn logging_cb(
|
||||||
data: *mut c_void, level: c_int, ctx: *const sys::libvlc_log_t, fmt: *const c_char, args: sys::va_list) {
|
data: *mut c_void, level: c_int, ctx: *const sys::libvlc_log_t, fmt: *const c_char, args: *mut sys::__va_list_tag) {
|
||||||
|
|
||||||
let f: &Box<dyn Fn(LogLevel, Log, Cow<str>) + Send + 'static> = ::std::mem::transmute(data);
|
let f: &Box<dyn Fn(LogLevel, Log, Cow<str>) + Send + 'static> = ::std::mem::transmute(data);
|
||||||
let mut buf: [c_char; BUF_SIZE] = [0; BUF_SIZE];
|
let mut buf: [c_char; BUF_SIZE] = [0; BUF_SIZE];
|
||||||
|
|
||||||
vsnprintf(buf.as_mut_ptr(), BUF_SIZE, fmt, args);
|
sys::vsnprintf(buf.as_mut_ptr(), BUF_SIZE.try_into().unwrap(), fmt, args);
|
||||||
|
|
||||||
f(::std::mem::transmute(level), Log{ptr: ctx}, from_cstr_ref(buf.as_ptr()).unwrap());
|
f((level as u32).into(), Log{ptr: ctx}, from_cstr_ref(buf.as_ptr()).unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// List of module description.
|
/// List of module description.
|
||||||
|
@ -335,7 +333,7 @@ impl<'a> EventManager<'a> {
|
||||||
|
|
||||||
let result = unsafe{
|
let result = unsafe{
|
||||||
sys::libvlc_event_attach(
|
sys::libvlc_event_attach(
|
||||||
self.ptr, event_type as i32, event_manager_callback,
|
self.ptr, event_type as i32, Some(event_manager_callback),
|
||||||
Box::into_raw(callback) as *mut c_void)
|
Box::into_raw(callback) as *mut c_void)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -360,12 +358,12 @@ unsafe extern "C" fn event_manager_callback(pe: *const sys::libvlc_event_t, data
|
||||||
|
|
||||||
// Convert c-style libvlc_event_t to Event
|
// Convert c-style libvlc_event_t to Event
|
||||||
fn conv_event(pe: *const sys::libvlc_event_t) -> Event {
|
fn conv_event(pe: *const sys::libvlc_event_t) -> Event {
|
||||||
let event_type: EventType = unsafe{ ::std::mem::transmute((*pe)._type) };
|
let event_type: EventType = (unsafe{ (*pe).type_ } as u32).into();
|
||||||
|
|
||||||
match event_type {
|
match event_type {
|
||||||
EventType::MediaMetaChanged => {
|
EventType::MediaMetaChanged => {
|
||||||
unsafe{
|
unsafe{
|
||||||
Event::MediaMetaChanged((*pe).u.media_meta_changed.meta_type)
|
Event::MediaMetaChanged((*pe).u.media_meta_changed.meta_type.into())
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
EventType::MediaSubItemAdded => {
|
EventType::MediaSubItemAdded => {
|
||||||
|
@ -386,7 +384,8 @@ fn conv_event(pe: *const sys::libvlc_event_t) -> Event {
|
||||||
},
|
},
|
||||||
EventType::MediaStateChanged => {
|
EventType::MediaStateChanged => {
|
||||||
unsafe{
|
unsafe{
|
||||||
Event::MediaStateChanged((*pe).u.media_state_changed.new_state)
|
let new_state: sys::libvlc_state_t = (*pe).u.media_state_changed.new_state.try_into().unwrap();
|
||||||
|
Event::MediaStateChanged(new_state.into())
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
EventType::MediaSubItemTreeAdded => {
|
EventType::MediaSubItemTreeAdded => {
|
||||||
|
|
305
src/enums.rs
305
src/enums.rs
|
@ -2,158 +2,171 @@
|
||||||
// This file is part of vlc-rs.
|
// This file is part of vlc-rs.
|
||||||
// Licensed under the MIT license, see the LICENSE file.
|
// Licensed under the MIT license, see the LICENSE file.
|
||||||
|
|
||||||
#[repr(C)]
|
use vlc_sys as sys;
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
|
|
||||||
pub enum LogLevel {
|
macro_rules! define_enum {
|
||||||
Debug = 0,
|
($enum_name:ident, $original_type:ident; $($value:ident = $c_value:ident,)*) => {
|
||||||
Notice = 2,
|
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
|
||||||
Warning = 3,
|
#[repr(C)]
|
||||||
Error = 4,
|
pub enum $enum_name {
|
||||||
|
$(
|
||||||
|
$value = sys::$c_value as isize,
|
||||||
|
)*
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<sys::$original_type> for $enum_name {
|
||||||
|
fn from(a: sys::$original_type) -> Self {
|
||||||
|
match a {
|
||||||
|
$(
|
||||||
|
sys::$c_value => Self::$value,
|
||||||
|
)*
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(C)]
|
define_enum!(
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
|
LogLevel, libvlc_log_level;
|
||||||
pub enum Meta {
|
Debug = libvlc_log_level_LIBVLC_DEBUG,
|
||||||
Title,
|
Dotice = libvlc_log_level_LIBVLC_NOTICE,
|
||||||
Artist,
|
Warning = libvlc_log_level_LIBVLC_WARNING,
|
||||||
Genre,
|
Error = libvlc_log_level_LIBVLC_ERROR,
|
||||||
Copyright,
|
);
|
||||||
Album,
|
|
||||||
TrackNumber,
|
|
||||||
Description,
|
|
||||||
Rating,
|
|
||||||
Date,
|
|
||||||
Setting,
|
|
||||||
URL,
|
|
||||||
Language,
|
|
||||||
NowPlaying,
|
|
||||||
Publisher,
|
|
||||||
EncodedBy,
|
|
||||||
ArtworkURL,
|
|
||||||
TrackID,
|
|
||||||
TrackTotal,
|
|
||||||
Director,
|
|
||||||
Season,
|
|
||||||
Episode,
|
|
||||||
ShowName,
|
|
||||||
Actors
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
define_enum!(
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
|
Meta, libvlc_meta_t;
|
||||||
pub enum State {
|
Title = libvlc_meta_t_libvlc_meta_Title,
|
||||||
NothingSpecial = 0,
|
Artist = libvlc_meta_t_libvlc_meta_Artist,
|
||||||
Opening,
|
Genre = libvlc_meta_t_libvlc_meta_Genre,
|
||||||
Buffering,
|
Copyright = libvlc_meta_t_libvlc_meta_Copyright,
|
||||||
Playing,
|
Album = libvlc_meta_t_libvlc_meta_Album,
|
||||||
Paused,
|
TrackNumber = libvlc_meta_t_libvlc_meta_TrackNumber,
|
||||||
Stopped,
|
Description = libvlc_meta_t_libvlc_meta_Description,
|
||||||
Ended,
|
Rating = libvlc_meta_t_libvlc_meta_Rating,
|
||||||
Error
|
Date = libvlc_meta_t_libvlc_meta_Date,
|
||||||
}
|
Setting = libvlc_meta_t_libvlc_meta_Setting,
|
||||||
|
URL = libvlc_meta_t_libvlc_meta_URL,
|
||||||
|
Language = libvlc_meta_t_libvlc_meta_Language,
|
||||||
|
NowPlaying = libvlc_meta_t_libvlc_meta_NowPlaying,
|
||||||
|
Publisher = libvlc_meta_t_libvlc_meta_Publisher,
|
||||||
|
EncodedBy = libvlc_meta_t_libvlc_meta_EncodedBy,
|
||||||
|
ArtworkURL = libvlc_meta_t_libvlc_meta_ArtworkURL,
|
||||||
|
TrackID = libvlc_meta_t_libvlc_meta_TrackID,
|
||||||
|
TrackTotal = libvlc_meta_t_libvlc_meta_TrackTotal,
|
||||||
|
Director = libvlc_meta_t_libvlc_meta_Director,
|
||||||
|
Season = libvlc_meta_t_libvlc_meta_Season,
|
||||||
|
Episode = libvlc_meta_t_libvlc_meta_Episode,
|
||||||
|
ShowName = libvlc_meta_t_libvlc_meta_ShowName,
|
||||||
|
Actors = libvlc_meta_t_libvlc_meta_Actors,
|
||||||
|
);
|
||||||
|
|
||||||
#[repr(C)]
|
define_enum!(
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
|
State, libvlc_state_t;
|
||||||
pub enum TrackType {
|
NothingSpecial = libvlc_state_t_libvlc_NothingSpecial,
|
||||||
Unknown = -1,
|
Opening = libvlc_state_t_libvlc_Opening,
|
||||||
Audio = 0,
|
Buffering = libvlc_state_t_libvlc_Buffering,
|
||||||
Video = 1,
|
Playing = libvlc_state_t_libvlc_Playing,
|
||||||
Text = 2
|
Paused = libvlc_state_t_libvlc_Paused,
|
||||||
}
|
Stopped = libvlc_state_t_libvlc_Stopped,
|
||||||
|
Ended = libvlc_state_t_libvlc_Ended,
|
||||||
|
Error = libvlc_state_t_libvlc_Error,
|
||||||
|
);
|
||||||
|
|
||||||
#[repr(C)]
|
define_enum!(
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
|
TrackType, libvlc_track_type_t;
|
||||||
pub enum Position {
|
Unknown = libvlc_track_type_t_libvlc_track_unknown,
|
||||||
Disable = -1,
|
Audio = libvlc_track_type_t_libvlc_track_audio,
|
||||||
Center,
|
Video = libvlc_track_type_t_libvlc_track_video,
|
||||||
Left,
|
Text = libvlc_track_type_t_libvlc_track_text,
|
||||||
Right,
|
);
|
||||||
Top,
|
|
||||||
TopLeft,
|
|
||||||
TopRight,
|
|
||||||
Bottom,
|
|
||||||
BottomLeft,
|
|
||||||
BottomRight,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
define_enum!(
|
||||||
#[derive(Clone, Copy, Debug)]
|
Position, libvlc_position_t;
|
||||||
pub enum VideoAdjustOption {
|
Disable = libvlc_position_t_libvlc_position_disable,
|
||||||
Enable = 0,
|
Center = libvlc_position_t_libvlc_position_center,
|
||||||
Contrast,
|
Left = libvlc_position_t_libvlc_position_left,
|
||||||
Brightness,
|
Right = libvlc_position_t_libvlc_position_right,
|
||||||
Hue,
|
Top = libvlc_position_t_libvlc_position_top,
|
||||||
Saturation,
|
TopLeft = libvlc_position_t_libvlc_position_top_left,
|
||||||
Gamma
|
TopRight = libvlc_position_t_libvlc_position_top_right,
|
||||||
}
|
Bottom = libvlc_position_t_libvlc_position_bottom,
|
||||||
|
BottomLeft = libvlc_position_t_libvlc_position_bottom_left,
|
||||||
|
BottomRight = libvlc_position_t_libvlc_position_bottom_right,
|
||||||
|
);
|
||||||
|
|
||||||
// #[repr(C)]
|
define_enum!(
|
||||||
// #[derive(Clone, Copy, PartialEq, Eq, Debug)]
|
VideoAdjustOption, libvlc_video_adjust_option_t;
|
||||||
// pub enum ParseFlag {
|
Enable = libvlc_video_adjust_option_t_libvlc_adjust_Enable,
|
||||||
// ParseLocal,
|
Contrast = libvlc_video_adjust_option_t_libvlc_adjust_Contrast,
|
||||||
// ParseNetwork,
|
Brightness = libvlc_video_adjust_option_t_libvlc_adjust_Brightness,
|
||||||
// FetchLocal,
|
Hue = libvlc_video_adjust_option_t_libvlc_adjust_Hue,
|
||||||
// FetchNetwork,
|
Saturation = libvlc_video_adjust_option_t_libvlc_adjust_Saturation,
|
||||||
// }
|
Gamma = libvlc_video_adjust_option_t_libvlc_adjust_Gamma,
|
||||||
|
);
|
||||||
|
|
||||||
#[repr(C)]
|
// libvlc 3.0
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
|
// define_enum!(
|
||||||
pub enum EventType {
|
// ParseFlag, libvlc_media_parse_flag_t;
|
||||||
MediaMetaChanged = 0,
|
// DoInteract = libvlc_media_parse_flag_t_libvlc_media_do_interact,
|
||||||
MediaSubItemAdded,
|
// FetchLocal = libvlc_media_parse_flag_t_libvlc_media_fetch_local,
|
||||||
MediaDurationChanged,
|
// FetchNetwork = libvlc_media_parse_flag_t_libvlc_media_fetch_network,
|
||||||
MediaParsedChanged,
|
// ParseLocal = libvlc_media_parse_flag_t_libvlc_media_parse_local,
|
||||||
MediaFreed,
|
// ParseNetwork = libvlc_media_parse_flag_t_libvlc_media_parse_network,
|
||||||
MediaStateChanged,
|
// );
|
||||||
MediaSubItemTreeAdded,
|
|
||||||
|
|
||||||
MediaPlayerMediaChanged = 0x100,
|
define_enum!(
|
||||||
MediaPlayerNothingSpecial,
|
EventType, libvlc_event_e;
|
||||||
MediaPlayerOpening,
|
MediaMetaChanged = libvlc_event_e_libvlc_MediaMetaChanged,
|
||||||
MediaPlayerBuffering,
|
MediaSubItemAdded = libvlc_event_e_libvlc_MediaSubItemAdded,
|
||||||
MediaPlayerPlaying,
|
MediaDurationChanged = libvlc_event_e_libvlc_MediaDurationChanged,
|
||||||
MediaPlayerPaused,
|
MediaParsedChanged = libvlc_event_e_libvlc_MediaParsedChanged,
|
||||||
MediaPlayerStopped,
|
MediaFreed = libvlc_event_e_libvlc_MediaFreed,
|
||||||
MediaPlayerForward,
|
MediaStateChanged = libvlc_event_e_libvlc_MediaStateChanged,
|
||||||
MediaPlayerBackward,
|
MediaSubItemTreeAdded = libvlc_event_e_libvlc_MediaSubItemTreeAdded,
|
||||||
MediaPlayerEndReached,
|
MediaPlayerMediaChanged = libvlc_event_e_libvlc_MediaPlayerMediaChanged,
|
||||||
MediaPlayerEncounteredError,
|
MediaPlayerNothingSpecial = libvlc_event_e_libvlc_MediaPlayerNothingSpecial,
|
||||||
MediaPlayerTimeChanged,
|
MediaPlayerOpening = libvlc_event_e_libvlc_MediaPlayerOpening,
|
||||||
MediaPlayerPositionChanged,
|
MediaPlayerBuffering = libvlc_event_e_libvlc_MediaPlayerBuffering,
|
||||||
MediaPlayerSeekableChanged,
|
MediaPlayerPlaying = libvlc_event_e_libvlc_MediaPlayerPlaying,
|
||||||
MediaPlayerPausableChanged,
|
MediaPlayerPaused = libvlc_event_e_libvlc_MediaPlayerPaused,
|
||||||
MediaPlayerTitleChanged,
|
MediaPlayerStopped = libvlc_event_e_libvlc_MediaPlayerStopped,
|
||||||
MediaPlayerSnapshotTaken,
|
MediaPlayerForward = libvlc_event_e_libvlc_MediaPlayerForward,
|
||||||
MediaPlayerLengthChanged,
|
MediaPlayerBackward = libvlc_event_e_libvlc_MediaPlayerBackward,
|
||||||
MediaPlayerVout,
|
MediaPlayerEndReached = libvlc_event_e_libvlc_MediaPlayerEndReached,
|
||||||
MediaPlayerScrambledChanged,
|
MediaPlayerEncounteredError = libvlc_event_e_libvlc_MediaPlayerEncounteredError,
|
||||||
|
MediaPlayerTimeChanged = libvlc_event_e_libvlc_MediaPlayerTimeChanged,
|
||||||
MediaListItemAdded = 0x200,
|
MediaPlayerPositionChanged = libvlc_event_e_libvlc_MediaPlayerPositionChanged,
|
||||||
MediaListWillAddItem,
|
MediaPlayerSeekableChanged = libvlc_event_e_libvlc_MediaPlayerSeekableChanged,
|
||||||
MediaListItemDeleted,
|
MediaPlayerPausableChanged = libvlc_event_e_libvlc_MediaPlayerPausableChanged,
|
||||||
MediaListWillDeleteItem,
|
MediaPlayerTitleChanged = libvlc_event_e_libvlc_MediaPlayerTitleChanged,
|
||||||
|
MediaPlayerSnapshotTaken = libvlc_event_e_libvlc_MediaPlayerSnapshotTaken,
|
||||||
MediaListViewItemAdded = 0x300,
|
MediaPlayerLengthChanged = libvlc_event_e_libvlc_MediaPlayerLengthChanged,
|
||||||
MediaListViewWillAddItem,
|
MediaPlayerVout = libvlc_event_e_libvlc_MediaPlayerVout,
|
||||||
MediaListViewItemDeleted,
|
MediaPlayerScrambledChanged = libvlc_event_e_libvlc_MediaPlayerScrambledChanged,
|
||||||
MediaListViewWillDeleteItem,
|
MediaListItemAdded = libvlc_event_e_libvlc_MediaListItemAdded,
|
||||||
|
MediaListWillAddItem = libvlc_event_e_libvlc_MediaListWillAddItem,
|
||||||
MediaListPlayerPlayed = 0x400,
|
MediaListItemDeleted = libvlc_event_e_libvlc_MediaListItemDeleted,
|
||||||
MediaListPlayerNextItemSet,
|
MediaListWillDeleteItem = libvlc_event_e_libvlc_MediaListWillDeleteItem,
|
||||||
MediaListPlayerStopped,
|
MediaListViewItemAdded = libvlc_event_e_libvlc_MediaListViewItemAdded,
|
||||||
|
MediaListViewWillAddItem = libvlc_event_e_libvlc_MediaListViewWillAddItem,
|
||||||
MediaDiscovererStarted = 0x500,
|
MediaListViewItemDeleted = libvlc_event_e_libvlc_MediaListViewItemDeleted,
|
||||||
MediaDiscovererEnded,
|
MediaListViewWillDeleteItem = libvlc_event_e_libvlc_MediaListViewWillDeleteItem,
|
||||||
|
MediaListPlayerPlayed = libvlc_event_e_libvlc_MediaListPlayerPlayed,
|
||||||
VlmMediaAdded = 0x600,
|
MediaListPlayerNextItemSet = libvlc_event_e_libvlc_MediaListPlayerNextItemSet,
|
||||||
VlmMediaRemoved,
|
MediaListPlayerStopped = libvlc_event_e_libvlc_MediaListPlayerStopped,
|
||||||
VlmMediaChanged,
|
MediaDiscovererStarted = libvlc_event_e_libvlc_MediaDiscovererStarted,
|
||||||
VlmMediaInstanceStarted,
|
MediaDiscovererEnded = libvlc_event_e_libvlc_MediaDiscovererEnded,
|
||||||
VlmMediaInstanceStopped,
|
VlmMediaAdded = libvlc_event_e_libvlc_VlmMediaAdded,
|
||||||
VlmMediaInstanceStatusInit,
|
VlmMediaRemoved = libvlc_event_e_libvlc_VlmMediaRemoved,
|
||||||
VlmMediaInstanceStatusOpening,
|
VlmMediaChanged = libvlc_event_e_libvlc_VlmMediaChanged,
|
||||||
VlmMediaInstanceStatusPlaying,
|
VlmMediaInstanceStarted = libvlc_event_e_libvlc_VlmMediaInstanceStarted,
|
||||||
VlmMediaInstanceStatusPause,
|
VlmMediaInstanceStopped = libvlc_event_e_libvlc_VlmMediaInstanceStopped,
|
||||||
VlmMediaInstanceStatusEnd,
|
VlmMediaInstanceStatusInit = libvlc_event_e_libvlc_VlmMediaInstanceStatusInit,
|
||||||
VlmMediaInstanceStatusError
|
VlmMediaInstanceStatusOpening = libvlc_event_e_libvlc_VlmMediaInstanceStatusOpening,
|
||||||
}
|
VlmMediaInstanceStatusPlaying = libvlc_event_e_libvlc_VlmMediaInstanceStatusPlaying,
|
||||||
|
VlmMediaInstanceStatusPause = libvlc_event_e_libvlc_VlmMediaInstanceStatusPause,
|
||||||
|
VlmMediaInstanceStatusEnd = libvlc_event_e_libvlc_VlmMediaInstanceStatusEnd,
|
||||||
|
VlmMediaInstanceStatusError = libvlc_event_e_libvlc_VlmMediaInstanceStatusError,
|
||||||
|
);
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
|
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
|
||||||
pub mod sys;
|
|
||||||
|
|
||||||
mod tools;
|
mod tools;
|
||||||
mod core;
|
mod core;
|
||||||
mod media;
|
mod media;
|
||||||
|
|
19
src/media.rs
19
src/media.rs
|
@ -2,7 +2,7 @@
|
||||||
// This file is part of vlc-rs.
|
// This file is part of vlc-rs.
|
||||||
// Licensed under the MIT license, see the LICENSE file.
|
// Licensed under the MIT license, see the LICENSE file.
|
||||||
|
|
||||||
use crate::sys;
|
use vlc_sys as sys;
|
||||||
use crate::{Instance, EventManager};
|
use crate::{Instance, EventManager};
|
||||||
use crate::enums::{State, Meta, TrackType};
|
use crate::enums::{State, Meta, TrackType};
|
||||||
use crate::tools::{to_cstr, from_cstr, path_to_cstr};
|
use crate::tools::{to_cstr, from_cstr, path_to_cstr};
|
||||||
|
@ -78,7 +78,7 @@ impl Media {
|
||||||
/// If the media has not yet been parsed this will return None.
|
/// If the media has not yet been parsed this will return None.
|
||||||
pub fn get_meta(&self, meta: Meta) -> Option<String> {
|
pub fn get_meta(&self, meta: Meta) -> Option<String> {
|
||||||
unsafe{
|
unsafe{
|
||||||
let p_str = sys::libvlc_media_get_meta(self.ptr, meta);
|
let p_str = sys::libvlc_media_get_meta(self.ptr, meta as u32);
|
||||||
let s = from_cstr(p_str);
|
let s = from_cstr(p_str);
|
||||||
sys::libvlc_free(p_str as *mut ::libc::c_void);
|
sys::libvlc_free(p_str as *mut ::libc::c_void);
|
||||||
s
|
s
|
||||||
|
@ -89,7 +89,7 @@ impl Media {
|
||||||
/// (This function will not save the meta, call save_meta in order to save the meta)
|
/// (This function will not save the meta, call save_meta in order to save the meta)
|
||||||
pub fn set_meta(&self, meta: Meta, value: &str) {
|
pub fn set_meta(&self, meta: Meta, value: &str) {
|
||||||
unsafe{
|
unsafe{
|
||||||
sys::libvlc_media_set_meta(self.ptr, meta, to_cstr(value).as_ptr());
|
sys::libvlc_media_set_meta(self.ptr, meta as u32, to_cstr(value).as_ptr());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ impl Media {
|
||||||
|
|
||||||
/// Get current state of media descriptor object.
|
/// Get current state of media descriptor object.
|
||||||
pub fn state(&self) -> State {
|
pub fn state(&self) -> State {
|
||||||
unsafe{ sys::libvlc_media_get_state(self.ptr) }
|
unsafe{ sys::libvlc_media_get_state(self.ptr).into() }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get duration (in ms) of media descriptor object item.
|
/// Get duration (in ms) of media descriptor object item.
|
||||||
|
@ -138,16 +138,17 @@ impl Media {
|
||||||
|
|
||||||
for i in 0..n {
|
for i in 0..n {
|
||||||
let p = p_track.offset(i as isize);
|
let p = p_track.offset(i as isize);
|
||||||
let type_specific_data = match (**p).i_type {
|
let i_type: TrackType = (**p).i_type.into();
|
||||||
|
let type_specific_data = match i_type {
|
||||||
TrackType::Audio => {
|
TrackType::Audio => {
|
||||||
let audio = (**p).audio();
|
let audio = (**p).__bindgen_anon_1.audio;
|
||||||
MediaTrackUnion::Audio(AudioTrack{
|
MediaTrackUnion::Audio(AudioTrack{
|
||||||
channels: (*audio).i_channels,
|
channels: (*audio).i_channels,
|
||||||
rate: (*audio).i_rate,
|
rate: (*audio).i_rate,
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
TrackType::Video => {
|
TrackType::Video => {
|
||||||
let video = (**p).video();
|
let video = (**p).__bindgen_anon_1.video;
|
||||||
MediaTrackUnion::Video(VideoTrack{
|
MediaTrackUnion::Video(VideoTrack{
|
||||||
height: (*video).i_height,
|
height: (*video).i_height,
|
||||||
width: (*video).i_width,
|
width: (*video).i_width,
|
||||||
|
@ -158,7 +159,7 @@ impl Media {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
TrackType::Text => {
|
TrackType::Text => {
|
||||||
let subtitle = (**p).subtitle();
|
let subtitle = (**p).__bindgen_anon_1.subtitle;
|
||||||
MediaTrackUnion::Subtitle(SubtitleTrack{
|
MediaTrackUnion::Subtitle(SubtitleTrack{
|
||||||
encoding: from_cstr((*subtitle).psz_encoding)
|
encoding: from_cstr((*subtitle).psz_encoding)
|
||||||
})
|
})
|
||||||
|
@ -169,7 +170,7 @@ impl Media {
|
||||||
codec: (**p).i_codec,
|
codec: (**p).i_codec,
|
||||||
original_fourcc: (**p).i_original_fourcc,
|
original_fourcc: (**p).i_original_fourcc,
|
||||||
id: (**p).i_id,
|
id: (**p).i_id,
|
||||||
track_type: (**p).i_type,
|
track_type: (**p).i_type.into(),
|
||||||
profile: (**p).i_profile,
|
profile: (**p).i_profile,
|
||||||
level: (**p).i_level,
|
level: (**p).i_level,
|
||||||
bitrate: (**p).i_bitrate,
|
bitrate: (**p).i_bitrate,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// This file is part of vlc-rs.
|
// This file is part of vlc-rs.
|
||||||
// Licensed under the MIT license, see the LICENSE file.
|
// Licensed under the MIT license, see the LICENSE file.
|
||||||
|
|
||||||
use crate::sys;
|
use vlc_sys as sys;
|
||||||
use crate::{Instance, MediaList};
|
use crate::{Instance, MediaList};
|
||||||
|
|
||||||
pub struct MediaLibrary {
|
pub struct MediaLibrary {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// This file is part of vlc-rs.
|
// This file is part of vlc-rs.
|
||||||
// Licensed under the MIT license, see the LICENSE file.
|
// Licensed under the MIT license, see the LICENSE file.
|
||||||
|
|
||||||
use crate::sys;
|
use vlc_sys as sys;
|
||||||
use crate::{Instance, Media, EventManager};
|
use crate::{Instance, Media, EventManager};
|
||||||
|
|
||||||
pub struct MediaList {
|
pub struct MediaList {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// This file is part of vlc-rs.
|
// This file is part of vlc-rs.
|
||||||
// Licensed under the MIT license, see the LICENSE file.
|
// Licensed under the MIT license, see the LICENSE file.
|
||||||
|
|
||||||
use crate::sys;
|
use vlc_sys as sys;
|
||||||
use crate::Instance;
|
use crate::Instance;
|
||||||
use crate::Media;
|
use crate::Media;
|
||||||
use crate::EventManager;
|
use crate::EventManager;
|
||||||
|
@ -267,7 +267,7 @@ impl MediaPlayer {
|
||||||
|
|
||||||
/// Get current movie state.
|
/// Get current movie state.
|
||||||
pub fn state(&self) -> State {
|
pub fn state(&self) -> State {
|
||||||
unsafe{ sys::libvlc_media_player_get_state(self.ptr) }
|
unsafe{ sys::libvlc_media_player_get_state(self.ptr) }.into()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// How many video outputs does this media player have?
|
/// How many video outputs does this media player have?
|
||||||
|
@ -311,7 +311,7 @@ impl MediaPlayer {
|
||||||
|
|
||||||
/// Set if, and how, the video title will be shown when media is played.
|
/// Set if, and how, the video title will be shown when media is played.
|
||||||
pub fn set_video_title_display(&self, position: Position, timeout: u32) {
|
pub fn set_video_title_display(&self, position: Position, timeout: u32) {
|
||||||
unsafe{ sys::libvlc_media_player_set_video_title_display(self.ptr, position, timeout); }
|
unsafe{ sys::libvlc_media_player_set_video_title_display(self.ptr, position as i32, timeout); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns raw pointer
|
/// Returns raw pointer
|
||||||
|
|
853
src/sys.rs
853
src/sys.rs
|
@ -1,853 +0,0 @@
|
||||||
// Copyright (c) 2015 T. Okubo
|
|
||||||
// This file is part of vlc-rs.
|
|
||||||
// Licensed under the MIT license, see the LICENSE file.
|
|
||||||
|
|
||||||
#![allow(non_camel_case_types, non_upper_case_globals)]
|
|
||||||
|
|
||||||
#[link(name = "vlc")]
|
|
||||||
extern "C" {}
|
|
||||||
|
|
||||||
use libc::{c_void, c_int, c_uint, c_char, c_float, uintptr_t, FILE};
|
|
||||||
|
|
||||||
pub type c_bool = u8;
|
|
||||||
|
|
||||||
pub type libvlc_event_type_t = c_int;
|
|
||||||
|
|
||||||
// From libvlc_structures.h
|
|
||||||
pub enum libvlc_instance_t {}
|
|
||||||
pub enum libvlc_log_iterator_t {}
|
|
||||||
|
|
||||||
pub type libvlc_time_t = i64;
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_log_message_t {
|
|
||||||
pub i_severity: c_int,
|
|
||||||
pub psz_type: *const c_char,
|
|
||||||
pub psz_name: *const c_char,
|
|
||||||
pub psz_header: *const c_char,
|
|
||||||
pub psz_message: *const c_char,
|
|
||||||
}
|
|
||||||
|
|
||||||
// From libvlc.h
|
|
||||||
pub enum libvlc_event_manager_t {}
|
|
||||||
pub enum libvlc_log_t {}
|
|
||||||
pub enum vlc_log_t {}
|
|
||||||
|
|
||||||
pub type libvlc_callback_t = unsafe extern "C" fn(*const libvlc_event_t, *mut c_void);
|
|
||||||
pub type va_list = *mut c_void;
|
|
||||||
pub type libvlc_log_cb = unsafe extern "C" fn(*mut c_void, c_int, *const libvlc_log_t, *const c_char, va_list);
|
|
||||||
|
|
||||||
pub use crate::enums::LogLevel as libvlc_log_level;
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_module_description_t
|
|
||||||
{
|
|
||||||
pub psz_name: *const c_char,
|
|
||||||
pub psz_shortname: *const c_char,
|
|
||||||
pub psz_longname: *const c_char,
|
|
||||||
pub psz_help: *const c_char,
|
|
||||||
pub p_next: *mut libvlc_module_description_t,
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
pub fn libvlc_errmsg() -> *const c_char;
|
|
||||||
pub fn libvlc_clearerr();
|
|
||||||
pub fn libvlc_new(argc: c_int, argv: *const *const c_char) -> *mut libvlc_instance_t;
|
|
||||||
pub fn libvlc_release(p_instance: *mut libvlc_instance_t);
|
|
||||||
pub fn libvlc_retain(p_instance: *mut libvlc_instance_t);
|
|
||||||
pub fn libvlc_add_intf(p_instance: *mut libvlc_instance_t, name: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_set_exit_handler(
|
|
||||||
p_instance: *mut libvlc_instance_t,
|
|
||||||
cb: extern "C" fn(*mut c_void), opaque: *mut c_void);
|
|
||||||
pub fn libvlc_wait(p_instance: *mut libvlc_instance_t);
|
|
||||||
pub fn libvlc_set_user_agent(
|
|
||||||
p_instance: *mut libvlc_instance_t, name: *const c_char, http: *const c_char);
|
|
||||||
pub fn libvlc_set_app_id(
|
|
||||||
p_instance: *mut libvlc_instance_t, id: *const c_char, version: *const c_char,
|
|
||||||
icon: *const c_char);
|
|
||||||
pub fn libvlc_get_version() -> *const c_char;
|
|
||||||
pub fn libvlc_get_compiler() -> *const c_char;
|
|
||||||
pub fn libvlc_get_changeset() -> *const c_char;
|
|
||||||
pub fn libvlc_free(ptr: *mut c_void);
|
|
||||||
pub fn libvlc_event_attach(
|
|
||||||
p_event_manager: *mut libvlc_event_manager_t, i_event_type: libvlc_event_type_t,
|
|
||||||
f_callback: libvlc_callback_t, user_data: *mut c_void) -> c_int;
|
|
||||||
pub fn libvlc_event_type_name(event_type: libvlc_event_type_t) -> *const c_char;
|
|
||||||
pub fn libvlc_log_get_context(
|
|
||||||
ctx: *const libvlc_log_t, module: *const *const c_char, file: *const *const c_char,
|
|
||||||
line: *mut c_uint);
|
|
||||||
pub fn libvlc_log_get_object(
|
|
||||||
ctx: *const libvlc_log_t, name: *const *const c_char,
|
|
||||||
header: *const *const c_char, id: *mut uintptr_t);
|
|
||||||
pub fn libvlc_log_unset(_: *mut libvlc_instance_t);
|
|
||||||
pub fn libvlc_log_set(instance: *mut libvlc_instance_t, cb: libvlc_log_cb, data: *mut c_void);
|
|
||||||
pub fn libvlc_log_set_file(_: *mut libvlc_instance_t, stream: *mut FILE);
|
|
||||||
pub fn libvlc_module_description_list_release(p_list: *mut libvlc_module_description_t);
|
|
||||||
pub fn libvlc_audio_filter_list_get(
|
|
||||||
p_instance: *mut libvlc_instance_t) -> *mut libvlc_module_description_t;
|
|
||||||
pub fn libvlc_video_filter_list_get(
|
|
||||||
p_instance: *mut libvlc_instance_t) -> *mut libvlc_module_description_t;
|
|
||||||
pub fn libvlc_clock() -> i64;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub unsafe fn libvlc_delay(pts: i64) -> i64 {
|
|
||||||
pts - libvlc_clock()
|
|
||||||
}
|
|
||||||
|
|
||||||
// From libvlc_media.h
|
|
||||||
pub enum libvlc_media_t {}
|
|
||||||
|
|
||||||
pub use crate::enums::Meta as libvlc_meta_t;
|
|
||||||
pub use crate::enums::State as libvlc_state_t;
|
|
||||||
|
|
||||||
pub const libvlc_media_option_trusted: u32 = 0x2;
|
|
||||||
pub const libvlc_media_option_unique: u32 = 0x100;
|
|
||||||
|
|
||||||
pub use crate::enums::TrackType as libvlc_track_type_t;
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_media_stats_t {
|
|
||||||
/* Input */
|
|
||||||
pub i_read_bytes: c_int,
|
|
||||||
pub f_input_bitrate: c_float,
|
|
||||||
/* Demux */
|
|
||||||
pub i_demux_read_bytes: c_int,
|
|
||||||
pub f_demux_bitrate: c_float,
|
|
||||||
pub i_demux_corrupted: c_int,
|
|
||||||
pub i_demux_discontinuity: c_int,
|
|
||||||
/* Decoders */
|
|
||||||
pub i_decoded_video: c_int,
|
|
||||||
pub i_decoded_audio: c_int,
|
|
||||||
/* Video Output */
|
|
||||||
pub i_displayed_pictures: c_int,
|
|
||||||
pub i_lost_pictures: c_int,
|
|
||||||
/* Audio output */
|
|
||||||
pub i_played_abuffers: c_int,
|
|
||||||
pub i_lost_abuffers: c_int,
|
|
||||||
/* Stream output */
|
|
||||||
pub i_sent_packets: c_int,
|
|
||||||
pub i_sent_bytes: c_int,
|
|
||||||
pub f_send_bitrate: c_float,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_media_track_info_t {
|
|
||||||
/* Codec fourcc */
|
|
||||||
pub i_codec: u32,
|
|
||||||
pub i_id: c_int,
|
|
||||||
pub i_type: libvlc_track_type_t,
|
|
||||||
/* Codec specific */
|
|
||||||
pub i_profile: c_int,
|
|
||||||
pub i_level: c_int,
|
|
||||||
|
|
||||||
pub u: libvlc_media_track_info_t_types::u,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod libvlc_media_track_info_t_types {
|
|
||||||
use libc::c_uint;
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub union u {
|
|
||||||
pub audio: audio,
|
|
||||||
pub video: video,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct audio {
|
|
||||||
pub i_channels: c_uint,
|
|
||||||
pub i_rate: c_uint,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct video {
|
|
||||||
pub i_height: c_uint,
|
|
||||||
pub i_width: c_uint,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_audio_track_t
|
|
||||||
{
|
|
||||||
pub i_channels: c_uint,
|
|
||||||
pub i_rate: c_uint,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
#[repr(C)]
|
|
||||||
pub struct libvlc_video_track_t
|
|
||||||
{
|
|
||||||
pub i_height: c_uint,
|
|
||||||
pub i_width: c_uint,
|
|
||||||
pub i_sar_num: c_uint,
|
|
||||||
pub i_sar_den: c_uint,
|
|
||||||
pub i_frame_rate_num: c_uint,
|
|
||||||
pub i_frame_rate_den: c_uint,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_subtitle_track_t {
|
|
||||||
pub psz_encoding: *const c_char,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_media_track_t {
|
|
||||||
pub i_codec: u32,
|
|
||||||
pub i_original_fourcc: u32,
|
|
||||||
pub i_id: c_int,
|
|
||||||
pub i_type: libvlc_track_type_t,
|
|
||||||
pub i_profile: c_int,
|
|
||||||
pub i_level: c_int,
|
|
||||||
pub u: libvlc_media_track_t_types::u,
|
|
||||||
pub i_bitrate: c_uint,
|
|
||||||
pub psz_language: *mut c_char,
|
|
||||||
pub psz_description: *mut c_char,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod libvlc_media_track_t_types {
|
|
||||||
use super::*;
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub union u {
|
|
||||||
pub audio: *mut libvlc_audio_track_t,
|
|
||||||
pub video: *mut libvlc_video_track_t,
|
|
||||||
pub subtitle: *mut libvlc_subtitle_track_t,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl libvlc_media_track_t {
|
|
||||||
pub unsafe fn audio(&self) -> *mut libvlc_audio_track_t {
|
|
||||||
self.u.audio
|
|
||||||
}
|
|
||||||
pub unsafe fn video(&self) -> *mut libvlc_video_track_t {
|
|
||||||
self.u.video
|
|
||||||
}
|
|
||||||
pub unsafe fn subtitle(&self) -> *mut libvlc_subtitle_track_t {
|
|
||||||
self.u.subtitle
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
pub fn libvlc_media_new_location(p_instance: *mut libvlc_instance_t, psz_mrl: *const c_char)
|
|
||||||
-> *mut libvlc_media_t;
|
|
||||||
pub fn libvlc_media_new_path(p_instance: *mut libvlc_instance_t, path: *const c_char)
|
|
||||||
-> *mut libvlc_media_t;
|
|
||||||
pub fn libvlc_media_new_fd(p_instance: *mut libvlc_instance_t, fd: c_int)
|
|
||||||
-> *mut libvlc_media_t;
|
|
||||||
pub fn libvlc_media_as_node(p_instance: *mut libvlc_instance_t, psz_name: *const c_char)
|
|
||||||
-> *mut libvlc_media_t;
|
|
||||||
pub fn libvlc_media_add_option(p_md: *mut libvlc_media_t, psz_options: *const c_char);
|
|
||||||
pub fn libvlc_media_add_option_flag(
|
|
||||||
p_md: *mut libvlc_media_t, psz_options: *const c_char, i_flags: c_uint);
|
|
||||||
pub fn libvlc_media_retain(p_md: *mut libvlc_media_t);
|
|
||||||
pub fn libvlc_media_release(p_md: *mut libvlc_media_t);
|
|
||||||
pub fn libvlc_media_get_mrl(p_md: *mut libvlc_media_t) -> *mut c_char;
|
|
||||||
pub fn libvlc_media_duplicate(p_md: *mut libvlc_media_t) -> *mut libvlc_media_t;
|
|
||||||
pub fn libvlc_media_get_meta(p_md: *mut libvlc_media_t, e_meta: libvlc_meta_t) -> *mut c_char;
|
|
||||||
pub fn libvlc_media_set_meta(p_md: *mut libvlc_media_t, e_meta: libvlc_meta_t,
|
|
||||||
psz_value: *const c_char);
|
|
||||||
pub fn libvlc_media_save_meta(p_md: *mut libvlc_media_t) -> c_int;
|
|
||||||
pub fn libvlc_media_get_state(p_md: *mut libvlc_media_t) -> libvlc_state_t;
|
|
||||||
pub fn libvlc_media_get_stats(p_md: *mut libvlc_media_t, p_stats: *mut libvlc_media_stats_t)
|
|
||||||
-> c_int;
|
|
||||||
pub fn libvlc_media_subitems(p_md: *mut libvlc_media_t)
|
|
||||||
-> *mut libvlc_media_list_t;
|
|
||||||
pub fn libvlc_media_event_manager(p_md: *mut libvlc_media_t)
|
|
||||||
-> *mut libvlc_event_manager_t;
|
|
||||||
pub fn libvlc_media_get_duration(p_md: *mut libvlc_media_t)
|
|
||||||
-> libvlc_time_t;
|
|
||||||
pub fn libvlc_media_parse(p_md: *mut libvlc_media_t);
|
|
||||||
pub fn libvlc_media_parse_async(p_md: *mut libvlc_media_t);
|
|
||||||
pub fn libvlc_media_is_parsed(p_md: *mut libvlc_media_t) -> c_int;
|
|
||||||
pub fn libvlc_media_set_user_data(p_md: *mut libvlc_media_t,
|
|
||||||
p_new_user_data: *mut c_void);
|
|
||||||
pub fn libvlc_media_get_user_data(p_md: *mut libvlc_media_t) -> *mut c_void;
|
|
||||||
pub fn libvlc_media_tracks_get(p_md: *mut libvlc_media_t,
|
|
||||||
tracks: *mut *mut *mut libvlc_media_track_t) -> c_uint;
|
|
||||||
pub fn libvlc_media_tracks_release(p_tracks: *mut *mut libvlc_media_track_t, i_count: c_uint);
|
|
||||||
}
|
|
||||||
|
|
||||||
// From libvlc_media_player.h
|
|
||||||
|
|
||||||
pub enum libvlc_media_player_t {}
|
|
||||||
pub enum libvlc_equalizer_t {}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
|
||||||
pub struct libvlc_track_description_t {
|
|
||||||
pub i_id: c_int,
|
|
||||||
pub psz_name: *mut c_char,
|
|
||||||
pub p_next: *mut libvlc_track_description_t,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_audio_output_t {
|
|
||||||
pub psz_name: *mut c_char,
|
|
||||||
pub psz_description: *mut c_char,
|
|
||||||
pub p_next: *mut libvlc_audio_output_t,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_audio_output_device_t {
|
|
||||||
pub p_next: *mut libvlc_audio_output_device_t,
|
|
||||||
pub psz_device: *mut c_char,
|
|
||||||
pub psz_description: *mut c_char,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
|
||||||
pub struct libvlc_rectangle_t {
|
|
||||||
pub top: c_int, pub left: c_int, pub bottom: c_int, pub right: c_int,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
|
||||||
pub enum libvlc_video_marquee_option_t {
|
|
||||||
libvlc_marquee_Enable = 0,
|
|
||||||
libvlc_marquee_Text,
|
|
||||||
libvlc_marquee_Color,
|
|
||||||
libvlc_marquee_Opacity,
|
|
||||||
libvlc_marquee_Position,
|
|
||||||
libvlc_marquee_Refresh,
|
|
||||||
libvlc_marquee_Size,
|
|
||||||
libvlc_marquee_Timeout,
|
|
||||||
libvlc_marquee_X,
|
|
||||||
libvlc_marquee_Y,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
|
||||||
pub enum libvlc_navigate_mode_t {
|
|
||||||
libvlc_navigate_activate = 0,
|
|
||||||
libvlc_navigate_up,
|
|
||||||
libvlc_navigate_down,
|
|
||||||
libvlc_navigate_left,
|
|
||||||
libvlc_navigate_right,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub use crate::enums::Position as libvlc_position_t;
|
|
||||||
pub use crate::enums::VideoAdjustOption as libvlc_video_adjust_option;
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
|
||||||
pub enum libvlc_video_logo_option_t {
|
|
||||||
libvlc_logo_enable,
|
|
||||||
libvlc_logo_file,
|
|
||||||
libvlc_logo_x,
|
|
||||||
libvlc_logo_y,
|
|
||||||
libvlc_logo_delay,
|
|
||||||
libvlc_logo_repeat,
|
|
||||||
libvlc_logo_opacity,
|
|
||||||
libvlc_logo_position
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
|
||||||
pub enum libvlc_audio_output_device_types_t {
|
|
||||||
libvlc_AudioOutputDevice_Error = -1,
|
|
||||||
libvlc_AudioOutputDevice_Mono = 1,
|
|
||||||
libvlc_AudioOutputDevice_Stereo = 2,
|
|
||||||
libvlc_AudioOutputDevice_2F2R = 4,
|
|
||||||
libvlc_AudioOutputDevice_3F2R = 5,
|
|
||||||
libvlc_AudioOutputDevice_5_1 = 6,
|
|
||||||
libvlc_AudioOutputDevice_6_1 = 7,
|
|
||||||
libvlc_AudioOutputDevice_7_1 = 8,
|
|
||||||
libvlc_AudioOutputDevice_SPDIF = 10
|
|
||||||
}
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
|
||||||
pub enum libvlc_audio_output_channel_t {
|
|
||||||
libvlc_AudioChannel_Error = -1,
|
|
||||||
libvlc_AudioChannel_Stereo = 1,
|
|
||||||
libvlc_AudioChannel_RStereo = 2,
|
|
||||||
libvlc_AudioChannel_Left = 3,
|
|
||||||
libvlc_AudioChannel_Right = 4,
|
|
||||||
libvlc_AudioChannel_Dolbys = 5
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type libvlc_video_lock_cb = Option<unsafe extern "C" fn(*mut c_void, *mut c_void) -> *mut c_void>;
|
|
||||||
pub type libvlc_video_unlock_cb = Option<unsafe extern "C" fn(
|
|
||||||
*mut c_void, *mut c_void, *const *mut c_void)>;
|
|
||||||
pub type libvlc_video_display_cb = Option<unsafe extern "C" fn(*mut c_void, *mut c_void)>;
|
|
||||||
pub type libvlc_video_format_cb = Option<unsafe extern "C" fn(
|
|
||||||
*mut *mut c_void, *mut c_char, *mut c_uint, *mut c_uint, *mut c_uint, *mut c_uint)>;
|
|
||||||
pub type libvlc_video_cleanup_cb = Option<unsafe extern "C" fn(*mut c_void)>;
|
|
||||||
pub type libvlc_audio_play_cb = Option<unsafe extern "C" fn(*mut c_void, *const c_void, c_uint, i64)>;
|
|
||||||
pub type libvlc_audio_pause_cb = Option<unsafe extern "C" fn(*mut c_void, i64)>;
|
|
||||||
pub type libvlc_audio_resume_cb = Option<unsafe extern "C" fn(*mut c_void, i64)>;
|
|
||||||
pub type libvlc_audio_flush_cb = Option<unsafe extern "C" fn(*mut c_void, i64)>;
|
|
||||||
pub type libvlc_audio_drain_cb = Option<unsafe extern "C" fn(*mut c_void)>;
|
|
||||||
pub type libvlc_audio_set_volume_cb = Option<unsafe extern "C" fn(*mut c_void, c_float, c_bool)>;
|
|
||||||
pub type libvlc_audio_setup_cb = Option<unsafe extern "C" fn(
|
|
||||||
*mut *mut c_void, *mut c_char, *mut c_uint, *mut c_uint)>;
|
|
||||||
pub type libvlc_audio_cleanup_cb = Option<unsafe extern "C" fn(*mut c_void)>;
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
pub fn libvlc_media_player_new(p_libvlc_instance: *mut libvlc_instance_t)
|
|
||||||
-> *mut libvlc_media_player_t;
|
|
||||||
pub fn libvlc_media_player_new_from_media(p_md: *mut libvlc_media_t)
|
|
||||||
-> *mut libvlc_media_player_t;
|
|
||||||
pub fn libvlc_media_player_release(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_media_player_retain(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_media_player_set_media(p_mi: *mut libvlc_media_player_t,
|
|
||||||
p_md: *mut libvlc_media_t);
|
|
||||||
pub fn libvlc_media_player_get_media(p_mi: *mut libvlc_media_player_t) -> *mut libvlc_media_t;
|
|
||||||
pub fn libvlc_media_player_event_manager(p_mi: *mut libvlc_media_player_t)
|
|
||||||
-> *mut libvlc_event_manager_t;
|
|
||||||
pub fn libvlc_media_player_is_playing(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_play(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_set_pause(mp: *mut libvlc_media_player_t, do_pause: c_int);
|
|
||||||
pub fn libvlc_media_player_pause(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_media_player_stop(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_video_set_callbacks(
|
|
||||||
mp: *mut libvlc_media_player_t, lock: libvlc_video_lock_cb,
|
|
||||||
unlock: libvlc_video_unlock_cb, display: libvlc_video_display_cb,
|
|
||||||
opaque: *mut c_void);
|
|
||||||
pub fn libvlc_video_set_format(
|
|
||||||
mp: *mut libvlc_media_player_t, chroma: *const c_char, width: c_uint, height: c_uint,
|
|
||||||
pitch: c_uint);
|
|
||||||
pub fn libvlc_video_set_format_callbacks(
|
|
||||||
mp: *mut libvlc_media_player_t, setup: libvlc_video_format_cb,
|
|
||||||
cleanup: libvlc_video_cleanup_cb);
|
|
||||||
pub fn libvlc_media_player_set_nsobject(
|
|
||||||
p_mi: *mut libvlc_media_player_t, drawable: *mut c_void);
|
|
||||||
pub fn libvlc_media_player_get_nsobject(p_mi: *mut libvlc_media_player_t) -> *mut c_void;
|
|
||||||
pub fn libvlc_media_player_set_xwindow(
|
|
||||||
p_mi: *mut libvlc_media_player_t, drawable: u32);
|
|
||||||
pub fn libvlc_media_player_get_xwindow(p_mi: *mut libvlc_media_player_t) -> u32;
|
|
||||||
pub fn libvlc_media_player_set_hwnd(
|
|
||||||
p_mi: *mut libvlc_media_player_t, drawable: *mut c_void);
|
|
||||||
pub fn libvlc_media_player_get_hwnd(p_mi: *mut libvlc_media_player_t) -> *mut c_void;
|
|
||||||
pub fn libvlc_audio_set_callbacks(
|
|
||||||
mp: *mut libvlc_media_player_t, play: libvlc_audio_play_cb, pause: libvlc_audio_pause_cb,
|
|
||||||
resume: libvlc_audio_resume_cb, flush: libvlc_audio_flush_cb,
|
|
||||||
drain: libvlc_audio_drain_cb, opaque: *mut c_void);
|
|
||||||
pub fn libvlc_audio_set_volume_callback(
|
|
||||||
mp: *mut libvlc_media_player_t, set_volume: libvlc_audio_set_volume_cb);
|
|
||||||
pub fn libvlc_audio_set_format_callbacks(
|
|
||||||
mp: *mut libvlc_media_player_t, setup: libvlc_audio_setup_cb,
|
|
||||||
cleanup: libvlc_audio_cleanup_cb);
|
|
||||||
pub fn libvlc_audio_set_format(
|
|
||||||
mp: *mut libvlc_media_player_t, format: *const c_char, rate: c_uint, channels: c_uint);
|
|
||||||
pub fn libvlc_media_player_get_length(p_mi: *mut libvlc_media_player_t) -> libvlc_time_t;
|
|
||||||
pub fn libvlc_media_player_get_time(p_mi: *mut libvlc_media_player_t) -> libvlc_time_t;
|
|
||||||
pub fn libvlc_media_player_set_time(
|
|
||||||
p_mi: *mut libvlc_media_player_t, i_time: libvlc_time_t);
|
|
||||||
pub fn libvlc_media_player_get_position(p_mi: *mut libvlc_media_player_t) -> c_float;
|
|
||||||
pub fn libvlc_media_player_set_position(p_mi: *mut libvlc_media_player_t, f_pos: c_float);
|
|
||||||
pub fn libvlc_media_player_set_chapter(p_mi: *mut libvlc_media_player_t, i_chapter: c_int);
|
|
||||||
pub fn libvlc_media_player_get_chapter(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_get_chapter_count(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_will_play(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_set_title(p_mi: *mut libvlc_media_player_t, i_title: c_int);
|
|
||||||
pub fn libvlc_media_player_get_chapter_count_for_title(
|
|
||||||
p_mi: *mut libvlc_media_player_t, i_title: c_int) -> c_int;
|
|
||||||
pub fn libvlc_media_player_get_title(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_get_title_count(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_previous_chapter(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_media_player_next_chapter(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_media_player_get_rate(p_mi: *mut libvlc_media_player_t) -> c_float;
|
|
||||||
pub fn libvlc_media_player_set_rate(p_mi: *mut libvlc_media_player_t, rate: c_float) -> c_int;
|
|
||||||
pub fn libvlc_media_player_get_state(p_mi: *mut libvlc_media_player_t) -> libvlc_state_t;
|
|
||||||
pub fn libvlc_media_player_get_fps(p_mi: *mut libvlc_media_player_t) -> c_float;
|
|
||||||
pub fn libvlc_media_player_has_vout(p_mi: *mut libvlc_media_player_t) -> c_uint;
|
|
||||||
pub fn libvlc_media_player_is_seekable(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_can_pause(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_program_scrambled(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_media_player_next_frame(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_media_player_navigate(p_mi: *mut libvlc_media_player_t, navigate: c_uint);
|
|
||||||
pub fn libvlc_media_player_set_video_title_display(
|
|
||||||
p_mi: *mut libvlc_media_player_t, position: libvlc_position_t, timeout: c_uint);
|
|
||||||
pub fn libvlc_track_description_list_release(p_track_description: *mut libvlc_track_description_t);
|
|
||||||
pub fn libvlc_toggle_fullscreen(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_set_fullscreen(p_mi: *mut libvlc_media_player_t, b_fullscreen: c_int);
|
|
||||||
pub fn libvlc_get_fullscreen(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_video_set_key_input(p_mi: *mut libvlc_media_player_t, on: c_uint);
|
|
||||||
pub fn libvlc_video_set_mouse_input(p_mi: *mut libvlc_media_player_t, on: c_uint);
|
|
||||||
pub fn libvlc_video_get_size(
|
|
||||||
p_mi: *mut libvlc_media_player_t, num: c_uint, px: *mut c_uint, py: *mut c_uint) -> c_int;
|
|
||||||
pub fn libvlc_video_get_cursor(
|
|
||||||
p_mi: *mut libvlc_media_player_t, num: c_uint, px: *mut c_int, py: *mut c_int) -> c_int;
|
|
||||||
pub fn libvlc_video_get_scale(p_mi: *mut libvlc_media_player_t) -> c_float;
|
|
||||||
pub fn libvlc_video_set_scale(p_mi: *mut libvlc_media_player_t, f_factor: c_float);
|
|
||||||
pub fn libvlc_video_get_aspect_ratio(p_mi: *mut libvlc_media_player_t) -> *mut c_char;
|
|
||||||
pub fn libvlc_video_set_aspect_ratio(p_mi: *mut libvlc_media_player_t, psz_aspect: *const c_char);
|
|
||||||
pub fn libvlc_video_get_spu(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_video_get_spu_count(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_video_get_spu_description(p_mi: *mut libvlc_media_player_t)
|
|
||||||
-> *mut libvlc_track_description_t;
|
|
||||||
pub fn libvlc_video_set_spu(p_mi: *mut libvlc_media_player_t, i_spu: c_int) -> c_int;
|
|
||||||
pub fn libvlc_video_set_subtitle_file(
|
|
||||||
p_mi: *mut libvlc_media_player_t, psz_subtitle: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_video_get_spu_delay(p_mi: *mut libvlc_media_player_t) -> i64;
|
|
||||||
pub fn libvlc_video_set_spu_delay(
|
|
||||||
p_mi: *mut libvlc_media_player_t, i_delay: i64) -> c_int;
|
|
||||||
pub fn libvlc_video_get_title_description(
|
|
||||||
p_mi: *mut libvlc_media_player_t) -> *mut libvlc_track_description_t;
|
|
||||||
pub fn libvlc_video_get_chapter_description(
|
|
||||||
p_mi: *mut libvlc_media_player_t, i_title: c_int) -> *mut libvlc_track_description_t;
|
|
||||||
pub fn libvlc_video_get_crop_geometry(p_mi: *mut libvlc_media_player_t) -> *mut c_char;
|
|
||||||
pub fn libvlc_video_set_crop_geometry(
|
|
||||||
p_mi: *mut libvlc_media_player_t, psz_geometry: *const c_char);
|
|
||||||
pub fn libvlc_video_get_teletext(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_video_set_teletext(p_mi: *mut libvlc_media_player_t, i_page: c_int);
|
|
||||||
pub fn libvlc_toggle_teletext(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_video_get_track_count(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_video_get_track_description(
|
|
||||||
p_mi: *mut libvlc_media_player_t) -> *mut libvlc_track_description_t;
|
|
||||||
pub fn libvlc_video_get_track(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_video_set_track(p_mi: *mut libvlc_media_player_t, i_track: c_int) -> c_int;
|
|
||||||
pub fn libvlc_video_take_snapshot(
|
|
||||||
p_mi: *mut libvlc_media_player_t, num: c_uint, psz_filepath: *const c_char,
|
|
||||||
i_width: c_uint, i_height: c_uint) -> c_int;
|
|
||||||
pub fn libvlc_video_set_deinterlace(p_mi: *mut libvlc_media_player_t, psz_mode: *const c_char);
|
|
||||||
pub fn libvlc_video_get_marquee_int(p_mi: *mut libvlc_media_player_t, option: c_uint) -> c_int;
|
|
||||||
pub fn libvlc_video_get_marquee_string(
|
|
||||||
p_mi: *mut libvlc_media_player_t, option: c_uint) -> *mut c_char;
|
|
||||||
pub fn libvlc_video_set_marquee_int(
|
|
||||||
p_mi: *mut libvlc_media_player_t, option: c_uint, i_val: c_int);
|
|
||||||
pub fn libvlc_video_set_marquee_string(
|
|
||||||
p_mi: *mut libvlc_media_player_t, option: c_uint, psz_text: *const c_char);
|
|
||||||
pub fn libvlc_video_get_logo_int(p_mi: *mut libvlc_media_player_t, option: c_uint) -> c_int;
|
|
||||||
pub fn libvlc_video_set_logo_int(p_mi: *mut libvlc_media_player_t, option: c_uint, value: c_int);
|
|
||||||
pub fn libvlc_video_set_logo_string(
|
|
||||||
p_mi: *mut libvlc_media_player_t, option: c_uint, psz_value: *const c_char);
|
|
||||||
pub fn libvlc_video_get_adjust_int(
|
|
||||||
p_mi: *mut libvlc_media_player_t, option: c_uint) -> c_int;
|
|
||||||
pub fn libvlc_video_set_adjust_int(
|
|
||||||
p_mi: *mut libvlc_media_player_t, option: c_uint, value: c_int);
|
|
||||||
pub fn libvlc_video_get_adjust_float(
|
|
||||||
p_mi: *mut libvlc_media_player_t, option: c_uint) -> c_float;
|
|
||||||
pub fn libvlc_video_set_adjust_float(
|
|
||||||
p_mi: *mut libvlc_media_player_t, option: c_uint, value: c_float);
|
|
||||||
pub fn libvlc_audio_output_list_get(p_instance: *mut libvlc_instance_t)
|
|
||||||
-> *mut libvlc_audio_output_t;
|
|
||||||
pub fn libvlc_audio_output_list_release(p_list: *mut libvlc_audio_output_t);
|
|
||||||
pub fn libvlc_audio_output_set(p_mi: *mut libvlc_media_player_t, psz_name: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_audio_output_device_enum(
|
|
||||||
mp: *mut libvlc_media_player_t) -> *mut libvlc_audio_output_device_t;
|
|
||||||
pub fn libvlc_audio_output_device_list_get(
|
|
||||||
p_instance: *mut libvlc_instance_t, aout: *const c_char) -> *mut libvlc_audio_output_device_t;
|
|
||||||
pub fn libvlc_audio_output_device_list_release(p_list: *mut libvlc_audio_output_device_t);
|
|
||||||
pub fn libvlc_audio_output_device_set(
|
|
||||||
mp: *mut libvlc_media_player_t, module: *const c_char, device_id: *const c_char);
|
|
||||||
pub fn libvlc_audio_toggle_mute(p_mi: *mut libvlc_media_player_t);
|
|
||||||
pub fn libvlc_audio_get_mute(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_audio_set_mute(p_mi: *mut libvlc_media_player_t, status: c_int);
|
|
||||||
pub fn libvlc_audio_get_volume(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_audio_set_volume(p_mi: *mut libvlc_media_player_t, i_volume: c_int) -> c_int;
|
|
||||||
pub fn libvlc_audio_get_track_count(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_audio_get_track_description(
|
|
||||||
p_mi: *mut libvlc_media_player_t) -> *mut libvlc_track_description_t;
|
|
||||||
pub fn libvlc_audio_get_track(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_audio_set_track(p_mi: *mut libvlc_media_player_t, i_track: c_int) -> c_int;
|
|
||||||
pub fn libvlc_audio_get_channel(p_mi: *mut libvlc_media_player_t) -> c_int;
|
|
||||||
pub fn libvlc_audio_set_channel(p_mi: *mut libvlc_media_player_t, channel: c_int) -> c_int;
|
|
||||||
pub fn libvlc_audio_get_delay(p_mi: *mut libvlc_media_player_t) -> i64;
|
|
||||||
pub fn libvlc_audio_set_delay(p_mi: *mut libvlc_media_player_t, i_delay: i64) -> c_int;
|
|
||||||
pub fn libvlc_audio_equalizer_get_preset_count() -> c_uint;
|
|
||||||
pub fn libvlc_audio_equalizer_get_preset_name(u_index: c_uint) -> *const c_char;
|
|
||||||
pub fn libvlc_audio_equalizer_get_band_count() -> c_uint;
|
|
||||||
pub fn libvlc_audio_equalizer_get_band_frequency(u_index: c_uint) -> c_float;
|
|
||||||
pub fn libvlc_audio_equalizer_new() -> *mut libvlc_equalizer_t;
|
|
||||||
pub fn libvlc_audio_equalizer_new_from_preset(u_index: c_uint) -> *mut libvlc_equalizer_t;
|
|
||||||
pub fn libvlc_audio_equalizer_release(p_equalizer: *mut libvlc_equalizer_t);
|
|
||||||
pub fn libvlc_audio_equalizer_set_preamp(
|
|
||||||
p_equalizer: *mut libvlc_equalizer_t, f_preamp: c_float) -> c_int;
|
|
||||||
pub fn libvlc_audio_equalizer_get_preamp(p_equalizer: *mut libvlc_equalizer_t) -> c_float;
|
|
||||||
pub fn libvlc_audio_equalizer_set_amp_at_index(
|
|
||||||
p_equalizer: *mut libvlc_equalizer_t, f_amp: c_float, u_band: c_uint) -> c_int;
|
|
||||||
pub fn libvlc_audio_equalizer_get_amp_at_index(
|
|
||||||
p_equalizer: *mut libvlc_equalizer_t, u_band: c_uint) -> c_float;
|
|
||||||
pub fn libvlc_media_player_set_equalizer(
|
|
||||||
p_mi: *mut libvlc_media_player_t, p_equalizer: *mut libvlc_equalizer_t) -> c_int;
|
|
||||||
}
|
|
||||||
|
|
||||||
// From libvlc_events.h
|
|
||||||
pub use crate::enums::EventType as libvlc_event_e;
|
|
||||||
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct libvlc_event_t {
|
|
||||||
pub _type: c_int,
|
|
||||||
pub p_obj: *mut c_void,
|
|
||||||
pub u: libvlc_event_t_types::u,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod libvlc_event_t_types {
|
|
||||||
use super::*;
|
|
||||||
use libc::{c_int, c_char, c_float};
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub union u {
|
|
||||||
pub media_meta_changed: media_meta_changed,
|
|
||||||
pub media_subitem_added: media_subitem_added,
|
|
||||||
pub media_duration_changed: media_duration_changed,
|
|
||||||
pub media_parsed_changed: media_parsed_changed,
|
|
||||||
pub media_freed: media_freed,
|
|
||||||
pub media_state_changed: media_state_changed,
|
|
||||||
pub media_subitemtree_added: media_subitemtree_added,
|
|
||||||
pub media_player_buffering: media_player_buffering,
|
|
||||||
pub media_player_position_changed: media_player_position_changed,
|
|
||||||
pub media_player_time_changed: media_player_time_changed,
|
|
||||||
pub media_player_title_changed: media_player_title_changed,
|
|
||||||
pub media_player_seekable_changed: media_player_seekable_changed,
|
|
||||||
pub media_player_pausable_changed: media_player_pausable_changed,
|
|
||||||
pub media_player_scrambled_changed: media_player_scrambled_changed,
|
|
||||||
pub media_player_vout: media_player_vout,
|
|
||||||
pub media_list_item_added: media_list_item_added,
|
|
||||||
pub media_list_will_add_item: media_list_will_add_item,
|
|
||||||
pub media_list_item_deleted: media_list_item_deleted,
|
|
||||||
pub media_list_will_delete_item: media_list_will_delete_item,
|
|
||||||
pub media_list_player_next_item_set: media_list_player_next_item_set,
|
|
||||||
pub media_player_snapshot_taken: media_player_snapshot_taken,
|
|
||||||
pub media_player_length_changed: media_player_length_changed,
|
|
||||||
pub vlm_media_event: vlm_media_event,
|
|
||||||
pub media_player_media_changed: media_player_media_changed,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_meta_changed {
|
|
||||||
pub meta_type: libvlc_meta_t,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_subitem_added {
|
|
||||||
pub new_child: *mut libvlc_media_t,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_duration_changed {
|
|
||||||
pub new_duration: i64,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_parsed_changed {
|
|
||||||
pub new_status: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_freed {
|
|
||||||
pub md: *mut libvlc_media_t,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_state_changed {
|
|
||||||
pub new_state: libvlc_state_t,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_subitemtree_added {
|
|
||||||
pub item: *mut libvlc_media_t,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_buffering {
|
|
||||||
pub new_cache: c_float,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_position_changed {
|
|
||||||
pub new_position: c_float,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_time_changed {
|
|
||||||
pub new_time: libvlc_time_t,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_title_changed {
|
|
||||||
pub new_titie: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_seekable_changed {
|
|
||||||
pub new_seekable: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_pausable_changed {
|
|
||||||
pub new_pausable: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_scrambled_changed {
|
|
||||||
pub new_scrambled: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_vout {
|
|
||||||
pub new_count: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_list_item_added {
|
|
||||||
pub item: *mut libvlc_media_t,
|
|
||||||
pub index: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_list_will_add_item {
|
|
||||||
pub item: *mut libvlc_media_t,
|
|
||||||
pub index: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_list_item_deleted {
|
|
||||||
pub item: *mut libvlc_media_t,
|
|
||||||
pub index: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_list_will_delete_item {
|
|
||||||
pub item: *mut libvlc_media_t,
|
|
||||||
pub index: c_int,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_list_player_next_item_set {
|
|
||||||
pub item: *mut libvlc_media_t,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_snapshot_taken {
|
|
||||||
pub psz_filename: *mut c_char,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_length_changed {
|
|
||||||
pub new_length: libvlc_time_t,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct vlm_media_event {
|
|
||||||
pub psz_media_name: *mut c_char,
|
|
||||||
pub psz_instance_name: *mut c_char,
|
|
||||||
}
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Clone, Copy)]
|
|
||||||
pub struct media_player_media_changed {
|
|
||||||
pub new_media: *mut libvlc_media_t,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// From libvlc_media_list.h
|
|
||||||
|
|
||||||
pub enum libvlc_media_list_t {}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
pub fn libvlc_media_list_new(p_instance: *mut libvlc_instance_t) -> *mut libvlc_media_list_t;
|
|
||||||
pub fn libvlc_media_list_release(p_ml: *mut libvlc_media_list_t);
|
|
||||||
pub fn libvlc_media_list_retain(p_ml: *mut libvlc_media_list_t);
|
|
||||||
pub fn libvlc_media_list_set_media(p_ml: *mut libvlc_media_list_t, p_md: *mut libvlc_media_t);
|
|
||||||
pub fn libvlc_media_list_media(p_ml: *mut libvlc_media_list_t) -> *mut libvlc_media_t;
|
|
||||||
pub fn libvlc_media_list_add_media(
|
|
||||||
p_ml: *mut libvlc_media_list_t, p_md: *mut libvlc_media_t) -> c_int;
|
|
||||||
pub fn libvlc_media_list_insert_media(
|
|
||||||
p_ml: *mut libvlc_media_list_t, p_md: *mut libvlc_media_t, i_pos: c_int) -> c_int;
|
|
||||||
pub fn libvlc_media_list_remove_index(p_ml: *mut libvlc_media_list_t, i_pos: c_int) -> c_int;
|
|
||||||
pub fn libvlc_media_list_count(p_ml: *mut libvlc_media_list_t) -> c_int;
|
|
||||||
pub fn libvlc_media_list_item_at_index(
|
|
||||||
p_ml: *mut libvlc_media_list_t, i_pos: c_int) -> *mut libvlc_media_t;
|
|
||||||
pub fn libvlc_media_list_index_of_item(
|
|
||||||
p_ml: *mut libvlc_media_list_t, p_md: *mut libvlc_media_t) -> c_int;
|
|
||||||
pub fn libvlc_media_list_is_readonly(p_ml: *mut libvlc_media_list_t) -> c_int;
|
|
||||||
pub fn libvlc_media_list_lock(p_ml: *mut libvlc_media_list_t);
|
|
||||||
pub fn libvlc_media_list_unlock(p_ml: *mut libvlc_media_list_t);
|
|
||||||
pub fn libvlc_media_list_event_manager(
|
|
||||||
p_ml: *mut libvlc_media_list_t) -> *mut libvlc_event_manager_t;
|
|
||||||
}
|
|
||||||
|
|
||||||
// From libvlc_media_library.h
|
|
||||||
|
|
||||||
pub enum libvlc_media_library_t {}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
pub fn libvlc_media_library_new(p_instance: *mut libvlc_instance_t) -> *mut libvlc_media_library_t;
|
|
||||||
pub fn libvlc_media_library_release(p_mlib: *mut libvlc_media_library_t);
|
|
||||||
pub fn libvlc_media_library_retain(p_mlib: *mut libvlc_media_library_t);
|
|
||||||
pub fn libvlc_media_library_load(p_mlib: *mut libvlc_media_library_t) -> c_int;
|
|
||||||
pub fn libvlc_media_library_media_list(
|
|
||||||
p_mlib: *mut libvlc_media_library_t) -> *mut libvlc_media_list_t;
|
|
||||||
}
|
|
||||||
|
|
||||||
// From libvlc_media_discoverer.h
|
|
||||||
|
|
||||||
pub enum libvlc_media_discoverer_t {}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
pub fn libvlc_media_discoverer_new_from_name(
|
|
||||||
p_inst: *mut libvlc_instance_t, psz_name: *const c_char) -> *mut libvlc_media_discoverer_t;
|
|
||||||
pub fn libvlc_media_discoverer_release(p_mdis: *mut libvlc_media_discoverer_t);
|
|
||||||
pub fn libvlc_media_discoverer_localized_name(
|
|
||||||
p_mdis: *mut libvlc_media_discoverer_t) -> *mut c_char;
|
|
||||||
pub fn libvlc_media_discoverer_media_list(
|
|
||||||
p_mdis: *mut libvlc_media_discoverer_t) -> *mut libvlc_media_list_t;
|
|
||||||
pub fn libvlc_media_discoverer_event_manager(
|
|
||||||
p_mdis: *mut libvlc_media_discoverer_t) -> *mut libvlc_event_manager_t;
|
|
||||||
pub fn libvlc_media_discoverer_is_running(p_mdis: *mut libvlc_media_discoverer_t) -> c_int;
|
|
||||||
}
|
|
||||||
|
|
||||||
// From libvlc_vlm.h
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
pub fn libvlc_vlm_release(p_instance: *mut libvlc_instance_t);
|
|
||||||
pub fn libvlc_vlm_add_broadcast(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char,
|
|
||||||
psz_output: *const c_char, i_options: c_int, ppsz_options: *const *const c_char,
|
|
||||||
b_enabled: c_int, b_loop: c_int) -> c_int;
|
|
||||||
pub fn libvlc_vlm_add_vod(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char,
|
|
||||||
i_options: c_int, ppsz_options: *const *const c_char, b_enabled: c_int,
|
|
||||||
psz_mux: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_vlm_del_media(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_vlm_set_enabled(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, b_enabled: c_int) -> c_int;
|
|
||||||
pub fn libvlc_vlm_set_output(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_output: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_vlm_set_input(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_vlm_add_input(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_vlm_set_loop(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, b_loop: c_int) -> c_int;
|
|
||||||
pub fn libvlc_vlm_set_mux(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_mux: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_vlm_change_media(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, psz_input: *const c_char,
|
|
||||||
psz_output: *const c_char, i_options: c_int, ppsz_options: *const *const c_char,
|
|
||||||
b_enabled: c_int, b_loop: c_int) -> c_int;
|
|
||||||
pub fn libvlc_vlm_play_media(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_vlm_stop_media(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_vlm_pause_media(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> c_int;
|
|
||||||
pub fn libvlc_vlm_seek_media(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, f_percentage: c_float) -> c_int;
|
|
||||||
pub fn libvlc_vlm_show_media(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char) -> *const c_char;
|
|
||||||
pub fn libvlc_vlm_get_media_instance_position(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, i_instance: c_int) -> c_float;
|
|
||||||
pub fn libvlc_vlm_get_media_instance_time(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, i_instance: c_int) -> c_int;
|
|
||||||
pub fn libvlc_vlm_get_media_instance_length(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, i_instance: c_int) -> c_int;
|
|
||||||
pub fn libvlc_vlm_get_media_instance_rate(
|
|
||||||
p_instance: *mut libvlc_instance_t, psz_name: *const c_char, i_instance: c_int) -> c_int;
|
|
||||||
pub fn libvlc_vlm_get_event_manager(
|
|
||||||
p_instance: *mut libvlc_instance_t) -> *mut libvlc_event_manager_t;
|
|
||||||
}
|
|
|
@ -2,7 +2,7 @@
|
||||||
// This file is part of vlc-rs.
|
// This file is part of vlc-rs.
|
||||||
// Licensed under the MIT license, see the LICENSE file.
|
// Licensed under the MIT license, see the LICENSE file.
|
||||||
|
|
||||||
use crate::sys;
|
use vlc_sys as sys;
|
||||||
use crate::MediaPlayer;
|
use crate::MediaPlayer;
|
||||||
use crate::TrackDescription;
|
use crate::TrackDescription;
|
||||||
use crate::enums::VideoAdjustOption;
|
use crate::enums::VideoAdjustOption;
|
||||||
|
|
|
@ -2,7 +2,8 @@ use std::ffi::CString;
|
||||||
use std::os::raw::c_char;
|
use std::os::raw::c_char;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
|
||||||
use crate::{Instance, sys};
|
use vlc_sys as sys;
|
||||||
|
use crate::Instance;
|
||||||
use crate::tools::{from_cstr, to_cstr};
|
use crate::tools::{from_cstr, to_cstr};
|
||||||
|
|
||||||
pub trait Vlm {
|
pub trait Vlm {
|
||||||
|
|
Loading…
Reference in New Issue