before rebase
git-svn-id: http://webrtc.googlecode.com/svn/trunk@7563 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
0b62672576
commit
c673bb9f29
@ -117,6 +117,15 @@ static const int kNackMaxPackets = 250;
|
||||
|
||||
// Codec parameters for Opus.
|
||||
// draft-spittka-payload-rtp-opus-03
|
||||
|
||||
// Recommended bitrates:
|
||||
// 8-12 kb/s for NB speech,
|
||||
// 16-20 kb/s for WB speech,
|
||||
// 28-40 kb/s for FB speech,
|
||||
// 48-64 kb/s for FB mono music, and
|
||||
// 64-128 kb/s for FB stereo music.
|
||||
// The current implementation applies the following values to mono signals,
|
||||
// and multiplies them by 2 for stereo.
|
||||
static const int kOpusBitrateNb = 12000;
|
||||
static const int kOpusBitrateWb = 20000;
|
||||
static const int kOpusBitrateFb = 32000;
|
||||
@ -413,7 +422,7 @@ static bool IsOpusStereoEnabled(const AudioCodec& codec) {
|
||||
// otherwise. If the value (either from params or codec.bitrate) <=0, use the
|
||||
// default configuration. If the value is beyond feasible bit rate of Opus,
|
||||
// clamp it. Returns the Opus bit rate for operation.
|
||||
static int GetOpusBitrate(const AudioCodec& codec) {
|
||||
static int GetOpusBitrate(const AudioCodec& codec, int max_playback_rate) {
|
||||
int bitrate = 0;
|
||||
bool use_param = true;
|
||||
if (!codec.GetParam(kCodecParamMaxAverageBitrate, &bitrate)) {
|
||||
@ -421,8 +430,17 @@ static int GetOpusBitrate(const AudioCodec& codec) {
|
||||
use_param = false;
|
||||
}
|
||||
if (bitrate <= 0) {
|
||||
bitrate = IsOpusStereoEnabled(codec) ? kOpusStereoBitrate :
|
||||
kOpusMonoBitrate;
|
||||
if (max_playback_rate <= 8000) {
|
||||
bitrate = kOpusBitrateNb;
|
||||
} else if (max_playback_rate <= 16000) {
|
||||
bitrate = kOpusBitrateWb;
|
||||
} else {
|
||||
bitrate = kOpusBitrateFb;
|
||||
}
|
||||
|
||||
if (IsOpusStereoEnabled(codec)) {
|
||||
bitrate *= 2;
|
||||
}
|
||||
} else if (bitrate < kOpusMinBitrate || bitrate > kOpusMaxBitrate) {
|
||||
bitrate = (bitrate < kOpusMinBitrate) ? kOpusMinBitrate : kOpusMaxBitrate;
|
||||
std::string rate_source =
|
||||
@ -463,11 +481,8 @@ static void GetOpusConfig(const AudioCodec& codec, webrtc::CodecInst* voe_codec,
|
||||
// the bitrate is not specified, i.e. is <= zero, we set it to the
|
||||
// appropriate default value for mono or stereo Opus.
|
||||
|
||||
// TODO(minyue): The determination of bit rate might take the maximum playback
|
||||
// rate into account.
|
||||
|
||||
voe_codec->channels = IsOpusStereoEnabled(codec) ? 2 : 1;
|
||||
voe_codec->rate = GetOpusBitrate(codec);
|
||||
voe_codec->rate = GetOpusBitrate(codec, *max_playback_rate);
|
||||
}
|
||||
|
||||
void WebRtcVoiceEngine::ConstructCodecs() {
|
||||
|
Loading…
Reference in New Issue
Block a user