motioncam_decoder/
container.rs1use crate::error::McRawError;
2
3#[repr(u32)]
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub enum ItemType {
7 BufferIndex = 0,
8 BufferIndexData = 1,
9 Buffer = 2,
10 Metadata = 3,
11 AudioIndex = 4,
12 AudioData = 5,
13 AudioDataMetadata = 6,
14}
15
16impl TryFrom<u32> for ItemType {
17 type Error = McRawError;
18 fn try_from(v: u32) -> std::result::Result<Self, Self::Error> {
19 match v {
20 0 => Ok(ItemType::BufferIndex),
21 1 => Ok(ItemType::BufferIndexData),
22 2 => Ok(ItemType::Buffer),
23 3 => Ok(ItemType::Metadata),
24 4 => Ok(ItemType::AudioIndex),
25 5 => Ok(ItemType::AudioData),
26 6 => Ok(ItemType::AudioDataMetadata),
27 _ => Err(McRawError::InvalidItemType(v)),
28 }
29 }
30}
31
32#[derive(Debug, Clone, Copy)]
34pub struct Item {
35 pub item_type: ItemType,
37 pub size: u32,
39}
40
41#[derive(Debug, Clone, Copy)]
43pub struct BufferOffset {
44 pub offset: i64,
46 pub timestamp: i64,
48}
49
50#[derive(Debug, Clone, Copy)]
52pub struct BufferIndex {
53 pub magic_number: u32,
55 pub num_offsets: i32,
57 pub index_data_offset: i64,
59}
60
61#[derive(Debug, Clone, Copy)]
63pub struct AudioIndex {
64 pub num_offsets: i64,
66 pub start_timestamp_ms: i64,
68}
69
70#[derive(Debug, Clone, Copy)]
72pub struct AudioMetadata {
73 pub timestamp_ns: i64,
75}
76
77pub const CONTAINER_ID: [u8; 7] = *b"MOTION ";
79pub const CONTAINER_VERSION: u8 = 3;
81pub const INDEX_MAGIC_NUMBER: u32 = 0x8A905612;