From 95317267ec79d8017ded5878a64ef13625ff7432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 25 Oct 2017 12:56:32 +0200 Subject: [PATCH] Add BinExtManual::get_children() that returns a Vec This is sometimes more convenient than using the iterator. --- gstreamer/src/bin.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gstreamer/src/bin.rs b/gstreamer/src/bin.rs index 1178fa26d..ea510bac8 100644 --- a/gstreamer/src/bin.rs +++ b/gstreamer/src/bin.rs @@ -11,7 +11,7 @@ use Element; use glib; use glib::IsA; -use glib::translate::{from_glib, from_glib_full, ToGlib, ToGlibPtr}; +use glib::translate::{from_glib, from_glib_full, FromGlibPtrContainer, ToGlib, ToGlibPtr}; use ffi; @@ -25,6 +25,7 @@ pub trait BinExtManual { fn iterate_sinks(&self) -> ::Iterator; fn iterate_sorted(&self) -> ::Iterator; fn iterate_sources(&self) -> ::Iterator; + fn get_children(&self) -> Vec; } impl> BinExtManual for O { @@ -86,4 +87,13 @@ impl> BinExtManual for O { fn iterate_sources(&self) -> ::Iterator { unsafe { from_glib_full(ffi::gst_bin_iterate_sources(self.to_glib_none().0)) } } + + fn get_children(&self) -> Vec { + unsafe { + let stash = self.to_glib_none(); + let bin: &ffi::GstBin = &*stash.0; + ::utils::MutexGuard::lock(&bin.element.object.lock); + FromGlibPtrContainer::from_glib_none(bin.children) + } + } }