X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fformats.rs;h=aa053b2e75f55df7eb5cf6b7e0b64b3121a89a35;hb=503374e726db6340d38efd2459f48863a415d31d;hp=8e6bc68e6cc234770c488da5c26e2e93f0e0b86e;hpb=b68ff5ae2df5af3cc07a8842dcdf949f286618b1;p=nihav.git diff --git a/src/formats.rs b/src/formats.rs index 8e6bc68..aa053b2 100644 --- a/src/formats.rs +++ b/src/formats.rs @@ -41,6 +41,14 @@ impl NASoniton { pub fn is_planar(&self) -> bool { self.planar } pub fn is_float(&self) -> bool { self.float } pub fn is_signed(&self) -> bool { self.signed } + + pub fn get_audio_size(&self, length: u64) -> usize { + if self.packed { + ((length * (self.bits as u64) + 7) >> 3) as usize + } else { + (length * (((self.bits + 7) >> 3) as u64)) as usize + } + } } impl fmt::Display for NASoniton { @@ -51,7 +59,7 @@ impl fmt::Display for NASoniton { } } -#[derive(Debug,Clone,Copy)] +#[derive(Debug,Clone,Copy,PartialEq)] pub enum NAChannelType { C, L, R, Cs, Ls, Rs, Lss, Rss, LFE, Lc, Rc, Lh, Rh, Ch, LFE2, Lw, Rw, Ov, Lhs, Rhs, Chs, Ll, Rl, Cl, Lt, Rt, Lo, Ro } @@ -124,6 +132,7 @@ impl fmt::Display for NAChannelType { } } +#[derive(Clone)] pub struct NAChannelMap { ids: Vec, } @@ -133,6 +142,11 @@ impl NAChannelMap { pub fn add_channel(&mut self, ch: NAChannelType) { self.ids.push(ch); } + pub fn add_channels(&mut self, chs: &[NAChannelType]) { + for i in 0..chs.len() { + self.ids.push(chs[i]); + } + } pub fn num_channels(&self) -> usize { self.ids.len() } @@ -308,10 +322,15 @@ impl NAPixelChromaton { pub fn get_offset(&self) -> u8 { self.comp_offs } pub fn get_step(&self) -> u8 { self.next_elem } + pub fn get_width(&self, width: usize) -> usize { + (width + ((1 << self.h_ss) - 1)) >> self.h_ss + } + pub fn get_height(&self, height: usize) -> usize { + (height + ((1 << self.v_ss) - 1)) >> self.v_ss + } pub fn get_linesize(&self, width: usize) -> usize { - let nw = (width + ((1 << self.h_ss) - 1)) >> self.h_ss; let d = self.depth as usize; - (nw * d + d - 1) >> 3 + (self.get_width(width) * d + d - 1) >> 3 } pub fn get_data_size(&self, width: usize, height: usize) -> usize { let nh = (height + ((1 << self.v_ss) - 1)) >> self.v_ss;