registry: add entry for MS RLE
[nihav.git] / nihav-registry / src / register.rs
index f23ba06d402a93d7fdd41027d2e957f6fb93cb2c..b9f8d8135a632d2e69ddc22e5622225ffac1b931 100644 (file)
@@ -172,6 +172,13 @@ static CODEC_REGISTER: &'static [CodecDescription] = &[
     desc!(audio;    "atrac3",     "Sony Atrac3"),
     desc!(audio;    "sipro",      "Sipro Labs ADPCM"),
 
+    desc!(video;    "cinepak",    "Cinepak"),
+
+    desc!(video;    "msvideo1",      "MS Video 1"),
+    desc!(video;    "msrle",         "MS RLE"),
+    desc!(audio;    "ms-adpcm",      "MS ADPCM"),
+    desc!(audio;    "ima-adpcm-ms",  "IMA ADPCM (MS variant)"),
+
     desc!(video;    "truemotion1",   "TrueMotion 1"),
     desc!(video-im; "truemotionrt",  "TrueMotion RT"),
     desc!(video;    "truemotion2",   "TrueMotion 2"),
@@ -212,9 +219,21 @@ static CODEC_REGISTER: &'static [CodecDescription] = &[
     desc!(audio;    "lhst250f11",    "L&H StreamTalk 25kbps at 11 kHz"),
     desc!(audio;    "lhst500f22",    "L&H StreamTalk 50kpbs at 22 kHz"),
     desc!(audio;    "lhst48",        "L&H StreamTalk CELP Codec 4.8kbps at 8 kHz"),
+
+    desc!(video;    "vivo1",         "VivoActive Video 1.0"),
+    desc!(video;    "vivo2",         "VivoActive Video 2.0", CODEC_CAP_REORDER),
+    desc!(audio;    "g723.1",        "ITU G.723.1"),
+    desc!(audio;    "siren",         "Polycom Siren"),
 ];
 
 static AVI_VIDEO_CODEC_REGISTER: &'static [(&[u8;4], &str)] = &[
+    (&[1, 0, 0, 0], "msrle"),
+    (&[2, 0, 0, 0], "msrle"),
+
+    (b"CRAM", "msvideo1"),
+    (b"MSVC", "msvideo1"),
+    (b"WHAM", "msvideo1"),
+
     (b"IF09", "indeo1"),
     (b"RT21", "indeo2"),
     (b"IV31", "indeo3"),
@@ -224,6 +243,7 @@ static AVI_VIDEO_CODEC_REGISTER: &'static [(&[u8;4], &str)] = &[
     (b"I263", "intel263"),
 
     (b"UCOD", "clearvideo"),
+    (b"cvid", "cinepak"),
 
     (b"MVDV", "midivid"),
     (b"MV30", "midivid3"),
@@ -246,9 +266,11 @@ static AVI_VIDEO_CODEC_REGISTER: &'static [(&[u8;4], &str)] = &[
 ];
 
 static WAV_CODEC_REGISTER: &'static [(u16, &str)] = &[
-    (0x0000, "pcm"),
+    (0x0000, "unknown"),
     (0x0001, "pcm"),
+    (0x0002, "ms-adpcm"),
     (0x0003, "pcm"),
+    (0x0011, "ima-adpcm-ms"),
     (0x0061, "adpcm-dk4"),
     (0x0062, "adpcm-dk3"),
     (0x0401, "imc"),
@@ -257,6 +279,50 @@ static WAV_CODEC_REGISTER: &'static [(u16, &str)] = &[
     (0x0501, "on2avc-501"),
 ];
 
+static MOV_VIDEO_CODEC_REGISTER: &'static [(&[u8;4], &str)] = &[
+    (b"cvid", "cinepak"),
+    (b"jpeg", "jpeg"),
+    //(b"raw ", "raw"),
+    //(b"Yuv2", "raw"),
+    (b"smc ", "qt-smc"),
+    (b"rle ", "qt-rle"),
+    (b"rpza", "apple-video"),
+    (b"kpcd", "kodak-photocd"),
+    //(b"mpeg", "mpeg-video"),
+    (b"mjpa", "mjpeg-a"),
+    (b"mjpb", "mjpeg-b"),
+    (b"svqi", "sorenson-video"),
+
+    (b"IV31", "indeo3"),
+    (b"IV32", "indeo3"),
+
+    (b"UCOD", "clearvideo"),
+
+    (b"VP30", "vp3"),
+    (b"VP31", "vp3"),
+];
+
+static MOV_AUDIO_CODEC_REGISTER: &'static [(&[u8;4], &str)] = &[
+    (b"NONE", "pcm"),
+    (b"raw ", "pcm"),
+    (b"twos", "pcm"),
+    (b"sowt", "pcm"),
+    (b"fl32", "pcm"),
+    (b"fl64", "pcm"),
+    (b"in24", "pcm"),
+    (b"in32", "pcm"),
+    (b"MAC3", "mace-3"),
+    (b"MAC6", "mace-6"),
+    (b"ima4", "ima-adpcm-qt"),
+    (b"ulaw", "ulaw"),
+    (b"alaw", "alaw"),
+    (b"dvca", "dv-audio"),
+    (b"QDMC", "qdesign-music"),
+    (b"QDM2", "qdesign-music2"),
+    (b"Qclp", "qualcomm-purevoice"),
+    //(b".mp3", "mpeg-layer3"),
+];
+
 /// Returns video codec short name for provided FOURCC (used in AVI format).
 pub fn find_codec_from_avi_fourcc(fcc: &[u8;4]) -> Option<&'static str> {
     for (fourcc, name) in AVI_VIDEO_CODEC_REGISTER.iter() {
@@ -265,6 +331,14 @@ pub fn find_codec_from_avi_fourcc(fcc: &[u8;4]) -> Option<&'static str> {
     None
 }
 
+/// Returns FOURCC (used in AVI format) for provided codec name.
+pub fn find_avi_fourcc(codecname: &str) -> Option<[u8; 4]> {
+    for (fourcc, name) in AVI_VIDEO_CODEC_REGISTER.iter() {
+        if *name == codecname { return Some(**fourcc); }
+    }
+    None
+}
+
 /// Returns known audio codec short name for provided TWOCC (used in WAV and AVI format).
 pub fn find_codec_from_wav_twocc(tcc: u16) -> Option<&'static str> {
     for (twocc, name) in WAV_CODEC_REGISTER.iter() {
@@ -273,6 +347,30 @@ pub fn find_codec_from_wav_twocc(tcc: u16) -> Option<&'static str> {
     None
 }
 
+/// Returns TWOCC (used in WAV and AVI format for provided codec name.
+pub fn find_wav_twocc(codecname: &str) -> Option<u16> {
+    for (twocc, name) in WAV_CODEC_REGISTER.iter() {
+        if *name == codecname { return Some(*twocc); }
+    }
+    None
+}
+
+/// Returns video codec short name for provided FOURCC (used in MOV format).
+pub fn find_codec_from_mov_video_fourcc(fcc: &[u8;4]) -> Option<&'static str> {
+    for (fourcc, name) in MOV_VIDEO_CODEC_REGISTER.iter() {
+        if *fourcc == fcc { return Some(name); }
+    }
+    None
+}
+
+/// Returns known audio codec short name for provided FOURCC (used in MOV format).
+pub fn find_codec_from_mov_audio_fourcc(fcc: &[u8;4]) -> Option<&'static str> {
+    for (fourcc, name) in MOV_AUDIO_CODEC_REGISTER.iter() {
+        if *fourcc == fcc { return Some(name); }
+    }
+    None
+}
+
 #[cfg(test)]
 mod test {
     use super::*;