📄 layeriidecoder.java
字号:
channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
channel2_scalefactor2 = scalefactors[stream.get_bits(6)];
channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
break;
case 1:
channel2_scalefactor1 = channel2_scalefactor2 = scalefactors[stream.get_bits (6)];
channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
break;
case 2:
channel2_scalefactor1 = channel2_scalefactor2 =
channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
break;
case 3:
channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
channel2_scalefactor2 = channel2_scalefactor3 = scalefactors[stream.get_bits (6)];
break;
}
}
}
/**
*
*/
public boolean read_sampledata(Bitstream stream)
{
return super.read_sampledata (stream);
}
/**
*
*/
public boolean put_next_sample(int channels, SynthesisFilter filter1, SynthesisFilter filter2)
{
if (allocation != 0)
{
float sample = samples[samplenumber];
if (groupingtable != null)
sample = (sample + d[0]) * c[0];
if (channels == OutputChannels.BOTH_CHANNELS)
{
float sample2 = sample;
if (groupnumber <= 4)
{
sample *= scalefactor1;
sample2 *= channel2_scalefactor1;
}
else if (groupnumber <= 8)
{
sample *= scalefactor2;
sample2 *= channel2_scalefactor2;
}
else
{
sample *= scalefactor3;
sample2 *= channel2_scalefactor3;
}
filter1.input_sample(sample, subbandnumber);
filter2.input_sample(sample2, subbandnumber);
}
else if (channels == OutputChannels.LEFT_CHANNEL)
{
if (groupnumber <= 4)
sample *= scalefactor1;
else if (groupnumber <= 8)
sample *= scalefactor2;
else
sample *= scalefactor3;
filter1.input_sample(sample, subbandnumber);
}
else
{
if (groupnumber <= 4)
sample *= channel2_scalefactor1;
else if (groupnumber <= 8)
sample *= channel2_scalefactor2;
else
sample *= channel2_scalefactor3;
filter1.input_sample(sample, subbandnumber);
}
}
if (++samplenumber == 3)
return true;
else
return false;
}
};
/**
* Class for layer II subbands in stereo mode.
*/
static class SubbandLayer2Stereo extends SubbandLayer2
{
protected int channel2_allocation;
protected int channel2_scfsi;
protected float channel2_scalefactor1, channel2_scalefactor2, channel2_scalefactor3;
protected boolean channel2_grouping;
protected int[] channel2_codelength = {0};
protected float[][] channel2_groupingtable = {{0},{0}};
protected float[] channel2_factor = {0};
protected float[] channel2_samples;
protected float[] channel2_c = {0};
protected float[] channel2_d = {0};
/**
* Constructor
*/
public SubbandLayer2Stereo(int subbandnumber)
{
super(subbandnumber);
channel2_samples = new float[3];
}
/**
*
*/
public void read_allocation (Bitstream stream, Header header, Crc16 crc)
{
int length = get_allocationlength(header);
allocation = stream.get_bits(length);
channel2_allocation = stream.get_bits(length);
if (crc != null)
{
crc.add_bits(allocation, length);
crc.add_bits(channel2_allocation, length);
}
}
/**
*
*/
public void read_scalefactor_selection(Bitstream stream, Crc16 crc)
{
if (allocation != 0)
{
scfsi = stream.get_bits(2);
if (crc != null)
crc.add_bits(scfsi, 2);
}
if (channel2_allocation != 0)
{
channel2_scfsi = stream.get_bits(2);
if (crc != null)
crc.add_bits(channel2_scfsi, 2);
}
}
/**
*
*/
public void read_scalefactor(Bitstream stream, Header header)
{
super.read_scalefactor(stream, header);
if (channel2_allocation != 0)
{
switch (channel2_scfsi)
{
case 0:
channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
channel2_scalefactor2 = scalefactors[stream.get_bits(6)];
channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
break;
case 1:
channel2_scalefactor1 = channel2_scalefactor2 =
scalefactors[stream.get_bits(6)];
channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
break;
case 2:
channel2_scalefactor1 = channel2_scalefactor2 =
channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
break;
case 3:
channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
channel2_scalefactor2 = channel2_scalefactor3 =
scalefactors[stream.get_bits(6)];
break;
}
prepare_sample_reading(header, channel2_allocation, channel2_groupingtable,
channel2_factor, channel2_codelength, channel2_c,
channel2_d);
}
}
/**
*
*/
public boolean read_sampledata (Bitstream stream)
{
boolean returnvalue = super.read_sampledata(stream);
if (channel2_allocation != 0)
if (channel2_groupingtable != null)
{
int samplecode = stream.get_bits(channel2_codelength[0]);
// create requantized samples:
samplecode += samplecode << 1;
float[] target = channel2_samples;
float[] source = channel2_groupingtable[0];
int tmp = 0;
int temp = 0;
target[tmp++] = source[samplecode + temp];
temp++;
target[tmp++] = source[samplecode + temp];
temp++;
target[tmp] = source[samplecode + temp];
// memcpy (channel2_samples, channel2_groupingtable + samplecode, 3 * sizeof (real));
}
else
{
channel2_samples[0] = (float) ((stream.get_bits(channel2_codelength[0])) *
channel2_factor[0] - 1.0);
channel2_samples[1] = (float) ((stream.get_bits(channel2_codelength[0])) *
channel2_factor[0] - 1.0);
channel2_samples[2] = (float) ((stream.get_bits(channel2_codelength[0])) *
channel2_factor[0] - 1.0);
}
return returnvalue;
}
/**
*
*/
public boolean put_next_sample(int channels, SynthesisFilter filter1, SynthesisFilter filter2)
{
boolean returnvalue = super.put_next_sample(channels, filter1, filter2);
if ((channel2_allocation != 0) && (channels != OutputChannels.LEFT_CHANNEL))
{
float sample = channel2_samples[samplenumber - 1];
if (channel2_groupingtable != null)
sample = (sample + channel2_d[0]) * channel2_c[0];
if (groupnumber <= 4)
sample *= channel2_scalefactor1;
else if (groupnumber <= 8)
sample *= channel2_scalefactor2;
else
sample *= channel2_scalefactor3;
if (channels == OutputChannels.BOTH_CHANNELS)
filter2.input_sample(sample, subbandnumber);
else
filter1.input_sample(sample, subbandnumber);
}
return returnvalue;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -