diff options
author | Mathieu Duponchelle <mathieu@centricular.com> | 2022-05-24 22:06:29 +0300 |
---|---|---|
committer | GStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2022-05-25 20:35:04 +0300 |
commit | 77260a8442fea3db4c22ce81df9766493ebe8fc6 (patch) | |
tree | 723c6b7d438c961503fb8fb351b56ad740be3310 | |
parent | 68c55ca4136f01266ae02dea6acbec363f3f0957 (diff) |
onvifaggregator: implement proper EOS support
We could otherwise busy loop in aggregate forever when the meta
sink pad received EOS.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/765>
-rw-r--r-- | net/onvif/src/onvifaggregator/imp.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/net/onvif/src/onvifaggregator/imp.rs b/net/onvif/src/onvifaggregator/imp.rs index 4cd0ee9a..44de7464 100644 --- a/net/onvif/src/onvifaggregator/imp.rs +++ b/net/onvif/src/onvifaggregator/imp.rs @@ -317,6 +317,15 @@ impl OnvifAggregator { end ); Ok(Some((self.media_sink_pad.pop_buffer().unwrap(), Some(end)))) + } else if self.meta_sink_pad.is_eos() { + gst::debug!( + CAT, + obj: element, + "Media buffer spanning {} -> {} is ready (meta pad is EOS)", + start, + end + ); + Ok(Some((self.media_sink_pad.pop_buffer().unwrap(), Some(end)))) } else if let Some(latest_frame) = state.meta_frames.iter().next_back() { if latest_frame.timestamp > end { gst::debug!( @@ -428,6 +437,8 @@ impl AggregatorImpl for OnvifAggregator { element.set_position(buffer.pts().opt_add(buffer.duration())); self.finish_buffer(element, buffer) + } else if self.media_sink_pad.is_eos() { + Err(gst::FlowError::Eos) } else { Err(AGGREGATOR_FLOW_NEED_DATA) } |