net.sf.fmj.utility.FormatUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fmj Show documentation
Show all versions of fmj Show documentation
Freedom for Media in Java
package net.sf.fmj.utility;
import java.awt.*;
import javax.media.*;
import javax.media.format.*;
/**
* Utilities to help implement Format subclasses. Cannot be part of Format class
* because then serialization becomes incompatible with reference impl.
*
* @author Ken Larson
*
*/
public class FormatUtils
{
public static final Class byteArray = byte[].class;
public static final Class shortArray = short[].class;
public static final Class intArray = int[].class;
public static final Class formatArray = Format[].class; // TODO: is this
// used or allowed?
// here to avoid messing up the serialization signature in the format
// classes. The Eclipse compiler
// will insert anonymous fields for these:
public static final Class videoFormatClass = VideoFormat.class;
public static final Class audioFormatClass = AudioFormat.class;
public static boolean byteArraysEqual(byte[] ba1, byte[] ba2)
{
if (ba1 == null && ba2 == null)
return true;
if (ba1 == null || ba2 == null)
return false;
if (ba1.length != ba2.length)
return false;
for (int i = 0; i < ba1.length; ++i)
{
if (ba1[i] != ba2[i])
return false;
}
return true;
}
private static int charEncodingCodeVal(char c)
{
if (c <= (char) 95)
return c - 32;
if (c == 96)
return -1;
if (c <= 122)
return c - 64;
if (c <= 127)
return -1;
if (c <= 191)
return -94;
if (c <= 255)
return -93;
return -1;
}
public static Dimension clone(Dimension d)
{
if (d == null)
return null;
return new Dimension(d);
}
public static String frameRateToString(float frameRate)
{
// hack to get frame rates to print out same as JMF: 1 decimal place,
// but NO rounding.
frameRate = (((long) (frameRate * 10))) / 10.f;
String s = "" + frameRate;
return s;
}
public static boolean isOneAssignableFromTheOther(Class a, Class b)
{
return a == b || b.isAssignableFrom(a) || a.isAssignableFrom(b);
}
/**
* Is a a subclass of b? Strict.
*/
public static boolean isSubclass(Class a, Class b)
{
if (a == b)
return false;
if (!(b.isAssignableFrom(a)))
return false;
return true;
}
public static boolean matches(double v1, double v2)
{
if (v1 == Format.NOT_SPECIFIED || v2 == Format.NOT_SPECIFIED)
return true;
return v1 == v2;
}
public static boolean matches(float v1, float v2)
{
if (v1 == Format.NOT_SPECIFIED || v2 == Format.NOT_SPECIFIED)
return true;
return v1 == v2;
}
public static boolean matches(int v1, int v2)
{
if (v1 == Format.NOT_SPECIFIED || v2 == Format.NOT_SPECIFIED)
return true;
return v1 == v2;
}
public static boolean matches(Object o1, Object o2)
{
if (o1 == null || o2 == null)
return true;
return o1.equals(o2);
}
public static boolean nullSafeEquals(Object o1, Object o2)
{
if (o1 == null && o2 == null)
return true;
if (o1 == null || o2 == null)
return false;
return o1.equals(o2);
}
public static boolean nullSafeEqualsIgnoreCase(String o1, String o2)
{
if (o1 == null && o2 == null)
return true;
if (o1 == null || o2 == null)
return false;
return o1.equalsIgnoreCase(o2);
}
public static boolean specified(double v)
{
return v != Format.NOT_SPECIFIED;
}
// public static boolean matchesIgnoreCase(String o1, String o2)
// { if (o1 == null || o2 == null)
// return true;
// return o1.equalsIgnoreCase(o2);
// }
public static boolean specified(float v)
{
return v != Format.NOT_SPECIFIED;
}
public static boolean specified(int v)
{
return v != Format.NOT_SPECIFIED;
}
public static boolean specified(Object o)
{
return o != null;
}
public static long stringEncodingCodeVal(String s)
{
long result = 0;
for (int i = 0; i < s.length(); ++i)
{
final char c = s.charAt(i);
result *= 64;
result += charEncodingCodeVal(c);
}
return result;
}
}