1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
pub fn clear_start_code_emulation_prevention_3_byte(data: &[u8]) -> Vec<u8> { data.iter() .enumerate() .filter_map(|(index, value)| { if index > 2 && index < data.len() - 2 && data[index - 2] == 0 && data[index - 1] == 0 && data[index] <= 3 { None } else { Some(*value) } }) .collect::<Vec<u8>>() } pub fn add_start_code_emulation_prevention_3_byte(data: &mut Vec<u8>) { let mut count = data.len(); let mut i = 0; while i < count { if i > 2 && i < count - 2 && data[i - 2] == 0 && data[i - 1] == 0 && data[i] <= 3 { data.insert(i, 3); count += 1; } i += 1; } }