byte getPel(Picture pic, int plane, int x, int y) { if (x < 0) x = 0; if (y < 0) y = 0; int w = pic.getPlaneWidth(plane); if (x > w - 1) x = w - 1; int h = pic.getPlaneHeight(plane); if (y > h - 1) y = h - 1; return pic.getData()[plane][x + y * w]; }
private PictureHiBD toPictureHiBDInternal(PictureHiBD pic) { int[][] dstData = pic.getData(); for (int i = 0; i < data.length; i++) { int planeSize = getPlaneWidth(i) * getPlaneHeight(i); for (int j = 0; j < planeSize; j++) { dstData[i][j] = (data[i][j] + 128) << lowBitsNum; } } if (lowBits != null) { for (int i = 0; i < lowBits.length; i++) { int planeSize = getPlaneWidth(i) * getPlaneHeight(i); for (int j = 0; j < planeSize; j++) { dstData[i][j] += lowBits[i][j]; } } } return pic; }
public void predictMB(Picture ref, int refX, int vectX, int refY, int vectY, int blkW, int blkH, int refVertStep, int refVertOff, int[][] tgt, int tgtY, int tgtVertStep) { int ch = chromaFormat == Chroma420 ? 1 : 0; int cw = chromaFormat == Chroma444 ? 0 : 1; int sh = chromaFormat == Chroma420 ? 2 : 1; int sw = chromaFormat == Chroma444 ? 1 : 2; predictPlane(ref.getPlaneData(0), refX + vectX, refY + vectY, ref.getPlaneWidth(0), ref.getPlaneHeight(0), refVertStep, refVertOff, tgt[0], tgtY, blkW, blkH, tgtVertStep); predictPlane(ref.getPlaneData(1), (refX >> cw) + vectX / sw, (refY >> ch) + vectY / sh, ref.getPlaneWidth(1), ref.getPlaneHeight(1), refVertStep, refVertOff, tgt[1], tgtY, blkW >> cw, blkH >> ch, tgtVertStep); predictPlane(ref.getPlaneData(2), (refX >> cw) + vectX / sw, (refY >> ch) + vectY / sh, ref.getPlaneWidth(2), ref.getPlaneHeight(2), refVertStep, refVertOff, tgt[2], tgtY, blkW >> cw, blkH >> ch, tgtVertStep); }
private int[][] transformChroma(Picture pic, int comp, int qp, int x, int y, Picture outMB, int chromaPred) { int[][] ac = new int[4][16]; for (int blk = 0; blk < ac.length; blk++) { int blkOffX = (blk & 1) << 2; int blkOffY = (blk >> 1) << 2; takeSubtract(pic.getPlaneData(comp), pic.getPlaneWidth(comp), pic.getPlaneHeight(comp), x + blkOffX, y + blkOffY, ac[blk], chromaPred); VPXDCT.fdct4x4(ac[blk]); } return ac; }
int patchTlY = Math.max(startY - maxSearchRange, 0); int patchBrX = Math.min(startX + maxSearchRange + 16, ref.getPlaneWidth(0)); int patchBrY = Math.min(startY + maxSearchRange + 16, ref.getPlaneHeight(0)); MBEncoderHelper.takeSafe(ref.getPlaneData(0), ref.getPlaneWidth(0), ref.getPlaneHeight(0), patchTlX, patchTlY, searchPatch, patchW, patchH);
private int[] mvEstimate(Picture pic, int mbX, int mbY, int mvpx, int mvpy) { byte[] patch = new byte[256]; MBEncoderHelper.take(pic.getPlaneData(0), pic.getPlaneWidth(0), pic.getPlaneHeight(0), mbX << 4, mbY << 4, patch, 16, 16); return me.estimate(ref, patch, mbX, mbY, mvpx, mvpy); }
private void predictChroma(Picture pic, int[][] ac, byte[][] pred, int comp, int x, int y) { chromaPredBlk0(comp, x, y, pred[0]); chromaPredBlk1(comp, x, y, pred[1]); chromaPredBlk2(comp, x, y, pred[2]); chromaPredBlk3(comp, x, y, pred[3]); MBEncoderHelper.takeSubtract(pic.getPlaneData(comp), pic.getPlaneWidth(comp), pic.getPlaneHeight(comp), x, y, ac[0], pred[0], 4, 4); MBEncoderHelper.takeSubtract(pic.getPlaneData(comp), pic.getPlaneWidth(comp), pic.getPlaneHeight(comp), x + 4, y, ac[1], pred[1], 4, 4); MBEncoderHelper.takeSubtract(pic.getPlaneData(comp), pic.getPlaneWidth(comp), pic.getPlaneHeight(comp), x, y + 4, ac[2], pred[2], 4, 4); MBEncoderHelper.takeSubtract(pic.getPlaneData(comp), pic.getPlaneWidth(comp), pic.getPlaneHeight(comp), x + 4, y + 4, ac[3], pred[3], 4, 4); }
private void transform(Picture pic, int comp, int[][] ac, byte[][] pred, int x, int y) { for (int i = 0; i < ac.length; i++) { int[] coeff = ac[i]; MBEncoderHelper.takeSubtract(pic.getPlaneData(comp), pic.getPlaneWidth(comp), pic.getPlaneHeight(comp), x + BLK_X[i], y + BLK_Y[i], coeff, pred[i], 4, 4); // shift back up // System.out.print("Luma: "); // for (int j = 0; j < coeff.length; j++) { // coeff[j] += 128; // System.out.print(coeff[j] + ","); // } // System.out.println(); CoeffTransformer.fdct4x4(coeff); } }
@Override public void transform(Picture src, Picture dst) { int lumaSize = src.getWidth() * src.getHeight(); arraycopy(src.getPlaneData(0), 0, dst.getPlaneData(0), 0, lumaSize); copyAvg(src.getPlaneData(1), dst.getPlaneData(1), src.getPlaneWidth(1), src.getPlaneHeight(1)); copyAvg(src.getPlaneData(2), dst.getPlaneData(2), src.getPlaneWidth(2), src.getPlaneHeight(2)); }
private int[][] transform(Picture pic, int comp, int qp, int x, int y) { int dcc = lumaDCPred(x, y); int[][] ac = new int[16][16]; for (int i = 0; i < ac.length; i++) { int[] coeff = ac[i]; int blkOffX = (i & 3) << 2; int blkOffY = i & ~3; takeSubtract(pic.getPlaneData(comp), pic.getPlaneWidth(comp), pic.getPlaneHeight(comp), x + blkOffX, y + blkOffY, coeff, dcc); VPXDCT.fdct4x4(coeff); } return ac; }
private void runJMCompareResults(List<Picture> decodedPics, int seqNo) throws Exception { try { Process process = Runtime.getRuntime().exec(jm + " -d " + jmconf.getAbsolutePath()); process.waitFor(); ByteBuffer yuv = NIOUtils.fetchFromFile(decoded); for (Picture pic : decodedPics) { pic = pic.cropped(); boolean equals = Platform.arrayEqualsByte( toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, pic.getPlaneWidth(0) * pic.getPlaneHeight(0))), pic.getPlaneData(0)); equals &= Platform.arrayEqualsByte( toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, pic.getPlaneWidth(1) * pic.getPlaneHeight(1))), pic.getPlaneData(1)); equals &= Platform.arrayEqualsByte( toByteArrayShifted(JCodecUtil2.getAsIntArray(yuv, pic.getPlaneWidth(2) * pic.getPlaneHeight(2))), pic.getPlaneData(2)); if (!equals) diff(seqNo); } } catch (Exception e) { diff(seqNo); } }
reference[0].getPlaneHeight(0), 1, 0, mbPix1[0], 0, 16, 8, 1); predictPlane(reference[0].getPlaneData(1), refX1Chr, refY1Chr, reference[0].getPlaneWidth(1), reference[0].getPlaneHeight(1), 1, 0, mbPix1[1], 0, 16 >> cw, 8 >> ch, 1); predictPlane(reference[0].getPlaneData(2), refX1Chr, refY1Chr, reference[0].getPlaneWidth(2), reference[0].getPlaneHeight(2), 1, 0, mbPix1[2], 0, 16 >> cw, 8 >> ch, 1); reference[1].getPlaneHeight(0), 1, 1, mbPix1[0], 1, 16, 8, 1); predictPlane(reference[1].getPlaneData(1), refX1Chr, refY1Chr, reference[1].getPlaneWidth(1), reference[1].getPlaneHeight(1), 1, 1, mbPix1[1], 1, 16 >> cw, 8 >> ch, 1); predictPlane(reference[1].getPlaneData(2), refX1Chr, refY1Chr, reference[1].getPlaneWidth(2), reference[1].getPlaneHeight(2), 1, 1, mbPix1[2], 1, 16 >> cw, 8 >> ch, 1); int refY2Chr = (y >> ch) + vect2Y / sh; predictPlane(reference[1].getPlaneData(0), refX2, refY2, reference[1].getPlaneWidth(0), reference[1].getPlaneHeight(0), 1, 1, mbPix2[0], 0, 16, 8, 1); predictPlane(reference[1].getPlaneData(1), refX2Chr, refY2Chr, reference[1].getPlaneWidth(1), reference[1].getPlaneHeight(1), 1, 1, mbPix2[1], 0, 16 >> cw, 8 >> ch, 1); predictPlane(reference[1].getPlaneData(2), refX2Chr, refY2Chr, reference[1].getPlaneWidth(2), reference[1].getPlaneHeight(2), 1, 1, mbPix2[2], 0, 16 >> cw, 8 >> ch, 1); int refY3Chr = (y >> ch) + vect3Y / sh; predictPlane(reference[0].getPlaneData(0), refX3, refY3, reference[0].getPlaneWidth(0), reference[0].getPlaneHeight(0), 1, 0, mbPix2[0], 1, 16, 8, 1); predictPlane(reference[0].getPlaneData(1), refX3Chr, refY3Chr, reference[0].getPlaneWidth(1), reference[0].getPlaneHeight(1), 1, 0, mbPix2[1], 1, 16 >> cw, 8 >> ch, 1); predictPlane(reference[0].getPlaneData(2), refX3Chr, refY3Chr, reference[0].getPlaneWidth(2), reference[0].getPlaneHeight(2), 1, 0, mbPix2[2], 1, 16 >> cw, 8 >> ch, 1);
reference[fieldNo].getPlaneHeight(0), 1, fieldNo, mbPix1[0], 0, 16, 16, 0); predictPlane(reference[fieldNo].getPlaneData(1), refX1Chr, refY1Chr, reference[fieldNo].getPlaneWidth(1), reference[fieldNo].getPlaneHeight(1), 1, fieldNo, mbPix1[1], 0, 16 >> cw, 16 >> ch, 0); predictPlane(reference[fieldNo].getPlaneData(2), refX1Chr, refY1Chr, reference[fieldNo].getPlaneWidth(2), reference[fieldNo].getPlaneHeight(2), 1, fieldNo, mbPix1[2], 0, 16 >> cw, 16 >> ch, 0); int opposite = 1 - fieldNo; predictPlane(reference[opposite].getPlaneData(0), refX2, refY2, reference[opposite].getPlaneWidth(0), reference[opposite].getPlaneHeight(0), 1, opposite, mbPix2[0], 0, 16, 16, 0); predictPlane(reference[opposite].getPlaneData(1), refX2Chr, refY2Chr, reference[opposite].getPlaneWidth(1), reference[opposite].getPlaneHeight(1), 1, opposite, mbPix2[1], 0, 16 >> cw, 16 >> ch, 0); predictPlane(reference[opposite].getPlaneData(2), refX2Chr, refY2Chr, reference[opposite].getPlaneWidth(2), reference[opposite].getPlaneHeight(2), 1, opposite, mbPix2[2], 0, 16 >> cw, 16 >> ch, 0);
public static final void putBlkPic(Picture dest, Picture src, int x, int y) { if (dest.getColor() != src.getColor()) throw new RuntimeException("Incompatible color"); for (int c = 0; c < dest.getColor().nComp; c++) { pubBlkOnePlane(dest.getPlaneData(c), dest.getPlaneWidth(c), src.getPlaneData(c), src.getPlaneWidth(c), src.getPlaneHeight(c), x >> dest.getColor().compWidth[c], y >> dest.getColor().compHeight[c]); } }
for (int y = 0; y < in.getPlaneHeight(p) + nTaps(); y++) { for (int x = 0; x < out.getPlaneWidth(p); x++) { short[] tapsXs = getTapsX(x); for (int y = 0; y < out.getPlaneHeight(p); y++) { for (int x = 0; x < out.getPlaneWidth(p); x++) { short[] tapsYs = getTapsY(y);
interpolator.getBlockChroma(ref.getPlaneData(1), ref.getPlaneWidth(1), ref.getPlaneHeight(1), mbRef.getPlaneData(1), 0, mbRef.getPlaneWidth(1), (mbX << 6) + mv[0], (mbY << 6) + mv[1], 8, 8); interpolator.getBlockChroma(ref.getPlaneData(2), ref.getPlaneWidth(2), ref.getPlaneHeight(2), mbRef.getPlaneData(2), 0, mbRef.getPlaneWidth(2), (mbX << 6) + mv[0], (mbY << 6) + mv[1], 8, 8); MBEncoderHelper.takeSubtract(pic.getPlaneData(0), pic.getPlaneWidth(0), pic.getPlaneHeight(0), mbX << 4, mbY << 4, mb[0], mbRef.getPlaneData(0), 16, 16); MBEncoderHelper.takeSubtract(pic.getPlaneData(1), pic.getPlaneWidth(1), pic.getPlaneHeight(1), mbX << 3, mbY << 3, mb[1], mbRef.getPlaneData(1), 8, 8); MBEncoderHelper.takeSubtract(pic.getPlaneData(2), pic.getPlaneWidth(2), pic.getPlaneHeight(2), mbX << 3, mbY << 3, mb[2], mbRef.getPlaneData(2), 8, 8);
ref.getPlaneHeight(comp), mbb[list].getPlaneData(comp), blkPoy * mb.getPlaneWidth(comp) + blkPox, mb.getPlaneWidth(comp), xx, yy, 2, 2);