From 8570a0b3c0fc320f0482f4bcc1d5a73d89903bfe Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sat, 22 May 2021 12:24:05 +0200 Subject: [PATCH] core: support DeflateMode option setting --- nihav-core/src/compr/deflate.rs | 43 +++++++++++++++++++++++++++++++++ nihav-core/src/options.rs | 2 ++ 2 files changed, 45 insertions(+) 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. -- 2.30.2