closedcaption: only increase dtvcc packet sequence if we have services

Otherwise, we can produce DTVCC packets that skip sequence numbers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2103>
This commit is contained in:
Matthew Waters 2025-02-24 14:46:20 +11:00 committed by GStreamer Marge Bot
parent 3feb4fcf51
commit ccf8adb6ae
2 changed files with 6 additions and 2 deletions

View file

@ -346,7 +346,6 @@ impl AggregatorImpl for Cea708Mux {
}
let mut packet = DTVCCPacket::new(state.dtvcc_seq_no & 0x3);
state.dtvcc_seq_no = state.dtvcc_seq_no.wrapping_add(1);
for (_service_no, service) in services.into_iter().filter(|(_, s)| !s.codes().is_empty()) {
// FIXME: handle needing to split services
@ -357,6 +356,9 @@ impl AggregatorImpl for Cea708Mux {
service.number()
);
packet.push_service(service).unwrap();
if packet.sequence_no() == state.dtvcc_seq_no & 0x3 {
state.dtvcc_seq_no = state.dtvcc_seq_no.wrapping_add(1);
}
}
let mut data = vec![];

View file

@ -264,13 +264,15 @@ impl TextToCea708 {
self.check_erase_display();
let seq_no = self.sequence_no;
self.sequence_no = (self.sequence_no + 1) & 0x3;
let mut packet = DTVCCPacket::new(seq_no);
gst::trace!(CAT, "New packet {}", packet.sequence_no());
while let Some(service) = self.service_writer.take_service(packet.free_space()) {
gst::trace!(CAT, "adding service {service:?} to packet");
packet.push_service(service).unwrap();
if seq_no == self.sequence_no {
self.sequence_no = (self.sequence_no + 1) & 0x3;
}
}
gst::trace!(CAT, "push packet to writer");
self.cc_data_writer.push_packet(packet);