X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fframe.rs;h=cfe6ab81488554df27d156881a3d55d603889c15;hb=3b501dcbaabd5922d829b217a541e697e8ed1a59;hp=7b2b5c757d5fc787c922d5852783bc1a82429bd5;hpb=8869d4521f334c97c188a7d558e19489b9677ed8;p=nihav.git diff --git a/src/frame.rs b/src/frame.rs index 7b2b5c7..cfe6ab8 100644 --- a/src/frame.rs +++ b/src/frame.rs @@ -9,12 +9,72 @@ pub struct NASoniton { packed: bool, planar: bool, float: bool, + signed: bool, } #[allow(dead_code)] -pub const SND_U8_FORMAT: NASoniton = NASoniton { bits: 8, is_be: false, packed: false, planar: false, float: false }; +pub const SND_U8_FORMAT: NASoniton = NASoniton { bits: 8, is_be: false, packed: false, planar: false, float: false, signed: false }; #[allow(dead_code)] -pub const SND_S16_FORMAT: NASoniton = NASoniton { bits: 16, is_be: false, packed: false, planar: false, float: false }; +pub const SND_S16_FORMAT: NASoniton = NASoniton { bits: 16, is_be: false, packed: false, planar: false, float: false, signed: true }; + +#[derive(Debug,Clone,Copy)] +pub enum NAChannelType { + C, L, R, Ls, Rs, Lss, Rss, LFE, Lc, Rc, Lh, Rh, Ch, LFE2, Lw, Rw, Ov, Lhs, Rhs, Chr, Ll, Rl, Cl, Lt, Rt, Lo, Ro +} + +impl NAChannelType { + pub fn is_center(&self) -> bool { + match *self { + NAChannelType::C => true, NAChannelType::Ch => true, + NAChannelType::Cl => true, NAChannelType::Ov => true, + NAChannelType::LFE => true, NAChannelType::LFE2 => true, + _ => false, + } + } + pub fn is_left(&self) -> bool { + match *self { + NAChannelType::L => true, NAChannelType::Ls => true, + NAChannelType::Lss => true, NAChannelType::Lc => true, + NAChannelType::Lh => true, NAChannelType::Lw => true, + NAChannelType::Lhs => true, NAChannelType::Ll => true, + NAChannelType::Lt => true, NAChannelType::Lo => true, + _ => false, + } + } + pub fn is_right(&self) -> bool { + match *self { + NAChannelType::R => true, NAChannelType::Rs => true, + NAChannelType::Rss => true, NAChannelType::Rc => true, + NAChannelType::Rh => true, NAChannelType::Rw => true, + NAChannelType::Rhs => true, NAChannelType::Rl => true, + NAChannelType::Rt => true, NAChannelType::Ro => true, + _ => false, + } + } +} + +pub struct NAChannelMap { + ids: Vec, +} + +impl NAChannelMap { + pub fn new() -> Self { NAChannelMap { ids: Vec::new() } } + pub fn add_channel(&mut self, ch: NAChannelType) { + self.ids.push(ch); + } + pub fn num_channels(&self) -> usize { + self.ids.len() + } + pub fn get_channel(&self, idx: usize) -> NAChannelType { + self.ids[idx] + } + pub fn find_channel_id(&self, t: NAChannelType) -> Option { + for i in 0..self.ids.len() { + if self.ids[i] as i32 == t as i32 { return Some(i as u8); } + } + None + } +} #[allow(dead_code)] #[derive(Clone,Copy)]