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
path: root/utils
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2020-05-20 12:02:27 +0300
committerSebastian Dröge <sebastian@centricular.com>2020-05-20 12:13:25 +0300
commit026bbde403fc95421a040b6722bb7cf245801fa8 (patch)
tree8ba26e1ad28f416a0c9634829494cb18b8c760fc /utils
parent09c30d73f11bb8a9c9607a70aad686e699436582 (diff)
utils/fallbacksrc: Also handle gap events like buffers for blocking pads
Diffstat (limited to 'utils')
-rw-r--r--utils/fallbackswitch/src/fallbacksrc.rs17
1 files changed, 11 insertions, 6 deletions
diff --git a/utils/fallbackswitch/src/fallbacksrc.rs b/utils/fallbackswitch/src/fallbacksrc.rs
index 369da4faf..fd59e7a81 100644
--- a/utils/fallbackswitch/src/fallbacksrc.rs
+++ b/utils/fallbackswitch/src/fallbacksrc.rs
@@ -1081,20 +1081,26 @@ impl FallbackSrc {
let element_weak = element.downgrade();
let probe_id = pad
.add_probe(
- gst::PadProbeType::BLOCK | gst::PadProbeType::BUFFER,
+ gst::PadProbeType::BLOCK
+ | gst::PadProbeType::BUFFER
+ | gst::PadProbeType::EVENT_DOWNSTREAM,
move |pad, info| {
let element = match element_weak.upgrade() {
None => return gst::PadProbeReturn::Pass,
Some(element) => element,
};
- let buffer = match info.data {
- Some(gst::PadProbeData::Buffer(ref buffer)) => buffer,
+ let pts = match info.data {
+ Some(gst::PadProbeData::Buffer(ref buffer)) => buffer.get_pts(),
+ Some(gst::PadProbeData::Event(ref ev)) => match ev.view() {
+ gst::EventView::Gap(ref ev) => ev.get().0,
+ _ => return gst::PadProbeReturn::Pass,
+ },
_ => unreachable!(),
};
let src = FallbackSrc::from_instance(&element);
- if let Err(msg) = src.handle_pad_blocked(&element, pad, buffer) {
+ if let Err(msg) = src.handle_pad_blocked(&element, pad, pts) {
element.post_error_message(&msg);
}
@@ -1114,7 +1120,7 @@ impl FallbackSrc {
&self,
element: &gst::Bin,
pad: &gst::Pad,
- buffer: &gst::BufferRef,
+ pts: gst::ClockTime,
) -> Result<(), gst::ErrorMessage> {
gst_debug!(CAT, obj: element, "Called probe on pad {}", pad.get_name());
@@ -1181,7 +1187,6 @@ impl FallbackSrc {
gst_error_msg!(gst::CoreError::Clock, ["Have no time segment"])
})?;
- let pts = buffer.get_pts();
let running_time = if pts < segment.get_start() {
segment.get_start()
} else if segment.get_stop().is_some() && pts >= segment.get_stop() {