package net.sourceforge.jaad.aac; /** * This class is part of JAAD ( jaadec.sourceforge.net ) that is distributed * under the Public Domain license. Code changes provided by the JCodec project * are distributed under FreeBSD license. * * Different AAC profiles. * The function <code>Decoder.canDecode</code> specifies if the decoder can * handle a given format. * More precisely, the ISO standard calls these 'object types'. * @author in-somnia */ public final class Profile { public final static Profile UNKNOWN = new Profile(-1, "unknown", false); public final static Profile AAC_MAIN = new Profile(1, "AAC Main Profile", true); public final static Profile AAC_LC = new Profile(2, "AAC Low Complexity", true); public final static Profile AAC_SSR = new Profile(3, "AAC Scalable Sample Rate", false); public final static Profile AAC_LTP = new Profile(4, "AAC Long Term Prediction", false); public final static Profile AAC_SBR = new Profile(5, "AAC SBR", true); public final static Profile AAC_SCALABLE = new Profile(6, "Scalable AAC", false); public final static Profile TWIN_VQ = new Profile(7, "TwinVQ", false); public final static Profile AAC_LD = new Profile(11, "AAC Low Delay", false); public final static Profile ER_AAC_LC = new Profile(17, "Error Resilient AAC Low Complexity", true); public final static Profile ER_AAC_SSR = new Profile(18, "Error Resilient AAC SSR", false); public final static Profile ER_AAC_LTP = new Profile(19, "Error Resilient AAC Long Term Prediction", false); public final static Profile ER_AAC_SCALABLE = new Profile(20, "Error Resilient Scalable AAC", false); public final static Profile ER_TWIN_VQ = new Profile(21, "Error Resilient TwinVQ", false); public final static Profile ER_BSAC = new Profile(22, "Error Resilient BSAC", false); public final static Profile ER_AAC_LD = new Profile(23, "Error Resilient AAC Low Delay", false); private static final Profile[] ALL = { AAC_MAIN, AAC_LC, AAC_SSR, AAC_LTP, AAC_SBR, AAC_SCALABLE, TWIN_VQ, null, null, null, AAC_LD, null, null, null, null, null, ER_AAC_LC, ER_AAC_SSR, ER_AAC_LTP, ER_AAC_SCALABLE, ER_TWIN_VQ, ER_BSAC, ER_AAC_LD }; /** * Returns a profile instance for the given index. If the index is not * between 1 and 23 inclusive, UNKNOWN is returned. * @return a profile with the given index */ public static Profile forInt(int i) { Profile p; if(i<=0||i>ALL.length) p = UNKNOWN; else p = ALL[i-1]; return p; } private final int num; private final String descr; private final boolean supported; private Profile(int num, String descr, boolean supported) { this.num = num; this.descr = descr; this.supported = supported; } /** * Returns this profile's index between 1 and 23 or -1 if this is the * <code>UNKNOWN</code> instance. * @return the profile's index */ public int getIndex() { return num; } /** * Returns a short description of this profile. * @return the profile's description */ public String getDescription() { return descr; } /** * Returns a string representation of this profile. The method is * identical to <code>getDescription()</code>. * @return the profile's description */ @Override public String toString() { return descr; } /** * Returns a boolean, indicating if this profile can be decoded by the * <code>Decoder</code>. * @see Decoder#canDecode(net.sourceforge.jaad.aac.Profile) * @return true if the profile is supported */ public boolean isDecodingSupported() { return supported; } /** * Returns a boolean, indicating if this profile contains error resilient * tools. That is, if it's index is higher than 16, since the first error * resilient profile is ER_AAC_LC (17). * This method is mainly used internally. * @return true if the profile uses error resilience */ public boolean isErrorResilientProfile() { return num>16; } }