All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.monte.media.anim.ANIMMultiplexer Maven / Gradle / Ivy

The newest version!

package org.monte.media.anim;

import org.monte.media.Buffer;
import org.monte.media.Multiplexer;
import org.monte.media.image.BitmapImage;
import org.monte.media.math.Rational;
import java.io.File;
import java.io.IOException;
import static java.lang.Math.*;
import static org.monte.media.BufferFlag.*;


public class ANIMMultiplexer extends ANIMOutputStream implements Multiplexer {

    protected Rational inputTime;

    public ANIMMultiplexer(File file) throws IOException {
        super(file);
    }

    @Override
    public void write(int trackIndex, Buffer buf) throws IOException {
        if (!buf.isFlag(DISCARD)) {




            long jiffies = getJiffies();

            if (inputTime == null) {
                inputTime = new Rational(0, 1);
            }
            inputTime=inputTime.add(buf.sampleDuration.multiply(buf.sampleCount));
            
            Rational outputTime = new Rational(getMovieTime(), jiffies);
            Rational outputDuration = inputTime.subtract(outputTime);


            outputDuration = outputDuration.round(jiffies);
            int outputMediaDuration =max(1,(int)( outputDuration.getNumerator() *jiffies/outputDuration.getDenominator()));

            outputTime=
            outputTime.add(new Rational(outputMediaDuration,jiffies));


            writeFrame((BitmapImage) buf.data, (int) outputMediaDuration);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy