mxf/lib.rs
1
2extern crate byteorder;
3
4pub mod klv;
5pub mod serializer;
6
7#[cfg(test)]
8mod test {
9 // use serializer::decoder::*;
10 // use serializer::encoder::*;
11 use klv::ul::*;
12 use klv::klv::*;
13 use klv::klv_reader::*;
14 use klv::value::value::*;
15 use klv::value::value::Element;
16
17 #[test]
18 fn read_empty_file() {
19 use std::io::Cursor;
20
21 let stream = Cursor::new(vec![0; 0]);
22 let mut reader = KlvReader{
23 stream: stream,
24 elements: vec![]
25 };
26
27 let result = next_klv(&mut reader);
28
29 assert!(result.is_ok());
30 assert!(result.unwrap() == None);
31 }
32
33 #[test]
34 fn read_first_key() {
35 use std::io::Cursor;
36
37 let data = vec![
38 0x06, 0x0e, 0x2b, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0d, 0x01, 0x02, 0x01, 0x01, 0x02, 0x04, 0x00,
39 0x83, 0x00, 0x00, 0x68,
40 0x00, 0x01, 0x00, 0x02, // version major and minor
41 0x00, 0x00, 0x01, 0x00, // kag size
42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // this partition
43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // previous partition
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // footer partition
45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // header byte count
46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // index byte count
47 0x00, 0x00, 0x00, 0x00, // index sid
48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // body byte count
49 0x00, 0x00, 0x00, 0x00, // body sid
50 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x01, 0x0d, 0x01, 0x02, 0x01, 0x01, 0x01, 0x09, 0x00, // operational pattern
51 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, // UL batch
52 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x02, 0x0d, 0x01, 0x03, 0x01, 0x02, 0x04, 0x97, 0x01, // Mpeg ES
53 ];
54
55 let stream = Cursor::new(data);
56 let mut reader = KlvReader{
57 stream: stream,
58 elements: vec![]
59 };
60
61 let valid_klv = next_klv(&mut reader).unwrap().unwrap();
62
63 assert_eq!(valid_klv, Klv {
64 key: Ul::HeaderPartition,
65 value: Value {
66 elements: vec![
67 Element {
68 identifier: Ul::PartitionMajor,
69 value: Some(ValueData::Uint16{ data: 1 })
70 },
71 Element {
72 identifier: Ul::PartitionMinor,
73 value: Some(ValueData::Uint16{ data: 2 })
74 },
75 Element {
76 identifier: Ul::PartitionKagSize,
77 value: Some(ValueData::Uint32{ data: 256 })
78 },
79 Element {
80 identifier: Ul::PartitionThisPartition,
81 value: Some(ValueData::Uint64{ data: 0 })
82 },
83 Element {
84 identifier: Ul::PartitionPreviousPartition,
85 value: Some(ValueData::Uint64{ data: 0 })
86 },
87 Element {
88 identifier: Ul::PartitionFooterPartition,
89 value: Some(ValueData::Uint64{ data: 0 })
90 },
91 Element {
92 identifier: Ul::PartitionHeaderByteCount,
93 value: Some(ValueData::Uint64{ data: 0 })
94 },
95 Element {
96 identifier: Ul::PartitionIndexByteCount,
97 value: Some(ValueData::Uint64{ data: 0 })
98 },
99 Element {
100 identifier: Ul::PartitionIndexSid,
101 value: Some(ValueData::Uint32{ data: 0 })
102 },
103 Element {
104 identifier: Ul::PartitionByteOffset,
105 value: Some(ValueData::Uint64{ data: 0 })
106 },
107 Element {
108 identifier: Ul::PartitionBodySid,
109 value: Some(ValueData::Uint32{ data: 0 })
110 },
111 // Element {
112 // identifier: Ul::PartitionOperationalPattern,
113 // value: None
114 // },
115 Element {
116 identifier: Ul::PartitionEssenceContainers,
117 value: Some(ValueData::ArrayUl {
118 data: vec![Ul::Essence_MpegEsWithStreamIdFrameWrapped]
119 })
120 }
121 ]
122 }
123 });
124 }
125
126 // #[test]
127 // fn generate_file() {
128 // use std::io::prelude::*;
129 // use std::io::Cursor;
130
131 // let mut stream = Cursor::new(vec![0; 0]);
132
133 // let header_value = Value {
134 // elements: vec![
135 // Element{
136 // identifier: Ul::PartitionMajor,
137 // value: None
138 // },
139 // Element{
140 // identifier: Ul::PartitionMinor,
141 // value: None
142 // },
143 // Element{
144 // identifier: Ul::PartitionKagSize,
145 // value: None
146 // },
147 // Element{
148 // identifier: Ul::PartitionThisPartition,
149 // value: None
150 // },
151 // Element{
152 // identifier: Ul::PartitionPreviousPartition,
153 // value: None
154 // },
155 // Element{
156 // identifier: Ul::PartitionFooterPartition,
157 // value: None
158 // },
159 // Element{
160 // identifier: Ul::PartitionHeaderByteCount,
161 // value: None
162 // },
163 // Element{
164 // identifier: Ul::PartitionIndexByteCount,
165 // value: None
166 // },
167 // Element{
168 // identifier: Ul::PartitionIndexSid,
169 // value: None
170 // },
171 // Element{
172 // identifier: Ul::PartitionByteOffset,
173 // value: None
174 // },
175 // Element{
176 // identifier: Ul::PartitionBodySid,
177 // value: None
178 // },
179 // Element{
180 // identifier: Ul::PartitionOperationalPattern,
181 // value: None
182 // },
183 // Element{
184 // identifier: Ul::PartitionEssenceContainers,
185 // value: None
186 // },
187 // ]
188 // };
189
190 // let header_klv = Klv {
191 // key: Ul::HeaderPartition,
192 // value: header_value
193 // };
194
195 // stream.write(Encoder::serialise(&header_klv).as_ref()).unwrap();
196
197 // let frame_value = Value {
198 // elements: vec![
199 // Element{
200 // identifier: Ul::Unknown,
201 // value: None
202 // }
203 // ]
204 // };
205
206 // let frame_klv = Klv {
207 // key: Ul::PictureItemMpegFrameWrappedPictureElement,
208 // value: frame_value
209 // };
210
211 // stream.write(Encoder::serialise(&frame_klv).as_ref()).unwrap();
212 // assert_eq!(stream.get_ref().len(), 2124);
213 // }
214}