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:
-rw-r--r--utils/livesync/src/livesync/imp.rs70
1 files changed, 36 insertions, 34 deletions
diff --git a/utils/livesync/src/livesync/imp.rs b/utils/livesync/src/livesync/imp.rs
index 4d4e6a09f..929e86b85 100644
--- a/utils/livesync/src/livesync/imp.rs
+++ b/utils/livesync/src/livesync/imp.rs
@@ -1028,6 +1028,42 @@ impl LiveSync {
}
state.srcresult?;
+ if let Some(out_timestamp) = state.out_timestamp {
+ let sync_ts = out_timestamp.end;
+
+ let element = self.obj();
+
+ let base_time = element.base_time().ok_or_else(|| {
+ gst::error!(CAT, imp: self, "Missing base time");
+ gst::FlowError::Flushing
+ })?;
+
+ let clock = element.clock().ok_or_else(|| {
+ gst::error!(CAT, imp: self, "Missing clock");
+ gst::FlowError::Flushing
+ })?;
+
+ let clock_id = clock.new_single_shot_id(base_time + sync_ts);
+ state.clock_id = Some(clock_id.clone());
+
+ gst::trace!(
+ CAT,
+ imp: self,
+ "Waiting for clock to reach {}",
+ clock_id.time(),
+ );
+
+ let (res, _) = MutexGuard::unlocked(&mut state, || clock_id.wait());
+ gst::trace!(CAT, imp: self, "Clock returned {res:?}",);
+
+ if res == Err(gst::ClockError::Unscheduled) {
+ return Err(gst::FlowError::Flushing);
+ }
+
+ state.srcresult?;
+ state.clock_id = None;
+ }
+
let in_item = state.queue.pop_front();
gst::trace!(CAT, imp: self, "Unqueueing {:?}", in_item);
@@ -1184,40 +1220,6 @@ impl LiveSync {
state.out_segment = Some(segment);
}
- {
- let element = self.obj();
-
- let base_time = element.base_time().ok_or_else(|| {
- gst::error!(CAT, imp: self, "Missing base time");
- gst::FlowError::Flushing
- })?;
-
- let clock = element.clock().ok_or_else(|| {
- gst::error!(CAT, imp: self, "Missing clock");
- gst::FlowError::Flushing
- })?;
-
- let clock_id = clock.new_single_shot_id(base_time + sync_ts);
- state.clock_id = Some(clock_id.clone());
-
- gst::trace!(
- CAT,
- imp: self,
- "Waiting for clock to reach {}",
- clock_id.time(),
- );
-
- let (res, _) = MutexGuard::unlocked(&mut state, || clock_id.wait());
- gst::trace!(CAT, imp: self, "Clock returned {res:?}",);
-
- if res == Err(gst::ClockError::Unscheduled) {
- return Err(gst::FlowError::Flushing);
- }
-
- state.srcresult?;
- state.clock_id = None;
- }
-
state.num_out += 1;
if duplicate {
state.num_duplicate += 1;