Add args functionality to Instance

Signed-off-by: Aron Heinecke <aron.heinecke@t-online.de>
merge-requests/7/merge
Aron Heinecke 2018-10-26 18:01:00 +02:00
parent 43d6f46d34
commit 7bb3671a09
No known key found for this signature in database
GPG Key ID: 395630FB41D3CC71
1 changed files with 30 additions and 5 deletions

View File

@ -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,13 +28,31 @@ 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);