package org.jcodec.common.model;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
* This class is part of JCodec ( www.jcodec.org )
* This software is distributed under FreeBSD License
*
* @author The JCodec project
*
*/
public final class Label {
private final static List<Label> _values = new ArrayList<Label>();
/** unknown role or unspecified other use for channel */
public final static Label Unknown = new Label(0xFFFFFFFF);
/** channel is present, but has no intended role or destination */
public final static Label Unused = new Label(0);
/** channel is described solely by the mCoordinates fields */
public final static Label UseCoordinates = new Label(100);
public final static Label Left = new Label(1);
public final static Label Right = new Label(2);
public final static Label Center = new Label(3);
public final static Label LFEScreen = new Label(4);
/** WAVE (.wav files): "Back Left" */
public final static Label LeftSurround = new Label(5);
/** WAVE: "Back Right" */
public final static Label RightSurround = new Label(6);
public final static Label LeftCenter = new Label(7);
public final static Label RightCenter = new Label(8);
/** WAVE: "Back Center or plain "Rear Surround" */
public final static Label CenterSurround = new Label(9);
/** WAVE: "Side Left" */
public final static Label LeftSurroundDirect = new Label(10);
/** WAVE: "Side Right" */
public final static Label RightSurroundDirect = new Label(11);
public final static Label TopCenterSurround = new Label(12);
/** WAVE: "Top Front Left" */
public final static Label VerticalHeightLeft = new Label(13);
/** WAVE: "Top Front Center" */
public final static Label VerticalHeightCenter = new Label(14);
/** WAVE: "Top Front Right" */
public final static Label VerticalHeightRight = new Label(15);
public final static Label TopBackLeft = new Label(16);
public final static Label TopBackCenter = new Label(17);
public final static Label TopBackRight = new Label(18);
public final static Label RearSurroundLeft = new Label(33);
public final static Label RearSurroundRight = new Label(34);
public final static Label LeftWide = new Label(35);
public final static Label RightWide = new Label(36);
public final static Label LFE2 = new Label(37);
/** matrix encoded 4 channels */
public final static Label LeftTotal = new Label(38);
/** matrix encoded 4 channels */
public final static Label RightTotal = new Label(39);
public final static Label HearingImpaired = new Label(40);
public final static Label Narration = new Label(41);
public final static Label Mono = new Label(42);
public final static Label DialogCentricMix = new Label(43);
/** center, non diffuse first order ambisonic channels */
public final static Label CenterSurroundDirect = new Label(44);
public final static Label Ambisonic_W = new Label(200);
public final static Label Ambisonic_X = new Label(201);
public final static Label Ambisonic_Y = new Label(202);
public final static Label Ambisonic_Z = new Label(203);
/** Mid/Side Recording */
public final static Label MS_Mid = new Label(204);
public final static Label MS_Side = new Label(205);
/** X-Y Recording */
public final static Label XY_X = new Label(206);
public final static Label XY_Y = new Label(207);
public final static Label HeadphonesLeft = new Label(301);
public final static Label HeadphonesRight = new Label(302);
public final static Label ClickTrack = new Label(304);
public final static Label ForeignLanguage = new Label(305);
// generic discrete channel
public final static Label Discrete = new Label( 400);
// numbered discrete channel
public final static Label Discrete_0 = new Label( (1<<16) | 0);
public final static Label Discrete_1 = new Label( (1<<16) | 1);
public final static Label Discrete_2 = new Label( (1<<16) | 2);
public final static Label Discrete_3 = new Label( (1<<16) | 3);
public final static Label Discrete_4 = new Label( (1<<16) | 4);
public final static Label Discrete_5 = new Label( (1<<16) | 5);
public final static Label Discrete_6 = new Label( (1<<16) | 6);
public final static Label Discrete_7 = new Label( (1<<16) | 7);
public final static Label Discrete_8 = new Label( (1<<16) | 8);
public final static Label Discrete_9 = new Label( (1<<16) | 9);
public final static Label Discrete_10 = new Label( (1<<16) | 10);
public final static Label Discrete_11 = new Label( (1<<16) | 11);
public final static Label Discrete_12 = new Label( (1<<16) | 12);
public final static Label Discrete_13 = new Label( (1<<16) | 13);
public final static Label Discrete_14 = new Label( (1<<16) | 14);
public final static Label Discrete_15 = new Label( (1<<16) | 15);
public final static Label Discrete_65535 = new Label( (1<<16) | 65535);
final int labelVal;
public final long bitmapVal;
public final static Pattern channelMappingRegex = Pattern.compile("[_\\ \\.][a-zA-Z]+$");
private Label(int val) {
this.labelVal = val;
this.bitmapVal = (this.labelVal > 18 || this.labelVal < 1) ? 0x00000000 : 1 << (this.labelVal - 1);
_values.add(this);
}
public static Label[] values() {
return _values.toArray(new Label[0]);
}
public static Label getByVal(int val) {
Label[] values = Label.values();
for (int i = 0; i < values.length; i++) {
Label label = values[i];
if (label.labelVal == val)
return label;
}
return Label.Mono;
}
public int getVal() {
return labelVal;
}
}