Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(575)

Unified Diff: webrtc/media/engine/webrtcvoiceengine.cc

Issue 2337473002: Multi frequency DTMF support - receiver side (Closed)
Patch Set: rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/media/engine/webrtcvoiceengine.cc
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
index 358c142a1b01bea7ba3a977f55279a78cc45221f..c16cc640dbb8ac1338f8dc91aa21d0199b4ce138 100644
--- a/webrtc/media/engine/webrtcvoiceengine.cc
+++ b/webrtc/media/engine/webrtcvoiceengine.cc
@@ -396,7 +396,7 @@ class WebRtcVoiceCodecs final {
// Select the preferred send codec (the first non-telephone-event/CN codec).
for (const AudioCodec& codec : codecs) {
if (IsCodec(codec, kDtmfCodecName) || IsCodec(codec, kCnCodecName)) {
- // Skip telephone-event/CN codec, which will be handled later.
+ // Skip telephone-event/CN codecs - they will be handled later.
continue;
}
@@ -425,7 +425,7 @@ class WebRtcVoiceCodecs final {
int max_bitrate_bps;
};
// Note: keep the supported packet sizes in ascending order.
- static const CodecPref kCodecPrefs[11];
+ static const CodecPref kCodecPrefs[14];
static int SelectPacketSize(const CodecPref& codec_pref, int ptime_ms) {
int selected_packet_size_ms = codec_pref.packet_sizes_ms[0];
@@ -450,7 +450,7 @@ class WebRtcVoiceCodecs final {
}
};
-const WebRtcVoiceCodecs::CodecPref WebRtcVoiceCodecs::kCodecPrefs[11] = {
+const WebRtcVoiceCodecs::CodecPref WebRtcVoiceCodecs::kCodecPrefs[14] = {
{kOpusCodecName, 48000, 2, 111, true, {10, 20, 40, 60}, kOpusMaxBitrate},
{kIsacCodecName, 16000, 1, 103, true, {30, 60}, kIsacMaxBitrate},
{kIsacCodecName, 32000, 1, 104, true, {30}, kIsacMaxBitrate},
@@ -462,6 +462,9 @@ const WebRtcVoiceCodecs::CodecPref WebRtcVoiceCodecs::kCodecPrefs[11] = {
{kCnCodecName, 32000, 1, 106, false, {}},
{kCnCodecName, 16000, 1, 105, false, {}},
{kCnCodecName, 8000, 1, 13, false, {}},
+ {kDtmfCodecName, 48000, 1, 123, false, {}},
+ {kDtmfCodecName, 32000, 1, 124, false, {}},
+ {kDtmfCodecName, 16000, 1, 125, false, {}},
{kDtmfCodecName, 8000, 1, 126, false, {}}
};
} // namespace {
@@ -1090,10 +1093,15 @@ AudioCodecs WebRtcVoiceEngine::CollectRecvCodecs() const {
const std::vector<webrtc::AudioCodecSpec>& specs =
decoder_factory_->GetSupportedDecoders();
- // Only generate CN payload types for these clockrates
+ // Only generate CN payload types for these clockrates:
std::map<int, bool, std::greater<int>> generate_cn = {{ 8000, false },
{ 16000, false },
{ 32000, false }};
+ // Only generate telephone-event payload types for these clockrates:
+ std::map<int, bool, std::greater<int>> generate_dtmf = {{ 8000, false },
+ { 16000, false },
+ { 32000, false },
+ { 48000, false }};
auto map_format = [&mapper, &out] (const webrtc::SdpAudioFormat& format) {
rtc::Optional<AudioCodec> opt_codec = mapper.ToAudioCodec(format);
@@ -1114,25 +1122,37 @@ AudioCodecs WebRtcVoiceEngine::CollectRecvCodecs() const {
};
for (const auto& spec : specs) {
- if (map_format(spec.format) && spec.allow_comfort_noise) {
- // Generate a CN entry if the decoder allows it and we support the
- // clockrate.
- auto cn = generate_cn.find(spec.format.clockrate_hz);
- if (cn != generate_cn.end()) {
- cn->second = true;
+ if (map_format(spec.format)) {
+ if (spec.allow_comfort_noise) {
+ // Generate a CN entry if the decoder allows it and we support the
+ // clockrate.
+ auto cn = generate_cn.find(spec.format.clockrate_hz);
+ if (cn != generate_cn.end()) {
+ cn->second = true;
+ }
+ }
+
+ // Generate a telephone-event entry if we support the clockrate.
+ auto dtmf = generate_dtmf.find(spec.format.clockrate_hz);
+ if (dtmf != generate_dtmf.end()) {
+ dtmf->second = true;
}
}
}
- // Add CN codecs after "proper" audio codecs
+ // Add CN codecs after "proper" audio codecs.
for (const auto& cn : generate_cn) {
if (cn.second) {
map_format({kCnCodecName, cn.first, 1});
}
}
- // Add telephone-event codec last
- map_format({kDtmfCodecName, 8000, 1});
+ // Add telephone-event codecs last.
+ for (const auto& dtmf : generate_dtmf) {
+ if (dtmf.second) {
+ map_format({kDtmfCodecName, dtmf.first, 1});
+ }
+ }
return out;
}

Powered by Google App Engine
This is Rietveld 408576698