aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2023-06-03 09:40:19 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2023-06-03 09:40:19 +0200
commit13704efd78d1055406fead7d801edada74c2ddf3 (patch)
treee8f940ffad0c83e52e69f828a7761db8566d5f34
parent252f4009f1e79679923058be5ea7f89cdce4d506 (diff)
downloadnihav-13704efd78d1055406fead7d801edada74c2ddf3.tar.gz
cinepakenc: make ELBG mode to behave like hybrid mode (and drop that one)
In reality it is the proper way to perform (E)LBG VQ so the old ineffective ELBG should be replaced with "hybrid" quantisation way.
-rw-r--r--nihav-commonfmt/src/codecs/cinepakenc.rs19
1 files changed, 1 insertions, 18 deletions
diff --git a/nihav-commonfmt/src/codecs/cinepakenc.rs b/nihav-commonfmt/src/codecs/cinepakenc.rs
index 8273de0..99194ce 100644
--- a/nihav-commonfmt/src/codecs/cinepakenc.rs
+++ b/nihav-commonfmt/src/codecs/cinepakenc.rs
@@ -214,7 +214,6 @@ impl MaskWriter {
#[derive(Clone,Copy,PartialEq)]
enum QuantMode {
ELBG,
- Hybrid,
MedianCut,
}
@@ -222,7 +221,6 @@ impl std::string::ToString for QuantMode {
fn to_string(&self) -> String {
match *self {
QuantMode::ELBG => "elbg".to_string(),
- QuantMode::Hybrid => "hybrid".to_string(),
QuantMode::MedianCut => "mediancut".to_string(),
}
}
@@ -606,20 +604,6 @@ impl CinepakEncoder {
fn quant_vectors(&mut self) {
match self.qmode {
QuantMode::ELBG => {
- let mut elbg_v1: ELBG<YUVCode, YUVCodeSum> = ELBG::new(&self.v1_cb[self.cur_strip]);
- let mut elbg_v4: ELBG<YUVCode, YUVCodeSum> = ELBG::new(&self.v4_cb[self.cur_strip]);
-
- for entry in self.v1_cb[self.cur_strip].iter_mut().skip(self.v1_len) {
- self.rng.fill_entry(entry);
- }
- for entry in self.v4_cb[self.cur_strip].iter_mut().skip(self.v4_len) {
- self.rng.fill_entry(entry);
- }
-
- self.v1_len = elbg_v1.quantise(&self.v1_entries, &mut self.v1_cur_cb[self.cur_strip]);
- self.v4_len = if !self.force_v1 { elbg_v4.quantise(&self.v4_entries, &mut self.v4_cur_cb[self.cur_strip]) } else { 0 };
- },
- QuantMode::Hybrid => {
let v1_len = quantise_median_cut::<YUVCode, YUVCodeSum>(&self.v1_entries, &mut self.v1_cur_cb[self.cur_strip]);
let v4_len = if !self.force_v1 {
quantise_median_cut::<YUVCode, YUVCodeSum>(&self.v4_entries, &mut self.v4_cur_cb[self.cur_strip])
@@ -1057,7 +1041,7 @@ const ENCODER_OPTS: &[NAOptionDefinition] = &[
opt_type: NAOptionDefinitionType::Int(Some(0), Some(16)) },
NAOptionDefinition {
name: "quant_mode", description: "Quantisation mode",
- opt_type: NAOptionDefinitionType::String(Some(&["elbg", "hybrid", "mediancut"])) },
+ opt_type: NAOptionDefinitionType::String(Some(&["elbg", "mediancut"])) },
NAOptionDefinition {
name: "force_v1", description: "Force coarse (V1-only) mode",
opt_type: NAOptionDefinitionType::Bool },
@@ -1084,7 +1068,6 @@ impl NAOptionHandler for CinepakEncoder {
if let NAValue::String(ref strval) = option.value {
match strval.as_str() {
"elbg" => self.qmode = QuantMode::ELBG,
- "hybrid" => self.qmode = QuantMode::Hybrid,
"mediancut" => self.qmode = QuantMode::MedianCut,
_ => {},
};