From 5aca2468289e3bcd157969aace8860b753f9c634 Mon Sep 17 00:00:00 2001 From: jazzfool Date: Sun, 3 Nov 2024 21:31:58 +1100 Subject: [PATCH] subtitle: fix subtitle clock --- src/video.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/video.rs b/src/video.rs index 2306c56..6f11fb9 100644 --- a/src/video.rs +++ b/src/video.rs @@ -320,6 +320,7 @@ impl Video { .map_err(|_| gst::FlowError::Error)? = Instant::now(); let buffer = sample.buffer().ok_or(gst::FlowError::Error)?; + let pts = buffer.pts().unwrap_or_default(); let map = buffer.map_readable().map_err(|_| gst::FlowError::Error)?; let mut frame = frame_ref.lock().map_err(|_| gst::FlowError::Error)?; @@ -329,7 +330,7 @@ impl Video { upload_frame_ref.swap(true, Ordering::SeqCst); if let Some(at) = clear_subtitles_at { - if Instant::now() >= at { + if pts >= at { *subtitle_text_ref .lock() .map_err(|_| gst::FlowError::Error)? = None; @@ -343,7 +344,8 @@ impl Video { .and_then(|sink| sink.try_pull_sample(gst::ClockTime::from_seconds(0))); if let Some(text) = text { let text = text.buffer().ok_or(gst::FlowError::Error)?; - let duration = text.duration(); + let pts = text.pts().unwrap_or_default(); + let duration = text.duration().unwrap_or(gst::ClockTime::ZERO); let map = text.map_readable().map_err(|_| gst::FlowError::Error)?; let text = html_escape::decode_html_entities( @@ -356,9 +358,7 @@ impl Video { .map_err(|_| gst::FlowError::Error)? = Some(text); upload_text_ref.store(true, Ordering::SeqCst); - clear_subtitles_at = duration.map(|duration| { - Instant::now() + Duration::from_nanos(duration.nseconds()) - }); + clear_subtitles_at = Some(pts + duration); } Ok(())