scuffle_flv/audio/body/legacy/
aac.rs1use bytes::Bytes;
4use nutype_enum::nutype_enum;
5
6nutype_enum! {
7 pub enum AacPacketType(u8) {
14 SequenceHeader = 0,
16 Raw = 1,
18 }
19}
20
21#[derive(Debug, Clone, PartialEq)]
29pub enum AacAudioData {
30 SequenceHeader(Bytes),
32 Raw(Bytes),
34 Unknown {
36 aac_packet_type: AacPacketType,
38 data: Bytes,
40 },
41}
42
43impl AacAudioData {
44 pub fn new(aac_packet_type: AacPacketType, data: Bytes) -> Self {
46 match aac_packet_type {
47 AacPacketType::Raw => AacAudioData::Raw(data),
48 AacPacketType::SequenceHeader => AacAudioData::SequenceHeader(data),
49 _ => AacAudioData::Unknown { aac_packet_type, data },
50 }
51 }
52}
53
54#[cfg(test)]
55#[cfg_attr(all(test, coverage_nightly), coverage(off))]
56mod tests {
57 use super::*;
58
59 #[test]
60 fn test_new() {
61 let cases = [
62 (
63 AacPacketType::Raw,
64 Bytes::from(vec![0, 1, 2, 3]),
65 AacAudioData::Raw(Bytes::from(vec![0, 1, 2, 3])),
66 ),
67 (
68 AacPacketType::SequenceHeader,
69 Bytes::from(vec![0, 1, 2, 3]),
70 AacAudioData::SequenceHeader(Bytes::from(vec![0, 1, 2, 3])),
71 ),
72 (
73 AacPacketType(0x0),
74 Bytes::from(vec![0, 1, 2, 3]),
75 AacAudioData::SequenceHeader(Bytes::from(vec![0, 1, 2, 3])),
76 ),
77 (
78 AacPacketType(0x1),
79 Bytes::from(vec![0, 1, 2, 3]),
80 AacAudioData::Raw(Bytes::from(vec![0, 1, 2, 3])),
81 ),
82 (
83 AacPacketType(0x2),
84 Bytes::from(vec![0, 1, 2, 3]),
85 AacAudioData::Unknown {
86 aac_packet_type: AacPacketType(0x2),
87 data: Bytes::from(vec![0, 1, 2, 3]),
88 },
89 ),
90 (
91 AacPacketType(0x3),
92 Bytes::from(vec![0, 1, 2, 3]),
93 AacAudioData::Unknown {
94 aac_packet_type: AacPacketType(0x3),
95 data: Bytes::from(vec![0, 1, 2, 3]),
96 },
97 ),
98 ];
99
100 for (packet_type, data, expected) in cases {
101 let packet = AacAudioData::new(packet_type, data.clone());
102 assert_eq!(packet, expected);
103 }
104 }
105
106 #[test]
107 fn test_aac_packet_type() {
108 assert_eq!(
109 format!("{:?}", AacPacketType::SequenceHeader),
110 "AacPacketType::SequenceHeader"
111 );
112 assert_eq!(format!("{:?}", AacPacketType::Raw), "AacPacketType::Raw");
113 assert_eq!(format!("{:?}", AacPacketType(0x2)), "AacPacketType(2)");
114 assert_eq!(format!("{:?}", AacPacketType(0x3)), "AacPacketType(3)");
115
116 assert_eq!(AacPacketType(0x01), AacPacketType::Raw);
117 assert_eq!(AacPacketType(0x00), AacPacketType::SequenceHeader);
118 }
119}