subtitle: fix subtitle clock
This commit is contained in:
parent
59b3b21381
commit
5aca246828
1 changed files with 5 additions and 5 deletions
10
src/video.rs
10
src/video.rs
|
@ -320,6 +320,7 @@ impl Video {
|
||||||
.map_err(|_| gst::FlowError::Error)? = Instant::now();
|
.map_err(|_| gst::FlowError::Error)? = Instant::now();
|
||||||
|
|
||||||
let buffer = sample.buffer().ok_or(gst::FlowError::Error)?;
|
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 map = buffer.map_readable().map_err(|_| gst::FlowError::Error)?;
|
||||||
|
|
||||||
let mut frame = frame_ref.lock().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);
|
upload_frame_ref.swap(true, Ordering::SeqCst);
|
||||||
|
|
||||||
if let Some(at) = clear_subtitles_at {
|
if let Some(at) = clear_subtitles_at {
|
||||||
if Instant::now() >= at {
|
if pts >= at {
|
||||||
*subtitle_text_ref
|
*subtitle_text_ref
|
||||||
.lock()
|
.lock()
|
||||||
.map_err(|_| gst::FlowError::Error)? = None;
|
.map_err(|_| gst::FlowError::Error)? = None;
|
||||||
|
@ -343,7 +344,8 @@ impl Video {
|
||||||
.and_then(|sink| sink.try_pull_sample(gst::ClockTime::from_seconds(0)));
|
.and_then(|sink| sink.try_pull_sample(gst::ClockTime::from_seconds(0)));
|
||||||
if let Some(text) = text {
|
if let Some(text) = text {
|
||||||
let text = text.buffer().ok_or(gst::FlowError::Error)?;
|
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 map = text.map_readable().map_err(|_| gst::FlowError::Error)?;
|
||||||
|
|
||||||
let text = html_escape::decode_html_entities(
|
let text = html_escape::decode_html_entities(
|
||||||
|
@ -356,9 +358,7 @@ impl Video {
|
||||||
.map_err(|_| gst::FlowError::Error)? = Some(text);
|
.map_err(|_| gst::FlowError::Error)? = Some(text);
|
||||||
upload_text_ref.store(true, Ordering::SeqCst);
|
upload_text_ref.store(true, Ordering::SeqCst);
|
||||||
|
|
||||||
clear_subtitles_at = duration.map(|duration| {
|
clear_subtitles_at = Some(pts + duration);
|
||||||
Instant::now() + Duration::from_nanos(duration.nseconds())
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue