org.jcodec.testing.VerifyTool Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jcodec Show documentation
Show all versions of jcodec Show documentation
Pure Java implementation of video/audio codecs and formats
package org.jcodec.testing;
import static org.jcodec.common.JCodecUtil.getAsIntArray;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.jcodec.codecs.h264.H264Decoder;
import org.jcodec.codecs.h264.MappedH264ES;
import org.jcodec.common.NIOUtils;
import org.jcodec.common.model.ColorSpace;
import org.jcodec.common.model.Packet;
import org.jcodec.common.model.Picture;
public class VerifyTool {
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.out.println("Syntax: ");
return;
}
new VerifyTool().doIt(args[0]);
}
private void doIt(String location) throws IOException {
File[] h264 = new File(location).listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".264");
}
});
for (File coded : h264) {
File ref = new File(coded.getParentFile(), coded.getName().replaceAll(".264$", "_dec.yuv"));
if (coded.exists() && ref.exists()) {
try {
if (test(coded, ref)) {
System.out.println(coded.getAbsolutePath() + " -- FIXED");
coded.delete();
ref.delete();
} else {
System.out.println(coded.getAbsolutePath() + " -- NOT FIXED!!!!");
}
} catch (Throwable t) {
System.out.println(coded.getAbsolutePath() + " -- ERROR: " + t.getMessage());
}
}
}
}
private boolean test(File coded, File ref) throws IOException {
MappedH264ES es = new MappedH264ES(NIOUtils.fetchFrom(coded));
Picture buf = Picture.create(1920, 1088, ColorSpace.YUV420);
H264Decoder dec = new H264Decoder();
Packet nextFrame;
ByteBuffer _yuv = NIOUtils.fetchFrom(ref);
while ((nextFrame = es.nextFrame()) != null) {
Picture out = dec.decodeFrame(nextFrame.getData(), buf.getData()).cropped();
Picture pic = out.createCompatible();
pic.copyFrom(out);
int lumaSize = pic.getWidth() * pic.getHeight();
int crSize = lumaSize >> 2;
int cbSize = lumaSize >> 2;
ByteBuffer yuv = NIOUtils.read(_yuv, lumaSize + crSize + cbSize);
if (!Arrays.equals(getAsIntArray(yuv, lumaSize), pic.getPlaneData(0)))
return false;
if (!Arrays.equals(getAsIntArray(yuv, crSize), pic.getPlaneData(1)))
return false;
if (!Arrays.equals(getAsIntArray(yuv, cbSize), pic.getPlaneData(2)))
return false;
}
return true;
}
}