Package bdsup2sub.supstream

Examples of bdsup2sub.supstream.SubPicture


     * This is needed if cropping captions during decode (i.e. the source image size changes).
     * @param index Index of caption
     * @return true: image size has changed, false: image size didn't change.
     */
    private static boolean updateTrgPic(int index) {
        SubPicture picSrc = subtitleStream.getSubPicture(index);
        SubPicture picTrg = subPictures[index];
        double scaleX = (double) picTrg.getWidth() / picSrc.getWidth();
        double scaleY = (double) picTrg.getHeight() / picSrc.getHeight();
        double fx;
        double fy;
        if (configuration.getApplyFreeScale()) {
            fx = configuration.getFreeScaleFactorX();
            fy = configuration.getFreeScaleFactorY();
        } else {
            fx = 1.0;
            fy = 1.0;
        }

        int wOld = picTrg.getImageWidth();
        int hOld = picTrg.getImageHeight();
        int wNew = (int)(picSrc.getImageWidth()  * scaleX * fx + 0.5);
        if (wNew < MIN_IMAGE_DIMENSION) {
            wNew = picSrc.getImageWidth();
        } else if (wNew > picTrg.getWidth()) {
            wNew = picTrg.getWidth();
        }
        int hNew = (int)(picSrc.getImageHeight() * scaleY * fy + 0.5);
        if (hNew < MIN_IMAGE_DIMENSION) {
            hNew = picSrc.getImageHeight();
        } else if (hNew > picTrg.getHeight()) {
            hNew = picTrg.getHeight();
        }
        picTrg.setImageWidth(wNew);
        picTrg.setImageHeight(hNew);
        if (wNew != wOld) {
            int xOfs = (int)(picSrc.getXOffset() * scaleX + 0.5);
            int spaceSrc = (int)((picSrc.getWidth() -picSrc.getImageWidth())*scaleX + 0.5);
            int spaceTrg = picTrg.getWidth() - wNew;
            xOfs += (spaceTrg - spaceSrc) / 2;
            if (xOfs < 0) {
                xOfs = 0;
            } else if (xOfs+wNew > picTrg.getWidth()) {
                xOfs = picTrg.getWidth() - wNew;
            }
            picTrg.setOfsX(xOfs);
        }
        if (hNew != hOld) {
            int yOfs = (int)(picSrc.getYOffset() * scaleY + 0.5);
            int spaceSrc = (int)((picSrc.getHeight() -picSrc.getImageHeight())*scaleY + 0.5);
            int spaceTrg = picTrg.getHeight() - hNew;
            yOfs += (spaceTrg - spaceSrc) / 2;
            if (yOfs+hNew > picTrg.getHeight()) {
                yOfs = picTrg.getHeight() - hNew;
            }
            picTrg.setOfsY(yOfs);
        }
        // was image cropped?
        return (wNew != wOld) || (hNew != hOld);
    }
View Full Code Here


            fx = 1.0;
            fy = 1.0;
        }

        // first run: clone source subpics, apply speedup/down,
        SubPicture picSrc;
        for (int i=0; i<subPictures.length; i++) {
            picSrc = subtitleStream.getSubPicture(i);
            subPictures[i] = new SubPicture(picSrc);
            long ts = picSrc.getStartTime();
            long te = picSrc.getEndTime();
            // copy time stamps and apply speedup/speeddown
            int delayPTS = configuration.getDelayPTS();
            if (!convertFPS) {
                subPictures[i].setStartTime(ts + delayPTS);
                subPictures[i].setEndTime(te + delayPTS);
            } else {
                subPictures[i].setStartTime((long) (ts * factTS + 0.5) + delayPTS);
                subPictures[i].setEndTime((long) (te * factTS + 0.5) + delayPTS);
            }
            // synchronize to target frame rate
            subPictures[i].setStartTime(SubtitleUtils.syncTimePTS(subPictures[i].getStartTime(), configuration.getFpsTrg(), configuration.getFpsTrg()));
            subPictures[i].setEndTime(SubtitleUtils.syncTimePTS(subPictures[i].getEndTime(), configuration.getFpsTrg(), configuration.getFpsTrg()));

            // set forced flag
            SubPicture picTrg = subPictures[i];
            switch (configuration.getForceAll()) {
                case SET:
                    picTrg.setForced(true);
                    break;
                case CLEAR:
                    picTrg.setForced(false);
                    break;
            }

            double scaleX;
            double scaleY;
            if (configuration.getConvertResolution()) {
                // adjust image sizes and offsets
                // determine scaling factors
                picTrg.setWidth(configuration.getOutputResolution().getDimensions()[0]);
                picTrg.setHeight(configuration.getOutputResolution().getDimensions()[1]);
                scaleX = (double) picTrg.getWidth() / picSrc.getWidth();
                scaleY = (double) picTrg.getHeight() / picSrc.getHeight();
            } else {
                picTrg.setWidth(picSrc.getWidth());
                picTrg.setHeight(picSrc.getHeight());
                scaleX = 1.0;
                scaleY = 1.0;
            }
            int w = (int)(picSrc.getImageWidth()  * scaleX * fx + 0.5);
            if (w < MIN_IMAGE_DIMENSION) {
                w = picSrc.getImageWidth();
            } else if (w > picTrg.getWidth()) {
                w = picTrg.getWidth();
            }

            int h = (int)(picSrc.getImageHeight() * scaleY * fy + 0.5);
            if (h < MIN_IMAGE_DIMENSION) {
                h = picSrc.getImageHeight();
            } else if (h > picTrg.getHeight()) {
                h = picTrg.getHeight();
            }
            picTrg.setImageWidth(w);
            picTrg.setImageHeight(h);

            int xOfs = (int)(picSrc.getXOffset() * scaleX + 0.5);
            int spaceSrc = (int)((picSrc.getWidth() -picSrc.getImageWidth())*scaleX + 0.5);
            int spaceTrg = picTrg.getWidth() - w;
            xOfs += (spaceTrg - spaceSrc) / 2;
            if (xOfs < 0) {
                xOfs = 0;
            } else if (xOfs+w > picTrg.getWidth()) {
                xOfs = picTrg.getWidth() - w;
            }
            picTrg.setOfsX(xOfs);

            int yOfs = (int)(picSrc.getYOffset() * scaleY + 0.5);
            spaceSrc = (int)((picSrc.getHeight() -picSrc.getImageHeight())*scaleY + 0.5);
            spaceTrg = picTrg.getHeight() - h;
            yOfs += (spaceTrg - spaceSrc) / 2;
            if (yOfs+h > picTrg.getHeight()) {
                yOfs = picTrg.getHeight() - h;
            }
            picTrg.setOfsY(yOfs);
        }

        // 2nd run: validate times
        SubPicture picPrev = null;
        SubPicture picNext;
        for (int i=0; i<subPictures.length; i++) {
            if (i < subPictures.length-1) {
                picNext = subPictures[i+1];
            } else {
                picNext = null;
View Full Code Here

    }

    private class ExcludeCheckBoxActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent event) {
            SubPicture subPic = model.getSubPic();
            subPic.setExcluded(view.isExcludeCheckBoxSelected());
            view.setPreviewPanelExcluded(subPic.isExcluded());
            view.repaintPreviewPanel();
            setEdited(true);
        }
View Full Code Here

    }
   
    private class AddPatchButtonActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent event) {
            SubPicture subPic = model.getSubPic();
            int sel[] = view.getPreviewPanelSelection();
            if (sel != null) {
                ErasePatch ep = new ErasePatch(sel[0], sel[1], sel[2]-sel[0]+1, sel[3]-sel[1]+1);
                subPic.getErasePatch().add(ep);

                view.setUndoPatchButtonEnabled(true);
                view.setUndoAllPatchesButtonEnabled(true);

                model.setImage(Core.getTrgImagePatched(subPic));
                view.setPreviewPanelImage(model.getImage(), subPic.getImageWidth(), subPic.getImageHeight());

                setEdited(true);
            }
            view.setAddPatchButtonEnabled(false);
            view.removePreviewPanelSelection();
View Full Code Here

    }

    private class UndoPatchButtonActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent event) {
            SubPicture subPic = model.getSubPic();
            if (!subPic.getErasePatch().isEmpty()) {
                subPic.getErasePatch().remove(subPic.getErasePatch().size() - 1);
                if (subPic.getErasePatch().isEmpty()) {
                    view.setUndoPatchButtonEnabled(false);
                    view.setUndoAllPatchesButtonEnabled(false);
                }
                model.setImage(Core.getTrgImagePatched(subPic));
                view.setPreviewPanelImage(model.getImage(), subPic.getImageWidth(), subPic.getImageHeight());
                view.repaintPreviewPanel();
                setEdited(true);
            }
        }
View Full Code Here

    }

    private class UndoAllPatchesButtonActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent event) {
            SubPicture subPic = model.getSubPic();
            if (!subPic.getErasePatch().isEmpty()) {
                subPic.getErasePatch().clear();
                model.setImage(Core.getTrgImagePatched(subPic));
                view.setPreviewPanelImage(model.getImage(), subPic.getImageWidth(), subPic.getImageHeight());
                view.repaintPreviewPanel();
                setEdited(true);
            }
            view.setUndoPatchButtonEnabled(false);
            view.setUndoAllPatchesButtonEnabled(false);
View Full Code Here

        model.setSubPicNext(idx < Core.getNumFrames()-1 ? Core.getSubPictureTrg(idx+1) : null);

        // update components
        try {
            Core.convertSup(idx, idx + 1, Core.getNumFrames());
            model.setSubPic(new SubPicture(Core.getSubPictureTrg(idx)));
            SubPicture subPic = model.getSubPic();
            model.setImage(Core.getTrgImagePatched(subPic));

            if (!subPic.getErasePatch().isEmpty()) {
                jButtonUndoPatch.setEnabled(true);
                jButtonUndoAllPatches.setEnabled(true);
            }

            model.setEnableSliders(false);
            jSliderHorizontal.setMaximum(subPic.getWidth());
            jSliderHorizontal.setValue(subPic.getXOffset());
            jSliderVertical.setMaximum(subPic.getHeight());
            jSliderVertical.setValue(subPic.getHeight() - subPic.getYOffset());
            model.setEnableSliders(true);

            jLabelInfo.setText("Frame " + (idx+1) + " of " + Core.getNumFrames());
            jTextFieldStart.setText(ptsToTimeStr(subPic.getStartTime()));
            jTextFieldEnd.setText(ptsToTimeStr(subPic.getEndTime()));
            jTextFieldDuration.setText(ToolBox.formatDouble((subPic.getEndTime() - subPic.getStartTime()) / 90.0));

            jTextFieldX.setText(String.valueOf(subPic.getXOffset()));
            jTextFieldY.setText(String.valueOf(subPic.getYOffset()));

            jPanelPreview.setSubtitleOffsets(subPic.getXOffset(), subPic.getYOffset());
            jPanelPreview.setScreenDimension(subPic.getWidth(), subPic.getHeight());
            jPanelPreview.setCropOffsetY(model.getCropOffsetY());
            jPanelPreview.setImage(model.getImage(), subPic.getImageWidth(), subPic.getImageHeight());
            jPanelPreview.repaint();
            jPanelPreview.setExcluded(subPic.isExcluded());

            jCheckBoxExclude.setSelected(subPic.isExcluded());
            jCheckBoxForced.setSelected(subPic.isForced());

            model.setReady(true);

        } catch (CoreException ex) {
            error(ex.getMessage());
View Full Code Here

     * @param fsYOld        Old free scaling factor in Y direction
     */
    public static void reScanSubtitles(Resolution resOld, double fpsTrgOld, int delayOld, boolean convertFpsOld, double fsXOld, double fsYOld) {
        //SubPicture subPicturesOld[] = subPictures;
        //subPictures = new SubPicture[sup.getNumFrames()];
        SubPicture picOld;
        SubPicture picSrc;
        double factTS;
        double factX;
        double factY;
        double fsXNew;
        double fsYNew;

        if (configuration.getApplyFreeScale()) {
            fsXNew = configuration.getFreeScaleFactorX();
            fsYNew = configuration.getFreeScaleFactorY();
        } else {
            fsXNew = 1.0;
            fsYNew = 1.0;
        }

        boolean convertFPS = configuration.getConvertFPS();
        double fpsTrg = configuration.getFpsTrg();
        double fpsSrc = configuration.getFPSSrc();
        if (convertFPS && !convertFpsOld) {
            factTS = fpsSrc / fpsTrg;
        } else if (!convertFPS && convertFpsOld) {
            factTS = fpsTrgOld / fpsSrc;
        } else if (convertFPS && convertFpsOld && (fpsTrg != fpsTrgOld)) {
            factTS = fpsTrgOld / fpsTrg;
        } else {
            factTS = 1.0;
        }

        // change target resolution to source resolution if no conversion is needed
        if (!configuration.getConvertResolution() && getNumFrames() > 0) {
            configuration.setOutputResolution(getResolutionForDimension(getSubPictureSrc(0).getWidth(), getSubPictureSrc(0).getHeight()));
        }

        if (resOld != configuration.getOutputResolution()) {
            int rOld[] = resOld.getDimensions();
            int rNew[] = configuration.getOutputResolution().getDimensions();
            factX = (double)rNew[0]/(double)rOld[0];
            factY = (double)rNew[1]/(double)rOld[1];
        } else {
            factX = 1.0;
            factY = 1.0;
        }

        // first run: clone source subpics, apply speedup/down,
        for (int i=0; i < subPictures.length; i++) {
            picOld = subPictures[i];
            picSrc = subtitleStream.getSubPicture(i);
            subPictures[i] = new SubPicture(picOld);

            // set forced flag
            switch (configuration.getForceAll()) {
                case SET:
                    subPictures[i].setForced(true);
                    break;
                case CLEAR:
                    subPictures[i].setForced(false);
                    break;
            }

            long ts = picOld.getStartTime();
            long te = picOld.getEndTime();
            // copy time stamps and apply speedup/speeddown
            int delayPTS = configuration.getDelayPTS();
            if (factTS == 1.0) {
                subPictures[i].setStartTime(ts - delayOld + delayPTS);
                subPictures[i].setEndTime(te - delayOld + delayPTS);
            } else {
                subPictures[i].setStartTime((long)(ts * factTS + 0.5) - delayOld + delayPTS);
                subPictures[i].setEndTime((long)(te * factTS + 0.5) - delayOld + delayPTS);
            }
            // synchronize to target frame rate
            subPictures[i].setStartTime(SubtitleUtils.syncTimePTS(subPictures[i].getStartTime(), fpsTrg, fpsTrg));
            subPictures[i].setEndTime(SubtitleUtils.syncTimePTS(subPictures[i].getEndTime(), fpsTrg, fpsTrg));
            // adjust image sizes and offsets
            // determine scaling factors
            double scaleX;
            double scaleY;
            if (configuration.getConvertResolution()) {
                subPictures[i].setWidth(configuration.getOutputResolution().getDimensions()[0]);
                subPictures[i].setHeight(configuration.getOutputResolution().getDimensions()[1]);
                scaleX = (double) subPictures[i].getWidth() / picSrc.getWidth();
                scaleY = (double) subPictures[i].getHeight() / picSrc.getHeight();
            } else {
                subPictures[i].setWidth(picSrc.getWidth());
                subPictures[i].setHeight(picSrc.getHeight());
                scaleX = 1.0;
                scaleY = 1.0;
            }

            int w = (int)(picSrc.getImageWidth()  * scaleX * fsXNew + 0.5);
            if (w < MIN_IMAGE_DIMENSION) {
                w = picSrc.getImageWidth();
            } else if (w > subPictures[i].getWidth()) {
                w = subPictures[i].getWidth();
                fsXNew = (double)w / (double)picSrc.getImageWidth() / scaleX;
            }
            int h = (int)(picSrc.getImageHeight() * scaleY * fsYNew + 0.5);
            if (h < MIN_IMAGE_DIMENSION) {
                h = picSrc.getImageHeight();
            } else if (h > subPictures[i].getHeight()) {
                h = subPictures[i].getHeight();
                fsYNew = (double)h / (double)picSrc.getImageHeight() / scaleY;
            }

            subPictures[i].setImageWidth(w);
            subPictures[i].setImageHeight(h);

            // correct ratio change
            int xOfs = (int)(picOld.getXOffset()*factX + 0.5);
            if (fsXNew != fsXOld) {
                int spaceTrgOld = (int)((picOld.getWidth() - picOld.getImageWidth())*factX + 0.5);
                int spaceTrg    = subPictures[i].getWidth() - w;
                xOfs += (spaceTrg - spaceTrgOld) / 2;
            }
            if (xOfs < 0) {
                xOfs = 0;
            } else if (xOfs+w > subPictures[i].getWidth()) {
                xOfs = subPictures[i].getWidth() - w;
            }
            subPictures[i].setOfsX(xOfs);

            int yOfs = (int)(picOld.getYOffset()*factY + 0.5);
            if (fsYNew != fsYOld) {
                int spaceTrgOld = (int)((picOld.getHeight() - picOld.getImageHeight())*factY + 0.5);
                int spaceTrg = subPictures[i].getHeight() - h;
                yOfs += (spaceTrg - spaceTrgOld) / 2;
            }
            if (yOfs < 0) {
                yOfs = 0;
            }
            if (yOfs+h > subPictures[i].getHeight()) {
                yOfs = subPictures[i].getHeight() - h;
            }
            subPictures[i].setOfsY(yOfs);

            // fix erase patches
            double fx = factX * fsXNew / fsXOld;
            double fy = factY * fsYNew / fsYOld;
            List<ErasePatch> erasePatches = subPictures[i].getErasePatch();
            if (!erasePatches.isEmpty()) {
                for (int j = 0; j < erasePatches.size(); j++) {
                    ErasePatch ep = erasePatches.get(j);
                    int x = (int)(ep.x * fx + 0.5);
                    int y = (int)(ep.y * fy + 0.5);
                    int width = (int)(ep.width * fx + 0.5);
                    int height = (int)(ep.height * fy + 0.5);
                    erasePatches.set(j, new ErasePatch(x, y, width, height));
                }
            }
        }

        // 2nd run: validate times (not fully necessary, but to avoid overlap due to truncation
        SubPicture subPicPrev = null;
        SubPicture subPicNext;

        for (int i=0; i<subPictures.length; i++) {
            if (i < subPictures.length-1) {
                subPicNext = subPictures[i+1];
            } else {
View Full Code Here

     * @throws CoreException
     */
    private static void convertSup(int index, int displayNum, int displayMax, boolean skipScaling) throws CoreException{
        int w,h;
        int startOfs = (int) subtitleStream.getStartOffset(index);
        SubPicture subPic = subtitleStream.getSubPicture(index);

        logger.info("Decoding frame " + displayNum + "/" + displayMax + ((subtitleStream == supXml) ? "\n" : (" at offset " + ToolBox.toHexLeftZeroPadded(startOfs, 8) + "\n")));

        synchronized (semaphore) {
            subtitleStream.decode(index);
            w = subPic.getImageWidth();
            h = subPic.getImageHeight();
            OutputMode outputMode = configuration.getOutputMode();
            if (outputMode == OutputMode.VOBSUB || outputMode == OutputMode.SUPIFO) {
                determineFramePal(index);
            }
            updateTrgPic(index);
        }
        SubPicture picTrg = subPictures[index];
        picTrg.setWasDecoded(true);

        int trgWidth = picTrg.getImageWidth();
        int trgHeight = picTrg.getImageHeight();
        if (trgWidth < MIN_IMAGE_DIMENSION || trgHeight < MIN_IMAGE_DIMENSION || w < MIN_IMAGE_DIMENSION || h < MIN_IMAGE_DIMENSION) {
            // don't scale to avoid division by zero in scaling routines
            trgWidth = w;
            trgHeight = h;
        }

        if (!skipScaling) {
            ResampleFilter f;
            switch (configuration.getScalingFilter()) {
                case BELL:
                    f = getBellFilter();
                    break;
                case BICUBIC:
                    f = getBiCubicFilter();
                    break;
                case BICUBIC_SPLINE:
                    f = getBSplineFilter();
                    break;
                case HERMITE:
                    f = getHermiteFilter();
                    break;
                case LANCZOS3:
                    f = getLanczos3Filter();
                    break;
                case TRIANGLE:
                    f = getTriangleFilter();
                    break;
                case MITCHELL:
                    f = getMitchellFilter();
                    break;
                default:
                    f = null;
            }

            Bitmap tBm;
            Palette tPal = trgPal;
            // create scaled bitmap
            OutputMode outputMode = configuration.getOutputMode();
            PaletteMode paletteMode = configuration.getPaletteMode();
            if (outputMode == OutputMode.VOBSUB || outputMode == OutputMode.SUPIFO) {
                // export 4 color palette
                if (w==trgWidth && h==trgHeight) {
                    // don't scale at all
                    if ( (inMode == InputMode.VOBSUB || inMode == InputMode.SUPIFO) && paletteMode == PaletteMode.KEEP_EXISTING) {
                        tBm = subtitleStream.getBitmap(); // no conversion
                    } else {
                        tBm = subtitleStream.getBitmap().getBitmapWithNormalizedPalette(subtitleStream.getPalette().getAlpha(), configuration.getAlphaThreshold(), subtitleStream.getPalette().getY(), configuration.getLuminanceThreshold()); // reduce palette
                    }
                } else {
                    // scale up/down
                    if ((inMode == InputMode.VOBSUB || inMode == InputMode.SUPIFO) && paletteMode == PaletteMode.KEEP_EXISTING) {
                        // keep palette
                        if (f != null) {
                            tBm = subtitleStream.getBitmap().scaleFilter(trgWidth, trgHeight, subtitleStream.getPalette(), f);
                        } else {
                            tBm = subtitleStream.getBitmap().scaleBilinear(trgWidth, trgHeight, subtitleStream.getPalette());
                        }
                    } else {
                        // reduce palette
                        if (f != null) {
                            tBm = subtitleStream.getBitmap().scaleFilterLm(trgWidth, trgHeight, subtitleStream.getPalette(), configuration.getAlphaThreshold(), configuration.getLuminanceThreshold(), f);
                        } else {
                            tBm = subtitleStream.getBitmap().scaleBilinearLm(trgWidth, trgHeight, subtitleStream.getPalette(), configuration.getAlphaThreshold(), configuration.getLuminanceThreshold());
                        }
                    }
                }
            } else {
                // export (up to) 256 color palette
                tPal = subtitleStream.getPalette();
                if (w==trgWidth && h==trgHeight) {
                    tBm = subtitleStream.getBitmap(); // no scaling, no conversion
                } else {
                    // scale up/down
                    if (paletteMode == PaletteMode.KEEP_EXISTING) {
                        // keep palette
                        if (f != null) {
                            tBm = subtitleStream.getBitmap().scaleFilter(trgWidth, trgHeight, subtitleStream.getPalette(), f);
                        } else {
                            tBm = subtitleStream.getBitmap().scaleBilinear(trgWidth, trgHeight, subtitleStream.getPalette());
                        }
                    } else {
                        // create new palette
                        boolean dither = paletteMode == PaletteMode.CREATE_DITHERED;
                        BitmapWithPalette pb;
                        if (f != null) {
                            pb = subtitleStream.getBitmap().scaleFilter(trgWidth, trgHeight, subtitleStream.getPalette(), f, dither);
                        } else {
                            pb = subtitleStream.getBitmap().scaleBilinear(trgWidth, trgHeight, subtitleStream.getPalette(), dither);
                        }
                        tBm = pb.bitmap;
                        tPal = pb.palette;
                    }
                }
            }
            if (!picTrg.getErasePatch().isEmpty()) {
                trgBitmapUnpatched = new Bitmap(tBm);
                int col = tPal.getIndexOfMostTransparentPaletteEntry();
                for (ErasePatch ep : picTrg.getErasePatch()) {
                    tBm.fillRectangularWithColorIndex(ep.x, ep.y, ep.width, ep.height, (byte)col);
                }
            } else {
                trgBitmapUnpatched = tBm;
            }
View Full Code Here

                    throw new CoreException("Canceled by user!");
                }
                // for threaded version (progress bar);
                setProgress(i);

                SubPicture subPicture = subPictures[i];
                if (outputMode == OutputMode.VOBSUB) {
                    offsets.add(offset);
                    convertSup(i, frameNum/2+1, subPicturesToBeExported.size());
                    subVobTrg.copyInfo(subPicture);
                    byte buf[] = SubDvdWriter.createSubFrame(subVobTrg, trgBitmap);
                    out.write(buf);
                    offset += buf.length;
                    timestamps.add((int) subPicture.getStartTime());
                } else if (outputMode == OutputMode.SUPIFO) {
                    convertSup(i, frameNum/2+1, subPicturesToBeExported.size());
                    subVobTrg.copyInfo(subPicture);
                    byte buf[] = SupDvdWriter.createSupFrame(subVobTrg, trgBitmap);
                    out.write(buf);
                } else if (outputMode == OutputMode.BDSUP) {
                    subPicture.setCompositionNumber(frameNum);
                    convertSup(i, frameNum/2+1, subPicturesToBeExported.size());
                    byte buf[] = SupBDWriter.createSupFrame(subPicture, trgBitmap, trgPal);
                    out.write(buf);
                } else {
                    // Xml
View Full Code Here

TOP

Related Classes of bdsup2sub.supstream.SubPicture

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.