Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2020-07-02 13:50:42 +0300
committerSebastian Dröge <sebastian@centricular.com>2020-07-02 14:46:59 +0300
commit7945de32ebf99d6e4678b677a91e88e2d696d213 (patch)
tree9862c8b4cf95dd595922fb9eac6f081c65faa034
parent44ad0a2f52550630178ccce35753c1bd45863029 (diff)
fallbackswitch: Report None as active-pad if we had no output yet
Instead of the main stream, pretending all to be ok.
-rw-r--r--utils/fallbackswitch/src/fallbackswitch.rs22
1 files changed, 14 insertions, 8 deletions
diff --git a/utils/fallbackswitch/src/fallbackswitch.rs b/utils/fallbackswitch/src/fallbackswitch.rs
index 47ca1055b..d0d1bacf0 100644
--- a/utils/fallbackswitch/src/fallbackswitch.rs
+++ b/utils/fallbackswitch/src/fallbackswitch.rs
@@ -38,7 +38,7 @@ use std::sync::{Mutex, RwLock};
struct FallbackSwitch {
sinkpad: gst_base::AggregatorPad,
fallback_sinkpad: RwLock<Option<gst_base::AggregatorPad>>,
- active_sinkpad: Mutex<gst::Pad>,
+ active_sinkpad: Mutex<Option<gst::Pad>>,
output_state: Mutex<OutputState>,
pad_states: RwLock<PadStates>,
settings: Mutex<Settings>,
@@ -149,7 +149,7 @@ impl FallbackSwitch {
}
let mut active_sinkpad = self.active_sinkpad.lock().unwrap();
- let pad_change = &*active_sinkpad != self.sinkpad.upcast_ref::<gst::Pad>();
+ let pad_change = active_sinkpad.as_ref() != Some(self.sinkpad.upcast_ref::<gst::Pad>());
if pad_change {
if buffer.get_flags().contains(gst::BufferFlags::DELTA_UNIT) {
gst_info!(
@@ -166,7 +166,7 @@ impl FallbackSwitch {
}
gst_info!(CAT, obj: agg, "Active pad changed to sinkpad");
- *active_sinkpad = self.sinkpad.clone().upcast();
+ *active_sinkpad = Some(self.sinkpad.clone().upcast());
}
drop(active_sinkpad);
@@ -275,7 +275,8 @@ impl FallbackSwitch {
);
let mut active_sinkpad = self.active_sinkpad.lock().unwrap();
- let pad_change = &*active_sinkpad != fallback_sinkpad.upcast_ref::<gst::Pad>();
+ let pad_change =
+ active_sinkpad.as_ref() != Some(fallback_sinkpad.upcast_ref::<gst::Pad>());
if pad_change {
if buffer.get_flags().contains(gst::BufferFlags::DELTA_UNIT) {
gst_info!(
@@ -292,7 +293,7 @@ impl FallbackSwitch {
}
gst_info!(CAT, obj: agg, "Active pad changed to fallback sinkpad");
- *active_sinkpad = fallback_sinkpad.clone().upcast();
+ *active_sinkpad = Some(fallback_sinkpad.clone().upcast());
}
drop(active_sinkpad);
@@ -374,9 +375,9 @@ impl ObjectSubclass for FallbackSwitch {
.unwrap();
Self {
- sinkpad: sinkpad.clone(),
+ sinkpad,
fallback_sinkpad: RwLock::new(None),
- active_sinkpad: Mutex::new(sinkpad.upcast()),
+ active_sinkpad: Mutex::new(None),
output_state: Mutex::new(OutputState::default()),
pad_states: RwLock::new(PadStates::default()),
settings: Mutex::new(Settings::default()),
@@ -535,13 +536,18 @@ impl ElementImpl for FallbackSwitch {
impl AggregatorImpl for FallbackSwitch {
fn start(&self, _agg: &gst_base::Aggregator) -> Result<(), gst::ErrorMessage> {
- *self.active_sinkpad.lock().unwrap() = self.sinkpad.clone().upcast();
*self.output_state.lock().unwrap() = OutputState::default();
*self.pad_states.write().unwrap() = PadStates::default();
Ok(())
}
+ fn stop(&self, _agg: &gst_base::Aggregator) -> Result<(), gst::ErrorMessage> {
+ *self.active_sinkpad.lock().unwrap() = None;
+
+ Ok(())
+ }
+
fn sink_event_pre_queue(
&self,
agg: &gst_base::Aggregator,