use super::*;
use super::kernel::Kernel;
+const DEFAULT_YUV: usize = 4;
+
const YUV_PARAMS: &[[f32; 2]] = &[
[ 0.333, 0.333 ], // RGB
[ 0.2126, 0.0722 ], // ITU-R BT709
fn init(&mut self, in_fmt: &ScaleInfo, dest_fmt: &ScaleInfo) -> ScaleResult<NABufferType> {
let mut df = dest_fmt.fmt;
//todo coeff selection
- make_rgb2yuv(YUV_PARAMS[2][0], YUV_PARAMS[2][1], &mut self.matrix);
+ make_rgb2yuv(YUV_PARAMS[DEFAULT_YUV][0], YUV_PARAMS[DEFAULT_YUV][1], &mut self.matrix);
if let ColorModel::YUV(yuvsm) = df.get_model() {
match yuvsm {
YUVSubmodel::YCbCr => {},
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);
+ make_yuv2rgb(YUV_PARAMS[DEFAULT_YUV][0], YUV_PARAMS[DEFAULT_YUV][1], &mut self.matrix);
if let ColorModel::YUV(yuvsm) = in_fmt.fmt.get_model() {
match yuvsm {
YUVSubmodel::YCbCr => {},
YUVSubmodel::YIQ => {
- make_rgb2yuv(YUV_PARAMS[2][0], YUV_PARAMS[2][1], &mut self.matrix);
+ make_rgb2yuv(YUV_PARAMS[DEFAULT_YUV][0], YUV_PARAMS[DEFAULT_YUV][1], &mut self.matrix);
apply_ntsc_rgb2yiq(SMPTE_NTSC_COEFFS, &mut self.matrix);
invert_matrix(&mut self.matrix);
},
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];
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];