mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-12-18 08:06:31 +00:00
cea708mux: handle different timestamped inputs
If different inputs have different framerates, then an input buffer may need to be combined or split. Account for that in the aggregate loop. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1942>
This commit is contained in:
parent
00cb3fefe9
commit
fe49837107
1 changed files with 10 additions and 22 deletions
|
@ -162,11 +162,6 @@ impl AggregatorImpl for Cea708Mux {
|
|||
.expect("Not a Cea708MuxSinkPad?!")
|
||||
}) {
|
||||
let mut pad_state = pad.imp().pad_state.lock().unwrap();
|
||||
// any data we currently have stored
|
||||
let have_pending = pad_state
|
||||
.pending_services
|
||||
.values()
|
||||
.any(|codes| !codes.is_empty());
|
||||
|
||||
if pad.is_eos() {
|
||||
if pad_state.pending_buffer.is_some() {
|
||||
|
@ -207,17 +202,10 @@ impl AggregatorImpl for Cea708Mux {
|
|||
}
|
||||
let duration = buffer.duration().unwrap_or(gst::ClockTime::ZERO);
|
||||
let buffer_end_ts = buffer_start_ts + duration;
|
||||
// allow a 1 second grace period before dropping data
|
||||
if start_running_time.saturating_sub(buffer_end_ts) > gst::ClockTime::from_seconds(1) {
|
||||
gst::warning!(CAT, obj = pad,
|
||||
"Dropping buffer because start_running_time {} is more than 1s later than buffer_end_ts {}",
|
||||
start_running_time.display(),
|
||||
buffer_end_ts.display());
|
||||
pad.drop_buffer();
|
||||
if !have_pending {
|
||||
need_data = true;
|
||||
}
|
||||
continue;
|
||||
if start_running_time.saturating_sub(buffer_end_ts) > gst::ClockTime::ZERO {
|
||||
// need to wait for the next input buffer which might need to be part of this
|
||||
// output buffer.
|
||||
need_data = true;
|
||||
}
|
||||
|
||||
let Ok(mapped) = buffer.map_readable() else {
|
||||
|
@ -242,6 +230,12 @@ impl AggregatorImpl for Cea708Mux {
|
|||
cc_data[1] = 0xFF;
|
||||
cc_data.extend(mapped.iter());
|
||||
pad_state.ccp_parser.push(&cc_data).unwrap();
|
||||
|
||||
if let Some(cea608) = pad_state.ccp_parser.cea608() {
|
||||
for pair in cea608 {
|
||||
state.writer.push_cea608(*pair);
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
|
@ -330,12 +324,6 @@ impl AggregatorImpl for Cea708Mux {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(cea608) = pad_state.ccp_parser.cea608() {
|
||||
for pair in cea608 {
|
||||
state.writer.push_cea608(*pair);
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue