core/scale: make sure that yuv2rgb kernel outputs to planar RGB
authorKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 29 May 2020 16:50:25 +0000 (18:50 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 29 May 2020 16:50:25 +0000 (18:50 +0200)
nihav-core/src/scale/colorcvt.rs

index 63c7bda1c4a4506f65f6104980a0e9b54928996b..056c0504dc5f8db4e50772f3f47ebc68b996fb5b 100644 (file)
@@ -286,6 +286,21 @@ impl Kernel for YuvToRgb {
     fn init(&mut self, in_fmt: &ScaleInfo, dest_fmt: &ScaleInfo) -> ScaleResult<NABufferType> {
         let mut df = dest_fmt.fmt;
         df.palette = false;
+        if !df.is_unpacked() || df.get_max_depth() != 8 || df.get_total_depth() != df.get_num_comp() as u8 * 8 {
+            df = NAPixelFormaton {
+                    model: ColorModel::RGB(RGBSubmodel::RGB), components: 3,
+                    comp_info: [
+                        Some(NAPixelChromaton{ h_ss: 0, v_ss: 0, packed: false, depth: 8, shift: 0, comp_offs: 0, next_elem: 1 }),
+                        Some(NAPixelChromaton{ h_ss: 0, v_ss: 0, packed: false, depth: 8, shift: 0, comp_offs: 1, next_elem: 1 }),
+                        Some(NAPixelChromaton{ h_ss: 0, v_ss: 0, packed: false, depth: 8, shift: 0, comp_offs: 2, next_elem: 1 }),
+                        None, None],
+                    elem_size: 3, be: false, alpha: false, palette: false };
+            if in_fmt.fmt.alpha && dest_fmt.fmt.alpha {
+                df.alpha = true;
+                df.components = 4;
+                df.comp_info[3] = Some(NAPixelChromaton{ h_ss: 0, v_ss: 0, packed: false, depth: 8, shift: 0, comp_offs: 3, next_elem: 1 });
+            }
+        }
 //todo coeff selection
         make_yuv2rgb(YUV_PARAMS[2][0], YUV_PARAMS[2][1], &mut self.matrix);
         if let ColorModel::YUV(yuvsm) = in_fmt.fmt.get_model() {