From: Kostya Shishkov Date: Sat, 22 May 2021 10:24:05 +0000 (+0200) Subject: core: support DeflateMode option setting X-Git-Url: https://git.nihav.org/?a=commitdiff_plain;h=8570a0b3c0fc320f0482f4bcc1d5a73d89903bfe;p=nihav.git core: support DeflateMode option setting --- diff --git a/nihav-core/src/compr/deflate.rs b/nihav-core/src/compr/deflate.rs index 3a3819e..9120789 100644 --- a/nihav-core/src/compr/deflate.rs +++ b/nihav-core/src/compr/deflate.rs @@ -71,6 +71,7 @@ //! # } //! ``` +use crate::options::NAOptionDefinitionType; use crate::io::byteio::*; use crate::io::bitreader::*; use crate::io::codebook::*; @@ -1721,6 +1722,48 @@ pub enum DeflateMode { Best, } +impl Default for DeflateMode { + fn default() -> Self { DeflateMode::Better } +} + +pub const DEFLATE_MODE_DESCRIPTION: &str = "Deflate compression level."; +///! Deflate option for no compression. +pub const DEFLATE_MODE_NONE: &str = "none"; +///! Deflate option for fast compression. +pub const DEFLATE_MODE_FAST: &str = "fast"; +///! Deflate option for better compression. +pub const DEFLATE_MODE_BETTER: &str = "better"; +///! Deflate option for best compression. +pub const DEFLATE_MODE_BEST: &str = "best"; + +///! All possible option values for deflate compression. +pub const DEFLATE_OPTION_VALUES: NAOptionDefinitionType = NAOptionDefinitionType::String(Some(&[DEFLATE_MODE_NONE, DEFLATE_MODE_FAST, DEFLATE_MODE_BETTER, DEFLATE_MODE_BEST])); + +impl std::str::FromStr for DeflateMode { + type Err = (); + + fn from_str(s: &str) -> Result { + match s { + DEFLATE_MODE_NONE => Ok(DeflateMode::NoCompr), + DEFLATE_MODE_FAST => Ok(DeflateMode::Fast), + DEFLATE_MODE_BETTER => Ok(DeflateMode::Better), + DEFLATE_MODE_BEST => Ok(DeflateMode::Best), + _ => Err(()), + } + } +} + +impl ToString for DeflateMode { + fn to_string(&self) -> String { + match *self { + DeflateMode::NoCompr => DEFLATE_MODE_NONE.to_string(), + DeflateMode::Fast => DEFLATE_MODE_FAST.to_string(), + DeflateMode::Better => DEFLATE_MODE_BETTER.to_string(), + DeflateMode::Best => DEFLATE_MODE_BEST.to_string(), + } + } +} + #[derive(Clone,Copy,Debug,PartialEq)] enum Mode { Copy, diff --git a/nihav-core/src/options.rs b/nihav-core/src/options.rs index 96e093e..d3d8be8 100644 --- a/nihav-core/src/options.rs +++ b/nihav-core/src/options.rs @@ -8,6 +8,8 @@ use std::sync::Arc; use std::fmt; +pub use crate::compr::deflate::{DEFLATE_MODE_DESCRIPTION, DEFLATE_OPTION_VALUES, DEFLATE_MODE_NONE, DEFLATE_MODE_FAST, DEFLATE_MODE_BETTER, DEFLATE_MODE_BEST}; + /// Common name for keyframe interval option. pub const KEYFRAME_OPTION: &str = "key_int"; /// Common description for keyframe interval option.