package org.jcodec.codecs.h264;
import org.jcodec.common.ArrayUtil;
import org.jcodec.common.JCodecUtil2;
import org.jcodec.common.io.NIOUtils;
import org.jcodec.common.model.ColorSpace;
import org.jcodec.common.model.Picture8Bit;
import org.junit.Assert;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
public class MacroblockInterDecodingTest {
@Test
public void testMBlockCABAC1() throws IOException {
BufferH264ES es = new BufferH264ES(
NIOUtils.fetchFromFile(new File("src/test/resources/h264/cabac/p_1/seq.264")));
H264Decoder dec = new H264Decoder();
Picture8Bit[] out = {
dec.decodeFrame8Bit(es.nextFrame().getData(), Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()),
dec.decodeFrame8Bit(es.nextFrame().getData(), Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()),
dec.decodeFrame8Bit(es.nextFrame().getData(),
Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()) };
ByteBuffer yuv = NIOUtils.fetchFromFile(new File("src/test/resources/h264/cabac/p_1/seq_dec.yuv"));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[0].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[0].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[0].getPlaneData(2));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[1].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[1].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[1].getPlaneData(2));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[2].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[2].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[2].getPlaneData(2));
}
@Test
public void testMBlockCABAC2() throws IOException {
BufferH264ES es = new BufferH264ES(
NIOUtils.fetchFromFile(new File("src/test/resources/h264/cabac/p_2/seq.264")));
H264Decoder dec = new H264Decoder();
Picture8Bit[] out = {
dec.decodeFrame8Bit(es.nextFrame().getData(), Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()),
dec.decodeFrame8Bit(es.nextFrame().getData(), Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()),
dec.decodeFrame8Bit(es.nextFrame().getData(),
Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()) };
ByteBuffer yuv = NIOUtils.fetchFromFile(new File("src/test/resources/h264/cabac/p_2/seq_dec.yuv"));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[0].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[0].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[0].getPlaneData(2));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[1].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[1].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[1].getPlaneData(2));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[2].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[2].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[2].getPlaneData(2));
}
@Test
public void testMBlockCAVLC1() throws IOException {
BufferH264ES es = new BufferH264ES(
NIOUtils.fetchFromFile(new File("src/test/resources/h264/cavlc/p_1/seq.264")));
H264Decoder dec = new H264Decoder();
Picture8Bit[] out = {
dec.decodeFrame8Bit(es.nextFrame().getData(), Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()),
dec.decodeFrame8Bit(es.nextFrame().getData(), Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()),
dec.decodeFrame8Bit(es.nextFrame().getData(),
Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()) };
ByteBuffer yuv = NIOUtils.fetchFromFile(new File("src/test/resources/h264/cavlc/p_1/seq_dec.yuv"));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[0].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[0].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[0].getPlaneData(2));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[1].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[1].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[1].getPlaneData(2));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[2].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[2].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[2].getPlaneData(2));
}
@Test
public void testMBlockCAVLC2() throws IOException {
BufferH264ES es = new BufferH264ES(
NIOUtils.fetchFromFile(new File("src/test/resources/h264/cavlc/p_2/seq.264")));
H264Decoder dec = new H264Decoder();
Picture8Bit[] out = {
dec.decodeFrame8Bit(es.nextFrame().getData(), Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()),
dec.decodeFrame8Bit(es.nextFrame().getData(), Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()),
dec.decodeFrame8Bit(es.nextFrame().getData(),
Picture8Bit.create(32, 32, ColorSpace.YUV420).getData()) };
ByteBuffer yuv = NIOUtils.fetchFromFile(new File("src/test/resources/h264/cavlc/p_2/seq_dec.yuv"));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[0].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[0].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[0].getPlaneData(2));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[1].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[1].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[1].getPlaneData(2));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 1024)), out[2].getPlaneData(0));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[2].getPlaneData(1));
Assert.assertArrayEquals(ArrayUtil.toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, 256)), out[2].getPlaneData(2));
}
}