core/scale: add options support
[nihav.git] / nihav-core / src / scale / palette / mod.rs
index 2005cd8c0fc12c6158511fc937ee5a55b69b496c..f9b0ee9b033fa9ae4f99435a3731291527a93efd 100644 (file)
@@ -220,7 +220,29 @@ impl PalettiseKernel {
 }
 
 impl Kernel for PalettiseKernel {
-    fn init(&mut self, in_fmt: &ScaleInfo, _dest_fmt: &ScaleInfo) -> ScaleResult<NABufferType> {
+    fn init(&mut self, in_fmt: &ScaleInfo, _dest_fmt: &ScaleInfo, options: &[(String, String)]) -> ScaleResult<NABufferType> {
+        for (name, value) in options.iter() {
+            match name.as_str() {
+                "pal.quant" => {
+                    self.qmode = match value.as_str() {
+                            "mediancut" => QuantisationMode::MedianCut,
+                            "elbg"      => QuantisationMode::ELBG,
+                            "neuquant"  => QuantisationMode::NeuQuant(3),
+                            _           => QuantisationMode::default(),
+                        };
+                },
+                "pal.search" => {
+                    self.palmode = match value.as_str() {
+                            "full"      => PaletteSearchMode::Full,
+                            "local"     => PaletteSearchMode::Local,
+                            "kdtree"    => PaletteSearchMode::KDTree,
+                            _           => PaletteSearchMode::default(),
+                        };
+                },
+                _ => {},
+            };
+        }
+
         self.pixels = Vec::with_capacity(in_fmt.width * in_fmt.height);
         let res = alloc_video_buffer(NAVideoInfo::new(in_fmt.width, in_fmt.height, false, PAL8_FORMAT), 0);
         if res.is_err() { return Err(ScaleError::AllocError); }