package org.jcodec.codecs.h264;
import org.jcodec.codecs.h264.decode.SliceHeaderReader;
import org.jcodec.codecs.h264.io.model.NALUnit;
import org.jcodec.codecs.h264.io.model.NALUnitType;
import org.jcodec.codecs.h264.io.model.PictureParameterSet;
import org.jcodec.codecs.h264.io.model.SeqParameterSet;
import org.jcodec.codecs.h264.io.model.SliceHeader;
import org.jcodec.codecs.h264.io.write.SliceHeaderWriter;
import org.jcodec.common.io.BitReader;
import org.jcodec.common.io.BitWriter;
import org.jcodec.common.io.NIOUtils;
import org.junit.Assert;
import org.junit.Test;
import java.lang.System;
import java.nio.ByteBuffer;
public class SliceHeaderTest {
@Test
public void test1() {
byte[] data = new byte[] { -102, 79, 8, 100, -54, 97, 55 };
short[] sps = new short[] { 0x64, 0x00, 0x15, 0xac, 0xb2, 0x01, 0x00, 0x4b, 0x7f, 0xe0, 0x00, 0x60, 0x00, 0x82,
0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x64, 0x1e, 0x2c, 0x5c, 0x90 };
short[] pps = new short[] { 0xeb, 0xc2, 0xcb, 0x22, 0xc0 };
SliceHeaderReader shr = new SliceHeaderReader();
SliceHeaderWriter shw = new SliceHeaderWriter();
BitReader reader = BitReader.createBitReader(ByteBuffer.wrap(data));
ByteBuffer out = ByteBuffer.allocate(data.length);
BitWriter writer = new BitWriter(out);
SeqParameterSet sps1 = SeqParameterSet.read(ByteBuffer.wrap(asByteArray(sps)));
PictureParameterSet pps1 = PictureParameterSet.read(ByteBuffer.wrap(asByteArray(pps)));
SliceHeader sh = shr.readPart1(reader);
shr.readPart2(sh, new NALUnit(NALUnitType.NON_IDR_SLICE, 1), sps1, pps1, reader);
shw.write(sh, false, 1, writer);
writer.flush();
out.flip();
byte[] array = NIOUtils.toArray(out);
for (byte b : array) {
System.out.println(b);
}
Assert.assertArrayEquals(data, NIOUtils.toArray(out));
}
byte[] asByteArray(short[] src) {
byte[] result = new byte[src.length];
for (int i = 0; i < src.length; i++) {
result[i] = (byte) src[i];
}
return result;
}
}