public static J2KHeaderParameters fromJPEG2000PictureSubDescriptorBO()

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;
    }