X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fscale%2Fcolorcvt.rs;h=0343bdddf27dee3aa301b8a4d26778ba0ad478a1;hb=b36f412c24813b14cb2b1f8fd151863e2a49c1e2;hp=63c7bda1c4a4506f65f6104980a0e9b54928996b;hpb=9379096714b83555dd7b06293c153da2895b3263;p=nihav.git diff --git a/nihav-core/src/scale/colorcvt.rs b/nihav-core/src/scale/colorcvt.rs index 63c7bda..0343bdd 100644 --- a/nihav-core/src/scale/colorcvt.rs +++ b/nihav-core/src/scale/colorcvt.rs @@ -286,6 +286,21 @@ impl Kernel for YuvToRgb { fn init(&mut self, in_fmt: &ScaleInfo, dest_fmt: &ScaleInfo) -> ScaleResult { 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() { @@ -354,7 +369,7 @@ println!(" [intermediate format {}]", df); let mut voff = sbuf.get_offset(2); let src = sbuf.get_data(); let dst = dbuf.get_data_mut().unwrap(); - if self.yscale.len() > 0 { + if !self.yscale.is_empty() { for y in 0..h { for x in 0..w { let y = self.yscale[src[yoff + x] as usize]; @@ -417,7 +432,7 @@ impl YuvToRgb { let mut yoff = sbuf.get_offset(0); let src = sbuf.get_data(); let dst = dbuf.get_data_mut().unwrap(); - if self.yscale.len() > 0 { + if !self.yscale.is_empty() { for _y in 0..h { for x in 0..w { let y = self.yscale[src[yoff + x] as usize];