mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-11-25 11:01:10 +00:00
gstreamer: Return some values by reference instead
Less refcounting. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1183>
This commit is contained in:
parent
32a608b76b
commit
1e793f3b65
13 changed files with 36 additions and 17 deletions
|
@ -121,7 +121,7 @@ fn example_main() {
|
|||
MessageView::StateChanged(state_changed) =>
|
||||
// We are only interested in state-changed messages from playbin
|
||||
{
|
||||
if state_changed.src().map(|s| s == playbin).unwrap_or(false)
|
||||
if state_changed.src().map(|s| s == &playbin).unwrap_or(false)
|
||||
&& state_changed.current() == gst::State::Playing
|
||||
{
|
||||
// Generate a dot graph of the pipeline to GST_DEBUG_DUMP_DOT_DIR if defined
|
||||
|
|
|
@ -253,7 +253,7 @@ fn example_main() -> Result<(), Error> {
|
|||
}
|
||||
MessageView::StateChanged(s) => {
|
||||
if let Some(element) = msg.src() {
|
||||
if element == pipeline && s.current() == gst::State::Playing {
|
||||
if element == &pipeline && s.current() == gst::State::Playing {
|
||||
eprintln!("PLAYING");
|
||||
gst::debug_bin_to_dot_file(
|
||||
&pipeline,
|
||||
|
|
|
@ -179,7 +179,7 @@ fn example_main() -> Result<(), Error> {
|
|||
}
|
||||
MessageView::StateChanged(s) => {
|
||||
if let Some(element) = msg.src() {
|
||||
if element == pipeline && s.current() == gst::State::Playing {
|
||||
if element == &pipeline && s.current() == gst::State::Playing {
|
||||
eprintln!("PLAYING");
|
||||
gst::debug_bin_to_dot_file(
|
||||
&pipeline,
|
||||
|
|
|
@ -414,7 +414,7 @@ impl App {
|
|||
let context_type = ctxt.context_type();
|
||||
if context_type == *gst_gl::GL_DISPLAY_CONTEXT_TYPE {
|
||||
if let Some(el) =
|
||||
msg.src().map(|s| s.downcast::<gst::Element>().unwrap())
|
||||
msg.src().map(|s| s.downcast_ref::<gst::Element>().unwrap())
|
||||
{
|
||||
let context = gst::Context::new(context_type, true);
|
||||
context.set_gl_display(&gl_display);
|
||||
|
@ -423,7 +423,7 @@ impl App {
|
|||
}
|
||||
if context_type == "gst.gl.app_context" {
|
||||
if let Some(el) =
|
||||
msg.src().map(|s| s.downcast::<gst::Element>().unwrap())
|
||||
msg.src().map(|s| s.downcast_ref::<gst::Element>().unwrap())
|
||||
{
|
||||
let mut context = gst::Context::new(context_type, true);
|
||||
{
|
||||
|
|
|
@ -166,8 +166,14 @@ impl Memory {
|
|||
|
||||
impl MemoryRef {
|
||||
#[doc(alias = "get_allocator")]
|
||||
pub fn allocator(&self) -> Option<Allocator> {
|
||||
unsafe { from_glib_none(self.0.allocator) }
|
||||
pub fn allocator(&self) -> Option<&Allocator> {
|
||||
unsafe {
|
||||
if self.0.allocator.is_null() {
|
||||
None
|
||||
} else {
|
||||
Some(&*(&self.0.allocator as *const *mut ffi::GstAllocator as *const Allocator))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(alias = "get_parent")]
|
||||
|
|
|
@ -17,8 +17,14 @@ mini_object_wrapper!(Message, MessageRef, ffi::GstMessage, || {
|
|||
|
||||
impl MessageRef {
|
||||
#[doc(alias = "get_src")]
|
||||
pub fn src(&self) -> Option<Object> {
|
||||
unsafe { from_glib_none((*self.as_ptr()).src) }
|
||||
pub fn src(&self) -> Option<&Object> {
|
||||
unsafe {
|
||||
if (*self.as_ptr()).src.is_null() {
|
||||
None
|
||||
} else {
|
||||
Some(&*(&(*self.as_ptr()).src as *const *mut ffi::GstObject as *const Object))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(alias = "get_seqnum")]
|
||||
|
|
|
@ -239,11 +239,18 @@ impl ParamSpecArray {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn element_spec(&self) -> Option<ParamSpec> {
|
||||
pub fn element_spec(&self) -> Option<&ParamSpec> {
|
||||
unsafe {
|
||||
let ptr = self.as_ptr();
|
||||
|
||||
from_glib_none((*ptr).element_spec)
|
||||
if (*ptr).element_spec.is_null() {
|
||||
None
|
||||
} else {
|
||||
Some(
|
||||
&*(&(*ptr).element_spec as *const *mut glib::gobject_ffi::GParamSpec
|
||||
as *const glib::ParamSpec),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ fn tutorial_main() {
|
|||
break;
|
||||
}
|
||||
MessageView::StateChanged(state_changed) => {
|
||||
if state_changed.src().map(|s| s == pipeline).unwrap_or(false) {
|
||||
if state_changed.src().map(|s| s == &pipeline).unwrap_or(false) {
|
||||
println!(
|
||||
"Pipeline state changed from {:?} to {:?}",
|
||||
state_changed.old(),
|
||||
|
|
|
@ -128,7 +128,7 @@ fn handle_message(custom_data: &mut CustomData, msg: &gst::Message) {
|
|||
MessageView::StateChanged(state_changed) => {
|
||||
if state_changed
|
||||
.src()
|
||||
.map(|s| s == custom_data.playbin)
|
||||
.map(|s| s == &custom_data.playbin)
|
||||
.unwrap_or(false)
|
||||
{
|
||||
let new_state = state_changed.current();
|
||||
|
|
|
@ -360,7 +360,7 @@ mod tutorial5 {
|
|||
// This is called when the pipeline changes states. We use it to
|
||||
// keep track of the current state.
|
||||
gst::MessageView::StateChanged(state_changed) => {
|
||||
if state_changed.src().map(|s| s == pipeline).unwrap_or(false) {
|
||||
if state_changed.src().map(|s| s == &pipeline).unwrap_or(false) {
|
||||
println!("State set to {:?}", state_changed.current());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -141,7 +141,7 @@ fn tutorial_main() {
|
|||
MessageView::StateChanged(state_changed) =>
|
||||
// We are only interested in state-changed messages from the pipeline
|
||||
{
|
||||
if state_changed.src().map(|s| s == pipeline).unwrap_or(false) {
|
||||
if state_changed.src().map(|s| s == &pipeline).unwrap_or(false) {
|
||||
let new_state = state_changed.current();
|
||||
let old_state = state_changed.old();
|
||||
|
||||
|
|
|
@ -155,7 +155,7 @@ fn tutorial_main() -> Result<(), Error> {
|
|||
MessageView::StateChanged(state_changed) => {
|
||||
if state_changed
|
||||
.src()
|
||||
.map(|s| s == playbin_clone)
|
||||
.map(|s| s == &playbin_clone)
|
||||
.unwrap_or(false)
|
||||
&& state_changed.current() == gst::State::Playing
|
||||
{
|
||||
|
|
|
@ -160,7 +160,7 @@ fn tutorial_main() -> Result<(), Error> {
|
|||
MessageView::StateChanged(state_changed) => {
|
||||
if state_changed
|
||||
.src()
|
||||
.map(|s| s == playbin_clone)
|
||||
.map(|s| s == &playbin_clone)
|
||||
.unwrap_or(false)
|
||||
&& state_changed.current() == gst::State::Playing
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue