package org.jcodec.api.transcode.filters; import org.jcodec.codecs.h264.io.model.Frame; import org.jcodec.codecs.h264.io.model.SliceType; import org.jcodec.common.model.Picture8Bit; import org.jcodec.api.transcode.Transcoder.Filter; import org.jcodec.api.transcode.Transcoder.PixelStore; public class DumpMvFilter implements Filter { private boolean js; public DumpMvFilter(boolean js) { this.js = js; } @Override public Picture8Bit filter(Picture8Bit picture, PixelStore pixelStore) { Frame dec = (Frame) picture; if (!js) dumpMvTxt(dec); else dumpMvJs(dec); return picture; } private void dumpMvTxt(Frame dec) { System.err.println("FRAME ================================================================"); if (dec.getFrameType() == SliceType.I) return; int[][][][] mvs = dec.getMvs(); for (int i = 0; i < 2; i++) { System.err.println((i == 0 ? "BCK" : "FWD") + " ==========================================================================="); for (int blkY = 0; blkY < mvs[i].length; ++blkY) { StringBuilder line0 = new StringBuilder(); StringBuilder line1 = new StringBuilder(); StringBuilder line2 = new StringBuilder(); StringBuilder line3 = new StringBuilder(); line0.append("+"); line1.append("|"); line2.append("|"); line3.append("|"); for (int blkX = 0; blkX < mvs[i][0].length; ++blkX) { line0.append("------+"); line1.append(String.format("%6d|", mvs[i][blkY][blkX][0])); line2.append(String.format("%6d|", mvs[i][blkY][blkX][1])); line3.append(String.format(" %2d|", mvs[i][blkY][blkX][2])); } System.err.println(line0.toString()); System.err.println(line1.toString()); System.err.println(line2.toString()); System.err.println(line3.toString()); } if (dec.getFrameType() != SliceType.B) break; } } private void dumpMvJs(Frame dec) { System.err.println("{"); if (dec.getFrameType() == SliceType.I) return; int[][][][] mvs = dec.getMvs(); for (int i = 0; i < 2; i++) { System.err.println((i == 0 ? "backRef" : "forwardRef") + ": ["); for (int blkY = 0; blkY < mvs[i].length; ++blkY) { for (int blkX = 0; blkX < mvs[i][0].length; ++blkX) { System.err.println("{x: " + blkX + ", y: " + blkY + ", mx: " + mvs[i][blkY][blkX][0] + ", my: " + mvs[i][blkY][blkX][1] + ", ridx:" + mvs[i][blkY][blkX][2] + "},"); } } System.err.println("],"); if (dec.getFrameType() != SliceType.B) break; } System.err.println("}"); } }