#![allow(dead_code)]
pub fn zero_continuity_counters(data: &mut [u8]) {
const CC_MASK: u8 = 0x0F;
for chunk in data.chunks_mut(188) {
if chunk.len() >= 4 {
chunk[3] &= !CC_MASK;
}
}
}
pub fn xor_continuity_counters(data: &mut [u8], pattern: u8) {
const CC_MASK: u8 = 0x0F;
for (idx, chunk) in data.chunks_mut(188).enumerate() {
if chunk.len() >= 4 {
let xor_val = ((idx as u8) ^ pattern) & CC_MASK;
chunk[3] = (chunk[3] & !CC_MASK) | ((chunk[3] ^ xor_val) & CC_MASK);
}
}
}
pub fn add_null_packets(data: &[u8], every_n_packets: usize) -> Vec<u8> {
let mut output = Vec::new();
for (idx, chunk) in data.chunks(188).enumerate() {
output.extend_from_slice(chunk);
if (idx + 1) % every_n_packets == 0 {
output.extend_from_slice(&make_null_packet());
}
}
output
}
fn make_null_packet() -> [u8; 188] {
let mut pkt = [0xFF_u8; 188];
pkt[0] = 0x47; pkt[1] = 0x1F; pkt[2] = 0xFF; pkt[3] = 0x10; pkt
}
pub fn extract_pid(pkt: &[u8]) -> u16 {
if pkt.len() < 3 {
return 0;
}
let b1 = pkt[1];
let b2 = pkt[2];
(((b1 & 0x1F) as u16) << 8) | (b2 as u16)
}