org.mp4parser.support.Matrix Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of isoparser Show documentation
Show all versions of isoparser Show documentation
A generic parser and writer for all ISO 14496 based files (MP4, Quicktime, DCF, PDCF, ...)
package org.mp4parser.support;
import org.mp4parser.tools.IsoTypeReader;
import org.mp4parser.tools.IsoTypeWriter;
import java.nio.ByteBuffer;
/**
* Transformation Matrix as used in Track-
and MovieHeaderBox
.
*/
public class Matrix {
public static final Matrix ROTATE_0 = new Matrix(1, 0, 0, 1, 0, 0, 1, 0, 0);
public static final Matrix ROTATE_90 = new Matrix(0, 1, -1, 0, 0, 0, 1, 0, 0);
public static final Matrix ROTATE_180 = new Matrix(-1, 0, 0, -1, 0, 0, 1, 0, 0);
public static final Matrix ROTATE_270 = new Matrix(0, -1, 1, 0, 0, 0, 1, 0, 0);
double u, v, w;
double a, b, c, d, tx, ty;
public Matrix(double a, double b, double c, double d, double u, double v, double w, double tx, double ty) {
this.u = u;
this.v = v;
this.w = w;
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.tx = tx;
this.ty = ty;
}
public static Matrix fromFileOrder(double a, double b, double u, double c, double d, double v, double tx, double ty, double w) {
return new Matrix(a, b, c, d, u, v, w, tx, ty);
}
public static Matrix fromByteBuffer(ByteBuffer byteBuffer) {
return fromFileOrder(
IsoTypeReader.readFixedPoint1616(byteBuffer),
IsoTypeReader.readFixedPoint1616(byteBuffer),
IsoTypeReader.readFixedPoint0230(byteBuffer),
IsoTypeReader.readFixedPoint1616(byteBuffer),
IsoTypeReader.readFixedPoint1616(byteBuffer),
IsoTypeReader.readFixedPoint0230(byteBuffer),
IsoTypeReader.readFixedPoint1616(byteBuffer),
IsoTypeReader.readFixedPoint1616(byteBuffer),
IsoTypeReader.readFixedPoint0230(byteBuffer)
);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Matrix matrix = (Matrix) o;
if (Double.compare(matrix.a, a) != 0) return false;
if (Double.compare(matrix.b, b) != 0) return false;
if (Double.compare(matrix.c, c) != 0) return false;
if (Double.compare(matrix.d, d) != 0) return false;
if (Double.compare(matrix.tx, tx) != 0) return false;
if (Double.compare(matrix.ty, ty) != 0) return false;
if (Double.compare(matrix.u, u) != 0) return false;
if (Double.compare(matrix.v, v) != 0) return false;
if (Double.compare(matrix.w, w) != 0) return false;
return true;
}
@Override
public int hashCode() {
int result;
long temp;
temp = Double.doubleToLongBits(u);
result = (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(v);
result = 31 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(w);
result = 31 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(a);
result = 31 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(b);
result = 31 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(c);
result = 31 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(d);
result = 31 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(tx);
result = 31 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(ty);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public String toString() {
if (this.equals(ROTATE_0)) {
return "Rotate 0°";
}
if (this.equals(ROTATE_90)) {
return "Rotate 90°";
}
if (this.equals(ROTATE_180)) {
return "Rotate 180°";
}
if (this.equals(ROTATE_270)) {
return "Rotate 270°";
}
return "Matrix{" +
"u=" + u +
", v=" + v +
", w=" + w +
", a=" + a +
", b=" + b +
", c=" + c +
", d=" + d +
", tx=" + tx +
", ty=" + ty +
'}';
}
public void getContent(ByteBuffer byteBuffer) {
IsoTypeWriter.writeFixedPoint1616(byteBuffer, a);
IsoTypeWriter.writeFixedPoint1616(byteBuffer, b);
IsoTypeWriter.writeFixedPoint0230(byteBuffer, u);
IsoTypeWriter.writeFixedPoint1616(byteBuffer, c);
IsoTypeWriter.writeFixedPoint1616(byteBuffer, d);
IsoTypeWriter.writeFixedPoint0230(byteBuffer, v);
IsoTypeWriter.writeFixedPoint1616(byteBuffer, tx);
IsoTypeWriter.writeFixedPoint1616(byteBuffer, ty);
IsoTypeWriter.writeFixedPoint0230(byteBuffer, w);
}
}