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:
authorJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>2023-10-25 00:09:11 +0300
committerJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>2023-10-25 12:03:15 +0300
commit0a45f776e0a38b994b3e49bab390c64602f2de8b (patch)
treeed7bf1189be81586548afd9b1f0655bc09c10382 /utils/livesync
parent01386b845178e85f4fe1795e4652e5aa0a942657 (diff)
livesync: Simplify start_src_task and src_loop
This should effect no change in behavior. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1369>
Diffstat (limited to 'utils/livesync')
-rw-r--r--utils/livesync/src/livesync/imp.rs39
1 files changed, 13 insertions, 26 deletions
diff --git a/utils/livesync/src/livesync/imp.rs b/utils/livesync/src/livesync/imp.rs
index 72d54573c..418862dbb 100644
--- a/utils/livesync/src/livesync/imp.rs
+++ b/utils/livesync/src/livesync/imp.rs
@@ -968,31 +968,17 @@ impl LiveSync {
Ok(gst::FlowSuccess::Ok)
}
- fn start_src_task(&self) -> Result<(), glib::BoolError> {
- self.srcpad.start_task({
- let pad = self.srcpad.downgrade();
- move || {
- let pad = pad.upgrade().unwrap();
- let parent = pad.parent_element().unwrap();
- let livesync = parent.downcast_ref::<super::LiveSync>().unwrap();
- let ret = livesync.imp().src_loop(&pad);
-
- if !ret {
- gst::log!(CAT, obj: &parent, "Loop stopping");
- let _ = pad.pause_task();
- }
- }
- })
+ fn start_src_task(&self, state: &mut State) -> Result<(), glib::BoolError> {
+ let imp = self.ref_counted();
+ self.srcpad.start_task(move || imp.src_loop())
}
- fn src_loop(&self, pad: &gst::Pad) -> bool {
- let mut err = match self.src_loop_inner() {
- Ok(_) => return true,
- Err(e) => e,
+ fn src_loop(&self) {
+ let Err(mut err) = self.src_loop_inner() else {
+ return;
};
- let eos;
- {
+ let eos = {
let mut state = self.state.lock();
match state.srcresult {
@@ -1002,21 +988,22 @@ impl LiveSync {
// Communicate our flow return
Ok(_) => state.srcresult = Err(err),
}
- eos = state.eos;
state.clock_id = None;
-
self.cond.notify_all();
- }
+
+ state.eos
+ };
// Following GstQueue's behavior:
// > let app know about us giving up if upstream is not expected to do so
// > EOS is already taken care of elsewhere
if eos && !matches!(err, gst::FlowError::Flushing | gst::FlowError::Eos) {
self.flow_error(err);
- pad.push_event(gst::event::Eos::new());
+ self.srcpad.push_event(gst::event::Eos::new());
}
- false
+ gst::log!(CAT, imp: self, "Loop stopping");
+ let _ = self.srcpad.pause_task();
}
fn src_loop_inner(&self) -> Result<gst::FlowSuccess, gst::FlowError> {