use libmpegts::{
pack_bits,
ts::{
self,
PACKET_SIZE,
TsPacketMut,
TsPacketRef,
},
};
mod data;
#[test]
fn test_init() {
let mut data = [0u8; PACKET_SIZE];
let mut packet = TsPacketMut::from(&mut data);
packet.init(256, 5);
let expected = [0x47, 0x01, 0x00, 0x05];
assert_eq!(&packet.as_ref()[.. 4], &expected);
}
#[test]
fn test_get_pid() {
let packet = TsPacketRef::from(&[
0x47, 0x41, 0x16, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
]);
assert_eq!(packet.pid(), 278);
}
#[test]
fn test_set_pid() {
let mut data: Vec<u8> = vec![0x47, 0x00, 0x00, 0x00];
data.resize(ts::PACKET_SIZE, 0xFF);
let mut packet = TsPacketMut::try_from(data.as_mut_slice()).unwrap();
packet.set_pid(8191);
assert_eq!(&[0x1F, 0xFF], &packet.as_ref()[1 .. 3]);
}
#[test]
fn test_payload_offset() {
let packet = TsPacketRef::from(&[
0x47, 0x40, 0x11, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
]);
let payload = packet.payload().expect("payload should exist");
assert_eq!(payload.len(), ts::PACKET_SIZE - 4);
let packet = TsPacketRef::from(&[
0x47, 0x40, 0x2d, 0xf0, 0x19, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
]);
let payload = packet.payload().expect("payload should exist");
assert_eq!(payload.len(), ts::PACKET_SIZE - 4 - 1 - 0x19);
}
#[test]
fn test_set_payload() {
let mut data = vec![0x47, 0x00, 0x00, 0x00];
data.resize(ts::PACKET_SIZE, 0xFF);
let mut packet = TsPacketMut::try_from(data.as_mut_slice()).unwrap();
packet.set_payload();
assert_eq!(packet.as_ref()[3], 0x10);
}
#[test]
fn test_clear_payload() {
let mut data = vec![0x47, 0x00, 0x00, 0xFF];
data.resize(ts::PACKET_SIZE, 0xFF);
let mut packet = TsPacketMut::try_from(data.as_mut_slice()).unwrap();
packet.clear_payload();
assert_eq!(packet.as_ref()[3], 0xEF);
}
#[test]
fn test_set_pusi() {
let mut data = vec![0x47, 0x00];
data.resize(ts::PACKET_SIZE, 0xFF);
let mut packet = TsPacketMut::try_from(data.as_mut_slice()).unwrap();
packet.set_pusi();
assert_eq!(packet.as_ref()[1], 0x40);
}
#[test]
fn test_clear_pusi() {
let mut data = vec![0x47, 0xFF];
data.resize(ts::PACKET_SIZE, 0xFF);
let mut packet = TsPacketMut::try_from(data.as_mut_slice()).unwrap();
packet.clear_pusi();
assert_eq!(packet.as_ref()[1], 0xBF);
}
#[test]
fn test_adaptation_field() {
let packet = TsPacketRef::from(&[
0x47, 0x40, 0x11, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
]);
assert!(packet.adaptation_field().is_none());
let packet = TsPacketRef::from(&[
0x47, 0x40, 0x11, 0x20, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
]);
assert!(packet.adaptation_field().is_some());
assert_eq!(packet.adaptation_field().unwrap().len(), 0)
}
#[test]
fn test_adaptation_field_pcr() {
let packet = TsPacketRef::from(&[
0x47, 0x41, 0x00, 0x20, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
]);
assert!(packet.adaptation_field().unwrap().pcr().is_none());
let data: [u8; ts::PACKET_SIZE] = [
0x47, 0x41, 0x00, 0x20, 0xB7, 0x10, 0x00, 0x02, 0x32, 0x89, 0x7E, 0xF7, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
];
{
let data = data.clone();
let packet = TsPacketRef::from(&data);
println!("{:#?}", &packet);
let adaptation_field = packet
.adaptation_field()
.expect("adaptation field should exist");
assert_eq!(adaptation_field.pcr(), Some(86405647));
}
{
let mut data = data.clone();
data[6 .. 13].copy_from_slice(
&pack_bits!(u64,
program_clock_reference_base: 33 => 0,
reserved: 6 => 0b111111,
program_clock_reference_extension: 9 => 0,
)[0 .. 7],
);
let packet = TsPacketRef::from(&data);
let adaptation_field = packet.adaptation_field().unwrap();
assert_eq!(adaptation_field.pcr(), Some(0));
}
{
let mut data = data.clone();
data[6 .. 13].copy_from_slice(
&pack_bits!(u64,
program_clock_reference_base: 33 => 0x1_FFFF_FFFF,
reserved: 6 => 0b111111,
program_clock_reference_extension: 9 => 299, )[0 .. 7],
);
let packet = TsPacketRef::from(&data);
let adaptation_field = packet.adaptation_field().unwrap();
assert_eq!(adaptation_field.pcr(), Some(ts::PCR_MAX));
}
{
let mut data = data.clone();
data[6 .. 13].copy_from_slice(
&pack_bits!(u64,
program_clock_reference_base: 33 => 0x1_FFFF_FFFF,
reserved: 6 => 0b111111,
program_clock_reference_extension: 9 => 0x1FF,
)[0 .. 7],
);
let packet = TsPacketRef::from(&data);
let adaptation_field = packet.adaptation_field().unwrap();
assert_eq!(adaptation_field.pcr(), Some(ts::PCR_MAX));
}
}
#[test]
fn test_set_adaptation_field() {
let mut data: Vec<u8> = vec![0x47, 0x00, 0x00, 0x00];
data.resize(ts::PACKET_SIZE, 0xAA);
let mut packet = TsPacketMut::try_from(data.as_mut_slice()).unwrap();
packet.set_adaptation_field(1);
let ts_ref = TsPacketRef::from(packet.as_ref());
assert!(
ts_ref.adaptation_field().is_some(),
"adaptation field should exist"
);
let data = packet.as_ref();
assert_eq!(data[4], 0, "af length should be 0");
assert_eq!(data[5], 0xAA, "payload should be unchanged");
packet.set_adaptation_field(0);
let ts_ref = TsPacketRef::from(packet.as_ref());
assert!(
ts_ref.adaptation_field().is_none(),
"adaptation field should not exist"
);
packet.set_adaptation_field(2);
let ts_ref = TsPacketRef::from(packet.as_ref());
assert!(
ts_ref.adaptation_field().is_some(),
"adaptation field should exist"
);
let data = ts_ref.as_ref();
assert_eq!(data[4], 1, "af length should be 1");
assert_eq!(data[5], 0x00, "af flags should be 0x00");
assert_eq!(data[6], 0xAA, "payload should be unchanged");
packet.set_adaptation_field(3);
let ts_ref = TsPacketRef::from(packet.as_ref());
assert!(
ts_ref.adaptation_field().is_some(),
"adaptation field should exist"
);
let data = ts_ref.as_ref();
assert_eq!(data[4], 2, "af length should be 2");
assert_eq!(data[5], 0x00, "af flags should be 0x00");
assert_eq!(data[6], 0xFF, "af stuffing byte should be 0xFF");
assert_eq!(ts_ref.as_ref()[7], 0xAA, "payload should be unchanged");
packet.set_adaptation_field(184);
let ts_ref = TsPacketRef::from(packet.as_ref());
assert!(
ts_ref.adaptation_field().is_some(),
"adaptation field should exist"
);
let data = ts_ref.as_ref();
assert_eq!(data[4], 183, "af length should be 183");
assert_eq!(data[5], 0x00, "af flags should be 0x00");
for i in 6 .. 188 {
assert_eq!(data[i], 0xFF, "af stuffing byte should be 0xFF");
}
}
#[test]
fn test_set_pcr() {
let mut data: Vec<u8> = vec![0x47, 0x01, 0x00, 0x00];
data.resize(ts::PACKET_SIZE, 0x00);
let mut packet = TsPacketMut::try_from(data.as_mut_slice()).unwrap();
packet.set_adaptation_field(184);
packet.set_pcr(86405647);
assert_eq!(
&[0x00, 0x02, 0x32, 0x89, 0x7E, 0xF7],
&packet.as_ref()[6 .. 12]
);
packet.set_pcr(ts::PCR_MAX);
assert_eq!(
&[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2B],
&packet.as_ref()[6 .. 12]
);
packet.set_pcr(0);
assert_eq!(
&[0x00, 0x00, 0x00, 0x00, 0x7E, 0x00],
&packet.as_ref()[6 .. 12]
);
}