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

github.com/sdroege/gst-plugin-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu@centricular.com>2022-05-24 22:06:29 +0300
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2022-05-25 20:35:04 +0300
commit77260a8442fea3db4c22ce81df9766493ebe8fc6 (patch)
tree723c6b7d438c961503fb8fb351b56ad740be3310
parent68c55ca4136f01266ae02dea6acbec363f3f0957 (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.rs11
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)
}