All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jcodec.codecs.raw.V210Decoder Maven / Gradle / Ivy

There is a newer version: 0.2.5
Show newest version
package org.jcodec.codecs.raw;

import static java.nio.ByteOrder.LITTLE_ENDIAN;
import static org.jcodec.common.model.ColorSpace.YUV422_10;

import java.nio.ByteBuffer;
import java.nio.IntBuffer;

import org.jcodec.common.model.Picture;

/**
 * This class is part of JCodec ( www.jcodec.org )
 * This software is distributed under FreeBSD License
 * 
 * The decoder for yuv 10 bit 422
 * 
 * x|x|9876543210(cr0)|9876543210(y0) |9876543210(cb0)
 * x|x|9876543210(y2) |9876543210(cb1)|9876543210(y1)
 * x|x|9876543210(cb2)|9876543210(y3) |9876543210(cr1)
 * x|x|9876543210(y5) |9876543210(cr2)|9876543210(y4) 
 * 
 * @author Jay Codec
 * 
 */
public class V210Decoder {

    private int width;
    private int height;

    public V210Decoder(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public Picture decode(byte[] data) {
        IntBuffer dat = ByteBuffer.wrap(data).order(LITTLE_ENDIAN).asIntBuffer();
        IntBuffer y = IntBuffer.wrap(new int[width * height]);
        IntBuffer cb = IntBuffer.wrap(new int[width * height / 2]);
        IntBuffer cr = IntBuffer.wrap(new int[width * height / 2]);

        while (dat.hasRemaining()) {
            int i = dat.get();
            cr.put(i >> 20);
            y.put((i >> 10) & 0x3ff);
            cb.put(i & 0x3ff);

            i = dat.get();
            y.put(i & 0x3ff);
            y.put(i >> 20);
            cb.put((i >> 10) & 0x3ff);

            i = dat.get();
            cb.put(i >> 20);
            y.put((i >> 10) & 0x3ff);
            cr.put(i & 0x3ff);

            i = dat.get();
            y.put(i & 0x3ff);
            y.put(i >> 20);
            cr.put((i >> 10) & 0x3ff);
        }

        return new Picture(width, height, new int[][] {y.array(), cb.array(), cr.array()}, YUV422_10);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy