in src/main/java/com/netflix/imflibrary/J2KHeaderParameters.java [261:339]
public static J2KHeaderParameters fromJPEG2000PictureSubDescriptorBO(JPEG2000PictureSubDescriptor.JPEG2000PictureSubDescriptorBO jpeg2000PictureSubDescriptorBO) {
J2KHeaderParameters p = new J2KHeaderParameters();
p.rsiz = jpeg2000PictureSubDescriptorBO.getRSiz().intValue();
p.xsiz = jpeg2000PictureSubDescriptorBO.getXSiz().longValue();
p.ysiz = jpeg2000PictureSubDescriptorBO.getYSiz().longValue();
p.xosiz = jpeg2000PictureSubDescriptorBO.getXoSiz().longValue();
p.yosiz = jpeg2000PictureSubDescriptorBO.getYoSiz().longValue();
p.xtsiz = jpeg2000PictureSubDescriptorBO.getXtSiz().longValue();
p.ytsiz = jpeg2000PictureSubDescriptorBO.getYtSiz().longValue();
p.xtosiz = jpeg2000PictureSubDescriptorBO.getXtoSiz().longValue();
p.ytosiz = jpeg2000PictureSubDescriptorBO.getYtoSiz().longValue();
// CSiz
List<JPEG2000PictureComponent.JPEG2000PictureComponentBO> subDescriptorCsizi = jpeg2000PictureSubDescriptorBO.getPictureComponentSizing().getEntries();
p.csiz = new CSiz[subDescriptorCsizi.size()];
for (int i = 0; i < p.csiz.length; i++) {
p.csiz[i] = new CSiz();
p.csiz[i].ssiz = subDescriptorCsizi.get(i).getSSiz();
p.csiz[i].xrsiz = subDescriptorCsizi.get(i).getXrSiz();
p.csiz[i].yrsiz = subDescriptorCsizi.get(i).getYrSiz();
}
if (p.csiz.length != jpeg2000PictureSubDescriptorBO.getCSiz()) {
return null;
}
// CAP
J2KExtendedCapabilities j2KExtendedCapabilities = jpeg2000PictureSubDescriptorBO.getJ2kExtendedCapabilities();
List<Short> subDescriptorcCap = j2KExtendedCapabilities.getcCap().getEntries();
p.cap = new CAP();
p.cap.pcap = j2KExtendedCapabilities.getpCap();
p.cap.ccap = new int[subDescriptorcCap.size()];
for (int i = 0; i < p.cap.ccap.length; i++) {
p.cap.ccap[i] = subDescriptorcCap.get(i);
}
int cCapLength = Long.bitCount(p.cap.pcap);
if (cCapLength > 0 && p.cap.ccap.length != cCapLength) {
return null;
}
// COD
String codString = jpeg2000PictureSubDescriptorBO.getCodingStyleDefaultString();
if (codString != null && codString.length() >= 20 && (codString.length() % 2 == 0)) {
p.cod = new COD();
p.cod.scod = (short) Integer.parseInt(codString.substring(0, 2), 16);
p.cod.progressionOrder = (short) Integer.parseInt(codString.substring(2, 4), 16);
p.cod.numLayers = Integer.parseInt(codString.substring(4, 8), 16);
p.cod.multiComponentTransform = (short) Integer.parseInt(codString.substring(8, 10), 16);
p.cod.numDecompLevels = (short) Integer.parseInt(codString.substring(10, 12), 16);
p.cod.xcb = (short) (Integer.parseInt(codString.substring(12, 14), 16) + 2);
p.cod.ycb = (short) (Integer.parseInt(codString.substring(14, 16), 16) + 2);
p.cod.cbStyle = (short) Integer.parseInt(codString.substring(16, 18), 16);
p.cod.transformation = (short) Integer.parseInt(codString.substring(18, 20), 16);
p.cod.precinctSizes = new short[(codString.length() - 20) / 2];
for (int i = 0; i < p.cod.precinctSizes.length; i++) {
p.cod.precinctSizes[i] = (short) Integer.parseInt(codString.substring(20 + 2 * i, 22 + 2 * i), 16);
}
} else {
return null;
}
// QCD
String qcdString = jpeg2000PictureSubDescriptorBO.getQuantisationDefaultString();
if (qcdString != null && qcdString.length() >= 2 && (qcdString.length() % 2 == 0)) {
p.qcd = new QCD();
p.qcd.sqcd = (short) Integer.parseInt(qcdString.substring(0, 2), 16);
int spqcdSize = (p.qcd.sqcd & 0b11111) == 0 ? 1 : 2;
p.qcd.spqcd = new int[(qcdString.length() - 2) / (2 * spqcdSize)];
for (int i = 0; i < p.qcd.spqcd.length; i++) {
p.qcd.spqcd[i] = Integer.parseInt(qcdString.substring(2 + 2 * spqcdSize * i, 4 + 2 * spqcdSize * i), 16);
}
}
return p;
}