1 use super::*;
2 use std::io::Cursor;
3
4 #[test]
test_data_does_not_start_with_h264header() -> Result<()>5 fn test_data_does_not_start_with_h264header() -> Result<()> {
6 let test_function = |input: &[u8]| {
7 let mut reader = H264Reader::new(Cursor::new(input), 1_048_576);
8 if let Err(err) = reader.next_nal() {
9 assert_eq!(err, Error::ErrDataIsNotH264Stream);
10 } else {
11 panic!();
12 }
13 };
14
15 test_function(&[2]);
16 test_function(&[0, 2]);
17 test_function(&[0, 0, 2]);
18 test_function(&[0, 0, 2, 0]);
19 test_function(&[0, 0, 0, 2]);
20
21 Ok(())
22 }
23
24 #[test]
test_parse_header() -> Result<()>25 fn test_parse_header() -> Result<()> {
26 let h264bytes = &[0x0, 0x0, 0x1, 0xAB];
27 let mut reader = H264Reader::new(Cursor::new(h264bytes), 1_048_576);
28
29 let nal = reader.next_nal()?;
30
31 assert_eq!(nal.data.len(), 1);
32 assert!(nal.forbidden_zero_bit);
33 assert_eq!(nal.picture_order_count, 0);
34 assert_eq!(nal.ref_idc, 1);
35 assert_eq!(NalUnitType::EndOfStream, nal.unit_type);
36
37 Ok(())
38 }
39
40 #[test]
test_eof() -> Result<()>41 fn test_eof() -> Result<()> {
42 let test_function = |input: &[u8]| {
43 let mut reader = H264Reader::new(Cursor::new(input), 1_048_576);
44 if let Err(err) = reader.next_nal() {
45 assert_eq!(Error::ErrIoEOF, err);
46 } else {
47 panic!();
48 }
49 };
50
51 test_function(&[0, 0, 0, 1]);
52 test_function(&[0, 0, 1]);
53 test_function(&[]);
54
55 Ok(())
56 }
57
58 #[test]
test_skip_sei() -> Result<()>59 fn test_skip_sei() -> Result<()> {
60 let h264bytes = &[
61 0x0, 0x0, 0x0, 0x1, 0xAA, 0x0, 0x0, 0x0, 0x1, 0x6, // SEI
62 0x0, 0x0, 0x0, 0x1, 0xAB,
63 ];
64
65 let mut reader = H264Reader::new(Cursor::new(h264bytes), 1_048_576);
66
67 let nal = reader.next_nal()?;
68 assert_eq!(nal.data[0], 0xAA);
69
70 let nal = reader.next_nal()?;
71 assert_eq!(nal.data[0], 0xAB);
72
73 Ok(())
74 }
75
76 #[test]
test_issue1734_next_nal() -> Result<()>77 fn test_issue1734_next_nal() -> Result<()> {
78 let tests: Vec<&[u8]> = vec![
79 &[0x00, 0x00, 0x010, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01],
80 &[0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01],
81 ];
82
83 for test in tests {
84 let mut reader = H264Reader::new(Cursor::new(test), 1_048_576);
85
86 // Just make sure it doesn't crash
87 while reader.next_nal().is_ok() {
88 //do nothing
89 }
90 }
91
92 Ok(())
93 }
94
95 #[test]
test_trailing01after_start_code() -> Result<()>96 fn test_trailing01after_start_code() -> Result<()> {
97 let test = vec![0x0, 0x0, 0x0, 0x1, 0x01, 0x0, 0x0, 0x0, 0x1, 0x01];
98 let mut r = H264Reader::new(Cursor::new(test), 1_048_576);
99
100 for _ in 0..=1 {
101 let _nal = r.next_nal()?;
102 }
103
104 Ok(())
105 }
106