]> git.nihav.org Git - nihav.git/blobdiff - src/formats.rs
trailing whitespace fixes
[nihav.git] / src / formats.rs
index 5481c760ca4c5670f13611a964f1dfb12d238042..53b28dcfcdb9ede589ad8c3ee2b3d0d6e0aeb8e8 100644 (file)
@@ -20,6 +20,7 @@ pub const SONITON_FLAG_SIGNED :u32 = 0x10;
 
 pub const SND_U8_FORMAT: NASoniton = NASoniton { bits: 8, be: false, packed: false, planar: false, float: false, signed: false };
 pub const SND_S16_FORMAT: NASoniton = NASoniton { bits: 16, be: false, packed: false, planar: false, float: false, signed: true };
+pub const SND_S16P_FORMAT: NASoniton = NASoniton { bits: 16, be: false, packed: false, planar: true, float: false, signed: true };
 pub const SND_F32P_FORMAT: NASoniton = NASoniton { bits: 32, be: false, packed: false, planar: true, float: true, signed: true };
 
 impl NASoniton {
@@ -130,7 +131,7 @@ impl FromStr for NAChannelType {
             "Lo"    => Ok(NAChannelType::Lo),
             "Ro"    => Ok(NAChannelType::Ro),
             _   => Err(ChannelParseError{}),
-        }        
+        }
     }
 }
 
@@ -175,6 +176,20 @@ pub struct NAChannelMap {
     ids: Vec<NAChannelType>,
 }
 
+const MS_CHANNEL_MAP: [NAChannelType; 11] = [
+    NAChannelType::L,
+    NAChannelType::R,
+    NAChannelType::C,
+    NAChannelType::LFE,
+    NAChannelType::Ls,
+    NAChannelType::Rs,
+    NAChannelType::Lss,
+    NAChannelType::Rss,
+    NAChannelType::Cs,
+    NAChannelType::Lc,
+    NAChannelType::Rc,
+];
+
 impl NAChannelMap {
     pub fn new() -> Self { NAChannelMap { ids: Vec::new() } }
     pub fn add_channel(&mut self, ch: NAChannelType) {
@@ -197,6 +212,15 @@ impl NAChannelMap {
         }
         None
     }
+    pub fn from_ms_mapping(chmap: u32) -> Self {
+        let mut cm = NAChannelMap::new();
+        for i in 0..MS_CHANNEL_MAP.len() {
+            if ((chmap >> i) & 1) != 0 {
+                cm.add_channel(MS_CHANNEL_MAP[i]);
+            }
+        }
+        cm
+    }
 }
 
 impl fmt::Display for NAChannelMap {