aboutsummaryrefslogtreecommitdiffstats
path: root/crates/libmpv2/src/mpv
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-03-21 19:35:36 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-03-21 19:35:36 +0100
commit8be717167ed77f5a1021fa0825b386674c5c1a39 (patch)
tree23651b5bfb9e52ec8138e382e12bf8f072a2bbb9 /crates/libmpv2/src/mpv
parentbuild(treewide): Update (diff)
downloadyt-8be717167ed77f5a1021fa0825b386674c5c1a39.zip
chore(treewide): Migrate to rust edition 2024
Even though the diff in the libmpv2 crate is quite big, it really only added `unsafe` blocks to the `unsafe` functions.
Diffstat (limited to '')
-rw-r--r--crates/libmpv2/src/mpv/events.rs50
-rw-r--r--crates/libmpv2/src/mpv/protocol.rs127
-rw-r--r--crates/libmpv2/src/mpv/render.rs48
3 files changed, 126 insertions, 99 deletions
diff --git a/crates/libmpv2/src/mpv/events.rs b/crates/libmpv2/src/mpv/events.rs
index e27da2c..f10ff6e 100644
--- a/crates/libmpv2/src/mpv/events.rs
+++ b/crates/libmpv2/src/mpv/events.rs
@@ -70,26 +70,28 @@ impl<'a> PropertyData<'a> {
// SAFETY: meant to extract the data from an event property. See `mpv_event_property` in
// `client.h`
unsafe fn from_raw(format: MpvFormat, ptr: *mut ctype::c_void) -> Result<PropertyData<'a>> {
- assert!(!ptr.is_null());
- match format {
- mpv_format::Flag => Ok(PropertyData::Flag(*(ptr as *mut bool))),
- mpv_format::String => {
- let char_ptr = *(ptr as *mut *mut ctype::c_char);
- Ok(PropertyData::Str(mpv_cstr_to_str!(char_ptr)?))
- }
- mpv_format::OsdString => {
- let char_ptr = *(ptr as *mut *mut ctype::c_char);
- Ok(PropertyData::OsdStr(mpv_cstr_to_str!(char_ptr)?))
- }
- mpv_format::Double => Ok(PropertyData::Double(*(ptr as *mut f64))),
- mpv_format::Int64 => Ok(PropertyData::Int64(*(ptr as *mut i64))),
- mpv_format::Node => {
- let sys_node = *(ptr as *mut libmpv2_sys::mpv_node);
- let node = SysMpvNode::new(sys_node, false);
- Ok(PropertyData::Node(node.value().unwrap()))
+ unsafe {
+ assert!(!ptr.is_null());
+ match format {
+ mpv_format::Flag => Ok(PropertyData::Flag(*(ptr as *mut bool))),
+ mpv_format::String => {
+ let char_ptr = *(ptr as *mut *mut ctype::c_char);
+ Ok(PropertyData::Str(mpv_cstr_to_str!(char_ptr)?))
+ }
+ mpv_format::OsdString => {
+ let char_ptr = *(ptr as *mut *mut ctype::c_char);
+ Ok(PropertyData::OsdStr(mpv_cstr_to_str!(char_ptr)?))
+ }
+ mpv_format::Double => Ok(PropertyData::Double(*(ptr as *mut f64))),
+ mpv_format::Int64 => Ok(PropertyData::Int64(*(ptr as *mut i64))),
+ mpv_format::Node => {
+ let sys_node = *(ptr as *mut libmpv2_sys::mpv_node);
+ let node = SysMpvNode::new(sys_node, false);
+ Ok(PropertyData::Node(node.value().unwrap()))
+ }
+ mpv_format::None => unreachable!(),
+ _ => unimplemented!(),
}
- mpv_format::None => unreachable!(),
- _ => unimplemented!(),
}
}
}
@@ -146,11 +148,13 @@ pub enum Event<'a> {
}
unsafe extern "C" fn wu_wrapper<F: Fn() + Send + 'static>(ctx: *mut c_void) {
- if ctx.is_null() {
- panic!("ctx for wakeup wrapper is NULL");
- }
+ unsafe {
+ if ctx.is_null() {
+ panic!("ctx for wakeup wrapper is NULL");
+ }
- (*(ctx as *mut F))();
+ (*(ctx as *mut F))();
+ }
}
/// Context to listen to events.
diff --git a/crates/libmpv2/src/mpv/protocol.rs b/crates/libmpv2/src/mpv/protocol.rs
index ec840d8..ee33411 100644
--- a/crates/libmpv2/src/mpv/protocol.rs
+++ b/crates/libmpv2/src/mpv/protocol.rs
@@ -63,26 +63,28 @@ where
T: RefUnwindSafe,
U: RefUnwindSafe,
{
- let data = user_data as *mut ProtocolData<T, U>;
+ unsafe {
+ let data = user_data as *mut ProtocolData<T, U>;
- (*info).cookie = user_data;
- (*info).read_fn = Some(read_wrapper::<T, U>);
- (*info).seek_fn = Some(seek_wrapper::<T, U>);
- (*info).size_fn = Some(size_wrapper::<T, U>);
- (*info).close_fn = Some(close_wrapper::<T, U>);
+ (*info).cookie = user_data;
+ (*info).read_fn = Some(read_wrapper::<T, U>);
+ (*info).seek_fn = Some(seek_wrapper::<T, U>);
+ (*info).size_fn = Some(size_wrapper::<T, U>);
+ (*info).close_fn = Some(close_wrapper::<T, U>);
- let ret = panic::catch_unwind(|| {
- let uri = mpv_cstr_to_str!(uri as *const _).unwrap();
- ptr::write(
- (*data).cookie,
- ((*data).open_fn)(&mut (*data).user_data, uri),
- );
- });
+ let ret = panic::catch_unwind(|| {
+ let uri = mpv_cstr_to_str!(uri as *const _).unwrap();
+ ptr::write(
+ (*data).cookie,
+ ((*data).open_fn)(&mut (*data).user_data, uri),
+ );
+ });
- if ret.is_ok() {
- 0
- } else {
- mpv_error::Generic as _
+ if ret.is_ok() {
+ 0
+ } else {
+ mpv_error::Generic as _
+ }
}
}
@@ -95,13 +97,15 @@ where
T: RefUnwindSafe,
U: RefUnwindSafe,
{
- let data = cookie as *mut ProtocolData<T, U>;
+ unsafe {
+ let data = cookie as *mut ProtocolData<T, U>;
- let ret = panic::catch_unwind(|| {
- let slice = slice::from_raw_parts_mut(buf, nbytes as _);
- ((*data).read_fn)(&mut *(*data).cookie, slice)
- });
- ret.unwrap_or(-1)
+ let ret = panic::catch_unwind(|| {
+ let slice = slice::from_raw_parts_mut(buf, nbytes as _);
+ ((*data).read_fn)(&mut *(*data).cookie, slice)
+ });
+ ret.unwrap_or(-1)
+ }
}
unsafe extern "C" fn seek_wrapper<T, U>(cookie: *mut ctype::c_void, offset: i64) -> i64
@@ -109,18 +113,21 @@ where
T: RefUnwindSafe,
U: RefUnwindSafe,
{
- let data = cookie as *mut ProtocolData<T, U>;
+ unsafe {
+ let data = cookie as *mut ProtocolData<T, U>;
- if (*data).seek_fn.is_none() {
- return mpv_error::Unsupported as _;
- }
+ if (*data).seek_fn.is_none() {
+ return mpv_error::Unsupported as _;
+ }
- let ret =
- panic::catch_unwind(|| (*(*data).seek_fn.as_ref().unwrap())(&mut *(*data).cookie, offset));
- if let Ok(ret) = ret {
- ret
- } else {
- mpv_error::Generic as _
+ let ret = panic::catch_unwind(|| {
+ (*(*data).seek_fn.as_ref().unwrap())(&mut *(*data).cookie, offset)
+ });
+ if let Ok(ret) = ret {
+ ret
+ } else {
+ mpv_error::Generic as _
+ }
}
}
@@ -129,17 +136,20 @@ where
T: RefUnwindSafe,
U: RefUnwindSafe,
{
- let data = cookie as *mut ProtocolData<T, U>;
+ unsafe {
+ let data = cookie as *mut ProtocolData<T, U>;
- if (*data).size_fn.is_none() {
- return mpv_error::Unsupported as _;
- }
+ if (*data).size_fn.is_none() {
+ return mpv_error::Unsupported as _;
+ }
- let ret = panic::catch_unwind(|| (*(*data).size_fn.as_ref().unwrap())(&mut *(*data).cookie));
- if let Ok(ret) = ret {
- ret
- } else {
- mpv_error::Unsupported as _
+ let ret =
+ panic::catch_unwind(|| (*(*data).size_fn.as_ref().unwrap())(&mut *(*data).cookie));
+ if let Ok(ret) = ret {
+ ret
+ } else {
+ mpv_error::Unsupported as _
+ }
}
}
@@ -149,9 +159,11 @@ where
T: RefUnwindSafe,
U: RefUnwindSafe,
{
- let data = Box::from_raw(cookie as *mut ProtocolData<T, U>);
+ unsafe {
+ let data = Box::from_raw(cookie as *mut ProtocolData<T, U>);
- panic::catch_unwind(|| (data.close_fn)(Box::from_raw(data.cookie)));
+ panic::catch_unwind(|| (data.close_fn)(Box::from_raw(data.cookie)));
+ }
}
struct ProtocolData<T, U> {
@@ -224,20 +236,23 @@ impl<T: RefUnwindSafe, U: RefUnwindSafe> Protocol<T, U> {
seek_fn: Option<StreamSeek<T>>,
size_fn: Option<StreamSize<T>>,
) -> Protocol<T, U> {
- let c_layout = Layout::from_size_align(mem::size_of::<T>(), mem::align_of::<T>()).unwrap();
- let cookie = alloc::alloc(c_layout) as *mut T;
- let data = Box::into_raw(Box::new(ProtocolData {
- cookie,
- user_data,
+ unsafe {
+ let c_layout =
+ Layout::from_size_align(mem::size_of::<T>(), mem::align_of::<T>()).unwrap();
+ let cookie = alloc::alloc(c_layout) as *mut T;
+ let data = Box::into_raw(Box::new(ProtocolData {
+ cookie,
+ user_data,
- open_fn,
- close_fn,
- read_fn,
- seek_fn,
- size_fn,
- }));
+ open_fn,
+ close_fn,
+ read_fn,
+ seek_fn,
+ size_fn,
+ }));
- Protocol { name, data }
+ Protocol { name, data }
+ }
}
fn register(&self, ctx: *mut libmpv2_sys::mpv_handle) -> Result<()> {
diff --git a/crates/libmpv2/src/mpv/render.rs b/crates/libmpv2/src/mpv/render.rs
index 6457048..02f70bb 100644
--- a/crates/libmpv2/src/mpv/render.rs
+++ b/crates/libmpv2/src/mpv/render.rs
@@ -125,26 +125,30 @@ impl<C> From<&RenderParam<C>> for u32 {
}
unsafe extern "C" fn gpa_wrapper<GLContext>(ctx: *mut c_void, name: *const i8) -> *mut c_void {
- if ctx.is_null() {
- panic!("ctx for get_proc_address wrapper is NULL");
- }
+ unsafe {
+ if ctx.is_null() {
+ panic!("ctx for get_proc_address wrapper is NULL");
+ }
- let params: *mut OpenGLInitParams<GLContext> = ctx as _;
- let params = &*params;
- (params.get_proc_address)(
- &params.ctx,
- CStr::from_ptr(name)
- .to_str()
- .expect("Could not convert function name to str"),
- )
+ let params: *mut OpenGLInitParams<GLContext> = ctx as _;
+ let params = &*params;
+ (params.get_proc_address)(
+ &params.ctx,
+ CStr::from_ptr(name)
+ .to_str()
+ .expect("Could not convert function name to str"),
+ )
+ }
}
unsafe extern "C" fn ru_wrapper<F: Fn() + Send + 'static>(ctx: *mut c_void) {
- if ctx.is_null() {
- panic!("ctx for render_update wrapper is NULL");
- }
+ unsafe {
+ if ctx.is_null() {
+ panic!("ctx for render_update wrapper is NULL");
+ }
- (*(ctx as *mut F))();
+ (*(ctx as *mut F))();
+ }
}
impl<C> From<OpenGLInitParams<C>> for libmpv2_sys::mpv_opengl_init_params {
@@ -197,14 +201,18 @@ impl<C> From<RenderParam<C>> for libmpv2_sys::mpv_render_param {
}
unsafe fn free_void_data<T>(ptr: *mut c_void) {
- drop(Box::<T>::from_raw(ptr as *mut T));
+ unsafe {
+ drop(Box::<T>::from_raw(ptr as *mut T));
+ }
}
unsafe fn free_init_params<C>(ptr: *mut c_void) {
- let params = Box::from_raw(ptr as *mut libmpv2_sys::mpv_opengl_init_params);
- drop(Box::from_raw(
- params.get_proc_address_ctx as *mut OpenGLInitParams<C>,
- ));
+ unsafe {
+ let params = Box::from_raw(ptr as *mut libmpv2_sys::mpv_opengl_init_params);
+ drop(Box::from_raw(
+ params.get_proc_address_ctx as *mut OpenGLInitParams<C>,
+ ));
+ }
}
impl RenderContext {