rename register_all_codecs to register_all_decoders
[nihav.git] / nihav-core / src / codecs / mod.rs
index 516d9ace408bbc60eabc127b1e5eca6502e08749..58757efaf867ab449f7907e6cae51e343a6ace28 100644 (file)
@@ -4,6 +4,7 @@ use crate::io::byteio::ByteIOError;
 use crate::io::bitreader::BitReaderError;
 use crate::io::codebook::CodebookError;
 pub use crate::options::*;
+pub use std::str::FromStr;
 
 /// A list specifying general decoding errors.
 #[derive(Debug,Clone,Copy,PartialEq)]
@@ -101,7 +102,7 @@ pub struct DecoderInfo {
 
 /// Structure for registering known decoders.
 ///
-/// It is supposed to be filled using `register_all_codecs()` from some decoders crate and then it can be used to create decoders for the requested codecs.
+/// It is supposed to be filled using `register_all_decoders()` from some decoders crate and then it can be used to create decoders for the requested codecs.
 #[derive(Default)]
 pub struct RegisteredDecoders {
     decs:   Vec<DecoderInfo>,
@@ -131,6 +132,46 @@ impl RegisteredDecoders {
     }
 }
 
+/// Frame skipping mode for decoders.
+#[derive(Clone,Copy,PartialEq,Debug)]
+pub enum FrameSkipMode {
+    /// Decode all frames.
+    None,
+    /// Decode all key frames.
+    KeyframesOnly,
+    /// Decode only intra frames.
+    IntraOnly,
+}
+
+impl Default for FrameSkipMode {
+    fn default() -> Self {
+        FrameSkipMode::None
+    }
+}
+
+impl FromStr for FrameSkipMode {
+    type Err = DecoderError;
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        match s {
+            FRAME_SKIP_OPTION_VAL_NONE      => Ok(FrameSkipMode::None),
+            FRAME_SKIP_OPTION_VAL_KEYFRAME  => Ok(FrameSkipMode::KeyframesOnly),
+            FRAME_SKIP_OPTION_VAL_INTRA     => Ok(FrameSkipMode::IntraOnly),
+            _ => Err(DecoderError::InvalidData),
+        }
+    }
+}
+
+impl ToString for FrameSkipMode {
+    fn to_string(&self) -> String {
+        match *self {
+            FrameSkipMode::None             => FRAME_SKIP_OPTION_VAL_NONE.to_string(),
+            FrameSkipMode::KeyframesOnly    => FRAME_SKIP_OPTION_VAL_KEYFRAME.to_string(),
+            FrameSkipMode::IntraOnly        => FRAME_SKIP_OPTION_VAL_INTRA.to_string(),
+        }
+    }
+}
+
 /// A list specifying general encoding errors.
 #[derive(Debug,Clone,Copy,PartialEq)]
 #[allow(dead_code)]
@@ -158,6 +199,10 @@ impl From<ByteIOError> for EncoderError {
     fn from(_: ByteIOError) -> Self { EncoderError::Bug }
 }
 
+impl From<AllocatorError> for EncoderError {
+    fn from(_: AllocatorError) -> Self { EncoderError::AllocError }
+}
+
 /// Encoding parameter flag to force constant bitrate mode.
 pub const ENC_MODE_CBR: u64 = 1 << 0;
 /// Encoding parameter flag to force constant framerate mode.
@@ -274,7 +319,7 @@ pub struct EncoderInfo {
 
 /// Structure for registering known encoders.
 ///
-/// It is supposed to be filled using `register_all_codecs()` from some encoders crate and then it can be used to create encoders for the requested codecs.
+/// It is supposed to be filled using `register_all_decoders()` from some encoders crate and then it can be used to create encoders for the requested codecs.
 #[derive(Default)]
 pub struct RegisteredEncoders {
     encs:   Vec<EncoderInfo>,