use crate::error::McRawError;
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ItemType {
BufferIndex = 0,
BufferIndexData = 1,
Buffer = 2,
Metadata = 3,
AudioIndex = 4,
AudioData = 5,
AudioDataMetadata = 6,
}
impl TryFrom<u32> for ItemType {
type Error = McRawError;
fn try_from(v: u32) -> std::result::Result<Self, Self::Error> {
match v {
0 => Ok(ItemType::BufferIndex),
1 => Ok(ItemType::BufferIndexData),
2 => Ok(ItemType::Buffer),
3 => Ok(ItemType::Metadata),
4 => Ok(ItemType::AudioIndex),
5 => Ok(ItemType::AudioData),
6 => Ok(ItemType::AudioDataMetadata),
_ => Err(McRawError::InvalidItemType(v)),
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct Item {
pub item_type: ItemType,
pub size: u32,
}
#[derive(Debug, Clone, Copy)]
pub struct BufferOffset {
pub offset: i64,
pub timestamp: i64,
}
#[derive(Debug, Clone, Copy)]
pub struct BufferIndex {
pub magic_number: u32,
pub num_offsets: i32,
pub index_data_offset: i64,
}
#[derive(Debug, Clone, Copy)]
pub struct AudioIndex {
pub num_offsets: i64,
pub start_timestamp_ms: i64,
}
#[derive(Debug, Clone, Copy)]
pub struct AudioMetadata {
pub timestamp_ns: i64,
}
pub const CONTAINER_ID: [u8; 7] = *b"MOTION ";
pub const CONTAINER_VERSION: u8 = 3;
pub const INDEX_MAGIC_NUMBER: u32 = 0x8A905612;