forked from mirrors/gstreamer-rs
gst,base,sdp: Use specific copy/free or (un)ref instead of g_boxed
SDPMessage, FlowCombiner and ParseContext have specific functions available to perform copying, freeing and (un)ref'ing. Calling them directly on versions where they are supported prevents us from going through GType machinery and locks that end up the same functions in the end.
This commit is contained in:
parent
29326ebfdd
commit
3c610e12e5
5 changed files with 37 additions and 10 deletions
|
@ -14,6 +14,7 @@ build = "build.rs"
|
|||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
cfg-if = "1.0"
|
||||
libc = "0.2"
|
||||
bitflags = "1.0"
|
||||
ffi = { package = "gstreamer-base-sys", path = "sys", features = ["v1_8"] }
|
||||
|
@ -27,7 +28,8 @@ gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
|
|||
default = []
|
||||
v1_10 = ["gst/v1_10", "ffi/v1_10"]
|
||||
v1_12 = ["gst/v1_12", "ffi/v1_12", "v1_10"]
|
||||
v1_14 = ["gst/v1_14", "ffi/v1_14", "v1_12"]
|
||||
v1_12_1 = ["gst/v1_12_1", "ffi/v1_12_1", "v1_12"]
|
||||
v1_14 = ["gst/v1_14", "ffi/v1_14", "v1_12_1"]
|
||||
v1_14_1 = ["gst/v1_14", "ffi/v1_14_1", "v1_14"]
|
||||
v1_16 = ["gst/v1_16", "ffi/v1_16", "v1_14_1"]
|
||||
v1_18 = ["gst/v1_18", "ffi/v1_18", "v1_16"]
|
||||
|
|
|
@ -8,8 +8,24 @@ glib::wrapper! {
|
|||
pub struct FlowCombiner(Shared<ffi::GstFlowCombiner>);
|
||||
|
||||
match fn {
|
||||
ref => |ptr| glib::gobject_ffi::g_boxed_copy(ffi::gst_flow_combiner_get_type(), ptr as *mut _),
|
||||
unref => |ptr| glib::gobject_ffi::g_boxed_free(ffi::gst_flow_combiner_get_type(), ptr as *mut _),
|
||||
ref => |ptr| {
|
||||
// cfg_if emits code in blocks (curly braces) and `ref` handling inserts a
|
||||
// trailing semicolon to void an optionally returned value. The linter
|
||||
// requests the resulting { ..ref() }; to be simplified making it unsuitable.
|
||||
#[cfg(feature = "v1_12_1")]
|
||||
ffi::gst_flow_combiner_ref(ptr);
|
||||
#[cfg(not(feature = "v1_12_1"))]
|
||||
glib::gobject_ffi::g_boxed_copy(ffi::gst_flow_combiner_get_type(), ptr as *mut _);
|
||||
},
|
||||
unref => |ptr| {
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(feature = "v1_12_1")] {
|
||||
ffi::gst_flow_combiner_unref(ptr)
|
||||
} else {
|
||||
glib::gobject_ffi::g_boxed_free(ffi::gst_flow_combiner_get_type(), ptr as *mut _)
|
||||
}
|
||||
}
|
||||
},
|
||||
get_type => || ffi::gst_flow_combiner_get_type(),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,8 +24,12 @@ glib::wrapper! {
|
|||
pub struct SDPMessage(Boxed<ffi::GstSDPMessage>);
|
||||
|
||||
match fn {
|
||||
copy => |ptr| glib::gobject_ffi::g_boxed_copy(ffi::gst_sdp_message_get_type(), ptr as *mut _) as *mut ffi::GstSDPMessage,
|
||||
free => |ptr| glib::gobject_ffi::g_boxed_free(ffi::gst_sdp_message_get_type(), ptr as *mut _),
|
||||
copy => |ptr| {
|
||||
let mut copy = std::ptr::null_mut();
|
||||
assert_eq!(ffi::gst_sdp_message_copy(ptr, &mut copy), ffi::GST_SDP_OK);
|
||||
copy
|
||||
},
|
||||
free => |ptr| assert_eq!(ffi::gst_sdp_message_free(ptr), ffi::GST_SDP_OK),
|
||||
get_type => || ffi::gst_sdp_message_get_type(),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,7 +44,8 @@ futures-executor = "0.3.1"
|
|||
default = []
|
||||
v1_10 = ["ffi/v1_10"]
|
||||
v1_12 = ["ffi/v1_12", "v1_10"]
|
||||
v1_14 = ["ffi/v1_14", "v1_12"]
|
||||
v1_12_1 = ["ffi/v1_12_1", "v1_12"]
|
||||
v1_14 = ["ffi/v1_14", "v1_12_1"]
|
||||
v1_16 = ["ffi/v1_16", "v1_14"]
|
||||
v1_18 = ["ffi/v1_18", "v1_16"]
|
||||
v1_20 = ["ffi/v1_20", "v1_18"]
|
||||
|
|
|
@ -8,11 +8,15 @@ glib::wrapper! {
|
|||
|
||||
match fn {
|
||||
copy => |ptr| {
|
||||
glib::gobject_ffi::g_boxed_copy(ffi::gst_parse_context_get_type(), ptr as *mut _) as *mut ffi::GstParseContext
|
||||
},
|
||||
free => |ptr| {
|
||||
glib::gobject_ffi::g_boxed_free(ffi::gst_parse_context_get_type(), ptr as *mut _)
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(feature = "v1_12_1")] {
|
||||
ffi::gst_parse_context_copy(ptr)
|
||||
} else {
|
||||
glib::gobject_ffi::g_boxed_copy(ffi::gst_parse_context_get_type(), ptr as *mut _) as *mut ffi::GstParseContext
|
||||
}
|
||||
}
|
||||
},
|
||||
free => |ptr| ffi::gst_parse_context_free(ptr),
|
||||
get_type => || ffi::gst_parse_context_get_type(),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue