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