* Class for extracting information from a frame header.
*/
-
public final class Header {
- public static final int[][] frequencies = { { 22050, 24000, 16000, 1 },
- { 44100, 48000, 32000, 1 }, { 11025, 12000, 8000, 1 } }; // SZD: MPEG25
+ public static final int[][] frequencies = { { 22050, 24000, 16000, 1 }, { 44100, 48000, 32000, 1 }, { 11025, 12000, 8000, 1 } }; // SZD:
+ // MPEG25
/**
* Constant for MPEG-2 LSF version
public static final int FOURTYEIGHT = 1;
public static final int THIRTYTWO = 2;
-
private int h_layer;
-
+
private int h_protection_bit;
-
+
private int h_bitrate_index;
-
+
private int h_padding_bit;
-
+
private int h_mode_extension;
-
+
private int h_version;
-
+
private int h_mode;
-
+
private int h_sample_frequency;
-
+
private int h_number_of_subbands;
-
+
private int h_intensity_stereo_bound;
-
+
private boolean h_copyright;
-
+
private boolean h_original;
// VBR support added by E.B
-
+
private double[] h_vbr_time_per_frame = { -1.0, 384.0, 1152.0, 1152.0 };
-
+
private boolean h_vbr;
-
+
private int h_vbr_frames;
-
+
private int h_vbr_scale;
-
+
private int h_vbr_bytes;
-
+
private byte[] h_vbr_toc;
-
private byte syncmode = Bitstream.INITIAL_SYNC;
-
+
private Crc16 crc;
-
public short checksum;
-
+
public int framesize;
-
+
public int nSlots;
-
private int _headerstring = -1; // E.B
-
private SideInfoBuffer sib;
-
+
private BitReserve br;
-
private int idx;
Header() {
}
-
public String toString() {
- StringBuffer buffer = new StringBuffer(200);
+ StringBuffer buffer = new StringBuffer(200);
buffer.append("Layer ");
buffer.append(layer_string());
buffer.append(" frame ");
buffer.append(' ');
buffer.append(bitrate_string());
- String s = buffer.toString();
+ String s = buffer.toString();
return s;
}
h_number_of_subbands = 12;
else
h_number_of_subbands = 8;
- else if ((h_sample_frequency == FOURTYEIGHT)
- || ((channel_bitrate >= 3) && (channel_bitrate <= 5)))
+ else if ((h_sample_frequency == FOURTYEIGHT) || ((channel_bitrate >= 3) && (channel_bitrate <= 5)))
h_number_of_subbands = 27;
else
h_number_of_subbands = 30;
// Read number of frames (if available).
if ((flags[3] & (byte) (1 << 0)) != 0) {
System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length);
- h_vbr_frames =
- (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8)
- & 0x0000FF00 | tmp[3] & 0x000000FF;
+ h_vbr_frames = (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8) & 0x0000FF00 | tmp[3] & 0x000000FF;
length += 4;
}
// Read size (if available).
if ((flags[3] & (byte) (1 << 1)) != 0) {
System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length);
- h_vbr_bytes =
- (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8)
- & 0x0000FF00 | tmp[3] & 0x000000FF;
+ h_vbr_bytes = (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8) & 0x0000FF00 | tmp[3] & 0x000000FF;
length += 4;
}
// Read TOC (if available).
// Read scale (if available).
if ((flags[3] & (byte) (1 << 3)) != 0) {
System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length);
- h_vbr_scale =
- (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8)
- & 0x0000FF00 | tmp[3] & 0x000000FF;
+ h_vbr_scale = (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8) & 0x0000FF00 | tmp[3] & 0x000000FF;
length += 4;
}
// System.out.println("VBR:"+xing+" Frames:"+ h_vbr_frames
// Bytes.
int length = 4 + 6;
System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length);
- h_vbr_bytes =
- (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8) & 0x0000FF00
- | tmp[3] & 0x000000FF;
+ h_vbr_bytes = (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8) & 0x0000FF00 | tmp[3] & 0x000000FF;
length += 4;
// Frames.
System.arraycopy(firstframe, offset + length, tmp, 0, tmp.length);
- h_vbr_frames =
- (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8) & 0x0000FF00
- | tmp[3] & 0x000000FF;
+ h_vbr_frames = (tmp[0] << 24) & 0xFF000000 | (tmp[1] << 16) & 0x00FF0000 | (tmp[2] << 8) & 0x0000FF00 | tmp[3] & 0x000000FF;
length += 4;
// System.out.println("VBR:"+vbri+" Frames:"+ h_vbr_frames
// +" Size:"+h_vbr_bytes);
/**
* Returns version.
*/
-
+
public int version() {
return h_version;
}
/**
* Returns Layer ID.
*/
-
+
public int layer() {
return h_layer;
}
/**
* Returns Sample Frequency.
*/
-
+
public int sample_frequency() {
return h_sample_frequency;
}
/**
* Returns Frequency.
*/
-
+
public int frequency() {
return frequencies[h_version][h_sample_frequency];
}
/**
* Returns Mode.
*/
-
+
public int mode() {
return h_mode;
}
/**
* Returns Protection bit.
*/
-
+
public boolean checksums() {
if (h_protection_bit == 0)
return true;
/**
* Returns Checksum flag. Compares computed checksum with stream checksum.
*/
-
+
public boolean checksum_ok() {
return (checksum == crc.checksum());
}
/**
* Returns Slots.
*/
-
+
public int slots() {
return nSlots;
}
/**
* Returns Mode Extension.
*/
-
+
public int mode_extension() {
return h_mode_extension;
}
// E.B -> private to public
- public static final int bitrates[][][] = {
- {
- { 0 /* free format */, 32000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000,
- 160000, 176000, 192000, 224000, 256000, 0 },
- { 0 /* free format */, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000,
- 96000, 112000, 128000, 144000, 160000, 0 },
- { 0 /* free format */, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000,
- 96000, 112000, 128000, 144000, 160000, 0 } },
-
- {
- { 0 /* free format */, 32000, 64000, 96000, 128000, 160000, 192000, 224000, 256000,
- 288000, 320000, 352000, 384000, 416000, 448000, 0 },
- { 0 /* free format */, 32000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000,
- 192000, 224000, 256000, 320000, 384000, 0 },
- { 0 /* free format */, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000,
- 160000, 192000, 224000, 256000, 320000, 0 } },
+ public static final int bitrates[][][] = { { { 0 /* free format */, 32000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 176000, 192000, 224000, 256000, 0 }, { 0 /*
+ * free
+ * format
+ */, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0 }, { 0 /*
+ * free
+ * format
+ */, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0 } },
+
+ { { 0 /* free format */, 32000, 64000, 96000, 128000, 160000, 192000, 224000, 256000, 288000, 320000, 352000, 384000, 416000, 448000, 0 }, { 0 /*
+ * free
+ * format
+ */, 32000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000, 384000, 0 }, { 0 /*
+ * free
+ * format
+ */, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000, 0 } },
// SZD: MPEG2.5
- {
- { 0 /* free format */, 32000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000,
- 160000, 176000, 192000, 224000, 256000, 0 },
- { 0 /* free format */, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000,
- 96000, 112000, 128000, 144000, 160000, 0 },
- { 0 /* free format */, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000,
- 96000, 112000, 128000, 144000, 160000, 0 } },
+ { { 0 /* free format */, 32000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 176000, 192000, 224000, 256000, 0 }, { 0 /*
+ * free
+ * format
+ */, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0 }, { 0 /*
+ * free
+ * format
+ */, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000, 0 } },
};
public int calculate_framesize() {
if (h_layer == 1) {
- framesize =
- (12 * bitrates[h_version][0][h_bitrate_index])
- / frequencies[h_version][h_sample_frequency];
+ framesize = (12 * bitrates[h_version][0][h_bitrate_index]) / frequencies[h_version][h_sample_frequency];
if (h_padding_bit != 0)
framesize++;
framesize <<= 2; // one slot is 4 bytes long
nSlots = 0;
} else {
- framesize =
- (144 * bitrates[h_version][h_layer - 1][h_bitrate_index])
- / frequencies[h_version][h_sample_frequency];
+ framesize = (144 * bitrates[h_version][h_layer - 1][h_bitrate_index]) / frequencies[h_version][h_sample_frequency];
if (h_version == MPEG2_LSF || h_version == MPEG25_LSF)
framesize >>= 1; // SZD
if (h_padding_bit != 0)
*
* @return milliseconds per frame
*/
-
+
public float ms_per_frame() // E.B
{
if (h_vbr == true) {
- double tpf = h_vbr_time_per_frame[layer()] / frequency();
+ double tpf = h_vbr_time_per_frame[layer()] / frequency();
if ((h_version == MPEG2_LSF) || (h_version == MPEG25_LSF))
tpf /= 2;
return ((float) (tpf * 1000));
} else {
- float ms_per_frame_array[][] =
- { { 8.707483f, 8.0f, 12.0f }, { 26.12245f, 24.0f, 36.0f }, { 26.12245f, 24.0f, 36.0f } };
+ float ms_per_frame_array[][] = { { 8.707483f, 8.0f, 12.0f }, { 26.12245f, 24.0f, 36.0f }, { 26.12245f, 24.0f, 36.0f } };
return (ms_per_frame_array[h_layer - 1][h_sample_frequency]);
}
}
/**
* Return Layer version.
*/
-
+
public String layer_string() {
switch (h_layer) {
case 1:
}
// E.B -> private to public
- public static final String bitrate_str[][][] = {
- {
- { "free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s",
- "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", "176 kbit/s",
- "192 kbit/s", "224 kbit/s", "256 kbit/s", "forbidden" },
- { "free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", "40 kbit/s",
- "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s",
- "128 kbit/s", "144 kbit/s", "160 kbit/s", "forbidden" },
- { "free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", "40 kbit/s",
- "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s",
- "128 kbit/s", "144 kbit/s", "160 kbit/s", "forbidden" } },
-
- {
- { "free format", "32 kbit/s", "64 kbit/s", "96 kbit/s", "128 kbit/s", "160 kbit/s",
- "192 kbit/s", "224 kbit/s", "256 kbit/s", "288 kbit/s", "320 kbit/s", "352 kbit/s",
- "384 kbit/s", "416 kbit/s", "448 kbit/s", "forbidden" },
- { "free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s",
- "96 kbit/s", "112 kbit/s", "128 kbit/s", "160 kbit/s", "192 kbit/s", "224 kbit/s",
- "256 kbit/s", "320 kbit/s", "384 kbit/s", "forbidden" },
- { "free format", "32 kbit/s", "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s",
- "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "160 kbit/s", "192 kbit/s",
- "224 kbit/s", "256 kbit/s", "320 kbit/s", "forbidden" } },
+ public static final String bitrate_str[][][] = { { { "free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", "176 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", "forbidden" }, { "free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", "forbidden" }, { "free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", "forbidden" } },
+
+ { { "free format", "32 kbit/s", "64 kbit/s", "96 kbit/s", "128 kbit/s", "160 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", "288 kbit/s", "320 kbit/s", "352 kbit/s", "384 kbit/s", "416 kbit/s", "448 kbit/s", "forbidden" }, { "free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "160 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", "320 kbit/s", "384 kbit/s", "forbidden" }, { "free format", "32 kbit/s", "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "160 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", "320 kbit/s", "forbidden" } },
// SZD: MPEG2.5
- {
- { "free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s",
- "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", "176 kbit/s",
- "192 kbit/s", "224 kbit/s", "256 kbit/s", "forbidden" },
- { "free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", "40 kbit/s",
- "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s",
- "128 kbit/s", "144 kbit/s", "160 kbit/s", "forbidden" },
- { "free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", "40 kbit/s",
- "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s",
- "128 kbit/s", "144 kbit/s", "160 kbit/s", "forbidden" } }, };
+ { { "free format", "32 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", "176 kbit/s", "192 kbit/s", "224 kbit/s", "256 kbit/s", "forbidden" }, { "free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", "forbidden" }, { "free format", "8 kbit/s", "16 kbit/s", "24 kbit/s", "32 kbit/s", "40 kbit/s", "48 kbit/s", "56 kbit/s", "64 kbit/s", "80 kbit/s", "96 kbit/s", "112 kbit/s", "128 kbit/s", "144 kbit/s", "160 kbit/s", "forbidden" } }, };
/**
* Return Bitrate.
* @return bitrate in bps
*/
-
public String bitrate_string() {
- String kbs = " kb/s";
+ String kbs = " kb/s";
if (h_vbr == true) {
return Integer.toString(bitrate() / 1000) + kbs;
} else {
*
* @return bitrate in bps and average bitrate for VBR header
*/
-
+
public int bitrate() {
if (h_vbr == true) {
return ((int) ((h_vbr_bytes * 8) / (ms_per_frame() * h_vbr_frames))) * 1000;
*
* @return frequency string in kHz
*/
-
+
public String sample_frequency_string() {
switch (h_sample_frequency) {
case THIRTYTWO:
/**
* Returns Mode.
*/
-
+
public String mode_string() {
switch (h_mode) {
case STEREO:
*
* @return MPEG-1 or MPEG-2 LSF or MPEG-2.5 LSF
*/
-
+
public String version_string() {
switch (h_version) {
case MPEG1:
this.br = br;
}
-
public SideInfoBuffer getSideInfoBuffer() {
return sib;
}
-
public BitReserve getBitReserve() {
return br;
}
-
public int getIdx() {
return idx;
}