Adding build switch for Opus that supports 120ms ptime.
BUG=webrtc:7097
TEST=Set "ptime=120", try WebRTC calls over custom build Chromium with and without Opus 120ms. Try both Chromium w <-> Chromium w and Chromium w <-> Chromium w/o
Review-Url: https://codereview.webrtc.org/2668633004
Cr-Original-Commit-Position: refs/heads/master@{#16408}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 2e03c6611927af6ed08cf967b95342744ff329b6
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 06aed45..c223068 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -161,6 +161,12 @@
defines += [ "WEBRTC_INTELLIGIBILITY_ENHANCER=0" ]
}
+ if (rtc_opus_support_120ms_ptime) {
+ defines += [ "WEBRTC_OPUS_SUPPORT_120MS_PTIME=1" ]
+ } else {
+ defines += [ "WEBRTC_OPUS_SUPPORT_120MS_PTIME=0" ]
+ }
+
include_dirs = []
if (rtc_build_libyuv) {
deps += [ "$rtc_libyuv_dir" ]
diff --git a/media/engine/webrtcvoiceengine.cc b/media/engine/webrtcvoiceengine.cc
index b9a725b..1ed1e8b 100644
--- a/media/engine/webrtcvoiceengine.cc
+++ b/media/engine/webrtcvoiceengine.cc
@@ -498,7 +498,12 @@
};
const WebRtcVoiceCodecs::CodecPref WebRtcVoiceCodecs::kCodecPrefs[14] = {
+#if WEBRTC_OPUS_SUPPORT_120MS_PTIME
+ {kOpusCodecName, 48000, 2, 111, true, {10, 20, 40, 60, 120},
+ kOpusMaxBitrateBps},
+#else
{kOpusCodecName, 48000, 2, 111, true, {10, 20, 40, 60}, kOpusMaxBitrateBps},
+#endif
{kIsacCodecName, 16000, 1, 103, true, {30, 60}, kIsacMaxBitrateBps},
{kIsacCodecName, 32000, 1, 104, true, {30}, kIsacMaxBitrateBps},
// G722 should be advertised as 8000 Hz because of the RFC "bug".
diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn
index 1d3c2d1..59c166d 100644
--- a/modules/audio_coding/BUILD.gn
+++ b/modules/audio_coding/BUILD.gn
@@ -872,6 +872,8 @@
"codecs/opus/opus_interface.h",
]
+ defines = audio_coding_defines
+
if (rtc_build_opus) {
public_deps = [
rtc_opus_dir,
diff --git a/modules/audio_coding/acm2/acm_codec_database.cc b/modules/audio_coding/acm2/acm_codec_database.cc
index 4f5b263..0fae75b 100644
--- a/modules/audio_coding/acm2/acm_codec_database.cc
+++ b/modules/audio_coding/acm2/acm_codec_database.cc
@@ -151,8 +151,12 @@
// Opus supports frames shorter than 10ms,
// but it doesn't help us to use them.
// Mono and stereo.
+#if WEBRTC_OPUS_SUPPORT_120MS_PTIME
+ {5, {480, 960, 1920, 2880, 5760}, 0, 2},
+#else
{4, {480, 960, 1920, 2880}, 0, 2},
#endif
+#endif
// Comfort noise for three different sampling frequencies.
{1, {240}, 240, 1},
{1, {480}, 480, 1},
diff --git a/modules/audio_coding/audio_coding.gni b/modules/audio_coding/audio_coding.gni
index 0f3a75f..41dcf00 100644
--- a/modules/audio_coding/audio_coding.gni
+++ b/modules/audio_coding/audio_coding.gni
@@ -15,6 +15,11 @@
if (rtc_include_opus) {
audio_codec_defines += [ "WEBRTC_CODEC_OPUS" ]
}
+if (rtc_opus_support_120ms_ptime) {
+ audio_codec_defines += [ "WEBRTC_OPUS_SUPPORT_120MS_PTIME=1" ]
+} else {
+ audio_codec_defines += [ "WEBRTC_OPUS_SUPPORT_120MS_PTIME=0" ]
+}
if (!build_with_mozilla) {
if (current_cpu == "arm") {
audio_codec_defines += [ "WEBRTC_CODEC_ISACFX" ]
diff --git a/modules/audio_coding/codecs/opus/opus_interface.c b/modules/audio_coding/codecs/opus/opus_interface.c
index e2b4fdb..d544d85 100644
--- a/modules/audio_coding/codecs/opus/opus_interface.c
+++ b/modules/audio_coding/codecs/opus/opus_interface.c
@@ -17,8 +17,13 @@
#include <string.h>
enum {
+#if WEBRTC_OPUS_SUPPORT_120MS_PTIME
+ /* Maximum supported frame size in WebRTC is 120 ms. */
+ kWebRtcOpusMaxEncodeFrameSizeMs = 120,
+#else
/* Maximum supported frame size in WebRTC is 60 ms. */
kWebRtcOpusMaxEncodeFrameSizeMs = 60,
+#endif
/* The format allows up to 120 ms frames. Since we don't control the other
* side, we must allow for packets of that size. NetEq is currently limited
diff --git a/webrtc.gni b/webrtc.gni
index 53dcae2..4c34eae 100644
--- a/webrtc.gni
+++ b/webrtc.gni
@@ -17,6 +17,10 @@
# Disable this to avoid building the Opus audio codec.
rtc_include_opus = true
+ # Enable this if the Opus version upon which WebRTC is built supports direct
+ # encoding of 120 ms packets.
+ rtc_opus_support_120ms_ptime = false
+
# Enable this to let the Opus audio codec change complexity on the fly.
rtc_opus_variable_complexity = false