mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-03-08 22:41:10 +00:00
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:
parent
3feb4fcf51
commit
ccf8adb6ae
2 changed files with 6 additions and 2 deletions
|
@ -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![];
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue