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

org.monte.media.Buffer Maven / Gradle / Ivy

The newest version!

package org.monte.media;

import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.monte.media.math.Rational;
import org.monte.media.util.Methods;


public class Buffer {

    
    public EnumSet flags = EnumSet.noneOf(BufferFlag.class);
    
    public static final int NOT_SPECIFIED = -1;
    
    public int track;
    
    public Object header;
    
    public Object data;
    
    public int offset;
    
    public int length;
    
    public Rational sampleDuration;
    
    public Rational timeStamp;
    
    public Format format;
    
    public int sampleCount = 1;
    
    
    public long sequenceNumber;

    
    public void setMetaTo(Buffer that) {
        this.flags = EnumSet.copyOf(that.flags);




        this.track = that.track;
        this.sampleDuration = that.sampleDuration;
        this.timeStamp = that.timeStamp;
        this.format = that.format;
        this.sampleCount = that.sampleCount;
        this.format = that.format;
        this.sequenceNumber=that.sequenceNumber;
    }

    
    public void setDataTo(Buffer that) {
        this.offset = that.offset;
        this.length = that.length;
        this.data = copy(that.data, this.data);
        this.header = copy(that.header, this.header);

    }

    private Object copy(Object from, Object into) {
        if (from instanceof byte[]) {
            byte[] b=(byte[])from;
            if (!(into instanceof byte[]) || ((byte[]) into).length < b.length) {
                into = new byte[b.length];
            }
            System.arraycopy(b, 0, (byte[])into, 0, b.length);
        } else if (from instanceof BufferedImage) {

            BufferedImage img = (BufferedImage) from;
            ColorModel cm = img.getColorModel();
            boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
            WritableRaster raster = img.copyData(null);
            into = new BufferedImage(cm, raster, isAlphaPremultiplied, null);
        } else if (from instanceof Cloneable) {
            try {
                into=Methods.invoke(from, "clone");
            } catch (NoSuchMethodException ex) {
                into=from;
            }
        } else {


            into = from;
        }
        
        return into;
    }
    
    
    public boolean isFlag(BufferFlag flag) {
        return flags.contains(flag);
    }

    
    public void setFlag(BufferFlag flag) {
        setFlag(flag, true);
    }

    
    public void clearFlag(BufferFlag flag) {
        setFlag(flag, false);
    }

    
    public void setFlag(BufferFlag flag, boolean value) {
        if (value) {
            flags.add(flag);
        } else {
            flags.remove(flag);
        }
    }

    
    public void setFlagsTo(BufferFlag... flags) {
        if (flags.length == 0) {
            this.flags = EnumSet.noneOf(BufferFlag.class);
        } else {
            this.flags = EnumSet.copyOf(Arrays.asList(flags));
        }
    }

    
    public void setFlagsTo(EnumSet flags) {
        if (flags == null) {
            this.flags = EnumSet.noneOf(BufferFlag.class);
        } else {
            this.flags = EnumSet.copyOf(flags);
        }
    }

    public void clearFlags() {
        flags.clear();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy