From 0629a0283e177582c359bf0617e6bd6ead99edf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 15 Nov 2017 19:18:58 +0200 Subject: [PATCH] Use SendValue instead of Value for all our GValue usage We require types that can be sent between threads. --- gstreamer/src/caps.rs | 8 ++-- gstreamer/src/event.rs | 64 ++++++++++++++--------------- gstreamer/src/message.rs | 80 ++++++++++++++++++------------------- gstreamer/src/structure.rs | 25 ++++++------ gstreamer/src/tag_setter.rs | 8 ++-- gstreamer/src/tags.rs | 8 ++-- gstreamer/src/value.rs | 4 ++ 7 files changed, 101 insertions(+), 96 deletions(-) diff --git a/gstreamer/src/caps.rs b/gstreamer/src/caps.rs index ce1cc8ae4..50b10dfdc 100644 --- a/gstreamer/src/caps.rs +++ b/gstreamer/src/caps.rs @@ -16,7 +16,7 @@ use CapsIntersectMode; use glib; use ffi; use glib::translate::{from_glib, from_glib_full, ToGlib, ToGlibPtr}; -use glib::value::ToValue; +use glib::value::ToSendValue; #[repr(C)] pub struct CapsRef(ffi::GstCaps); @@ -43,7 +43,7 @@ impl GstRc { unsafe { from_glib_full(ffi::gst_caps_new_any()) } } - pub fn new_simple(name: &str, values: &[(&str, &ToValue)]) -> Self { + pub fn new_simple(name: &str, values: &[(&str, &ToSendValue)]) -> Self { assert_initialized_main_thread!(); let mut caps = Caps::new_empty(); @@ -117,7 +117,7 @@ impl str::FromStr for Caps { } impl CapsRef { - pub fn set_simple(&mut self, values: &[(&str, &ToValue)]) { + pub fn set_simple(&mut self, values: &[(&str, &ToSendValue)]) { for &(name, value) in values { let value = value.to_value(); @@ -382,7 +382,7 @@ impl Builder { } } - pub fn field(mut self, name: &str, value: V) -> Self { + pub fn field(mut self, name: &str, value: V) -> Self { self.s.set(name, value); self } diff --git a/gstreamer/src/event.rs b/gstreamer/src/event.rs index f2e957e3e..4cc5ab73b 100644 --- a/gstreamer/src/event.rs +++ b/gstreamer/src/event.rs @@ -15,7 +15,7 @@ use std::mem; use std::ffi::CStr; use glib; -use glib::value::ToValue; +use glib::value::ToSendValue; use glib::translate::{from_glib, from_glib_full, from_glib_none, ToGlib, ToGlibPtr}; #[cfg(any(feature = "v1_10", feature = "dox"))] @@ -723,7 +723,7 @@ macro_rules! event_builder_generic_impl { } } - pub fn other_fields(self, other_fields: &[(&'a str, &'a ToValue)]) -> Self { + pub fn other_fields(self, other_fields: &[(&'a str, &'a ToSendValue)]) -> Self { Self { other_fields: self.other_fields.iter().cloned() .chain(other_fields.iter().cloned()) @@ -750,7 +750,7 @@ macro_rules! event_builder_generic_impl { ); for (k, v) in self.other_fields { - s.set_value(k, v.to_value()); + s.set_value(k, v.to_send_value()); } } @@ -763,7 +763,7 @@ macro_rules! event_builder_generic_impl { pub struct FlushStartBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, } impl<'a> FlushStartBuilder<'a> { fn new() -> Self { @@ -781,7 +781,7 @@ impl<'a> FlushStartBuilder<'a> { pub struct FlushStopBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, reset_time: bool, } impl<'a> FlushStopBuilder<'a> { @@ -803,7 +803,7 @@ impl<'a> FlushStopBuilder<'a> { pub struct StreamStartBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, stream_id: &'a str, flags: Option<::StreamFlags>, group_id: Option, @@ -850,7 +850,7 @@ impl<'a> StreamStartBuilder<'a> { pub struct CapsBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, caps: &'a ::Caps, } impl<'a> CapsBuilder<'a> { @@ -870,7 +870,7 @@ impl<'a> CapsBuilder<'a> { pub struct SegmentBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, segment: &'a ::Segment, } impl<'a> SegmentBuilder<'a> { @@ -893,7 +893,7 @@ impl<'a> SegmentBuilder<'a> { pub struct StreamCollectionBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, stream_collection: &'a ::StreamCollection, } #[cfg(any(feature = "v1_10", feature = "dox"))] @@ -916,7 +916,7 @@ impl<'a> StreamCollectionBuilder<'a> { pub struct TagBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, tags: Option<::TagList>, } impl<'a> TagBuilder<'a> { @@ -939,7 +939,7 @@ impl<'a> TagBuilder<'a> { pub struct BufferSizeBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, minsize: ::FormatValue, maxsize: ::FormatValue, async: bool, @@ -970,7 +970,7 @@ impl<'a> BufferSizeBuilder<'a> { pub struct SinkMessageBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, name: &'a str, msg: &'a ::Message, } @@ -995,7 +995,7 @@ impl<'a> SinkMessageBuilder<'a> { pub struct StreamGroupDoneBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, uid: u32, } #[cfg(any(feature = "v1_10", feature = "dox"))] @@ -1016,7 +1016,7 @@ impl<'a> StreamGroupDoneBuilder<'a> { pub struct EosBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, } impl<'a> EosBuilder<'a> { fn new() -> Self { @@ -1034,7 +1034,7 @@ impl<'a> EosBuilder<'a> { pub struct TocBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, toc: &'a ::Toc, updated: bool, } @@ -1058,7 +1058,7 @@ impl<'a> TocBuilder<'a> { pub struct ProtectionBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, system_id: &'a str, data: &'a ::Buffer, origin: &'a str, @@ -1088,7 +1088,7 @@ impl<'a> ProtectionBuilder<'a> { pub struct SegmentDoneBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, position: ::FormatValue, } impl<'a> SegmentDoneBuilder<'a> { @@ -1110,7 +1110,7 @@ impl<'a> SegmentDoneBuilder<'a> { pub struct GapBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, timestamp: u64, duration: u64, } @@ -1132,7 +1132,7 @@ impl<'a> GapBuilder<'a> { pub struct QosBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, type_: ::QOSType, proportion: f64, diff: i64, @@ -1160,7 +1160,7 @@ impl<'a> QosBuilder<'a> { pub struct SeekBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, rate: f64, flags: ::SeekFlags, start_type: ::SeekType, @@ -1207,7 +1207,7 @@ impl<'a> SeekBuilder<'a> { pub struct NavigationBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, structure: Option, } impl<'a> NavigationBuilder<'a> { @@ -1233,7 +1233,7 @@ impl<'a> NavigationBuilder<'a> { pub struct LatencyBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, latency: u64, } impl<'a> LatencyBuilder<'a> { @@ -1253,7 +1253,7 @@ impl<'a> LatencyBuilder<'a> { pub struct StepBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, fmt: ::Format, amount: u64, rate: f64, @@ -1289,7 +1289,7 @@ impl<'a> StepBuilder<'a> { pub struct ReconfigureBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, } impl<'a> ReconfigureBuilder<'a> { fn new() -> Self { @@ -1307,7 +1307,7 @@ impl<'a> ReconfigureBuilder<'a> { pub struct TocSelectBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, uid: &'a str, } impl<'a> TocSelectBuilder<'a> { @@ -1330,7 +1330,7 @@ impl<'a> TocSelectBuilder<'a> { pub struct SelectStreamsBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, streams: &'a [&'a str], } #[cfg(any(feature = "v1_10", feature = "dox"))] @@ -1353,7 +1353,7 @@ impl<'a> SelectStreamsBuilder<'a> { pub struct CustomUpstreamBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, structure: Option, } impl<'a> CustomUpstreamBuilder<'a> { @@ -1380,7 +1380,7 @@ impl<'a> CustomUpstreamBuilder<'a> { pub struct CustomDownstreamBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, structure: Option, } impl<'a> CustomDownstreamBuilder<'a> { @@ -1407,7 +1407,7 @@ impl<'a> CustomDownstreamBuilder<'a> { pub struct CustomDownstreamOobBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, structure: Option, } impl<'a> CustomDownstreamOobBuilder<'a> { @@ -1436,7 +1436,7 @@ impl<'a> CustomDownstreamOobBuilder<'a> { pub struct CustomDownstreamStickyBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, structure: Option, } impl<'a> CustomDownstreamStickyBuilder<'a> { @@ -1465,7 +1465,7 @@ impl<'a> CustomDownstreamStickyBuilder<'a> { pub struct CustomBothBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, structure: Option, } impl<'a> CustomBothBuilder<'a> { @@ -1491,7 +1491,7 @@ impl<'a> CustomBothBuilder<'a> { pub struct CustomBothOobBuilder<'a> { seqnum: Option, running_time_offset: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, structure: Option, } impl<'a> CustomBothOobBuilder<'a> { diff --git a/gstreamer/src/message.rs b/gstreamer/src/message.rs index a7a232706..1f4b52062 100644 --- a/gstreamer/src/message.rs +++ b/gstreamer/src/message.rs @@ -19,7 +19,7 @@ use std::ffi::CStr; use glib; use glib::Cast; use glib::IsA; -use glib::value::ToValue; +use glib::value::ToSendValue; use glib::translate::{from_glib, from_glib_full, from_glib_none, mut_override, ToGlib, ToGlibPtr}; #[repr(C)] @@ -1131,7 +1131,7 @@ macro_rules! message_builder_generic_impl { } } - pub fn other_fields(self, other_fields: &[(&'a str, &'a ToValue)]) -> Self { + pub fn other_fields(self, other_fields: &[(&'a str, &'a ToSendValue)]) -> Self { Self { other_fields: self.other_fields.iter().cloned() .chain(other_fields.iter().cloned()) @@ -1155,7 +1155,7 @@ macro_rules! message_builder_generic_impl { ); for (k, v) in self.other_fields { - s.set_value(k, v.to_value()); + s.set_value(k, v.to_send_value()); } } @@ -1168,7 +1168,7 @@ macro_rules! message_builder_generic_impl { pub struct EosBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, } impl<'a> EosBuilder<'a> { fn new() -> Self { @@ -1193,7 +1193,7 @@ impl MessageErrorDomain for ::LibraryError {} pub struct ErrorBuilder<'a, T> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, error: T, message: &'a str, debug: Option<&'a str>, @@ -1261,7 +1261,7 @@ impl<'a, T: MessageErrorDomain> ErrorBuilder<'a, T> { pub struct WarningBuilder<'a, T> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, error: T, message: &'a str, debug: Option<&'a str>, @@ -1329,7 +1329,7 @@ impl<'a, T: MessageErrorDomain> WarningBuilder<'a, T> { pub struct InfoBuilder<'a, T> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, error: T, message: &'a str, debug: Option<&'a str>, @@ -1397,7 +1397,7 @@ impl<'a, T: MessageErrorDomain> InfoBuilder<'a, T> { pub struct TagBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, tags: &'a TagList, } impl<'a> TagBuilder<'a> { @@ -1419,7 +1419,7 @@ impl<'a> TagBuilder<'a> { pub struct BufferingBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, percent: i32, stats: Option<(::BufferingMode, i32, i32, i64)>, } @@ -1469,7 +1469,7 @@ impl<'a> BufferingBuilder<'a> { pub struct StateChangedBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, old: ::State, new: ::State, pending: ::State, @@ -1500,7 +1500,7 @@ impl<'a> StateChangedBuilder<'a> { pub struct StateDirtyBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, } impl<'a> StateDirtyBuilder<'a> { fn new() -> Self { @@ -1518,7 +1518,7 @@ impl<'a> StateDirtyBuilder<'a> { pub struct StepDoneBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, format: ::Format, amount: u64, rate: f64, @@ -1569,7 +1569,7 @@ impl<'a> StepDoneBuilder<'a> { pub struct ClockProvideBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, clock: &'a ::Clock, ready: bool, } @@ -1593,7 +1593,7 @@ impl<'a> ClockProvideBuilder<'a> { pub struct ClockLostBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, clock: &'a ::Clock, } impl<'a> ClockLostBuilder<'a> { @@ -1615,7 +1615,7 @@ impl<'a> ClockLostBuilder<'a> { pub struct NewClockBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, clock: &'a ::Clock, } impl<'a> NewClockBuilder<'a> { @@ -1637,7 +1637,7 @@ impl<'a> NewClockBuilder<'a> { pub struct StructureChangeBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, type_: ::StructureChangeType, owner: &'a ::Element, busy: bool, @@ -1668,7 +1668,7 @@ impl<'a> StructureChangeBuilder<'a> { pub struct StreamStatusBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, type_: ::StreamStatusType, owner: &'a ::Element, status_object: Option<&'a glib::Value>, @@ -1706,7 +1706,7 @@ impl<'a> StreamStatusBuilder<'a> { pub struct ApplicationBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, structure: Option<::Structure>, } impl<'a> ApplicationBuilder<'a> { @@ -1728,7 +1728,7 @@ impl<'a> ApplicationBuilder<'a> { pub struct ElementBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, structure: Option<::Structure>, } impl<'a> ElementBuilder<'a> { @@ -1750,7 +1750,7 @@ impl<'a> ElementBuilder<'a> { pub struct SegmentStartBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, position: ::FormatValue, } impl<'a> SegmentStartBuilder<'a> { @@ -1776,7 +1776,7 @@ impl<'a> SegmentStartBuilder<'a> { pub struct SegmentDoneBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, position: ::FormatValue, } impl<'a> SegmentDoneBuilder<'a> { @@ -1802,7 +1802,7 @@ impl<'a> SegmentDoneBuilder<'a> { pub struct DurationChangedBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, } impl<'a> DurationChangedBuilder<'a> { fn new() -> Self { @@ -1820,7 +1820,7 @@ impl<'a> DurationChangedBuilder<'a> { pub struct LatencyBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, } impl<'a> LatencyBuilder<'a> { fn new() -> Self { @@ -1838,7 +1838,7 @@ impl<'a> LatencyBuilder<'a> { pub struct AsyncStartBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, } impl<'a> AsyncStartBuilder<'a> { fn new() -> Self { @@ -1856,7 +1856,7 @@ impl<'a> AsyncStartBuilder<'a> { pub struct AsyncDoneBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, running_time: u64, } impl<'a> AsyncDoneBuilder<'a> { @@ -1878,7 +1878,7 @@ impl<'a> AsyncDoneBuilder<'a> { pub struct RequestStateBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, state: ::State, } impl<'a> RequestStateBuilder<'a> { @@ -1900,7 +1900,7 @@ impl<'a> RequestStateBuilder<'a> { pub struct StepStartBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, active: bool, format: ::Format, amount: u64, @@ -1947,7 +1947,7 @@ impl<'a> StepStartBuilder<'a> { pub struct QosBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, live: bool, running_time: u64, stream_time: u64, @@ -2009,7 +2009,7 @@ impl<'a> QosBuilder<'a> { pub struct ProgressBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, type_: ::ProgressType, code: Option<&'a str>, text: Option<&'a str>, @@ -2054,7 +2054,7 @@ impl<'a> ProgressBuilder<'a> { pub struct TocBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, toc: &'a ::Toc, updated: bool, } @@ -2078,7 +2078,7 @@ impl<'a> TocBuilder<'a> { pub struct ResetTimeBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, running_time: u64, } impl<'a> ResetTimeBuilder<'a> { @@ -2100,7 +2100,7 @@ impl<'a> ResetTimeBuilder<'a> { pub struct StreamStartBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, group_id: Option, } impl<'a> StreamStartBuilder<'a> { @@ -2133,7 +2133,7 @@ impl<'a> StreamStartBuilder<'a> { pub struct NeedContextBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, context_type: &'a str, } impl<'a> NeedContextBuilder<'a> { @@ -2155,7 +2155,7 @@ impl<'a> NeedContextBuilder<'a> { pub struct HaveContextBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, context: Option<::Context>, } impl<'a> HaveContextBuilder<'a> { @@ -2178,7 +2178,7 @@ impl<'a> HaveContextBuilder<'a> { pub struct DeviceAddedBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, device: &'a ::Device, } impl<'a> DeviceAddedBuilder<'a> { @@ -2200,7 +2200,7 @@ impl<'a> DeviceAddedBuilder<'a> { pub struct DeviceRemovedBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, device: &'a ::Device, } impl<'a> DeviceRemovedBuilder<'a> { @@ -2223,7 +2223,7 @@ impl<'a> DeviceRemovedBuilder<'a> { pub struct PropertyNotifyBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, property_name: &'a str, value: &'a glib::Value, } @@ -2253,7 +2253,7 @@ impl<'a> PropertyNotifyBuilder<'a> { pub struct StreamCollectionBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, collection: &'a ::StreamCollection, } #[cfg(any(feature = "v1_10", feature = "dox"))] @@ -2277,7 +2277,7 @@ impl<'a> StreamCollectionBuilder<'a> { pub struct StreamsSelectedBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, #[cfg(any(feature = "v1_10", feature = "dox"))] collection: &'a ::StreamCollection, #[cfg(any(feature = "v1_10", feature = "dox"))] @@ -2318,7 +2318,7 @@ impl<'a> StreamsSelectedBuilder<'a> { pub struct RedirectBuilder<'a> { src: Option, seqnum: Option, - other_fields: Vec<(&'a str, &'a ToValue)>, + other_fields: Vec<(&'a str, &'a ToSendValue)>, location: &'a str, tag_list: Option<&'a TagList>, entry_struct: Option, diff --git a/gstreamer/src/structure.rs b/gstreamer/src/structure.rs index 1f2124bdb..2b90417a0 100644 --- a/gstreamer/src/structure.rs +++ b/gstreamer/src/structure.rs @@ -20,12 +20,13 @@ use Fraction; use glib; use glib::translate::{from_glib, from_glib_full, from_glib_none, FromGlibPtrFull, FromGlibPtrNone, GlibPtrDefault, Stash, StashMut, ToGlib, ToGlibPtr, ToGlibPtrMut}; -use glib::value::{FromValueOptional, ToValue, Value}; +use glib::value::{FromValueOptional, ToSendValue, SendValue}; use ffi; use glib_ffi::gpointer; use gobject_ffi; pub struct Structure(*mut StructureRef, PhantomData); +unsafe impl Send for Structure { } impl Structure { pub fn builder(name: &str) -> Builder { @@ -41,12 +42,12 @@ impl Structure { ) } - pub fn new(name: &str, values: &[(&str, &ToValue)]) -> Structure { + pub fn new(name: &str, values: &[(&str, &ToSendValue)]) -> Structure { assert_initialized_main_thread!(); let mut structure = Structure::new_empty(name); for &(f, v) in values { - structure.set_value(f, v.to_value()); + structure.set_value(f, v.to_send_value()); } structure @@ -288,11 +289,11 @@ impl StructureRef { unsafe { from_glib_full(ffi::gst_structure_to_string(&self.0)) } } - pub fn get<'a, T: FromValueOptional<'a>>(&'a self, name: &str) -> Option { + pub fn get<'a, T: FromValueOptional<'a> + Send>(&'a self, name: &str) -> Option { self.get_value(name).and_then(|v| v.get()) } - pub fn get_value<'a>(&'a self, name: &str) -> Option<&Value> { + pub fn get_value<'a>(&'a self, name: &str) -> Option<&SendValue> { unsafe { let value = ffi::gst_structure_get_value(&self.0, name.to_glib_none().0); @@ -300,16 +301,16 @@ impl StructureRef { return None; } - Some(&*(value as *const Value)) + Some(&*(value as *const SendValue)) } } - pub fn set(&mut self, name: &str, value: T) { - let value = value.to_value(); + pub fn set(&mut self, name: &str, value: T) { + let value = value.to_send_value(); self.set_value(name, value); } - pub fn set_value(&mut self, name: &str, mut value: Value) { + pub fn set_value(&mut self, name: &str, mut value: SendValue) { unsafe { ffi::gst_structure_take_value( &mut self.0, @@ -567,9 +568,9 @@ impl<'a> Iter<'a> { } impl<'a> Iterator for Iter<'a> { - type Item = (&'a str, &'a Value); + type Item = (&'a str, &'a SendValue); - fn next(&mut self) -> Option<(&'a str, &'a Value)> { + fn next(&mut self) -> Option<(&'a str, &'a SendValue)> { if let Some(f) = self.iter.next() { let v = self.iter.structure.get_value(f); Some((f, v.unwrap())) @@ -607,7 +608,7 @@ impl Builder { } } - pub fn field(mut self, name: &str, value: V) -> Self { + pub fn field(mut self, name: &str, value: V) -> Self { self.s.set(name, value); self } diff --git a/gstreamer/src/tag_setter.rs b/gstreamer/src/tag_setter.rs index 2ca40e7d0..4c7ffa5b4 100644 --- a/gstreamer/src/tag_setter.rs +++ b/gstreamer/src/tag_setter.rs @@ -11,22 +11,22 @@ use TagSetter; use TagMergeMode; use glib::object::IsA; use glib::translate::*; -use glib::value::ToValue; +use glib::value::ToSendValue; use tags::*; pub trait TagSetterExtManual { fn add<'a, T: Tag<'a>>(&mut self, value: T::TagType, mode: TagMergeMode) where - T::TagType: ToValue; + T::TagType: ToSendValue; } impl> TagSetterExtManual for O { fn add<'a, T: Tag<'a>>(&mut self, value: T::TagType, mode: TagMergeMode) where - T::TagType: ToValue, + T::TagType: ToSendValue, { unsafe { - let v = value.to_value(); + let v = value.to_send_value(); ffi::gst_tag_setter_add_tag_value( self.to_glib_none().0, diff --git a/gstreamer/src/tags.rs b/gstreamer/src/tags.rs index 0c5798f99..0699d12ec 100644 --- a/gstreamer/src/tags.rs +++ b/gstreamer/src/tags.rs @@ -14,7 +14,7 @@ use std::ffi::CStr; use ffi; use glib; use glib::StaticType; -use glib::value::{FromValueOptional, SetValue, ToValue, TypedValue, Value}; +use glib::value::{FromValueOptional, SetValue, ToSendValue, TypedValue, Value}; use glib::translate::{from_glib, from_glib_full, ToGlib, ToGlibPtr, ToGlibPtrMut}; use miniobject::*; @@ -23,7 +23,7 @@ use TagMergeMode; use Sample; pub trait Tag<'a> { - type TagType: FromValueOptional<'a> + SetValue; + type TagType: FromValueOptional<'a> + SetValue + Send; fn tag_name<'b>() -> &'b str; } @@ -257,10 +257,10 @@ impl Default for GstRc { impl TagListRef { pub fn add<'a, T: Tag<'a>>(&mut self, value: T::TagType, mode: TagMergeMode) where - T::TagType: ToValue, + T::TagType: ToSendValue, { unsafe { - let v = value.to_value(); + let v = value.to_send_value(); ffi::gst_tag_list_add_value( self.as_mut_ptr(), diff --git a/gstreamer/src/value.rs b/gstreamer/src/value.rs index d371d0b79..0dbe85d2d 100644 --- a/gstreamer/src/value.rs +++ b/gstreamer/src/value.rs @@ -524,6 +524,8 @@ impl SetValue for Bitmask { #[derive(Clone, Debug)] pub struct Array<'a>(Cow<'a, [glib::Value]>); +unsafe impl<'a> Send for Array<'a> {} + impl<'a> Array<'a> { pub fn new(values: &[&ToValue]) -> Self { assert_initialized_main_thread!(); @@ -593,6 +595,8 @@ impl<'a> glib::types::StaticType for Array<'a> { #[derive(Clone, Debug)] pub struct List<'a>(Cow<'a, [glib::Value]>); +unsafe impl<'a> Send for List<'a> {} + impl<'a> List<'a> { pub fn new(values: &[&ToValue]) -> Self { assert_initialized_main_thread!();