package net.sf.fmj.media.format;
import javax.media.Format;
import javax.media.format.VideoFormat;
import net.sf.fmj.codegen.FormatTraceUtils;
import net.sf.fmj.media.BonusVideoFormatEncodings;
import net.sf.fmj.utility.FormatUtils;
/**
* GIF video format. Used for MGIF, which is like MJPEG but with GIF.
* @author Ken Larson
*
*/
public class GIFFormat extends VideoFormat
{
public GIFFormat()
{
super(BonusVideoFormatEncodings.GIF);
dataType = Format.byteArray;
}
public GIFFormat(java.awt.Dimension size,
int maxDataLength,
Class dataType,
float frameRate)
{
super(BonusVideoFormatEncodings.GIF, size, maxDataLength, dataType, frameRate);
}
@Override
public Object clone()
{ return new GIFFormat(FormatUtils.clone(size), maxDataLength, dataType, frameRate);
}
@Override
protected void copy(Format f)
{
super.copy(f);
final GIFFormat oCast = (GIFFormat) f; // it has to be a GIFFormat, or ClassCastException will be thrown.
}
@Override
public String toString()
{
final StringBuffer b = new StringBuffer();
b.append("GIF video format:");
if (FormatUtils.specified(size))
b.append(" size = " + size.width + "x" + size.height);
if (FormatUtils.specified(frameRate))
b.append(" FrameRate = " + frameRate);
if (FormatUtils.specified(maxDataLength))
b.append(" maxDataLength = " + maxDataLength);
if (FormatUtils.specified(dataType))
b.append(" dataType = " + dataType);
return b.toString();
}
@Override
public boolean equals(Object format)
{
if (!super.equals(format))
return false;
if (!(format instanceof GIFFormat))
{
return false;
}
final GIFFormat oCast = (GIFFormat) format;
return true;
}
@Override
public boolean matches(Format format)
{
if (!super.matches(format))
{
FormatTraceUtils.traceMatches(this, format, false);
return false;
}
if (!(format instanceof GIFFormat))
{
final boolean result = true;
FormatTraceUtils.traceMatches(this, format, result);
return result;
}
final GIFFormat oCast = (GIFFormat) format;
final boolean result = true;
FormatTraceUtils.traceMatches(this, format, result);
return result;
}
@Override
public Format intersects(Format other)
{
final Format result = super.intersects(other);
if (other instanceof GIFFormat)
{
final GIFFormat resultCast = (GIFFormat) result;
final GIFFormat oCast = (GIFFormat) other;
if (getClass().isAssignableFrom(other.getClass()))
{
// "other" was cloned.
}
else if (other.getClass().isAssignableFrom(getClass()))
{ // this was cloned
}
}
FormatTraceUtils.traceIntersects(this, other, result);
return result;
}
}