package org.jcodec.scale; import org.jcodec.common.model.Picture; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed * under FreeBSD License * * @author The JCodec project * */ public class RgbToYuv422p implements Transform { private int upShift; private int downShift; private int downShiftChr; public RgbToYuv422p(int upShift, int downShift) { this.upShift = upShift; this.downShift = downShift; this.downShiftChr = downShift + 1; } public void transform(Picture img, Picture dst) { int[] y = img.getData()[0]; int[][] dstData = dst.getData(); int off = 0, offSrc = 0; for (int i = 0; i < img.getHeight(); i++) { for (int j = 0; j < img.getWidth() >> 1; j++) { dstData[1][off] = 0; dstData[2][off] = 0; int offY = off << 1; RgbToYuv420p.rgb2yuv(y[offSrc++], y[offSrc++], y[offSrc++], dstData[0], offY, dstData[1], off, dstData[2], off); dstData[0][offY] = (dstData[0][offY] << upShift) >> downShift; RgbToYuv420p.rgb2yuv(y[offSrc++], y[offSrc++], y[offSrc++], dstData[0], offY + 1, dstData[1], off, dstData[2], off); dstData[0][offY + 1] = (dstData[0][offY + 1] << upShift) >> downShift; dstData[1][off] = (dstData[1][off] << upShift) >> downShiftChr; dstData[2][off] = (dstData[2][off] << upShift) >> downShiftChr; ++off; } } } }