diff --git a/gstreamer/src/value.rs b/gstreamer/src/value.rs index 736e3b07d..34c97f6bd 100644 --- a/gstreamer/src/value.rs +++ b/gstreamer/src/value.rs @@ -724,6 +724,31 @@ impl Array { } } } + + pub fn append_value(&mut self, value: glib::SendValue) { + unsafe { + ffi::gst_value_array_append_and_take_value( + self.0.to_glib_none_mut().0, + &mut value.into_raw(), + ); + } + } + + pub fn append(&mut self, value: impl Into + Send) { + self.append_value(glib::SendValue::from_owned(value)); + } +} + +impl Default for Array { + fn default() -> Self { + assert_initialized_main_thread!(); + + unsafe { + let value = glib::Value::for_value_type::(); + + Self(glib::SendValue::unsafe_from(value.into_raw())) + } + } } impl ops::Deref for Array { @@ -747,6 +772,14 @@ impl std::iter::FromIterator for Array { } } +impl std::iter::Extend for Array { + fn extend>(&mut self, iter: T) { + for v in iter.into_iter() { + self.append_value(v); + } + } +} + impl glib::value::ValueType for Array { type Type = Self; } @@ -906,6 +939,31 @@ impl List { } } } + + pub fn append_value(&mut self, value: glib::SendValue) { + unsafe { + ffi::gst_value_list_append_and_take_value( + self.0.to_glib_none_mut().0, + &mut value.into_raw(), + ); + } + } + + pub fn append(&mut self, value: impl Into + Send) { + self.append_value(glib::SendValue::from_owned(value)); + } +} + +impl Default for List { + fn default() -> Self { + assert_initialized_main_thread!(); + + unsafe { + let value = glib::Value::for_value_type::(); + + Self(glib::SendValue::unsafe_from(value.into_raw())) + } + } } impl ops::Deref for List { @@ -929,6 +987,14 @@ impl std::iter::FromIterator for List { } } +impl std::iter::Extend for List { + fn extend>(&mut self, iter: T) { + for v in iter.into_iter() { + self.append_value(v); + } + } +} + impl glib::value::ValueType for List { type Type = Self; }