Add args functionality to Instance
Signed-off-by: Aron Heinecke <aron.heinecke@t-online.de>merge-requests/7/merge
parent
43d6f46d34
commit
7bb3671a09
35
src/core.rs
35
src/core.rs
|
@ -2,9 +2,11 @@
|
||||||
// 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 std::ptr::null;
|
use std::ptr;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
use std::ffi::CString;
|
||||||
|
use std::i32;
|
||||||
use sys;
|
use sys;
|
||||||
use ::tools::{to_cstr, from_cstr, from_cstr_ref};
|
use ::tools::{to_cstr, from_cstr, from_cstr_ref};
|
||||||
use ::libc::{c_void, c_char, c_int};
|
use ::libc::{c_void, c_char, c_int};
|
||||||
|
@ -26,14 +28,32 @@ pub fn compiler() -> String {
|
||||||
|
|
||||||
pub struct Instance {
|
pub struct Instance {
|
||||||
pub(crate) ptr: *mut sys::libvlc_instance_t,
|
pub(crate) ptr: *mut sys::libvlc_instance_t,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Instance {
|
impl Instance {
|
||||||
/// Create and initialize a libvlc instance.
|
/// Create and initialize a libvlc instance with specified args.
|
||||||
pub fn new() -> Option<Instance> {
|
/// Note: args.len() has to be less or equal to i32::MAX
|
||||||
|
/// Note: libvlc discourages using arguments as these are not guaranteed to be stable between different versions of libvlc
|
||||||
|
pub fn with_args(args: Option<Vec<String>>) -> Option<Instance> {
|
||||||
|
let args_c_ptr: Vec<*const c_char> ;
|
||||||
|
let args_c: Vec<CString>;
|
||||||
|
if let Some(argv) = args {
|
||||||
|
args_c = argv.into_iter()
|
||||||
|
.map(|x| CString::new(x).expect("Error: Unexpected null byte")).collect();
|
||||||
|
args_c_ptr = args_c.iter().map(|x| x.as_ptr()).collect();
|
||||||
|
} else {
|
||||||
|
args_c_ptr = Vec::new();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
unsafe{
|
unsafe{
|
||||||
let p = sys::libvlc_new(0, null());
|
let p = if args_c_ptr.is_empty() {
|
||||||
|
sys::libvlc_new(0, ptr::null())
|
||||||
|
} else {
|
||||||
|
sys::libvlc_new(args_c_ptr.len() as i32, args_c_ptr.as_ptr())
|
||||||
|
};
|
||||||
|
|
||||||
if p.is_null() {
|
if p.is_null() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -42,6 +62,11 @@ impl Instance {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create and initialize a libvlc instance.
|
||||||
|
pub fn new() -> Option<Instance> {
|
||||||
|
Instance::with_args(None)
|
||||||
|
}
|
||||||
|
|
||||||
/// Try to start a user interface for the libvlc instance.
|
/// Try to start a user interface for the libvlc instance.
|
||||||
pub fn add_intf(&self, name: &str) -> Result<(), ()> {
|
pub fn add_intf(&self, name: &str) -> Result<(), ()> {
|
||||||
let cstr = to_cstr(name);
|
let cstr = to_cstr(name);
|
||||||
|
|
Loading…
Reference in New Issue