Relying on SILK for the switching decisions
This commit is contained in:
parent
897f5a568a
commit
c1673fa9c6
3 changed files with 27 additions and 29 deletions
2
silk
2
silk
|
@ -1 +1 @@
|
||||||
Subproject commit f90395ba0669dc1c2749ca671cca965cc6dcda8e
|
Subproject commit 8a8b76efeeccaccf402b0b2b4e469980d0a48311
|
|
@ -87,7 +87,7 @@ OpusEncoder *opus_encoder_create(int Fs, int channels)
|
||||||
st->user_mode = OPUS_MODE_AUTO;
|
st->user_mode = OPUS_MODE_AUTO;
|
||||||
st->user_bandwidth = BANDWIDTH_AUTO;
|
st->user_bandwidth = BANDWIDTH_AUTO;
|
||||||
st->voice_ratio = 90;
|
st->voice_ratio = 90;
|
||||||
st->bandwidth_change = 1;
|
st->first = 1;
|
||||||
|
|
||||||
st->encoder_buffer = st->Fs/100;
|
st->encoder_buffer = st->Fs/100;
|
||||||
st->delay_compensation = st->Fs/400;
|
st->delay_compensation = st->Fs/400;
|
||||||
|
@ -160,8 +160,6 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bandwidth selection */
|
/* Bandwidth selection */
|
||||||
if (st->bandwidth_change)
|
|
||||||
{
|
|
||||||
if (st->mode == MODE_CELT_ONLY)
|
if (st->mode == MODE_CELT_ONLY)
|
||||||
{
|
{
|
||||||
if (mono_rate>35000 || (mono_rate>28000 && st->bandwidth==BANDWIDTH_FULLBAND))
|
if (mono_rate>35000 || (mono_rate>28000 && st->bandwidth==BANDWIDTH_FULLBAND))
|
||||||
|
@ -172,7 +170,8 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
|
||||||
st->bandwidth = BANDWIDTH_WIDEBAND;
|
st->bandwidth = BANDWIDTH_WIDEBAND;
|
||||||
else
|
else
|
||||||
st->bandwidth = BANDWIDTH_NARROWBAND;
|
st->bandwidth = BANDWIDTH_NARROWBAND;
|
||||||
} else {
|
} else if (st->first || st->silk_mode.allowBandwidthSwitch)
|
||||||
|
{
|
||||||
if (mono_rate>30000 || (mono_rate>26000 && st->bandwidth==BANDWIDTH_FULLBAND))
|
if (mono_rate>30000 || (mono_rate>26000 && st->bandwidth==BANDWIDTH_FULLBAND))
|
||||||
st->bandwidth = BANDWIDTH_FULLBAND;
|
st->bandwidth = BANDWIDTH_FULLBAND;
|
||||||
else if (mono_rate>22000 || (mono_rate>18000 && st->bandwidth==BANDWIDTH_SUPERWIDEBAND))
|
else if (mono_rate>22000 || (mono_rate>18000 && st->bandwidth==BANDWIDTH_SUPERWIDEBAND))
|
||||||
|
@ -183,7 +182,8 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
|
||||||
st->bandwidth = BANDWIDTH_MEDIUMBAND;
|
st->bandwidth = BANDWIDTH_MEDIUMBAND;
|
||||||
else
|
else
|
||||||
st->bandwidth = BANDWIDTH_NARROWBAND;
|
st->bandwidth = BANDWIDTH_NARROWBAND;
|
||||||
}
|
if (!st->silk_mode.inWBmodeWithoutVariableLP && st->bandwidth > BANDWIDTH_WIDEBAND)
|
||||||
|
st->bandwidth = BANDWIDTH_WIDEBAND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (st->Fs <= 24000 && st->bandwidth > BANDWIDTH_SUPERWIDEBAND)
|
if (st->Fs <= 24000 && st->bandwidth > BANDWIDTH_SUPERWIDEBAND)
|
||||||
|
@ -298,7 +298,6 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
|
||||||
fprintf (stderr, "SILK encode error: %d\n", ret);
|
fprintf (stderr, "SILK encode error: %d\n", ret);
|
||||||
/* Handle error */
|
/* Handle error */
|
||||||
}
|
}
|
||||||
st->bandwidth_change = nBytes==0 || (enc.buf[0]&0x80)==0;
|
|
||||||
if (nBytes==0)
|
if (nBytes==0)
|
||||||
return 0;
|
return 0;
|
||||||
/* Extract SILK internal bandwidth for signaling in first byte */
|
/* Extract SILK internal bandwidth for signaling in first byte */
|
||||||
|
@ -313,8 +312,6 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
|
||||||
} else {
|
} else {
|
||||||
SKP_assert( st->silk_mode.internalSampleRate == 16000 );
|
SKP_assert( st->silk_mode.internalSampleRate == 16000 );
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
st->bandwidth_change = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CELT processing */
|
/* CELT processing */
|
||||||
|
@ -493,6 +490,7 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
|
||||||
st->prev_mode = MODE_CELT_ONLY;
|
st->prev_mode = MODE_CELT_ONLY;
|
||||||
else
|
else
|
||||||
st->prev_mode = st->mode;
|
st->prev_mode = st->mode;
|
||||||
|
st->first = 0;
|
||||||
return ret+1+redundancy_bytes;
|
return ret+1+redundancy_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ struct OpusEncoder {
|
||||||
int bitrate_bps;
|
int bitrate_bps;
|
||||||
int encoder_buffer;
|
int encoder_buffer;
|
||||||
int delay_compensation;
|
int delay_compensation;
|
||||||
int bandwidth_change;
|
int first;
|
||||||
short delay_buffer[MAX_ENCODER_BUFFER*2];
|
short delay_buffer[MAX_ENCODER_BUFFER*2];
|
||||||
|
|
||||||
#ifdef OPUS_TEST_RANGE_CODER_STATE
|
#ifdef OPUS_TEST_RANGE_CODER_STATE
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue