Merge from Chromium at DEPS revision 267519

This commit was generated by merge_to_master.py.

Change-Id: I181351d1162410185322e6d49c5d11412bea2e28
diff --git a/build/apk_tests.gyp b/build/apk_tests.gyp
index f916cdf..0185975 100644
--- a/build/apk_tests.gyp
+++ b/build/apk_tests.gyp
@@ -89,20 +89,6 @@
       ],
     },
     {
-      'target_name': 'neteq_unittests_apk',
-      'type': 'none',
-      'variables': {
-        'test_suite_name': 'neteq_unittests',
-        'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)neteq_unittests<(SHARED_LIB_SUFFIX)',
-      },
-      'dependencies': [
-        '<(webrtc_root)/modules/modules.gyp:neteq_unittests',
-      ],
-      'includes': [
-        '../../../build/apk_test.gypi',
-      ],
-    },
-    {
       'target_name': 'system_wrappers_unittests_apk',
       'type': 'none',
       'variables': {
diff --git a/build/apk_tests_noop.gyp b/build/apk_tests_noop.gyp
index e8d39d7..3523e79 100644
--- a/build/apk_tests_noop.gyp
+++ b/build/apk_tests_noop.gyp
@@ -30,10 +30,6 @@
       'type': 'none',
     },
     {
-      'target_name': 'neteq_unittests_apk',
-      'type': 'none',
-    },
-    {
       'target_name': 'system_wrappers_unittests_apk',
       'type': 'none',
     },
diff --git a/build/download_vs_toolchain.py b/build/download_vs_toolchain.py
new file mode 100644
index 0000000..2462bdc
--- /dev/null
+++ b/build/download_vs_toolchain.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
+#
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file in the root of the source
+# tree. An additional intellectual property rights grant can be found
+# in the file PATENTS.  All contributing project authors may
+# be found in the AUTHORS file in the root of the source tree.
+
+# This script is used to run the vs_toolchain.py script to download the
+# Visual Studio toolchain. It's just a temporary measure while waiting for the
+# Chrome team to move find_depot_tools into src/build to get rid of these
+# workarounds (similar one in gyp_webrtc).
+
+import os
+import sys
+
+
+script_dir = os.path.dirname(os.path.realpath(__file__))
+checkout_root = os.path.abspath(os.path.join(script_dir, os.pardir, os.pardir))
+sys.path.insert(0, os.path.join(checkout_root, 'build'))
+sys.path.insert(0, os.path.join(checkout_root, 'tools', 'find_depot_tools'))
+
+
+import vs_toolchain
+
+
+if __name__ == '__main__':
+  sys.exit(vs_toolchain.main())
diff --git a/build/gyp_webrtc b/build/gyp_webrtc
index 9ac4c14..4d5ae79 100755
--- a/build/gyp_webrtc
+++ b/build/gyp_webrtc
@@ -61,7 +61,9 @@
   if not os.environ.get('GYP_GENERATORS'):
     os.environ['GYP_GENERATORS'] = 'ninja'
 
-  vs2013_runtime_dll_dirs = vs_toolchain.DownloadVsToolchain()
+  vs2013_runtime_dll_dirs = None
+  if int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1')):
+    vs2013_runtime_dll_dirs = vs_toolchain.SetEnvironmentAndGetRuntimeDllDirs()
 
   # Enforce gyp syntax checking. This adds about 20% execution time.
   args.append('--check')
diff --git a/call.h b/call.h
index 5b55682..932770d 100644
--- a/call.h
+++ b/call.h
@@ -54,8 +54,6 @@
         : webrtc_config(NULL),
           send_transport(send_transport),
           voice_engine(NULL),
-          trace_callback(NULL),
-          trace_filter(kTraceDefault),
           overuse_callback(NULL) {}
 
     webrtc::Config* webrtc_config;
@@ -65,9 +63,6 @@
     // VoiceEngine used for audio/video synchronization for this Call.
     VoiceEngine* voice_engine;
 
-    TraceCallback* trace_callback;
-    uint32_t trace_filter;
-
     // Callback for overuse and normal usage based on the jitter of incoming
     // captured frames. 'NULL' disables the callback.
     OveruseCallback* overuse_callback;
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/common_audio/common_audio.target.darwin-arm64.mk
similarity index 64%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to common_audio/common_audio.target.darwin-arm64.mk
index c84869c..8d0253d 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/common_audio/common_audio.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_common_audio_common_audio_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,61 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/common_audio/audio_util.cc \
+	third_party/webrtc/common_audio/fir_filter.cc \
+	third_party/webrtc/common_audio/resampler/push_resampler.cc \
+	third_party/webrtc/common_audio/resampler/push_sinc_resampler.cc \
+	third_party/webrtc/common_audio/resampler/resampler.cc \
+	third_party/webrtc/common_audio/resampler/sinc_resampler.cc \
+	third_party/webrtc/common_audio/signal_processing/auto_corr_to_refl_coef.c \
+	third_party/webrtc/common_audio/signal_processing/auto_correlation.c \
+	third_party/webrtc/common_audio/signal_processing/complex_fft.c \
+	third_party/webrtc/common_audio/signal_processing/complex_bit_reverse.c \
+	third_party/webrtc/common_audio/signal_processing/copy_set_operations.c \
+	third_party/webrtc/common_audio/signal_processing/cross_correlation.c \
+	third_party/webrtc/common_audio/signal_processing/division_operations.c \
+	third_party/webrtc/common_audio/signal_processing/dot_product_with_scale.c \
+	third_party/webrtc/common_audio/signal_processing/downsample_fast.c \
+	third_party/webrtc/common_audio/signal_processing/energy.c \
+	third_party/webrtc/common_audio/signal_processing/filter_ar.c \
+	third_party/webrtc/common_audio/signal_processing/filter_ar_fast_q12.c \
+	third_party/webrtc/common_audio/signal_processing/filter_ma_fast_q12.c \
+	third_party/webrtc/common_audio/signal_processing/get_hanning_window.c \
+	third_party/webrtc/common_audio/signal_processing/get_scaling_square.c \
+	third_party/webrtc/common_audio/signal_processing/ilbc_specific_functions.c \
+	third_party/webrtc/common_audio/signal_processing/levinson_durbin.c \
+	third_party/webrtc/common_audio/signal_processing/lpc_to_refl_coef.c \
+	third_party/webrtc/common_audio/signal_processing/min_max_operations.c \
+	third_party/webrtc/common_audio/signal_processing/randomization_functions.c \
+	third_party/webrtc/common_audio/signal_processing/refl_coef_to_lpc.c \
+	third_party/webrtc/common_audio/signal_processing/real_fft.c \
+	third_party/webrtc/common_audio/signal_processing/resample.c \
+	third_party/webrtc/common_audio/signal_processing/resample_48khz.c \
+	third_party/webrtc/common_audio/signal_processing/resample_by_2.c \
+	third_party/webrtc/common_audio/signal_processing/resample_by_2_internal.c \
+	third_party/webrtc/common_audio/signal_processing/resample_fractional.c \
+	third_party/webrtc/common_audio/signal_processing/spl_init.c \
+	third_party/webrtc/common_audio/signal_processing/spl_sqrt.c \
+	third_party/webrtc/common_audio/signal_processing/spl_sqrt_floor.c \
+	third_party/webrtc/common_audio/signal_processing/spl_version.c \
+	third_party/webrtc/common_audio/signal_processing/splitting_filter.c \
+	third_party/webrtc/common_audio/signal_processing/sqrt_of_one_minus_x_squared.c \
+	third_party/webrtc/common_audio/signal_processing/vector_scaling_operations.c \
+	third_party/webrtc/common_audio/vad/webrtc_vad.c \
+	third_party/webrtc/common_audio/vad/vad_core.c \
+	third_party/webrtc/common_audio/vad/vad_filterbank.c \
+	third_party/webrtc/common_audio/vad/vad_gmm.c \
+	third_party/webrtc/common_audio/vad/vad_sp.c
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +88,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +130,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +148,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +168,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +183,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +225,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +244,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +274,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +288,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +310,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_common_audio_common_audio_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: common_audio
+common_audio: third_party_webrtc_common_audio_common_audio_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/common_audio/common_audio.target.linux-arm64.mk
similarity index 64%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to common_audio/common_audio.target.linux-arm64.mk
index c84869c..8d0253d 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/common_audio/common_audio.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_common_audio_common_audio_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,61 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/common_audio/audio_util.cc \
+	third_party/webrtc/common_audio/fir_filter.cc \
+	third_party/webrtc/common_audio/resampler/push_resampler.cc \
+	third_party/webrtc/common_audio/resampler/push_sinc_resampler.cc \
+	third_party/webrtc/common_audio/resampler/resampler.cc \
+	third_party/webrtc/common_audio/resampler/sinc_resampler.cc \
+	third_party/webrtc/common_audio/signal_processing/auto_corr_to_refl_coef.c \
+	third_party/webrtc/common_audio/signal_processing/auto_correlation.c \
+	third_party/webrtc/common_audio/signal_processing/complex_fft.c \
+	third_party/webrtc/common_audio/signal_processing/complex_bit_reverse.c \
+	third_party/webrtc/common_audio/signal_processing/copy_set_operations.c \
+	third_party/webrtc/common_audio/signal_processing/cross_correlation.c \
+	third_party/webrtc/common_audio/signal_processing/division_operations.c \
+	third_party/webrtc/common_audio/signal_processing/dot_product_with_scale.c \
+	third_party/webrtc/common_audio/signal_processing/downsample_fast.c \
+	third_party/webrtc/common_audio/signal_processing/energy.c \
+	third_party/webrtc/common_audio/signal_processing/filter_ar.c \
+	third_party/webrtc/common_audio/signal_processing/filter_ar_fast_q12.c \
+	third_party/webrtc/common_audio/signal_processing/filter_ma_fast_q12.c \
+	third_party/webrtc/common_audio/signal_processing/get_hanning_window.c \
+	third_party/webrtc/common_audio/signal_processing/get_scaling_square.c \
+	third_party/webrtc/common_audio/signal_processing/ilbc_specific_functions.c \
+	third_party/webrtc/common_audio/signal_processing/levinson_durbin.c \
+	third_party/webrtc/common_audio/signal_processing/lpc_to_refl_coef.c \
+	third_party/webrtc/common_audio/signal_processing/min_max_operations.c \
+	third_party/webrtc/common_audio/signal_processing/randomization_functions.c \
+	third_party/webrtc/common_audio/signal_processing/refl_coef_to_lpc.c \
+	third_party/webrtc/common_audio/signal_processing/real_fft.c \
+	third_party/webrtc/common_audio/signal_processing/resample.c \
+	third_party/webrtc/common_audio/signal_processing/resample_48khz.c \
+	third_party/webrtc/common_audio/signal_processing/resample_by_2.c \
+	third_party/webrtc/common_audio/signal_processing/resample_by_2_internal.c \
+	third_party/webrtc/common_audio/signal_processing/resample_fractional.c \
+	third_party/webrtc/common_audio/signal_processing/spl_init.c \
+	third_party/webrtc/common_audio/signal_processing/spl_sqrt.c \
+	third_party/webrtc/common_audio/signal_processing/spl_sqrt_floor.c \
+	third_party/webrtc/common_audio/signal_processing/spl_version.c \
+	third_party/webrtc/common_audio/signal_processing/splitting_filter.c \
+	third_party/webrtc/common_audio/signal_processing/sqrt_of_one_minus_x_squared.c \
+	third_party/webrtc/common_audio/signal_processing/vector_scaling_operations.c \
+	third_party/webrtc/common_audio/vad/webrtc_vad.c \
+	third_party/webrtc/common_audio/vad/vad_core.c \
+	third_party/webrtc/common_audio/vad/vad_filterbank.c \
+	third_party/webrtc/common_audio/vad/vad_gmm.c \
+	third_party/webrtc/common_audio/vad/vad_sp.c
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +88,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +130,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +148,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +168,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +183,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +225,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +244,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +274,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +288,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +310,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_common_audio_common_audio_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: common_audio
+common_audio: third_party_webrtc_common_audio_common_audio_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/common_audio/resampler/push_sinc_resampler.cc b/common_audio/resampler/push_sinc_resampler.cc
index 3469ff3..0275559 100644
--- a/common_audio/resampler/push_sinc_resampler.cc
+++ b/common_audio/resampler/push_sinc_resampler.cc
@@ -10,6 +10,7 @@
 
 #include "webrtc/common_audio/include/audio_util.h"
 
+#include <assert.h>
 #include <string.h>
 
 #include "webrtc/common_audio/resampler/push_sinc_resampler.h"
diff --git a/common_audio/resampler/sinc_resampler.cc b/common_audio/resampler/sinc_resampler.cc
index 5029934..84f8125 100644
--- a/common_audio/resampler/sinc_resampler.cc
+++ b/common_audio/resampler/sinc_resampler.cc
@@ -90,6 +90,7 @@
 #include "webrtc/system_wrappers/interface/cpu_features_wrapper.h"
 #include "webrtc/typedefs.h"
 
+#include <assert.h>
 #include <math.h>
 #include <string.h>
 
diff --git a/common_audio/resampler/sinc_resampler_unittest.cc b/common_audio/resampler/sinc_resampler_unittest.cc
index c085cfc..9790862 100644
--- a/common_audio/resampler/sinc_resampler_unittest.cc
+++ b/common_audio/resampler/sinc_resampler_unittest.cc
@@ -62,7 +62,7 @@
 
   static const int kChunks = 2;
   int max_chunk_size = resampler.ChunkSize() * kChunks;
-  scoped_array<float> resampled_destination(new float[max_chunk_size]);
+  scoped_ptr<float[]> resampled_destination(new float[max_chunk_size]);
 
   // Verify requesting ChunkSize() frames causes a single callback.
   EXPECT_CALL(mock_source, Run(_, _))
@@ -81,7 +81,7 @@
   MockSource mock_source;
   SincResampler resampler(kSampleRateRatio, SincResampler::kDefaultRequestSize,
                           &mock_source);
-  scoped_array<float> resampled_destination(new float[resampler.ChunkSize()]);
+  scoped_ptr<float[]> resampled_destination(new float[resampler.ChunkSize()]);
 
   // Fill the resampler with junk data.
   EXPECT_CALL(mock_source, Run(_, _))
@@ -266,7 +266,7 @@
 
   // Force an update to the sample rate ratio to ensure dyanmic sample rate
   // changes are working correctly.
-  scoped_array<float> kernel(new float[SincResampler::kKernelStorageSize]);
+  scoped_ptr<float[]> kernel(new float[SincResampler::kKernelStorageSize]);
   memcpy(kernel.get(), resampler.get_kernel_for_testing(),
          SincResampler::kKernelStorageSize);
   resampler.SetRatio(M_PI);
@@ -278,8 +278,8 @@
 
   // TODO(dalecurtis): If we switch to AVX/SSE optimization, we'll need to
   // allocate these on 32-byte boundaries and ensure they're sized % 32 bytes.
-  scoped_array<float> resampled_destination(new float[output_samples]);
-  scoped_array<float> pure_destination(new float[output_samples]);
+  scoped_ptr<float[]> resampled_destination(new float[output_samples]);
+  scoped_ptr<float[]> pure_destination(new float[output_samples]);
 
   // Generate resampled signal.
   resampler.Resample(output_samples, resampled_destination.get());
diff --git a/common_audio/signal_processing/spl_init.c b/common_audio/signal_processing/spl_init.c
index 454e13b..762f9e4 100644
--- a/common_audio/signal_processing/spl_init.c
+++ b/common_audio/signal_processing/spl_init.c
@@ -65,8 +65,10 @@
   WebRtcSpl_MinValueW32 = WebRtcSpl_MinValueW32Neon;
   WebRtcSpl_CrossCorrelation = WebRtcSpl_CrossCorrelationNeon;
   WebRtcSpl_DownsampleFast = WebRtcSpl_DownsampleFastNeon;
+  /* TODO(henrik.lundin): re-enable NEON when the crash from bug 3243 is
+     understood. */
   WebRtcSpl_ScaleAndAddVectorsWithRound =
-      WebRtcSpl_ScaleAndAddVectorsWithRoundNeon;
+      WebRtcSpl_ScaleAndAddVectorsWithRoundC;
   WebRtcSpl_CreateRealFFT = WebRtcSpl_CreateRealFFTNeon;
   WebRtcSpl_FreeRealFFT = WebRtcSpl_FreeRealFFTNeon;
   WebRtcSpl_RealForwardFFT = WebRtcSpl_RealForwardFFTNeon;
diff --git a/common_types.h b/common_types.h
index 68f2baa..2d93102 100644
--- a/common_types.h
+++ b/common_types.h
@@ -720,17 +720,17 @@
 // This structure will have the information about when packet is actually
 // received by socket.
 struct PacketTime {
-  PacketTime() : timestamp(-1), max_error_us(-1) {}
-  PacketTime(int64_t timestamp, int64_t max_error_us)
-      : timestamp(timestamp), max_error_us(max_error_us) {
+  PacketTime() : timestamp(-1), not_before(-1) {}
+  PacketTime(int64_t timestamp, int64_t not_before)
+      : timestamp(timestamp), not_before(not_before) {
   }
 
-  int64_t timestamp;    // Receive time after socket delivers the data.
-  int64_t max_error_us; // Earliest possible time the data could have arrived,
-                        // indicating the potential error in the |timestamp|
-                        // value,in case the system is busy.
-                        // For example, the time of the last select() call.
-                        // If unknown, this value will be set to zero.
+  int64_t timestamp;   // Receive time after socket delivers the data.
+  int64_t not_before;  // Earliest possible time the data could have arrived,
+                       // indicating the potential error in the |timestamp|
+                       // value,in case the system is busy.
+                       // For example, the time of the last select() call.
+                       // If unknown, this value will be set to zero.
 };
 
 struct RTPHeaderExtension {
diff --git a/modules/NetEq.target.darwin-x86.mk b/common_video/common_video.target.darwin-arm64.mk
similarity index 62%
copy from modules/NetEq.target.darwin-x86.mk
copy to common_video/common_video.target.darwin-arm64.mk
index 3b05cd9..21e28a5 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/common_video/common_video.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_common_video_common_video_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,17 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/common_video/i420_video_frame.cc \
+	third_party/webrtc/common_video/libyuv/webrtc_libyuv.cc \
+	third_party/webrtc/common_video/libyuv/scaler.cc \
+	third_party/webrtc/common_video/plane.cc \
+	third_party/webrtc/common_video/texture_video_frame.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,19 +43,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +59,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,12 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/libyuv/include \
+	$(LOCAL_PATH)/third_party/libyuv \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,19 +141,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +157,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +188,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +207,12 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/libyuv/include \
+	$(LOCAL_PATH)/third_party/libyuv \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +240,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +254,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +276,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_common_video_common_video_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: common_video
+common_video: third_party_webrtc_common_video_common_video_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/common_video/common_video.target.linux-arm64.mk
similarity index 62%
copy from modules/NetEq.target.darwin-x86.mk
copy to common_video/common_video.target.linux-arm64.mk
index 3b05cd9..21e28a5 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/common_video/common_video.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_common_video_common_video_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,17 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/common_video/i420_video_frame.cc \
+	third_party/webrtc/common_video/libyuv/webrtc_libyuv.cc \
+	third_party/webrtc/common_video/libyuv/scaler.cc \
+	third_party/webrtc/common_video/plane.cc \
+	third_party/webrtc/common_video/texture_video_frame.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,19 +43,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +59,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,12 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/libyuv/include \
+	$(LOCAL_PATH)/third_party/libyuv \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,19 +141,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +157,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +188,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +207,12 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/libyuv/include \
+	$(LOCAL_PATH)/third_party/libyuv \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +240,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +254,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +276,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_common_video_common_video_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: common_video
+common_video: third_party_webrtc_common_video_common_video_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/common_video/interface/i420_video_frame.h b/common_video/interface/i420_video_frame.h
index 4579484..3f90a8e 100644
--- a/common_video/interface/i420_video_frame.h
+++ b/common_video/interface/i420_video_frame.h
@@ -15,6 +15,8 @@
 //
 // Storing and handling of YUV (I420) video frames.
 
+#include <assert.h>
+
 #include "webrtc/common_video/plane.h"
 #include "webrtc/system_wrappers/interface/scoped_refptr.h"
 #include "webrtc/typedefs.h"
diff --git a/common_video/libyuv/libyuv_unittest.cc b/common_video/libyuv/libyuv_unittest.cc
index 3df520e..0abe7f3 100644
--- a/common_video/libyuv/libyuv_unittest.cc
+++ b/common_video/libyuv/libyuv_unittest.cc
@@ -84,7 +84,7 @@
 
   FILE* source_file_;
   I420VideoFrame orig_frame_;
-  scoped_array<uint8_t> orig_buffer_;
+  scoped_ptr<uint8_t[]> orig_buffer_;
   const int width_;
   const int height_;
   const int size_y_;
@@ -147,7 +147,7 @@
                                               (width_ + 1) / 2,
                                               (width_ + 1) / 2));
   printf("\nConvert #%d I420 <-> I420 \n", j);
-  scoped_array<uint8_t> out_i420_buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> out_i420_buffer(new uint8_t[frame_length_]);
   EXPECT_EQ(0, ConvertFromI420(orig_frame_, kI420, 0,
                                out_i420_buffer.get()));
   EXPECT_EQ(0, ConvertToI420(kI420, out_i420_buffer.get(), 0, 0,
@@ -162,7 +162,7 @@
   j++;
 
   printf("\nConvert #%d I420 <-> RGB24\n", j);
-  scoped_array<uint8_t> res_rgb_buffer2(new uint8_t[width_ * height_ * 3]);
+  scoped_ptr<uint8_t[]> res_rgb_buffer2(new uint8_t[width_ * height_ * 3]);
   // Align the stride values for the output frame.
   int stride_y = 0;
   int stride_uv = 0;
@@ -184,7 +184,7 @@
   j++;
 
   printf("\nConvert #%d I420 <-> UYVY\n", j);
-  scoped_array<uint8_t> out_uyvy_buffer(new uint8_t[width_ * height_ * 2]);
+  scoped_ptr<uint8_t[]> out_uyvy_buffer(new uint8_t[width_ * height_ * 2]);
   EXPECT_EQ(0, ConvertFromI420(orig_frame_,  kUYVY, 0, out_uyvy_buffer.get()));
   EXPECT_EQ(0, ConvertToI420(kUYVY, out_uyvy_buffer.get(), 0, 0, width_,
                              height_, 0, kRotateNone, &res_i420_frame));
@@ -196,8 +196,8 @@
   j++;
 
   printf("\nConvert #%d I420 <-> YV12\n", j);
-  scoped_array<uint8_t> outYV120Buffer(new uint8_t[frame_length_]);
-  scoped_array<uint8_t> res_i420_buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> outYV120Buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> res_i420_buffer(new uint8_t[frame_length_]);
   I420VideoFrame yv12_frame;
   EXPECT_EQ(0, ConvertFromI420(orig_frame_, kYV12, 0, outYV120Buffer.get()));
   yv12_frame.CreateFrame(size_y_, outYV120Buffer.get(),
@@ -218,7 +218,7 @@
   j++;
 
   printf("\nConvert #%d I420 <-> YUY2\n", j);
-  scoped_array<uint8_t> out_yuy2_buffer(new uint8_t[width_ * height_ * 2]);
+  scoped_ptr<uint8_t[]> out_yuy2_buffer(new uint8_t[width_ * height_ * 2]);
   EXPECT_EQ(0, ConvertFromI420(orig_frame_,  kYUY2, 0, out_yuy2_buffer.get()));
 
   EXPECT_EQ(0, ConvertToI420(kYUY2, out_yuy2_buffer.get(), 0, 0, width_,
@@ -231,7 +231,7 @@
   psnr = I420PSNR(&orig_frame_, &res_i420_frame);
   EXPECT_EQ(48.0, psnr);
   printf("\nConvert #%d I420 <-> RGB565\n", j);
-  scoped_array<uint8_t> out_rgb565_buffer(new uint8_t[width_ * height_ * 2]);
+  scoped_ptr<uint8_t[]> out_rgb565_buffer(new uint8_t[width_ * height_ * 2]);
   EXPECT_EQ(0, ConvertFromI420(orig_frame_, kRGB565, 0,
                                out_rgb565_buffer.get()));
 
@@ -250,7 +250,7 @@
   EXPECT_GT(ceil(psnr), 40);
 
   printf("\nConvert #%d I420 <-> ARGB8888\n", j);
-  scoped_array<uint8_t> out_argb8888_buffer(new uint8_t[width_ * height_ * 4]);
+  scoped_ptr<uint8_t[]> out_argb8888_buffer(new uint8_t[width_ * height_ * 4]);
   EXPECT_EQ(0, ConvertFromI420(orig_frame_, kARGB, 0,
                                out_argb8888_buffer.get()));
 
@@ -283,7 +283,7 @@
   Calc16ByteAlignedStride(width_, &stride_y, &stride_uv);
   EXPECT_EQ(0,res_i420_frame.CreateEmptyFrame(width_, height_,
                                               stride_y, stride_uv, stride_uv));
-  scoped_array<uint8_t> out_i420_buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> out_i420_buffer(new uint8_t[frame_length_]);
   EXPECT_EQ(0, ConvertFromI420(orig_frame_, kI420, 0,
                                out_i420_buffer.get()));
   EXPECT_EQ(0, ConvertToI420(kI420, out_i420_buffer.get(), 0, 0,
diff --git a/common_video/libyuv/scaler_unittest.cc b/common_video/libyuv/scaler_unittest.cc
index fee10df..f186d82 100644
--- a/common_video/libyuv/scaler_unittest.cc
+++ b/common_video/libyuv/scaler_unittest.cc
@@ -99,7 +99,7 @@
                                 kI420, kI420,
                                 kScalePoint));
   I420VideoFrame test_frame2;
-  scoped_array<uint8_t> orig_buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> orig_buffer(new uint8_t[frame_length_]);
   EXPECT_GT(fread(orig_buffer.get(), 1, frame_length_, source_file_), 0U);
   test_frame_.CreateFrame(size_y_, orig_buffer.get(),
                           size_uv_, orig_buffer.get() + size_y_,
@@ -442,7 +442,7 @@
   total_clock = 0;
   int frame_count = 0;
   int src_required_size = CalcBufferSize(kI420, src_width, src_height);
-  scoped_array<uint8_t> frame_buffer(new uint8_t[src_required_size]);
+  scoped_ptr<uint8_t[]> frame_buffer(new uint8_t[src_required_size]);
   int size_y = src_width * src_height;
   int size_uv = ((src_width + 1) / 2) * ((src_height + 1) / 2);
 
diff --git a/examples/android/opensl_loopback/fake_audio_device_buffer.cc b/examples/android/opensl_loopback/fake_audio_device_buffer.cc
index 81adc8f..23b60ee 100644
--- a/examples/android/opensl_loopback/fake_audio_device_buffer.cc
+++ b/examples/android/opensl_loopback/fake_audio_device_buffer.cc
@@ -22,7 +22,7 @@
       next_available_buffer_(0),
       record_channels_(0),
       play_channels_(0) {
-  buf_.reset(new scoped_array<int8_t>[kNumBuffers]);
+  buf_.reset(new scoped_ptr<int8_t[]>[kNumBuffers]);
   for (int i = 0; i < kNumBuffers; ++i) {
     buf_[i].reset(new int8_t[buffer_size_bytes()]);
   }
diff --git a/examples/android/opensl_loopback/fake_audio_device_buffer.h b/examples/android/opensl_loopback/fake_audio_device_buffer.h
index b98ee1e..1ef866c 100644
--- a/examples/android/opensl_loopback/fake_audio_device_buffer.h
+++ b/examples/android/opensl_loopback/fake_audio_device_buffer.h
@@ -55,7 +55,7 @@
   AudioManagerJni audio_manager_;
 
   SingleRwFifo fifo_;
-  scoped_array<scoped_array<int8_t> > buf_;
+  scoped_ptr<scoped_ptr<int8_t[]>[]> buf_;
   int next_available_buffer_;
 
   uint8_t record_channels_;
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/CNG.target.darwin-arm64.mk
similarity index 71%
rename from modules/NetEq.target.darwin-x86.mk
rename to modules/CNG.target.darwin-arm64.mk
index 3b05cd9..dde23ab 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/CNG.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_CNG_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,8 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/cng/webrtc_cng.c \
+	third_party/webrtc/modules/audio_coding/codecs/cng/cng_helpfuns.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +39,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +48,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +59,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,9 +108,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -179,6 +140,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +149,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +160,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +191,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,9 +210,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -289,8 +242,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +256,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +278,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_CNG_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: CNG
+CNG: third_party_webrtc_modules_CNG_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/CNG.target.linux-arm64.mk
similarity index 71%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/CNG.target.linux-arm64.mk
index 3b05cd9..dde23ab 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/CNG.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_CNG_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,8 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/cng/webrtc_cng.c \
+	third_party/webrtc/modules/audio_coding/codecs/cng/cng_helpfuns.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +39,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +48,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +59,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,9 +108,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -179,6 +140,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +149,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +160,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +191,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,9 +210,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -289,8 +242,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +256,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +278,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_CNG_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: CNG
+CNG: third_party_webrtc_modules_CNG_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/G711.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/G711.target.darwin-arm64.mk
index 3b05cd9..d27a628 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/G711.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_G711_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,8 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/g711/g711_interface.c \
+	third_party/webrtc/modules/audio_coding/codecs/g711/g711.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +39,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +48,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +59,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +137,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +146,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +157,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +188,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +207,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +236,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +250,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +272,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_G711_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: G711
+G711: third_party_webrtc_modules_G711_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/G711.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/G711.target.linux-arm64.mk
index 3b05cd9..d27a628 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/G711.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_G711_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,8 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/g711/g711_interface.c \
+	third_party/webrtc/modules/audio_coding/codecs/g711/g711.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +39,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +48,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +59,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +137,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +146,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +157,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +188,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +207,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +236,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +250,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +272,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_G711_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: G711
+G711: third_party_webrtc_modules_G711_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/G722.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/G722.target.darwin-arm64.mk
index 3b05cd9..11a4919 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/G722.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_G722_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,9 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/g722/g722_interface.c \
+	third_party/webrtc/modules/audio_coding/codecs/g722/g722_encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/g722/g722_decode.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +40,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +49,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +60,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +91,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +109,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +138,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +147,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +158,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +189,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +208,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +237,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +251,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +273,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_G722_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: G722
+G722: third_party_webrtc_modules_G722_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/G722.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/G722.target.linux-arm64.mk
index 3b05cd9..11a4919 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/G722.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_G722_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,9 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/g722/g722_interface.c \
+	third_party/webrtc/modules/audio_coding/codecs/g722/g722_encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/g722/g722_decode.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +40,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +49,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +60,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +91,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +109,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +138,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +147,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +158,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +189,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +208,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +237,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +251,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +273,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_G722_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: G722
+G722: third_party_webrtc_modules_G722_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-arm.mk b/modules/NetEq.target.darwin-arm.mk
deleted file mode 100644
index f32b25e..0000000
--- a/modules/NetEq.target.darwin-arm.mk
+++ /dev/null
@@ -1,348 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_ARCH_ARM' \
-	'-DWEBRTC_ARCH_ARM_V7' \
-	'-DWEBRTC_DETECT_ARM_NEON' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_ARCH_ARM' \
-	'-DWEBRTC_ARCH_ARM_V7' \
-	'-DWEBRTC_DETECT_ARM_NEON' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
-
-# Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-mips.mk b/modules/NetEq.target.darwin-mips.mk
deleted file mode 100644
index 240cc6c..0000000
--- a/modules/NetEq.target.darwin-mips.mk
+++ /dev/null
@@ -1,344 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DMIPS32_LE' \
-	'-DMIPS_FPU_LE' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DMIPS32_LE' \
-	'-DMIPS_FPU_LE' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
-
-# Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.linux-arm.mk b/modules/NetEq.target.linux-arm.mk
deleted file mode 100644
index f32b25e..0000000
--- a/modules/NetEq.target.linux-arm.mk
+++ /dev/null
@@ -1,348 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_ARCH_ARM' \
-	'-DWEBRTC_ARCH_ARM_V7' \
-	'-DWEBRTC_DETECT_ARM_NEON' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_ARCH_ARM' \
-	'-DWEBRTC_ARCH_ARM_V7' \
-	'-DWEBRTC_DETECT_ARM_NEON' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
-
-# Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.linux-mips.mk b/modules/NetEq.target.linux-mips.mk
deleted file mode 100644
index 240cc6c..0000000
--- a/modules/NetEq.target.linux-mips.mk
+++ /dev/null
@@ -1,344 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DMIPS32_LE' \
-	'-DMIPS_FPU_LE' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DMIPS32_LE' \
-	'-DMIPS_FPU_LE' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
-
-# Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.linux-x86.mk b/modules/NetEq.target.linux-x86.mk
deleted file mode 100644
index 3b05cd9..0000000
--- a/modules/NetEq.target.linux-x86.mk
+++ /dev/null
@@ -1,338 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
-
-# Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.linux-x86_64.mk b/modules/NetEq.target.linux-x86_64.mk
deleted file mode 100644
index c84869c..0000000
--- a/modules/NetEq.target.linux-x86_64.mk
+++ /dev/null
@@ -1,338 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-Wno-unused-local-typedefs \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-Wno-unused-local-typedefs \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
-
-# Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/acm2.target.darwin-x86_64.mk b/modules/NetEq4.target.darwin-arm64.mk
similarity index 75%
copy from modules/acm2.target.darwin-x86_64.mk
copy to modules/NetEq4.target.darwin-arm64.mk
index e2c8787..b7f5bd4 100644
--- a/modules/acm2.target.darwin-x86_64.mk
+++ b/modules/NetEq4.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
+LOCAL_MODULE := third_party_webrtc_modules_NetEq4_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -24,39 +24,43 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
+	third_party/webrtc/modules/audio_coding/neteq4/accelerate.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_classifier.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_decoder_impl.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_decoder.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_multi_vector.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_vector.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/background_noise.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/buffer_level_filter.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/comfort_noise.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/decision_logic.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/decision_logic_fax.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/decision_logic_normal.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/decoder_database.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/delay_peak_detector.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/dsp_helper.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/dtmf_buffer.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/dtmf_tone_generator.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/expand.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/merge.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/neteq_impl.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/neteq.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/statistics_calculator.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/normal.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/packet_buffer.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/payload_splitter.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/post_decode_vad.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/preemptive_expand.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/random_vector.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/rtcp.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/sync_buffer.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/timestamp_scaler.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/time_stretch.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,13 +80,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -141,24 +141,21 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
+	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -176,7 +173,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -196,13 +192,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -262,24 +254,21 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
+	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -307,8 +296,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -323,8 +310,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -347,10 +332,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
+gyp_all_modules: third_party_webrtc_modules_NetEq4_gyp
 
 # Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
+.PHONY: NetEq4
+NetEq4: third_party_webrtc_modules_NetEq4_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/acm2.target.darwin-x86_64.mk b/modules/NetEq4.target.linux-arm64.mk
similarity index 75%
copy from modules/acm2.target.darwin-x86_64.mk
copy to modules/NetEq4.target.linux-arm64.mk
index e2c8787..b7f5bd4 100644
--- a/modules/acm2.target.darwin-x86_64.mk
+++ b/modules/NetEq4.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
+LOCAL_MODULE := third_party_webrtc_modules_NetEq4_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -24,39 +24,43 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
+	third_party/webrtc/modules/audio_coding/neteq4/accelerate.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_classifier.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_decoder_impl.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_decoder.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_multi_vector.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/audio_vector.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/background_noise.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/buffer_level_filter.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/comfort_noise.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/decision_logic.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/decision_logic_fax.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/decision_logic_normal.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/decoder_database.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/delay_peak_detector.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/dsp_helper.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/dtmf_buffer.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/dtmf_tone_generator.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/expand.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/merge.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/neteq_impl.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/neteq.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/statistics_calculator.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/normal.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/packet_buffer.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/payload_splitter.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/post_decode_vad.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/preemptive_expand.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/random_vector.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/rtcp.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/sync_buffer.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/timestamp_scaler.cc \
+	third_party/webrtc/modules/audio_coding/neteq4/time_stretch.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,13 +80,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -141,24 +141,21 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
+	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -176,7 +173,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -196,13 +192,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -262,24 +254,21 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
+	$(LOCAL_PATH)/third_party/webrtc \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -307,8 +296,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -323,8 +310,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -347,10 +332,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
+gyp_all_modules: third_party_webrtc_modules_NetEq4_gyp
 
 # Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
+.PHONY: NetEq4
+NetEq4: third_party_webrtc_modules_NetEq4_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/PCM16B.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/PCM16B.target.darwin-arm64.mk
index 3b05cd9..c27577f 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/PCM16B.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_PCM16B_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,7 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +38,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +47,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +58,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +89,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +107,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +136,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +145,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +156,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +187,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +206,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +235,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +249,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +271,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_PCM16B_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: PCM16B
+PCM16B: third_party_webrtc_modules_PCM16B_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/PCM16B.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/PCM16B.target.linux-arm64.mk
index 3b05cd9..c27577f 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/PCM16B.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_PCM16B_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,7 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +38,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +47,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +58,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +89,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +107,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +136,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +145,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +156,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +187,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +206,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +235,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +249,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +271,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_PCM16B_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: PCM16B
+PCM16B: third_party_webrtc_modules_PCM16B_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/acm2.target.darwin-arm.mk b/modules/acm2.target.darwin-arm.mk
deleted file mode 100644
index 222798a..0000000
--- a/modules/acm2.target.darwin-arm.mk
+++ /dev/null
@@ -1,366 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_ARCH_ARM' \
-	'-DWEBRTC_ARCH_ARM_V7' \
-	'-DWEBRTC_DETECT_ARM_NEON' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_ARCH_ARM' \
-	'-DWEBRTC_ARCH_ARM_V7' \
-	'-DWEBRTC_DETECT_ARM_NEON' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
-
-# Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/acm2.target.darwin-mips.mk b/modules/acm2.target.darwin-mips.mk
deleted file mode 100644
index 3c220bb..0000000
--- a/modules/acm2.target.darwin-mips.mk
+++ /dev/null
@@ -1,362 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DMIPS32_LE' \
-	'-DMIPS_FPU_LE' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DMIPS32_LE' \
-	'-DMIPS_FPU_LE' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
-
-# Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/acm2.target.darwin-x86.mk b/modules/acm2.target.darwin-x86.mk
deleted file mode 100644
index 94be33a..0000000
--- a/modules/acm2.target.darwin-x86.mk
+++ /dev/null
@@ -1,356 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
-
-# Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/acm2.target.linux-arm.mk b/modules/acm2.target.linux-arm.mk
deleted file mode 100644
index 222798a..0000000
--- a/modules/acm2.target.linux-arm.mk
+++ /dev/null
@@ -1,366 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_ARCH_ARM' \
-	'-DWEBRTC_ARCH_ARM_V7' \
-	'-DWEBRTC_DETECT_ARM_NEON' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_ARCH_ARM' \
-	'-DWEBRTC_ARCH_ARM_V7' \
-	'-DWEBRTC_DETECT_ARM_NEON' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
-
-# Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/acm2.target.linux-mips.mk b/modules/acm2.target.linux-mips.mk
deleted file mode 100644
index 3c220bb..0000000
--- a/modules/acm2.target.linux-mips.mk
+++ /dev/null
@@ -1,362 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DMIPS32_LE' \
-	'-DMIPS_FPU_LE' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-mhard-float \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DMIPS32_LE' \
-	'-DMIPS_FPU_LE' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
-
-# Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/acm2.target.linux-x86.mk b/modules/acm2.target.linux-x86.mk
deleted file mode 100644
index 94be33a..0000000
--- a/modules/acm2.target.linux-x86.mk
+++ /dev/null
@@ -1,356 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
-
-# Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/acm2.target.linux-x86_64.mk b/modules/acm2.target.linux-x86_64.mk
deleted file mode 100644
index e2c8787..0000000
--- a/modules/acm2.target.linux-x86_64.mk
+++ /dev/null
@@ -1,356 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
-	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-Wno-unused-local-typedefs \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-Wno-unused-local-typedefs \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DWEBRTC_RESTRICT_LOGGING' \
-	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
-	'-DWEBRTC_CHROMIUM_BUILD' \
-	'-DWEBRTC_POSIX' \
-	'-DWEBRTC_LINUX' \
-	'-DWEBRTC_ANDROID' \
-	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DWEBRTC_CODEC_OPUS' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(LOCAL_PATH)/third_party \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g711/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/g722/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
-	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
-	$(LOCAL_PATH)/third_party/opus/src/celt \
-	$(LOCAL_PATH)/third_party/opus/src/src \
-	$(LOCAL_PATH)/third_party/opus/src/include \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES :=
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
-
-# Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/audio_coding/codecs/isac/fix/source/transform_neon.S b/modules/audio_coding/codecs/isac/fix/source/transform_neon.S
index 46682ac..6713b28 100644
--- a/modules/audio_coding/codecs/isac/fix/source/transform_neon.S
+++ b/modules/audio_coding/codecs/isac/fix/source/transform_neon.S
@@ -42,7 +42,11 @@
   add r5, sp, #(16 + FRAMESAMPLES * 2)  @ tmpimQ16;
 
   adr r9, WebRtcIsacfix_kCosTab1
+#if defined(__APPLE__)
+  mov r6, #:lower16:(WebRtcIsacfix_kSinTab1 - WebRtcIsacfix_kCosTab1)
+#else
   mov r6, #(WebRtcIsacfix_kSinTab1 - WebRtcIsacfix_kCosTab1)
+#endif
   add r10, r9, r6             @ WebRtcIsacfix_kSinTab1
 
   vmov.u32 q14, #0            @ Initialize the maximum values for tmpInIm.
@@ -455,7 +459,12 @@
   bgt TransformAndFindMax
 
   adr r10, WebRtcIsacfix_kSinTab1
+#if defined(__APPLE__)
+  mov r2, #:lower16:(WebRtcIsacfix_kSinTab1 - WebRtcIsacfix_kCosTab1)
+#else
   mov r2, #(WebRtcIsacfix_kSinTab1 - WebRtcIsacfix_kCosTab1)
+#endif
+
   sub r11, r10, r2            @ WebRtcIsacfix_kCosTab1
 
   @ Find the maximum value in the Neon registers
diff --git a/modules/audio_coding/main/OWNERS b/modules/audio_coding/main/OWNERS
index e1e6256..83880d2 100644
--- a/modules/audio_coding/main/OWNERS
+++ b/modules/audio_coding/main/OWNERS
@@ -1,3 +1,4 @@
 tina.legrand@webrtc.org
 turaj@webrtc.org
 jan.skoglund@webrtc.org
+henrik.lundin@webrtc.org
diff --git a/modules/audio_coding/main/acm2/acm_receiver.cc b/modules/audio_coding/main/acm2/acm_receiver.cc
index 65d95b1..5e51ba8 100644
--- a/modules/audio_coding/main/acm2/acm_receiver.cc
+++ b/modules/audio_coding/main/acm2/acm_receiver.cc
@@ -117,23 +117,23 @@
 
 }  // namespace
 
-AcmReceiver::AcmReceiver(Clock* clock)
-    : id_(0),
-      neteq_config_(),
-      neteq_(NetEq::Create(neteq_config_)),
+AcmReceiver::AcmReceiver(const AudioCodingModule::Config& config)
+    : id_(config.id),
+      neteq_(NetEq::Create(config.neteq_config)),
       last_audio_decoder_(-1),  // Invalid value.
       decode_lock_(RWLockWrapper::CreateRWLock()),
       neteq_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
       vad_enabled_(true),
       previous_audio_activity_(AudioFrame::kVadPassive),
-      current_sample_rate_hz_(neteq_config_.sample_rate_hz),
+      current_sample_rate_hz_(config.neteq_config.sample_rate_hz),
       nack_(),
       nack_enabled_(false),
-      clock_(clock),
+      clock_(config.clock),
       av_sync_(false),
       initial_delay_manager_(),
       missing_packets_sync_stream_(),
       late_packets_sync_stream_() {
+  assert(clock_);
   for (int n = 0; n < ACMCodecDB::kMaxNumCodecs; ++n) {
     decoders_[n].registered = false;
   }
@@ -428,9 +428,13 @@
   if (ptr_audio_buffer == audio_buffer_) {
     // Data is written to local buffer.
     if (need_resampling) {
-      samples_per_channel = resampler_.Resample10Msec(
-          audio_buffer_, current_sample_rate_hz_, desired_freq_hz,
-          num_channels, audio_frame->data_);
+      samples_per_channel =
+          resampler_.Resample10Msec(audio_buffer_,
+                                    current_sample_rate_hz_,
+                                    desired_freq_hz,
+                                    num_channels,
+                                    AudioFrame::kMaxDataSizeSamples,
+                                    audio_frame->data_);
       if (samples_per_channel < 0) {
         LOG_FERR0(LS_ERROR, "AcmReceiver::GetAudio") << "Resampler Failed.";
         return -1;
@@ -444,9 +448,13 @@
     // Data is written into |audio_frame|.
     if (need_resampling) {
       // We might end up here ONLY if codec is changed.
-      samples_per_channel = resampler_.Resample10Msec(
-          audio_frame->data_, current_sample_rate_hz_, desired_freq_hz,
-          num_channels, audio_buffer_);
+      samples_per_channel =
+          resampler_.Resample10Msec(audio_frame->data_,
+                                    current_sample_rate_hz_,
+                                    desired_freq_hz,
+                                    num_channels,
+                                    AudioFrame::kMaxDataSizeSamples,
+                                    audio_buffer_);
       if (samples_per_channel < 0) {
         LOG_FERR0(LS_ERROR, "AcmReceiver::GetAudio") << "Resampler Failed.";
         return -1;
@@ -757,13 +765,9 @@
   // exceeds a threshold.
   int num_packets;
   int max_num_packets;
-  int buffer_size_byte;
-  int max_buffer_size_byte;
   const float kBufferingThresholdScale = 0.9f;
-  neteq_->PacketBufferStatistics(&num_packets, &max_num_packets,
-                                 &buffer_size_byte, &max_buffer_size_byte);
-  if (num_packets > max_num_packets * kBufferingThresholdScale ||
-      buffer_size_byte > max_buffer_size_byte * kBufferingThresholdScale) {
+  neteq_->PacketBufferStatistics(&num_packets, &max_num_packets);
+  if (num_packets > max_num_packets * kBufferingThresholdScale) {
     initial_delay_manager_->DisableBuffering();
     return false;
   }
@@ -776,7 +780,6 @@
     current_sample_rate_hz_ = ACMCodecDB::database_[last_audio_decoder_].plfreq;
     frame->num_channels_ = decoders_[last_audio_decoder_].channels;
   } else {
-    current_sample_rate_hz_ = neteq_config_.sample_rate_hz;
     frame->num_channels_ = 1;
   }
 
diff --git a/modules/audio_coding/main/acm2/acm_receiver.h b/modules/audio_coding/main/acm2/acm_receiver.h
index fe44de2..7a238ae 100644
--- a/modules/audio_coding/main/acm2/acm_receiver.h
+++ b/modules/audio_coding/main/acm2/acm_receiver.h
@@ -27,7 +27,6 @@
 
 namespace webrtc {
 
-class Clock;
 struct CodecInst;
 class CriticalSectionWrapper;
 class RWLockWrapper;
@@ -48,7 +47,7 @@
   };
 
   // Constructor of the class
-  explicit AcmReceiver(Clock* clock);
+  explicit AcmReceiver(const AudioCodingModule::Config& config);
 
   // Destructor of the class.
   ~AcmReceiver();
@@ -339,7 +338,6 @@
   void InsertStreamOfSyncPackets(InitialDelayManager::SyncStream* sync_stream);
 
   int id_;
-  NetEq::Config neteq_config_;
   NetEq* neteq_;
   Decoder decoders_[ACMCodecDB::kMaxNumCodecs];
   int last_audio_decoder_;
diff --git a/modules/audio_coding/main/acm2/acm_receiver_unittest.cc b/modules/audio_coding/main/acm2/acm_receiver_unittest.cc
index 8158860..c55eef9 100644
--- a/modules/audio_coding/main/acm2/acm_receiver_unittest.cc
+++ b/modules/audio_coding/main/acm2/acm_receiver_unittest.cc
@@ -43,12 +43,14 @@
                         public ::testing::Test {
  protected:
   AcmReceiverTest()
-      : receiver_(new AcmReceiver(Clock::GetRealTimeClock())),
-        acm_(new AudioCodingModuleImpl(0, Clock::GetRealTimeClock())),
-        timestamp_(0),
+      : timestamp_(0),
         packet_sent_(false),
         last_packet_send_timestamp_(timestamp_),
-        last_frame_type_(kFrameEmpty) {}
+        last_frame_type_(kFrameEmpty) {
+    AudioCodingModule::Config config;
+    acm_.reset(new AudioCodingModuleImpl(config));
+    receiver_.reset(new AcmReceiver(config));
+  }
 
   ~AcmReceiverTest() {}
 
diff --git a/modules/audio_coding/main/acm2/acm_resampler.cc b/modules/audio_coding/main/acm2/acm_resampler.cc
index 2940922..97d87b1 100644
--- a/modules/audio_coding/main/acm2/acm_resampler.cc
+++ b/modules/audio_coding/main/acm2/acm_resampler.cc
@@ -10,6 +10,7 @@
 
 #include "webrtc/modules/audio_coding/main/acm2/acm_resampler.h"
 
+#include <assert.h>
 #include <string.h>
 
 #include "webrtc/common_audio/resampler/include/resampler.h"
@@ -28,10 +29,15 @@
                                  int in_freq_hz,
                                  int out_freq_hz,
                                  int num_audio_channels,
+                                 int out_capacity_samples,
                                  int16_t* out_audio) {
   int in_length = in_freq_hz * num_audio_channels / 100;
   int out_length = out_freq_hz * num_audio_channels / 100;
   if (in_freq_hz == out_freq_hz) {
+    if (out_capacity_samples < in_length) {
+      assert(false);
+      return -1;
+    }
     memcpy(out_audio, in_audio, in_length * sizeof(int16_t));
     return in_length / num_audio_channels;
   }
@@ -43,9 +49,15 @@
     return -1;
   }
 
-  out_length = resampler_.Resample(in_audio, in_length, out_audio, out_length);
+  out_length =
+      resampler_.Resample(in_audio, in_length, out_audio, out_capacity_samples);
   if (out_length == -1) {
-    LOG_FERR4(LS_ERROR, Resample, in_audio, in_length, out_audio, out_length);
+    LOG_FERR4(LS_ERROR,
+              Resample,
+              in_audio,
+              in_length,
+              out_audio,
+              out_capacity_samples);
     return -1;
   }
 
diff --git a/modules/audio_coding/main/acm2/acm_resampler.h b/modules/audio_coding/main/acm2/acm_resampler.h
index 644a32f..a8fc6b6 100644
--- a/modules/audio_coding/main/acm2/acm_resampler.h
+++ b/modules/audio_coding/main/acm2/acm_resampler.h
@@ -26,6 +26,7 @@
                      int in_freq_hz,
                      int out_freq_hz,
                      int num_audio_channels,
+                     int out_capacity_samples,
                      int16_t* out_audio);
 
  private:
diff --git a/modules/audio_coding/main/acm2/audio_coding_module.cc b/modules/audio_coding/main/acm2/audio_coding_module.cc
index 1fbeae2..eca909c 100644
--- a/modules/audio_coding/main/acm2/audio_coding_module.cc
+++ b/modules/audio_coding/main/acm2/audio_coding_module.cc
@@ -13,22 +13,21 @@
 #include "webrtc/common_types.h"
 #include "webrtc/modules/audio_coding/main/acm2/acm_codec_database.h"
 #include "webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h"
-#include "webrtc/modules/audio_coding/main/source/audio_coding_module_impl.h"
 #include "webrtc/system_wrappers/interface/clock.h"
 #include "webrtc/system_wrappers/interface/trace.h"
 
 namespace webrtc {
 
-const char kLegacyAcmVersion[] = "acm1";
-const char kExperimentalAcmVersion[] = "acm2";
-
 // Create module
 AudioCodingModule* AudioCodingModule::Create(int id) {
-  return new acm2::AudioCodingModuleImpl(id, Clock::GetRealTimeClock());
+  return Create(id, Clock::GetRealTimeClock());
 }
 
 AudioCodingModule* AudioCodingModule::Create(int id, Clock* clock) {
-  return new acm2::AudioCodingModuleImpl(id, clock);
+  AudioCodingModule::Config config;
+  config.id = id;
+  config.clock = clock;
+  return new acm2::AudioCodingModuleImpl(config);
 }
 
 // Get number of supported codecs
@@ -95,13 +94,4 @@
   }
 }
 
-AudioCodingModule* AudioCodingModuleFactory::Create(int id) const {
-  return new acm1::AudioCodingModuleImpl(static_cast<int32_t>(id),
-                                         Clock::GetRealTimeClock());
-}
-
-AudioCodingModule* NewAudioCodingModuleFactory::Create(int id) const {
-  return new acm2::AudioCodingModuleImpl(id, Clock::GetRealTimeClock());
-}
-
 }  // namespace webrtc
diff --git a/modules/audio_coding/main/acm2/audio_coding_module.gypi b/modules/audio_coding/main/acm2/audio_coding_module.gypi
index f51c3bf..07fe727 100644
--- a/modules/audio_coding/main/acm2/audio_coding_module.gypi
+++ b/modules/audio_coding/main/acm2/audio_coding_module.gypi
@@ -7,9 +7,29 @@
 # be found in the AUTHORS file in the root of the source tree.
 
 {
+  'variables': {
+    'audio_coding_dependencies': [
+      'CNG',
+      'G711',
+      'G722',
+      'iLBC',
+      'iSAC',
+      'iSACFix',
+      'PCM16B',
+      '<(webrtc_root)/common_audio/common_audio.gyp:common_audio',
+      '<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
+    ],
+    'audio_coding_defines': [],
+    'conditions': [
+      ['include_opus==1', {
+        'audio_coding_dependencies': ['webrtc_opus',],
+        'audio_coding_defines': ['WEBRTC_CODEC_OPUS',],
+      }],
+    ],
+  },
   'targets': [
     {
-      'target_name': 'acm2',
+      'target_name': 'audio_coding_module',
       'type': 'static_library',
       'defines': [
         '<@(audio_coding_defines)',
@@ -93,4 +113,43 @@
       ],
     },
   ],
+  'conditions': [
+    ['include_tests==1', {
+      'targets': [
+        {
+          'target_name': 'delay_test',
+          'type': 'executable',
+          'dependencies': [
+            'audio_coding_module',
+            '<(DEPTH)/testing/gtest.gyp:gtest',
+            '<(webrtc_root)/test/test.gyp:test_support',
+            '<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
+            '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
+          ],
+          'sources': [
+             '../test/delay_test.cc',
+             '../test/Channel.cc',
+             '../test/PCMFile.cc',
+             '../test/utility.cc',
+           ],
+        }, # delay_test
+        {
+          'target_name': 'insert_packet_with_timing',
+          'type': 'executable',
+          'dependencies': [
+            'audio_coding_module',
+            '<(DEPTH)/testing/gtest.gyp:gtest',
+            '<(webrtc_root)/test/test.gyp:test_support',
+            '<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
+            '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
+          ],
+          'sources': [
+             '../test/insert_packet_with_timing.cc',
+             '../test/Channel.cc',
+             '../test/PCMFile.cc',
+           ],
+        }, # delay_test
+      ],
+    }],
+  ],
 }
diff --git a/modules/audio_coding/main/acm2/audio_coding_module_impl.cc b/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
index 26a4d30..6133d23 100644
--- a/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
+++ b/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
@@ -114,9 +114,10 @@
 
 }  // namespace
 
-AudioCodingModuleImpl::AudioCodingModuleImpl(int id, Clock* clock)
+AudioCodingModuleImpl::AudioCodingModuleImpl(
+    const AudioCodingModule::Config& config)
     : packetization_callback_(NULL),
-      id_(id),
+      id_(config.id),
       expected_codec_ts_(0xD87F3F9F),
       expected_in_ts_(0xD87F3F9F),
       send_codec_inst_(),
@@ -131,7 +132,7 @@
       stereo_send_(false),
       current_send_codec_idx_(-1),
       send_codec_registered_(false),
-      receiver_(clock),
+      receiver_(config),
       acm_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
       vad_callback_(NULL),
       is_first_red_(true),
@@ -160,8 +161,6 @@
     mirror_codec_idx_[i] = -1;
   }
 
-  receiver_.set_id(id_);
-
   // Allocate memory for RED.
   red_buffer_ = new uint8_t[MAX_PAYLOAD_SIZE_BYTE];
 
@@ -202,7 +201,7 @@
     WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, id_,
                  "Cannot initialize receiver");
   }
-  WEBRTC_TRACE(webrtc::kTraceMemory, webrtc::kTraceAudioCoding, id, "Created");
+  WEBRTC_TRACE(webrtc::kTraceMemory, webrtc::kTraceAudioCoding, id_, "Created");
 }
 
 AudioCodingModuleImpl::~AudioCodingModuleImpl() {
@@ -1362,9 +1361,13 @@
     // The result of the resampler is written to output frame.
     dest_ptr_audio = preprocess_frame_.data_;
 
-    preprocess_frame_.samples_per_channel_ = resampler_.Resample10Msec(
-        src_ptr_audio, in_frame.sample_rate_hz_, send_codec_inst_.plfreq,
-        preprocess_frame_.num_channels_, dest_ptr_audio);
+    preprocess_frame_.samples_per_channel_ =
+        resampler_.Resample10Msec(src_ptr_audio,
+                                  in_frame.sample_rate_hz_,
+                                  send_codec_inst_.plfreq,
+                                  preprocess_frame_.num_channels_,
+                                  AudioFrame::kMaxDataSizeSamples,
+                                  dest_ptr_audio);
 
     if (preprocess_frame_.samples_per_channel_ < 0) {
       WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, id_,
@@ -1707,7 +1710,9 @@
   }
 
   audio_frame->id_ = id_;
-  audio_frame->energy_ = 0;
+  // The energy must be -1 in order to have the energy calculated later on in
+  // the AudioConferenceMixer module.
+  audio_frame->energy_ = static_cast<uint32_t>(-1);
   audio_frame->timestamp_ = 0;
   return 0;
 }
@@ -1973,10 +1978,6 @@
   return receiver_.LeastRequiredDelayMs();
 }
 
-const char* AudioCodingModuleImpl::Version() const {
-  return kExperimentalAcmVersion;
-}
-
 void AudioCodingModuleImpl::GetDecodingCallStatistics(
       AudioDecodingCallStats* call_stats) const {
   receiver_.GetDecodingCallStatistics(call_stats);
diff --git a/modules/audio_coding/main/acm2/audio_coding_module_impl.h b/modules/audio_coding/main/acm2/audio_coding_module_impl.h
index cdee3f9..157fc01 100644
--- a/modules/audio_coding/main/acm2/audio_coding_module_impl.h
+++ b/modules/audio_coding/main/acm2/audio_coding_module_impl.h
@@ -22,7 +22,6 @@
 
 namespace webrtc {
 
-class Clock;
 class CriticalSectionWrapper;
 class RWLockWrapper;
 
@@ -33,11 +32,9 @@
 
 class AudioCodingModuleImpl : public AudioCodingModule {
  public:
-  AudioCodingModuleImpl(int id, Clock* clock);
+  explicit AudioCodingModuleImpl(const AudioCodingModule::Config& config);
   ~AudioCodingModuleImpl();
 
-  virtual const char* Version() const;
-
   // Change the unique identifier of this object.
   virtual int32_t ChangeUniqueId(const int32_t id);
 
diff --git a/modules/audio_coding/main/acm2/audio_coding_module_unittest.cc b/modules/audio_coding/main/acm2/audio_coding_module_unittest.cc
index 0f3e73e..c745048 100644
--- a/modules/audio_coding/main/acm2/audio_coding_module_unittest.cc
+++ b/modules/audio_coding/main/acm2/audio_coding_module_unittest.cc
@@ -58,8 +58,9 @@
 class AudioCodingModuleTest : public ::testing::Test {
  protected:
   AudioCodingModuleTest()
-      : rtp_utility_(new RtpUtility(kFrameSizeSamples, kPayloadType)),
-        acm2_(AudioCodingModule::Create(1 /*id*/)) {}
+      : id_(1),
+        rtp_utility_(new RtpUtility(kFrameSizeSamples, kPayloadType)),
+        acm_(AudioCodingModule::Create(id_)) {}
 
   ~AudioCodingModuleTest() {}
 
@@ -71,7 +72,7 @@
     codec.pltype = kPayloadType;
 
     // Register L16 codec in ACMs.
-    ASSERT_EQ(0, acm2_->RegisterReceiveCodec(codec));
+    ASSERT_EQ(0, acm_->RegisterReceiveCodec(codec));
 
     rtp_utility_->Populate(&rtp_header_);
   }
@@ -81,19 +82,20 @@
     const uint8_t kPayload[kPayloadSizeBytes] = {0};
 
     ASSERT_EQ(0,
-              acm2_->IncomingPacket(kPayload, kPayloadSizeBytes, rtp_header_));
+              acm_->IncomingPacket(kPayload, kPayloadSizeBytes, rtp_header_));
 
-    ASSERT_EQ(0, acm2_->PlayoutData10Ms(-1, &audio_frame));
+    ASSERT_EQ(0, acm_->PlayoutData10Ms(-1, &audio_frame));
     rtp_utility_->Forward(&rtp_header_);
   }
 
   void JustPullAudio() {
     AudioFrame audio_frame;
-    ASSERT_EQ(0, acm2_->PlayoutData10Ms(-1, &audio_frame));
+    ASSERT_EQ(0, acm_->PlayoutData10Ms(-1, &audio_frame));
   }
 
+  const int id_;
   scoped_ptr<RtpUtility> rtp_utility_;
-  scoped_ptr<AudioCodingModule> acm2_;
+  scoped_ptr<AudioCodingModule> acm_;
 
   WebRtcRTPHeader rtp_header_;
 };
@@ -102,7 +104,7 @@
 // all fields have to be zero.
 TEST_F(AudioCodingModuleTest, DISABLED_ON_ANDROID(InitializedToZero)) {
   AudioDecodingCallStats stats;
-  acm2_->GetDecodingCallStatistics(&stats);
+  acm_->GetDecodingCallStatistics(&stats);
   EXPECT_EQ(0, stats.calls_to_neteq);
   EXPECT_EQ(0, stats.calls_to_silence_generator);
   EXPECT_EQ(0, stats.decoded_normal);
@@ -117,15 +119,14 @@
   AudioDecodingCallStats stats;
   const int kInitialDelay = 100;
 
-  acm2_->SetInitialPlayoutDelay(kInitialDelay);
+  acm_->SetInitialPlayoutDelay(kInitialDelay);
 
-  AudioFrame audio_frame;
   int num_calls = 0;
   for (int time_ms = 0; time_ms < kInitialDelay;
        time_ms += kFrameSizeMs, ++num_calls) {
     InsertPacketAndPullAudio();
   }
-  acm2_->GetDecodingCallStatistics(&stats);
+  acm_->GetDecodingCallStatistics(&stats);
   EXPECT_EQ(0, stats.calls_to_neteq);
   EXPECT_EQ(num_calls, stats.calls_to_silence_generator);
   EXPECT_EQ(0, stats.decoded_normal);
@@ -141,11 +142,10 @@
   AudioDecodingCallStats stats;
   const int kNumNormalCalls = 10;
 
-  AudioFrame audio_frame;
   for (int num_calls = 0; num_calls < kNumNormalCalls; ++num_calls) {
     InsertPacketAndPullAudio();
   }
-  acm2_->GetDecodingCallStatistics(&stats);
+  acm_->GetDecodingCallStatistics(&stats);
   EXPECT_EQ(kNumNormalCalls, stats.calls_to_neteq);
   EXPECT_EQ(0, stats.calls_to_silence_generator);
   EXPECT_EQ(kNumNormalCalls, stats.decoded_normal);
@@ -160,7 +160,7 @@
   for (int n = 0; n < kNumPlc + kNumPlcCng; ++n) {
     JustPullAudio();
   }
-  acm2_->GetDecodingCallStatistics(&stats);
+  acm_->GetDecodingCallStatistics(&stats);
   EXPECT_EQ(kNumNormalCalls + kNumPlc + kNumPlcCng, stats.calls_to_neteq);
   EXPECT_EQ(0, stats.calls_to_silence_generator);
   EXPECT_EQ(kNumNormalCalls, stats.decoded_normal);
@@ -169,4 +169,23 @@
   EXPECT_EQ(kNumPlcCng, stats.decoded_plc_cng);
 }
 
+TEST_F(AudioCodingModuleTest, VerifyOutputFrame) {
+  AudioFrame audio_frame;
+  const int kSampleRateHz = 32000;
+  EXPECT_EQ(0, acm_->PlayoutData10Ms(kSampleRateHz, &audio_frame));
+  // The energy must be -1 in order to have the energy calculated later on in
+  // the AudioConferenceMixer module.
+  EXPECT_EQ(static_cast<uint32_t>(-1), audio_frame.energy_);
+  EXPECT_EQ(id_, audio_frame.id_);
+  EXPECT_EQ(0u, audio_frame.timestamp_);
+  EXPECT_GT(audio_frame.num_channels_, 0);
+  EXPECT_EQ(kSampleRateHz / 100, audio_frame.samples_per_channel_);
+  EXPECT_EQ(kSampleRateHz, audio_frame.sample_rate_hz_);
+}
+
+TEST_F(AudioCodingModuleTest, FailOnZeroDesiredFrequency) {
+  AudioFrame audio_frame;
+  EXPECT_EQ(-1, acm_->PlayoutData10Ms(0, &audio_frame));
+}
+
 }  // namespace webrtc
diff --git a/modules/audio_coding/main/acm2/nack_unittest.cc b/modules/audio_coding/main/acm2/nack_unittest.cc
index 8011d88..5837c31 100644
--- a/modules/audio_coding/main/acm2/nack_unittest.cc
+++ b/modules/audio_coding/main/acm2/nack_unittest.cc
@@ -398,7 +398,7 @@
     // Packet lost more than NACK-list size limit.
     uint16_t num_lost_packets = kNackThreshold + kNackListSize + 5;
 
-    scoped_array<uint16_t> seq_num_lost(new uint16_t[num_lost_packets]);
+    scoped_ptr<uint16_t[]> seq_num_lost(new uint16_t[num_lost_packets]);
     for (int n = 0; n < num_lost_packets; ++n) {
       seq_num_lost[n] = ++seq_num;
     }
diff --git a/modules/audio_coding/main/interface/audio_coding_module.h b/modules/audio_coding/main/interface/audio_coding_module.h
index db45add..9c7e562 100644
--- a/modules/audio_coding/main/interface/audio_coding_module.h
+++ b/modules/audio_coding/main/interface/audio_coding_module.h
@@ -15,7 +15,9 @@
 
 #include "webrtc/common_types.h"
 #include "webrtc/modules/audio_coding/main/interface/audio_coding_module_typedefs.h"
+#include "webrtc/modules/audio_coding/neteq4/interface/neteq.h"
 #include "webrtc/modules/interface/module.h"
+#include "webrtc/system_wrappers/interface/clock.h"
 #include "webrtc/typedefs.h"
 
 namespace webrtc {
@@ -25,7 +27,6 @@
 struct WebRtcRTPHeader;
 class AudioFrame;
 class RTPFragmentationHeader;
-class Clock;
 
 #define WEBRTC_10MS_PCM_AUDIO 960  // 16 bits super wideband 48 kHz
 
@@ -73,15 +74,22 @@
       const uint16_t delayMS) = 0;  // average delay in ms
 };
 
-// Version string for testing, to distinguish instances of ACM1 from ACM2.
-extern const char kLegacyAcmVersion[];
-extern const char kExperimentalAcmVersion[];
-
 class AudioCodingModule: public Module {
  protected:
   AudioCodingModule() {}
 
  public:
+  struct Config {
+    Config()
+        : id(0),
+          neteq_config(),
+          clock(Clock::GetRealTimeClock()) {}
+
+    int id;
+    NetEq::Config neteq_config;
+    Clock* clock;
+  };
+
   ///////////////////////////////////////////////////////////////////////////
   // Creation and destruction of a ACM.
   //
@@ -178,11 +186,6 @@
   //
   static bool IsCodecValid(const CodecInst& codec);
 
-  // Returns the version of ACM. This facilitates distinguishing instances of
-  // ACM1 from ACM2 while testing. This API will be removed when ACM1 is
-  // completely removed.
-  virtual const char* Version() const = 0;
-
   ///////////////////////////////////////////////////////////////////////////
   //   Sender
   //
@@ -936,20 +939,6 @@
       AudioDecodingCallStats* call_stats) const = 0;
 };
 
-struct AudioCodingModuleFactory {
-  AudioCodingModuleFactory() {}
-  virtual ~AudioCodingModuleFactory() {}
-
-  virtual AudioCodingModule* Create(int id) const;
-};
-
-struct NewAudioCodingModuleFactory : AudioCodingModuleFactory {
-  NewAudioCodingModuleFactory() {}
-  virtual ~NewAudioCodingModuleFactory() {}
-
-  virtual AudioCodingModule* Create(int id) const;
-};
-
 }  // namespace webrtc
 
 #endif  // WEBRTC_MODULES_AUDIO_CODING_MAIN_INTERFACE_AUDIO_CODING_MODULE_H_
diff --git a/modules/audio_coding/main/source/audio_coding_module_impl.cc b/modules/audio_coding/main/source/audio_coding_module_impl.cc
index b8060ce..5bdbd01 100644
--- a/modules/audio_coding/main/source/audio_coding_module_impl.cc
+++ b/modules/audio_coding/main/source/audio_coding_module_impl.cc
@@ -2250,18 +2250,10 @@
   int decoded_seq_num;
   uint32_t decoded_timestamp;
   bool update_nack =
-      neteq_.DecodedRtpInfo(&decoded_seq_num, &decoded_timestamp) &&
-      nack_enabled_;  // Update NACK only if it is enabled.
-  audio_frame->num_channels_ = audio_frame_.num_channels_;
-  audio_frame->vad_activity_ = audio_frame_.vad_activity_;
-  audio_frame->speech_type_ = audio_frame_.speech_type_;
+      neteq_.DecodedRtpInfo(&decoded_seq_num, &decoded_timestamp);
 
-  stereo_mode = (audio_frame_.num_channels_ > 1);
-
-  // For stereo playout:
   // Master and Slave samples are interleaved starting with Master.
-  const uint16_t receive_freq =
-      static_cast<uint16_t>(audio_frame_.sample_rate_hz_);
+  uint16_t receive_freq;
   bool tone_detected = false;
   int16_t last_detected_tone;
   int16_t tone;
@@ -2270,10 +2262,17 @@
   {
     CriticalSectionScoped lock(acm_crit_sect_);
 
+    audio_frame->num_channels_ = audio_frame_.num_channels_;
+    audio_frame->vad_activity_ = audio_frame_.vad_activity_;
+    audio_frame->speech_type_ = audio_frame_.speech_type_;
+
+    stereo_mode = (audio_frame_.num_channels_ > 1);
+
+    receive_freq = static_cast<uint16_t>(audio_frame_.sample_rate_hz_);
     // Update call statistics.
     call_stats_.DecodedByNetEq(audio_frame->speech_type_);
 
-    if (update_nack) {
+    if (nack_enabled_ && update_nack) {
       assert(nack_.get());
       nack_->UpdateLastDecodedPacket(decoded_seq_num, decoded_timestamp);
     }
@@ -3029,10 +3028,6 @@
   nack_enabled_ = false;
 }
 
-const char* AudioCodingModuleImpl::Version() const {
-  return kLegacyAcmVersion;
-}
-
 void AudioCodingModuleImpl::GetDecodingCallStatistics(
       AudioDecodingCallStats* call_stats) const {
   CriticalSectionScoped lock(acm_crit_sect_);
diff --git a/modules/audio_coding/main/source/audio_coding_module_impl.h b/modules/audio_coding/main/source/audio_coding_module_impl.h
index f0b22f1..b99e5ac 100644
--- a/modules/audio_coding/main/source/audio_coding_module_impl.h
+++ b/modules/audio_coding/main/source/audio_coding_module_impl.h
@@ -44,8 +44,6 @@
   AudioCodingModuleImpl(const int32_t id, Clock* clock);
   ~AudioCodingModuleImpl();
 
-  virtual const char* Version() const;
-
   // Change the unique identifier of this object.
   virtual int32_t ChangeUniqueId(const int32_t id);
 
diff --git a/modules/audio_coding/main/test/opus_test.cc b/modules/audio_coding/main/test/opus_test.cc
index 230e9f1..261eb61 100644
--- a/modules/audio_coding/main/test/opus_test.cc
+++ b/modules/audio_coding/main/test/opus_test.cc
@@ -211,8 +211,9 @@
                    int frame_length, int percent_loss) {
   AudioFrame audio_frame;
   int32_t out_freq_hz_b = out_file_.SamplingFrequency();
-  int16_t audio[480 * 12 * 2];  // Can hold 120 ms stereo audio.
-  int16_t out_audio[480 * 12 * 2];  // Can hold 120 ms stereo audio.
+  const int kBufferSizeSamples = 480 * 12 * 2;  // Can hold 120 ms stereo audio.
+  int16_t audio[kBufferSizeSamples];
+  int16_t out_audio[kBufferSizeSamples];
   int16_t audio_type;
   int written_samples = 0;
   int read_samples = 0;
@@ -257,6 +258,7 @@
                                         audio_frame.sample_rate_hz_,
                                         48000,
                                         channels,
+                                        kBufferSizeSamples - written_samples,
                                         &audio[written_samples]));
     written_samples += 480 * channels;
 
diff --git a/modules/audio_coding/neteq4/background_noise.h b/modules/audio_coding/neteq4/background_noise.h
index ac5446b..141d71d 100644
--- a/modules/audio_coding/neteq4/background_noise.h
+++ b/modules/audio_coding/neteq4/background_noise.h
@@ -126,7 +126,7 @@
                       int32_t residual_energy);
 
   size_t num_channels_;
-  scoped_array<ChannelParameters> channel_parameters_;
+  scoped_ptr<ChannelParameters[]> channel_parameters_;
   bool initialized_;
   NetEqBackgroundNoiseMode mode_;
 
diff --git a/modules/audio_coding/neteq4/decision_logic_unittest.cc b/modules/audio_coding/neteq4/decision_logic_unittest.cc
index d596c05..60a4b62 100644
--- a/modules/audio_coding/neteq4/decision_logic_unittest.cc
+++ b/modules/audio_coding/neteq4/decision_logic_unittest.cc
@@ -24,7 +24,7 @@
   int fs_hz = 8000;
   int output_size_samples = fs_hz / 100;  // Samples per 10 ms.
   DecoderDatabase decoder_database;
-  PacketBuffer packet_buffer(10, 1000);
+  PacketBuffer packet_buffer(10);
   DelayPeakDetector delay_peak_detector;
   DelayManager delay_manager(240, &delay_peak_detector);
   BufferLevelFilter buffer_level_filter;
diff --git a/modules/audio_coding/neteq4/expand.h b/modules/audio_coding/neteq4/expand.h
index aec1cd9..6962aa0 100644
--- a/modules/audio_coding/neteq4/expand.h
+++ b/modules/audio_coding/neteq4/expand.h
@@ -167,7 +167,7 @@
   int lag_index_direction_;
   int current_lag_index_;
   bool stop_muting_;
-  scoped_array<ChannelParameters> channel_parameters_;
+  scoped_ptr<ChannelParameters[]> channel_parameters_;
 
   DISALLOW_COPY_AND_ASSIGN(Expand);
 };
diff --git a/modules/audio_coding/neteq4/interface/neteq.h b/modules/audio_coding/neteq4/interface/neteq.h
index 8defe4f..64a23e8 100644
--- a/modules/audio_coding/neteq4/interface/neteq.h
+++ b/modules/audio_coding/neteq4/interface/neteq.h
@@ -70,10 +70,15 @@
   struct Config {
     Config()
         : sample_rate_hz(16000),
-          enable_audio_classifier(false) {}
+          enable_audio_classifier(false),
+          max_packets_in_buffer(50),
+          // |max_delay_ms| has the same effect as calling SetMaximumDelay().
+          max_delay_ms(2000) {}
 
     int sample_rate_hz;  // Initial vale. Will change with input data.
     bool enable_audio_classifier;
+    int max_packets_in_buffer;
+    int max_delay_ms;
   };
 
   enum ReturnCodes {
@@ -107,13 +112,9 @@
     kFrameSplitError,
     kRedundancySplitError,
     kPacketBufferCorruption,
-    kOversizePacket,
     kSyncPacketNotAccepted
   };
 
-  static const int kMaxNumPacketsInBuffer = 50;  // TODO(hlundin): Remove.
-  static const int kMaxBytesInBuffer = 113280;  // TODO(hlundin): Remove.
-
   // Creates a new NetEq object, with parameters set in |config|. The |config|
   // object will only have to be valid for the duration of the call to this
   // method.
@@ -179,7 +180,8 @@
 
   // Sets a maximum delay in milliseconds for packet buffer. The latency will
   // not exceed the given value, even required delay (given the channel
-  // conditions) is higher.
+  // conditions) is higher. Calling this method has the same effect as setting
+  // the |max_delay_ms| value in the NetEq::Config struct.
   virtual bool SetMaximumDelay(int delay_ms) = 0;
 
   // The smallest latency required. This is computed bases on inter-arrival
@@ -249,9 +251,7 @@
 
   // Current usage of packet-buffer and it's limits.
   virtual void PacketBufferStatistics(int* current_num_packets,
-                                      int* max_num_packets,
-                                      int* current_memory_size_bytes,
-                                      int* max_memory_size_bytes) const = 0;
+                                      int* max_num_packets) const = 0;
 
   // Get sequence number and timestamp of the latest RTP.
   // This method is to facilitate NACK.
diff --git a/modules/audio_coding/neteq4/mock/mock_packet_buffer.h b/modules/audio_coding/neteq4/mock/mock_packet_buffer.h
index 37fa90d..b1d8ef9 100644
--- a/modules/audio_coding/neteq4/mock/mock_packet_buffer.h
+++ b/modules/audio_coding/neteq4/mock/mock_packet_buffer.h
@@ -19,8 +19,8 @@
 
 class MockPacketBuffer : public PacketBuffer {
  public:
-  MockPacketBuffer(size_t max_number_of_packets, size_t max_payload_memory)
-      : PacketBuffer(max_number_of_packets, max_payload_memory) {}
+  MockPacketBuffer(size_t max_number_of_packets)
+      : PacketBuffer(max_number_of_packets) {}
   virtual ~MockPacketBuffer() { Die(); }
   MOCK_METHOD0(Die, void());
   MOCK_METHOD0(Flush,
diff --git a/modules/audio_coding/neteq4/neteq.cc b/modules/audio_coding/neteq4/neteq.cc
index bfcd86a..48dacea 100644
--- a/modules/audio_coding/neteq4/neteq.cc
+++ b/modules/audio_coding/neteq4/neteq.cc
@@ -32,12 +32,12 @@
   BufferLevelFilter* buffer_level_filter = new BufferLevelFilter;
   DecoderDatabase* decoder_database = new DecoderDatabase;
   DelayPeakDetector* delay_peak_detector = new DelayPeakDetector;
-  DelayManager* delay_manager = new DelayManager(kMaxNumPacketsInBuffer,
-                                                 delay_peak_detector);
+  DelayManager* delay_manager =
+      new DelayManager(config.max_packets_in_buffer, delay_peak_detector);
+  delay_manager->SetMaximumDelay(config.max_delay_ms);
   DtmfBuffer* dtmf_buffer = new DtmfBuffer(config.sample_rate_hz);
   DtmfToneGenerator* dtmf_tone_generator = new DtmfToneGenerator;
-  PacketBuffer* packet_buffer = new PacketBuffer(kMaxNumPacketsInBuffer,
-                                                 kMaxBytesInBuffer);
+  PacketBuffer* packet_buffer = new PacketBuffer(config.max_packets_in_buffer);
   PayloadSplitter* payload_splitter = new PayloadSplitter;
   TimestampScaler* timestamp_scaler = new TimestampScaler(*decoder_database);
   AccelerateFactory* accelerate_factory = new AccelerateFactory;
diff --git a/modules/audio_coding/neteq4/neteq.gypi b/modules/audio_coding/neteq4/neteq.gypi
index b041694..bd3b251 100644
--- a/modules/audio_coding/neteq4/neteq.gypi
+++ b/modules/audio_coding/neteq4/neteq.gypi
@@ -168,9 +168,6 @@
           'target_name': 'neteq_unittest_tools',
           'type': 'static_library',
           'dependencies': [
-            '<(DEPTH)/testing/gmock.gyp:gmock',
-            '<(DEPTH)/testing/gtest.gyp:gtest',
-            'PCM16B',  # Needed by neteq_performance_test.
             'rtp_rtcp',
           ],
           'direct_dependent_settings': {
@@ -186,8 +183,6 @@
             'tools/audio_loop.h',
             'tools/input_audio_file.cc',
             'tools/input_audio_file.h',
-            'tools/neteq_performance_test.cc',
-            'tools/neteq_performance_test.h',
             'tools/packet.cc',
             'tools/packet.h',
             'tools/packet_source.h',
@@ -195,8 +190,6 @@
             'tools/rtp_file_source.h',
             'tools/rtp_generator.cc',
             'tools/rtp_generator.h',
-            'tools/neteq_quality_test.cc',
-            'tools/neteq_quality_test.h',
           ],
         }, # neteq_unittest_tools
       ], # targets
diff --git a/modules/audio_coding/neteq4/neteq_impl.cc b/modules/audio_coding/neteq4/neteq_impl.cc
index dcf48ad..38a5456 100644
--- a/modules/audio_coding/neteq4/neteq_impl.cc
+++ b/modules/audio_coding/neteq4/neteq_impl.cc
@@ -77,7 +77,6 @@
       accelerate_factory_(accelerate_factory),
       preemptive_expand_factory_(preemptive_expand_factory),
       last_mode_(kModeNormal),
-      mute_factor_array_(NULL),
       decoded_buffer_length_(kMaxFrameSize),
       decoded_buffer_(new int16_t[decoded_buffer_length_]),
       playout_timestamp_(0),
@@ -365,12 +364,9 @@
 }
 
 void NetEqImpl::PacketBufferStatistics(int* current_num_packets,
-                                       int* max_num_packets,
-                                       int* current_memory_size_bytes,
-                                       int* max_memory_size_bytes) const {
+                                       int* max_num_packets) const {
   CriticalSectionScoped lock(crit_sect_.get());
-  packet_buffer_->BufferStat(current_num_packets, max_num_packets,
-                             current_memory_size_bytes, max_memory_size_bytes);
+  packet_buffer_->BufferStat(current_num_packets, max_num_packets);
 }
 
 int NetEqImpl::DecodedRtpInfo(int* sequence_number, uint32_t* timestamp) const {
@@ -611,9 +607,6 @@
     new_codec_ = true;
     update_sample_rate_and_channels = true;
     LOG_F(LS_WARNING) << "Packet buffer flushed";
-  } else if (ret == PacketBuffer::kOversizePacket) {
-    LOG_F(LS_WARNING) << "Packet larger than packet buffer";
-    return kOversizePacket;
   } else if (ret != PacketBuffer::kOK) {
     LOG_FERR1(LS_WARNING, InsertPacketList, packet_list.size());
     PacketBuffer::DeleteAllPackets(&packet_list);
diff --git a/modules/audio_coding/neteq4/neteq_impl.h b/modules/audio_coding/neteq4/neteq_impl.h
index 09a0049..5801d97 100644
--- a/modules/audio_coding/neteq4/neteq_impl.h
+++ b/modules/audio_coding/neteq4/neteq_impl.h
@@ -186,9 +186,7 @@
   virtual void FlushBuffers();
 
   virtual void PacketBufferStatistics(int* current_num_packets,
-                                      int* max_num_packets,
-                                      int* current_memory_size_bytes,
-                                      int* max_memory_size_bytes) const;
+                                      int* max_num_packets) const;
 
   // Get sequence number and timestamp of the latest RTP.
   // This method is to facilitate NACK.
@@ -371,9 +369,9 @@
   int output_size_samples_ GUARDED_BY(crit_sect_);
   int decoder_frame_length_ GUARDED_BY(crit_sect_);
   Modes last_mode_ GUARDED_BY(crit_sect_);
-  scoped_array<int16_t> mute_factor_array_ GUARDED_BY(crit_sect_);
+  scoped_ptr<int16_t[]> mute_factor_array_ GUARDED_BY(crit_sect_);
   size_t decoded_buffer_length_ GUARDED_BY(crit_sect_);
-  scoped_array<int16_t> decoded_buffer_ GUARDED_BY(crit_sect_);
+  scoped_ptr<int16_t[]> decoded_buffer_ GUARDED_BY(crit_sect_);
   uint32_t playout_timestamp_ GUARDED_BY(crit_sect_);
   bool new_codec_ GUARDED_BY(crit_sect_);
   uint32_t timestamp_ GUARDED_BY(crit_sect_);
diff --git a/modules/audio_coding/neteq4/neteq_impl_unittest.cc b/modules/audio_coding/neteq4/neteq_impl_unittest.cc
index 15a1c8b..aedd8d5 100644
--- a/modules/audio_coding/neteq4/neteq_impl_unittest.cc
+++ b/modules/audio_coding/neteq4/neteq_impl_unittest.cc
@@ -102,13 +102,13 @@
       delay_peak_detector_ = new DelayPeakDetector;
     }
     if (use_mock_delay_manager_) {
-      mock_delay_manager_ = new MockDelayManager(NetEq::kMaxNumPacketsInBuffer,
+      mock_delay_manager_ = new MockDelayManager(config_.max_packets_in_buffer,
                                                  delay_peak_detector_);
       EXPECT_CALL(*mock_delay_manager_, set_streaming_mode(false)).Times(1);
       delay_manager_ = mock_delay_manager_;
     } else {
       delay_manager_ =
-          new DelayManager(NetEq::kMaxNumPacketsInBuffer, delay_peak_detector_);
+          new DelayManager(config_.max_packets_in_buffer, delay_peak_detector_);
     }
     if (use_mock_dtmf_buffer_) {
       mock_dtmf_buffer_ = new MockDtmfBuffer(config_.sample_rate_hz);
@@ -123,12 +123,10 @@
       dtmf_tone_generator_ = new DtmfToneGenerator;
     }
     if (use_mock_packet_buffer_) {
-      mock_packet_buffer_ = new MockPacketBuffer(NetEq::kMaxNumPacketsInBuffer,
-                                                 NetEq::kMaxBytesInBuffer);
+      mock_packet_buffer_ = new MockPacketBuffer(config_.max_packets_in_buffer);
       packet_buffer_ = mock_packet_buffer_;
     } else {
-      packet_buffer_ = new PacketBuffer(NetEq::kMaxNumPacketsInBuffer,
-                                        NetEq::kMaxBytesInBuffer);
+      packet_buffer_ = new PacketBuffer(config_.max_packets_in_buffer);
     }
     if (use_mock_payload_splitter_) {
       mock_payload_splitter_ = new MockPayloadSplitter;
@@ -381,7 +379,7 @@
             neteq_->RegisterPayloadType(kDecoderPCM16B, kPayloadType));
 
   // Insert packets. The buffer should not flush.
-  for (int i = 1; i <= NetEq::kMaxNumPacketsInBuffer; ++i) {
+  for (int i = 1; i <= config_.max_packets_in_buffer; ++i) {
     EXPECT_EQ(NetEq::kOK,
               neteq_->InsertPacket(
                   rtp_header, payload, kPayloadLengthBytes, kReceiveTime));
diff --git a/modules/audio_coding/neteq4/neteq_tests.gypi b/modules/audio_coding/neteq4/neteq_tests.gypi
index 9751a1c..d19c6b2 100644
--- a/modules/audio_coding/neteq4/neteq_tests.gypi
+++ b/modules/audio_coding/neteq4/neteq_tests.gypi
@@ -154,12 +154,29 @@
     },
 
     {
+      'target_name': 'neteq_test_support',
+      'type': 'static_library',
+      'dependencies': [
+        'NetEq4',
+        'PCM16B',
+        'neteq_unittest_tools',
+        '<(DEPTH)/testing/gtest.gyp:gtest',
+        '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
+      ],
+      'sources': [
+        'tools/neteq_performance_test.cc',
+        'tools/neteq_performance_test.h',
+        'tools/neteq_quality_test.cc',
+        'tools/neteq_quality_test.h',
+      ],
+    }, # neteq_test_support
+
+    {
       'target_name': 'neteq4_speed_test',
       'type': 'executable',
       'dependencies': [
         'NetEq4',
-        'neteq_unittest_tools',
-        'PCM16B',
+        'neteq_test_support',
         '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
         '<(webrtc_root)/test/test.gyp:test_support_main',
       ],
@@ -173,7 +190,7 @@
       'type': 'executable',
       'dependencies': [
         'NetEq4',
-        'neteq_unittest_tools',
+        'neteq_test_support',
         'webrtc_opus',
         '<(DEPTH)/testing/gtest.gyp:gtest',
         '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
diff --git a/modules/audio_coding/neteq4/neteq_unittest.cc b/modules/audio_coding/neteq4/neteq_unittest.cc
index 90dc717..93f2567 100644
--- a/modules/audio_coding/neteq4/neteq_unittest.cc
+++ b/modules/audio_coding/neteq4/neteq_unittest.cc
@@ -945,18 +945,6 @@
   EXPECT_EQ(NetEq::kUnknownRtpPayloadType, neteq_->LastError());
 }
 
-TEST_F(NetEqDecodingTest, DISABLED_ON_ANDROID(OversizePacket)) {
-  // Payload size is greater than packet buffer size
-  const int kPayloadBytes = NetEq::kMaxBytesInBuffer + 1;
-  uint8_t payload[kPayloadBytes] = {0};
-  WebRtcRTPHeader rtp_info;
-  PopulateRtpInfo(0, 0, &rtp_info);
-  rtp_info.header.payloadType = 103;  // iSAC, no packet splitting.
-  EXPECT_EQ(NetEq::kFail,
-            neteq_->InsertPacket(rtp_info, payload, kPayloadBytes, 0));
-  EXPECT_EQ(NetEq::kOversizePacket, neteq_->LastError());
-}
-
 TEST_F(NetEqDecodingTest, DISABLED_ON_ANDROID(DecoderError)) {
   const int kPayloadBytes = 100;
   uint8_t payload[kPayloadBytes] = {0};
diff --git a/modules/audio_coding/neteq4/packet_buffer.cc b/modules/audio_coding/neteq4/packet_buffer.cc
index 0cc0854..bcd0e7b 100644
--- a/modules/audio_coding/neteq4/packet_buffer.cc
+++ b/modules/audio_coding/neteq4/packet_buffer.cc
@@ -36,14 +36,8 @@
   const Packet* new_packet_;
 };
 
-// Constructor. The arguments define the maximum number of slots and maximum
-// payload memory (excluding RTP headers) that the buffer will accept.
-PacketBuffer::PacketBuffer(size_t max_number_of_packets,
-                           size_t max_memory_bytes)
-    : max_number_of_packets_(max_number_of_packets),
-      max_memory_bytes_(max_memory_bytes),
-      current_memory_bytes_(0) {
-}
+PacketBuffer::PacketBuffer(size_t max_number_of_packets)
+    : max_number_of_packets_(max_number_of_packets) {}
 
 // Destructor. All packets in the buffer will be destroyed.
 PacketBuffer::~PacketBuffer() {
@@ -53,7 +47,6 @@
 // Flush the buffer. All packets in the buffer will be destroyed.
 void PacketBuffer::Flush() {
   DeleteAllPackets(&buffer_);
-  current_memory_bytes_ = 0;
 }
 
 int PacketBuffer::InsertPacket(Packet* packet) {
@@ -66,22 +59,10 @@
 
   int return_val = kOK;
 
-  if ((buffer_.size() >= max_number_of_packets_) ||
-      (current_memory_bytes_ + packet->payload_length
-          > static_cast<int>(max_memory_bytes_))) {
+  if (buffer_.size() >= max_number_of_packets_) {
     // Buffer is full. Flush it.
     Flush();
     return_val = kFlushed;
-    if ((buffer_.size() >= max_number_of_packets_) ||
-        (current_memory_bytes_ + packet->payload_length
-            > static_cast<int>(max_memory_bytes_))) {
-      // Buffer is still too small for the packet. Either the buffer limits are
-      // really small, or the packet is really large. Delete the packet and
-      // return an error.
-      delete [] packet->payload;
-      delete packet;
-      return kOversizePacket;
-    }
   }
 
   // Get an iterator pointing to the place in the buffer where the new packet
@@ -91,7 +72,6 @@
       buffer_.rbegin(), buffer_.rend(),
       NewTimestampIsLarger(packet));
   buffer_.insert(rit.base(), packet);  // Insert the packet at that position.
-  current_memory_bytes_ += packet->payload_length;
 
   return return_val;
 }
@@ -183,8 +163,6 @@
   // Assert that the packet sanity checks in InsertPacket method works.
   assert(packet && packet->payload);
   buffer_.pop_front();
-  current_memory_bytes_ -= packet->payload_length;
-  assert(current_memory_bytes_ >= 0);  // Assert bookkeeping is correct.
   // Discard other packets with the same timestamp. These are duplicates or
   // redundant payloads that should not be used.
   if (discard_count) {
@@ -206,11 +184,9 @@
   if (Empty()) {
     return kBufferEmpty;
   }
-  Packet* temp_packet = buffer_.front();
   // Assert that the packet sanity checks in InsertPacket method works.
-  assert(temp_packet && temp_packet->payload);
-  current_memory_bytes_ -= temp_packet->payload_length;
-  assert(current_memory_bytes_ >= 0);  // Assert bookkeeping is correct.
+  assert(buffer_.front());
+  assert(buffer_.front()->payload);
   DeleteFirstPacket(&buffer_);
   return kOK;
 }
@@ -280,14 +256,9 @@
   }
 }
 
-void PacketBuffer::BufferStat(int* num_packets,
-                              int* max_num_packets,
-                              int* current_memory_bytes,
-                              int* max_memory_bytes) const {
+void PacketBuffer::BufferStat(int* num_packets, int* max_num_packets) const {
   *num_packets = static_cast<int>(buffer_.size());
   *max_num_packets = static_cast<int>(max_number_of_packets_);
-  *current_memory_bytes = current_memory_bytes_;
-  *max_memory_bytes = static_cast<int>(max_memory_bytes_);
 }
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/neteq4/packet_buffer.h b/modules/audio_coding/neteq4/packet_buffer.h
index e964c28..3d22ad0 100644
--- a/modules/audio_coding/neteq4/packet_buffer.h
+++ b/modules/audio_coding/neteq4/packet_buffer.h
@@ -29,14 +29,12 @@
     kNotFound,
     kBufferEmpty,
     kInvalidPacket,
-    kInvalidPointer,
-    kOversizePacket
+    kInvalidPointer
   };
 
   // Constructor creates a buffer which can hold a maximum of
-  // |max_number_of_packets| packets and |max_payload_memory| bytes of payload,
-  // excluding RTP headers.
-  PacketBuffer(size_t max_number_of_packets, size_t max_payload_memory);
+  // |max_number_of_packets| packets.
+  PacketBuffer(size_t max_number_of_packets);
 
   // Deletes all packets in the buffer before destroying the buffer.
   virtual ~PacketBuffer();
@@ -116,12 +114,7 @@
   // The default value for |inc| is 1.
   virtual void IncrementWaitingTimes(int inc = 1);
 
-  virtual void BufferStat(int* num_packets,
-                          int* max_num_packets,
-                          int* current_memory_bytes,
-                          int* max_memory_bytes) const;
-
-  virtual int current_memory_bytes() const { return current_memory_bytes_; }
+  virtual void BufferStat(int* num_packets, int* max_num_packets) const;
 
   // Static method that properly deletes the first packet, and its payload
   // array, in |packet_list|. Returns false if |packet_list| already was empty,
@@ -134,8 +127,6 @@
 
  private:
   size_t max_number_of_packets_;
-  size_t max_memory_bytes_;
-  int current_memory_bytes_;
   PacketList buffer_;
   DISALLOW_COPY_AND_ASSIGN(PacketBuffer);
 };
diff --git a/modules/audio_coding/neteq4/packet_buffer_unittest.cc b/modules/audio_coding/neteq4/packet_buffer_unittest.cc
index c8109dc..387ca14 100644
--- a/modules/audio_coding/neteq4/packet_buffer_unittest.cc
+++ b/modules/audio_coding/neteq4/packet_buffer_unittest.cc
@@ -70,13 +70,13 @@
 // Start of test definitions.
 
 TEST(PacketBuffer, CreateAndDestroy) {
-  PacketBuffer* buffer = new PacketBuffer(10, 1000);  // 10 packets, 1000 bytes.
+  PacketBuffer* buffer = new PacketBuffer(10);  // 10 packets.
   EXPECT_TRUE(buffer->Empty());
   delete buffer;
 }
 
 TEST(PacketBuffer, InsertPacket) {
-  PacketBuffer buffer(10, 1000);  // 10 packets, 1000 bytes.
+  PacketBuffer buffer(10);  // 10 packets.
   PacketGenerator gen(17u, 4711u, 0, 10);
 
   const int payload_len = 100;
@@ -88,7 +88,6 @@
   EXPECT_EQ(4711u, next_ts);
   EXPECT_FALSE(buffer.Empty());
   EXPECT_EQ(1, buffer.NumPacketsInBuffer());
-  EXPECT_EQ(payload_len, buffer.current_memory_bytes());
   const RTPHeader* hdr = buffer.NextRtpHeader();
   EXPECT_EQ(&(packet->header), hdr);  // Compare pointer addresses.
 
@@ -98,7 +97,7 @@
 
 // Test to flush buffer.
 TEST(PacketBuffer, FlushBuffer) {
-  PacketBuffer buffer(10, 1000);  // 10 packets, 1000 bytes.
+  PacketBuffer buffer(10);  // 10 packets.
   PacketGenerator gen(0, 0, 0, 10);
   const int payload_len = 10;
 
@@ -109,18 +108,16 @@
   }
   EXPECT_EQ(10, buffer.NumPacketsInBuffer());
   EXPECT_FALSE(buffer.Empty());
-  EXPECT_EQ(10 * payload_len, buffer.current_memory_bytes());
 
   buffer.Flush();
   // Buffer should delete the payloads itself.
   EXPECT_EQ(0, buffer.NumPacketsInBuffer());
   EXPECT_TRUE(buffer.Empty());
-  EXPECT_EQ(0, buffer.current_memory_bytes());
 }
 
 // Test to fill the buffer over the limits, and verify that it flushes.
 TEST(PacketBuffer, OverfillBuffer) {
-  PacketBuffer buffer(10, 1000);  // 10 packets, 1000 bytes.
+  PacketBuffer buffer(10);  // 10 packets.
   PacketGenerator gen(0, 0, 0, 10);
 
   // Insert 10 small packets; should be ok.
@@ -131,7 +128,6 @@
     EXPECT_EQ(PacketBuffer::kOK, buffer.InsertPacket(packet));
   }
   EXPECT_EQ(10, buffer.NumPacketsInBuffer());
-  EXPECT_EQ(10 * payload_len, buffer.current_memory_bytes());
   uint32_t next_ts;
   EXPECT_EQ(PacketBuffer::kOK, buffer.NextTimestamp(&next_ts));
   EXPECT_EQ(0u, next_ts);  // Expect first inserted packet to be first in line.
@@ -140,30 +136,17 @@
   Packet* packet = gen.NextPacket(payload_len);
   EXPECT_EQ(PacketBuffer::kFlushed, buffer.InsertPacket(packet));
   EXPECT_EQ(1, buffer.NumPacketsInBuffer());
-  EXPECT_EQ(payload_len, buffer.current_memory_bytes());
   EXPECT_EQ(PacketBuffer::kOK, buffer.NextTimestamp(&next_ts));
   // Expect last inserted packet to be first in line.
   EXPECT_EQ(packet->header.timestamp, next_ts);
 
-  // Insert 2 large packets; expect to flush when inserting the second one.
-  const int large_payload_len = 500;
-  packet = gen.NextPacket(large_payload_len);
-  EXPECT_EQ(PacketBuffer::kOK, buffer.InsertPacket(packet));
-  EXPECT_EQ(2, buffer.NumPacketsInBuffer());
-  EXPECT_EQ(payload_len + large_payload_len, buffer.current_memory_bytes());
-
-  packet = gen.NextPacket(large_payload_len);
-  EXPECT_EQ(PacketBuffer::kFlushed, buffer.InsertPacket(packet));
-  EXPECT_EQ(1, buffer.NumPacketsInBuffer());
-  EXPECT_EQ(large_payload_len, buffer.current_memory_bytes());
-
-  // Flush buffer to delete remaining packets.
+  // Flush buffer to delete all packets.
   buffer.Flush();
 }
 
 // Test inserting a list of packets.
 TEST(PacketBuffer, InsertPacketList) {
-  PacketBuffer buffer(10, 1000);  // 10 packets, 1000 bytes.
+  PacketBuffer buffer(10);  // 10 packets.
   PacketGenerator gen(0, 0, 0, 10);
   PacketList list;
   const int payload_len = 10;
@@ -187,7 +170,6 @@
                                                        &current_cng_pt));
   EXPECT_TRUE(list.empty());  // The PacketBuffer should have depleted the list.
   EXPECT_EQ(10, buffer.NumPacketsInBuffer());
-  EXPECT_EQ(10 * payload_len, buffer.current_memory_bytes());
   EXPECT_EQ(0, current_pt);  // Current payload type changed to 0.
   EXPECT_EQ(0xFF, current_cng_pt);  // CNG payload type not changed.
 
@@ -200,7 +182,7 @@
 // Expecting the buffer to flush.
 // TODO(hlundin): Remove this test when legacy operation is no longer needed.
 TEST(PacketBuffer, InsertPacketListChangePayloadType) {
-  PacketBuffer buffer(10, 1000);  // 10 packets, 1000 bytes.
+  PacketBuffer buffer(10);  // 10 packets.
   PacketGenerator gen(0, 0, 0, 10);
   PacketList list;
   const int payload_len = 10;
@@ -229,7 +211,6 @@
                                                             &current_cng_pt));
   EXPECT_TRUE(list.empty());  // The PacketBuffer should have depleted the list.
   EXPECT_EQ(1, buffer.NumPacketsInBuffer());  // Only the last packet.
-  EXPECT_EQ(1 * payload_len, buffer.current_memory_bytes());
   EXPECT_EQ(1, current_pt);  // Current payload type changed to 0.
   EXPECT_EQ(0xFF, current_cng_pt);  // CNG payload type not changed.
 
@@ -252,7 +233,7 @@
 // 8           0x0005      0x00000028    0x0000001E
 // 9           0x0006      0x00000032    0x00000028
 TEST(PacketBuffer, ExtractOrderRedundancy) {
-  PacketBuffer buffer(100, 1000);  // 100 packets, 1000 bytes.
+  PacketBuffer buffer(100);  // 100 packets.
   const uint32_t ts_increment = 10;  // Samples per packet.
   const uint16_t start_seq_no = 0xFFFF - 2;  // Wraps after 3 packets.
   const uint32_t start_ts = 0xFFFFFFFF -
@@ -321,7 +302,7 @@
 }
 
 TEST(PacketBuffer, DiscardPackets) {
-  PacketBuffer buffer(100, 1000);  // 100 packets, 1000 bytes.
+  PacketBuffer buffer(100);  // 100 packets.
   const uint16_t start_seq_no = 17;
   const uint32_t start_ts = 4711;
   const uint32_t ts_increment = 10;
@@ -335,7 +316,6 @@
     buffer.InsertPacket(packet);
   }
   EXPECT_EQ(10, buffer.NumPacketsInBuffer());
-  EXPECT_EQ(10 * payload_len, buffer.current_memory_bytes());
 
   // Discard them one by one and make sure that the right packets are at the
   // front of the buffer.
@@ -351,7 +331,7 @@
 }
 
 TEST(PacketBuffer, Reordering) {
-  PacketBuffer buffer(100, 1000);  // 100 packets, 1000 bytes.
+  PacketBuffer buffer(100);  // 100 packets.
   const uint16_t start_seq_no = 17;
   const uint32_t start_ts = 4711;
   const uint32_t ts_increment = 10;
@@ -384,7 +364,6 @@
                                                        &current_pt,
                                                        &current_cng_pt));
   EXPECT_EQ(10, buffer.NumPacketsInBuffer());
-  EXPECT_EQ(10 * payload_len, buffer.current_memory_bytes());
 
   // Extract them and make sure that come out in the right order.
   uint32_t current_ts = start_ts;
@@ -408,18 +387,8 @@
   int payload_len = 100;
   PacketGenerator gen(start_seq_no, start_ts, 0, ts_increment);
 
-  PacketBuffer* buffer = new PacketBuffer(0, 1000);  // 0 packets, 1000 bytes.
-  Packet* packet = gen.NextPacket(payload_len);
-  EXPECT_EQ(PacketBuffer::kOversizePacket, buffer->InsertPacket(packet));
-  delete buffer;
-
-  buffer = new PacketBuffer(100, 10);  // 100 packets, 10 bytes.
-  packet = gen.NextPacket(payload_len);
-  EXPECT_EQ(PacketBuffer::kOversizePacket, buffer->InsertPacket(packet));
-  delete buffer;
-
-  buffer = new PacketBuffer(100, 10000);  // 100 packets, 10000 bytes.
-  packet = NULL;
+  PacketBuffer* buffer = new PacketBuffer(100);  // 100 packets.
+  Packet* packet = NULL;
   EXPECT_EQ(PacketBuffer::kInvalidPacket, buffer->InsertPacket(packet));
   packet = gen.NextPacket(payload_len);
   delete [] packet->payload;
@@ -448,7 +417,7 @@
   // Insert packet list of three packets, where the second packet has an invalid
   // payload.  Expect first packet to be inserted, and the remaining two to be
   // discarded.
-  buffer = new PacketBuffer(100, 1000);  // 100 packets, 1000 bytes.
+  buffer = new PacketBuffer(100);  // 100 packets.
   PacketList list;
   list.push_back(gen.NextPacket(payload_len));  // Valid packet.
   packet = gen.NextPacket(payload_len);
diff --git a/modules/audio_coding/neteq4/time_stretch.cc b/modules/audio_coding/neteq4/time_stretch.cc
index 5b6b3ba..5b246c1 100644
--- a/modules/audio_coding/neteq4/time_stretch.cc
+++ b/modules/audio_coding/neteq4/time_stretch.cc
@@ -29,7 +29,7 @@
   int fs_mult_120 = fs_mult_ * 120;  // Corresponds to 15 ms.
 
   const int16_t* signal;
-  scoped_array<int16_t> signal_array;
+  scoped_ptr<int16_t[]> signal_array;
   size_t signal_len;
   if (num_channels_ == 1) {
     signal = input;
diff --git a/modules/audio_coding/neteq4/tools/audio_loop.h b/modules/audio_coding/neteq4/tools/audio_loop.h
index 038ca37..0499a75 100644
--- a/modules/audio_coding/neteq4/tools/audio_loop.h
+++ b/modules/audio_coding/neteq4/tools/audio_loop.h
@@ -27,8 +27,7 @@
   AudioLoop()
       : next_index_(0),
         loop_length_samples_(0),
-        block_length_samples_(0),
-        audio_array_(NULL) {
+        block_length_samples_(0) {
   }
 
   virtual ~AudioLoop() {}
@@ -50,7 +49,7 @@
   size_t next_index_;
   size_t loop_length_samples_;
   size_t block_length_samples_;
-  scoped_array<int16_t> audio_array_;
+  scoped_ptr<int16_t[]> audio_array_;
 
   DISALLOW_COPY_AND_ASSIGN(AudioLoop);
 };
diff --git a/modules/audio_coding_module.target.darwin-arm.mk b/modules/audio_coding_module.target.darwin-arm.mk
index 683b823..a35c1ef 100644
--- a/modules/audio_coding_module.target.darwin-arm.mk
+++ b/modules/audio_coding_module.target.darwin-arm.mk
@@ -24,31 +24,34 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_neteq.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.cc
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
 
 
 # Flags passed to both C and C++ files.
@@ -150,11 +153,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -271,11 +276,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/modules/acm2.target.darwin-x86_64.mk b/modules/audio_coding_module.target.darwin-arm64.mk
similarity index 94%
rename from modules/acm2.target.darwin-x86_64.mk
rename to modules/audio_coding_module.target.darwin-arm64.mk
index e2c8787..3cd1529 100644
--- a/modules/acm2.target.darwin-x86_64.mk
+++ b/modules/audio_coding_module.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
+LOCAL_MODULE := third_party_webrtc_modules_audio_coding_module_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -56,7 +56,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,13 +75,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -151,7 +146,6 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -176,7 +170,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -196,13 +189,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -272,7 +261,6 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -307,8 +295,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -323,8 +309,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -347,10 +331,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
+gyp_all_modules: third_party_webrtc_modules_audio_coding_module_gyp
 
 # Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
+.PHONY: audio_coding_module
+audio_coding_module: third_party_webrtc_modules_audio_coding_module_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/audio_coding_module.target.darwin-mips.mk b/modules/audio_coding_module.target.darwin-mips.mk
index 9efe46e..f1a9f71 100644
--- a/modules/audio_coding_module.target.darwin-mips.mk
+++ b/modules/audio_coding_module.target.darwin-mips.mk
@@ -24,31 +24,34 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_neteq.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.cc
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
 
 
 # Flags passed to both C and C++ files.
@@ -150,11 +153,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -271,11 +276,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/modules/audio_coding_module.target.darwin-x86.mk b/modules/audio_coding_module.target.darwin-x86.mk
index 9040f19..dc9432a 100644
--- a/modules/audio_coding_module.target.darwin-x86.mk
+++ b/modules/audio_coding_module.target.darwin-x86.mk
@@ -24,31 +24,34 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_neteq.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.cc
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
 
 
 # Flags passed to both C and C++ files.
@@ -148,11 +151,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -266,11 +271,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/modules/audio_coding_module.target.darwin-x86_64.mk b/modules/audio_coding_module.target.darwin-x86_64.mk
index 6b90bee..f60e2f4 100644
--- a/modules/audio_coding_module.target.darwin-x86_64.mk
+++ b/modules/audio_coding_module.target.darwin-x86_64.mk
@@ -24,31 +24,34 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_neteq.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.cc
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
 
 
 # Flags passed to both C and C++ files.
@@ -148,11 +151,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -266,11 +271,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/modules/audio_coding_module.target.linux-arm.mk b/modules/audio_coding_module.target.linux-arm.mk
index 683b823..a35c1ef 100644
--- a/modules/audio_coding_module.target.linux-arm.mk
+++ b/modules/audio_coding_module.target.linux-arm.mk
@@ -24,31 +24,34 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_neteq.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.cc
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
 
 
 # Flags passed to both C and C++ files.
@@ -150,11 +153,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -271,11 +276,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/modules/acm2.target.darwin-x86_64.mk b/modules/audio_coding_module.target.linux-arm64.mk
similarity index 94%
copy from modules/acm2.target.darwin-x86_64.mk
copy to modules/audio_coding_module.target.linux-arm64.mk
index e2c8787..3cd1529 100644
--- a/modules/acm2.target.darwin-x86_64.mk
+++ b/modules/audio_coding_module.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_acm2_gyp
+LOCAL_MODULE := third_party_webrtc_modules_audio_coding_module_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -56,7 +56,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,13 +75,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -151,7 +146,6 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -176,7 +170,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -196,13 +189,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -272,7 +261,6 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -307,8 +295,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -323,8 +309,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -347,10 +331,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_acm2_gyp
+gyp_all_modules: third_party_webrtc_modules_audio_coding_module_gyp
 
 # Alias gyp target name.
-.PHONY: acm2
-acm2: third_party_webrtc_modules_acm2_gyp
+.PHONY: audio_coding_module
+audio_coding_module: third_party_webrtc_modules_audio_coding_module_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/audio_coding_module.target.linux-mips.mk b/modules/audio_coding_module.target.linux-mips.mk
index 9efe46e..f1a9f71 100644
--- a/modules/audio_coding_module.target.linux-mips.mk
+++ b/modules/audio_coding_module.target.linux-mips.mk
@@ -24,31 +24,34 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_neteq.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.cc
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
 
 
 # Flags passed to both C and C++ files.
@@ -150,11 +153,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -271,11 +276,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/modules/audio_coding_module.target.linux-x86.mk b/modules/audio_coding_module.target.linux-x86.mk
index 9040f19..dc9432a 100644
--- a/modules/audio_coding_module.target.linux-x86.mk
+++ b/modules/audio_coding_module.target.linux-x86.mk
@@ -24,31 +24,34 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_neteq.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.cc
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
 
 
 # Flags passed to both C and C++ files.
@@ -148,11 +151,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -266,11 +271,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/modules/audio_coding_module.target.linux-x86_64.mk b/modules/audio_coding_module.target.linux-x86_64.mk
index 6b90bee..f60e2f4 100644
--- a/modules/audio_coding_module.target.linux-x86_64.mk
+++ b/modules/audio_coding_module.target.linux-x86_64.mk
@@ -24,31 +24,34 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_amrwb.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_celt.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_cng.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_codec_database.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_detection.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_dtmf_playout.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g722.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7221c.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g729.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_g7291.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_generic_codec.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_gsmfr.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_ilbc.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_isac.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_neteq.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_opus.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_speex.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcm16b.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcma.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_pcmu.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_red.cc \
-	third_party/webrtc/modules/audio_coding/main/source/acm_resampler.cc \
-	third_party/webrtc/modules/audio_coding/main/source/audio_coding_module_impl.cc
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_amrwb.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_celt.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_cng.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_codec_database.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_dtmf_playout.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g722.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7221c.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g729.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_g7291.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_gsmfr.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_ilbc.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_isac.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_opus.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_speex.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcm16b.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcma.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_pcmu.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_red.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_receiver.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/acm_resampler.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/call_statistics.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/initial_delay_manager.cc \
+	third_party/webrtc/modules/audio_coding/main/acm2/nack.cc
 
 
 # Flags passed to both C and C++ files.
@@ -148,11 +151,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -266,11 +271,13 @@
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/pcm16b/include \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/opus/src/celt \
+	$(LOCAL_PATH)/third_party/opus/src/src \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/audio_conference_mixer.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/audio_conference_mixer.target.darwin-arm64.mk
index c84869c..97ce017 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/audio_conference_mixer.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_audio_conference_mixer_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,20 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_conference_mixer/source/audio_frame_manipulator.cc \
+	third_party/webrtc/modules/audio_conference_mixer/source/level_indicator.cc \
+	third_party/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc \
+	third_party/webrtc/modules/audio_conference_mixer/source/time_scheduler.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +51,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +93,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +111,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_conference_mixer/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +131,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +150,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +192,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +211,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_conference_mixer/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +241,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +255,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +277,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_audio_conference_mixer_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: audio_conference_mixer
+audio_conference_mixer: third_party_webrtc_modules_audio_conference_mixer_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/audio_conference_mixer.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/audio_conference_mixer.target.linux-arm64.mk
index c84869c..97ce017 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/audio_conference_mixer.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_audio_conference_mixer_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,20 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_conference_mixer/source/audio_frame_manipulator.cc \
+	third_party/webrtc/modules/audio_conference_mixer/source/level_indicator.cc \
+	third_party/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc \
+	third_party/webrtc/modules/audio_conference_mixer/source/time_scheduler.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +51,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +93,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +111,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_conference_mixer/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +131,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +150,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +192,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +211,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_conference_mixer/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +241,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +255,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +277,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_audio_conference_mixer_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: audio_conference_mixer
+audio_conference_mixer: third_party_webrtc_modules_audio_conference_mixer_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/audio_device.target.darwin-arm64.mk
similarity index 69%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/audio_device.target.darwin-arm64.mk
index 3b05cd9..f9b3442 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/audio_device.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_audio_device_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,18 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_device/audio_device_buffer.cc \
+	third_party/webrtc/modules/audio_device/audio_device_generic.cc \
+	third_party/webrtc/modules/audio_device/audio_device_utility.cc \
+	third_party/webrtc/modules/audio_device/audio_device_impl.cc \
+	third_party/webrtc/modules/audio_device/dummy/audio_device_dummy.cc \
+	third_party/webrtc/modules/audio_device/dummy/audio_device_utility_dummy.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +44,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +53,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +64,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +95,7 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_DUMMY_AUDIO_BUILD' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +114,15 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/dummy \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/android \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +150,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +159,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +170,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +201,7 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_DUMMY_AUDIO_BUILD' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +221,15 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/dummy \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/android \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +257,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +271,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +293,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_audio_device_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: audio_device
+audio_device: third_party_webrtc_modules_audio_device_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/audio_device.target.linux-arm64.mk
similarity index 69%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/audio_device.target.linux-arm64.mk
index 3b05cd9..f9b3442 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/audio_device.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_audio_device_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,18 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_device/audio_device_buffer.cc \
+	third_party/webrtc/modules/audio_device/audio_device_generic.cc \
+	third_party/webrtc/modules/audio_device/audio_device_utility.cc \
+	third_party/webrtc/modules/audio_device/audio_device_impl.cc \
+	third_party/webrtc/modules/audio_device/dummy/audio_device_dummy.cc \
+	third_party/webrtc/modules/audio_device/dummy/audio_device_utility_dummy.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +44,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +53,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +64,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +95,7 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_DUMMY_AUDIO_BUILD' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +114,15 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/dummy \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/android \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +150,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +159,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +170,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +201,7 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_DUMMY_AUDIO_BUILD' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +221,15 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/dummy \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/android \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +257,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +271,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +293,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_audio_device_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: audio_device
+audio_device: third_party_webrtc_modules_audio_device_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/audio_device/android/fine_audio_buffer.h b/modules/audio_device/android/fine_audio_buffer.h
index 597b8aa..e577b72 100644
--- a/modules/audio_device/android/fine_audio_buffer.h
+++ b/modules/audio_device/android/fine_audio_buffer.h
@@ -56,7 +56,7 @@
   int bytes_per_10_ms_;
 
   // Storage for samples that are not yet asked for.
-  scoped_array<int8_t> cache_buffer_;
+  scoped_ptr<int8_t[]> cache_buffer_;
   int cached_buffer_start_;  // Location of first unread sample.
   int cached_bytes_;  // Number of bytes stored in cache.
 };
diff --git a/modules/audio_device/android/fine_audio_buffer_unittest.cc b/modules/audio_device/android/fine_audio_buffer_unittest.cc
index 69ba741..e1f03f8 100644
--- a/modules/audio_device/android/fine_audio_buffer_unittest.cc
+++ b/modules/audio_device/android/fine_audio_buffer_unittest.cc
@@ -80,7 +80,7 @@
   FineAudioBuffer fine_buffer(&audio_device_buffer, kFrameSizeBytes,
                               sample_rate);
 
-  scoped_array<int8_t> out_buffer;
+  scoped_ptr<int8_t[]> out_buffer;
   out_buffer.reset(
       new int8_t[fine_buffer.RequiredBufferSizeBytes()]);
   for (int i = 0; i < kNumberOfFrames; ++i) {
diff --git a/modules/audio_device/android/opensles_input.cc b/modules/audio_device/android/opensles_input.cc
index 6b600c9..f22d8bf 100644
--- a/modules/audio_device/android/opensles_input.cc
+++ b/modules/audio_device/android/opensles_input.cc
@@ -289,7 +289,7 @@
   fifo_.reset(new SingleRwFifo(num_fifo_buffers_needed_));
 
   // Allocate the memory area to be used.
-  rec_buf_.reset(new scoped_array<int8_t>[TotalBuffersUsed()]);
+  rec_buf_.reset(new scoped_ptr<int8_t[]>[TotalBuffersUsed()]);
   for (int i = 0; i < TotalBuffersUsed(); ++i) {
     rec_buf_[i].reset(new int8_t[buffer_size_bytes()]);
   }
diff --git a/modules/audio_device/android/opensles_input.h b/modules/audio_device/android/opensles_input.h
index 48e4fd2..d27d824 100644
--- a/modules/audio_device/android/opensles_input.h
+++ b/modules/audio_device/android/opensles_input.h
@@ -205,7 +205,7 @@
   // Audio buffers
   AudioDeviceBuffer* audio_buffer_;
   // Holds all allocated memory such that it is deallocated properly.
-  scoped_array<scoped_array<int8_t> > rec_buf_;
+  scoped_ptr<scoped_ptr<int8_t[]>[]> rec_buf_;
   // Index in |rec_buf_| pointing to the audio buffer that will be ready the
   // next time RecorderSimpleBufferQueueCallbackHandler is invoked.
   // Ready means buffer contains audio data from the device.
diff --git a/modules/audio_device/android/opensles_output.cc b/modules/audio_device/android/opensles_output.cc
index 6185b2a..377789b 100644
--- a/modules/audio_device/android/opensles_output.cc
+++ b/modules/audio_device/android/opensles_output.cc
@@ -340,7 +340,7 @@
   fifo_.reset(new SingleRwFifo(num_fifo_buffers_needed_));
 
   // Allocate the memory area to be used.
-  play_buf_.reset(new scoped_array<int8_t>[TotalBuffersUsed()]);
+  play_buf_.reset(new scoped_ptr<int8_t[]>[TotalBuffersUsed()]);
   int required_buffer_size = fine_buffer_->RequiredBufferSizeBytes();
   for (int i = 0; i < TotalBuffersUsed(); ++i) {
     play_buf_[i].reset(new int8_t[required_buffer_size]);
diff --git a/modules/audio_device/android/opensles_output.h b/modules/audio_device/android/opensles_output.h
index 464a7e4..aa9b5bf 100644
--- a/modules/audio_device/android/opensles_output.h
+++ b/modules/audio_device/android/opensles_output.h
@@ -223,7 +223,7 @@
   // Audio buffers
   AudioDeviceBuffer* audio_buffer_;
   scoped_ptr<FineAudioBuffer> fine_buffer_;
-  scoped_array<scoped_array<int8_t> > play_buf_;
+  scoped_ptr<scoped_ptr<int8_t[]>[]> play_buf_;
   // Index in |rec_buf_| pointing to the audio buffer that will be ready the
   // next time PlayerSimpleBufferQueueCallbackHandler is invoked.
   // Ready means buffer is ready to be played out to device.
diff --git a/modules/audio_device/android/single_rw_fifo.h b/modules/audio_device/android/single_rw_fifo.h
index a1fcfaa..092b1d5 100644
--- a/modules/audio_device/android/single_rw_fifo.h
+++ b/modules/audio_device/android/single_rw_fifo.h
@@ -35,7 +35,7 @@
   int capacity() const { return capacity_; }
 
  private:
-  scoped_array<int8_t*> queue_;
+  scoped_ptr<int8_t*[]> queue_;
   int capacity_;
 
   Atomic32 size_;
diff --git a/modules/audio_device/android/single_rw_fifo_unittest.cc b/modules/audio_device/android/single_rw_fifo_unittest.cc
index c722c27..9925baa 100644
--- a/modules/audio_device/android/single_rw_fifo_unittest.cc
+++ b/modules/audio_device/android/single_rw_fifo_unittest.cc
@@ -90,7 +90,7 @@
  protected:
   SingleRwFifo fifo_;
   // Memory area for proper de-allocation.
-  scoped_array<int8_t> buffer_[kCapacity];
+  scoped_ptr<int8_t[]> buffer_[kCapacity];
   std::list<int8_t*> memory_queue_;
 
   int pushed_;
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/audio_processing.target.darwin-arm64.mk
similarity index 68%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/audio_processing.target.darwin-arm64.mk
index c84869c..6450d07 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/audio_processing.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_audio_processing_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -11,56 +11,50 @@
 gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
 
 # Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_processing/aec/echo_cancellation.c \
+	third_party/webrtc/modules/audio_processing/aec/aec_core.c \
+	third_party/webrtc/modules/audio_processing/aec/aec_rdft.c \
+	third_party/webrtc/modules/audio_processing/aec/aec_resampler.c \
+	third_party/webrtc/modules/audio_processing/aecm/echo_control_mobile.c \
+	third_party/webrtc/modules/audio_processing/aecm/aecm_core.c \
+	third_party/webrtc/modules/audio_processing/agc/analog_agc.c \
+	third_party/webrtc/modules/audio_processing/agc/digital_agc.c \
+	third_party/webrtc/modules/audio_processing/audio_buffer.cc \
+	third_party/webrtc/modules/audio_processing/audio_processing_impl.cc \
+	third_party/webrtc/modules/audio_processing/echo_cancellation_impl.cc \
+	third_party/webrtc/modules/audio_processing/echo_control_mobile_impl.cc \
+	third_party/webrtc/modules/audio_processing/gain_control_impl.cc \
+	third_party/webrtc/modules/audio_processing/high_pass_filter_impl.cc \
+	third_party/webrtc/modules/audio_processing/level_estimator_impl.cc \
+	third_party/webrtc/modules/audio_processing/noise_suppression_impl.cc \
+	third_party/webrtc/modules/audio_processing/processing_component.cc \
+	third_party/webrtc/modules/audio_processing/typing_detection.cc \
+	third_party/webrtc/modules/audio_processing/utility/delay_estimator.c \
+	third_party/webrtc/modules/audio_processing/utility/delay_estimator_wrapper.c \
+	third_party/webrtc/modules/audio_processing/utility/fft4g.c \
+	third_party/webrtc/modules/audio_processing/utility/ring_buffer.c \
+	third_party/webrtc/modules/audio_processing/voice_detection_impl.cc \
+	third_party/webrtc/modules/audio_processing/ns/noise_suppression.c \
+	third_party/webrtc/modules/audio_processing/ns/ns_core.c \
+	third_party/webrtc/modules/audio_processing/aecm/aecm_core_c.c
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +74,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +116,11 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_AUDIOPROC_DEBUG_DUMP' \
+	'-DWEBRTC_NS_FLOAT' \
+	'-DPROTOBUF_USE_DLLS' \
+	'-DGOOGLE_PROTOBUF_NO_RTTI' \
+	'-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +139,13 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(gyp_shared_intermediate_dir)/protoc_out \
+	$(LOCAL_PATH)/third_party/protobuf \
+	$(LOCAL_PATH)/third_party/protobuf/src \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +163,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +182,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +224,11 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_AUDIOPROC_DEBUG_DUMP' \
+	'-DWEBRTC_NS_FLOAT' \
+	'-DPROTOBUF_USE_DLLS' \
+	'-DGOOGLE_PROTOBUF_NO_RTTI' \
+	'-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +248,13 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(gyp_shared_intermediate_dir)/protoc_out \
+	$(LOCAL_PATH)/third_party/protobuf \
+	$(LOCAL_PATH)/third_party/protobuf/src \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +282,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +296,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -318,7 +307,8 @@
 
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
-LOCAL_STATIC_LIBRARIES :=
+LOCAL_STATIC_LIBRARIES := \
+	third_party_webrtc_modules_audioproc_debug_proto_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
@@ -329,10 +319,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_audio_processing_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: audio_processing
+audio_processing: third_party_webrtc_modules_audio_processing_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/audio_processing.target.linux-arm64.mk
similarity index 68%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/audio_processing.target.linux-arm64.mk
index c84869c..6450d07 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/audio_processing.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_audio_processing_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -11,56 +11,50 @@
 gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
 
 # Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,third_party_webrtc_modules_audioproc_debug_proto_gyp,,,$(GYP_VAR_PREFIX))/third_party_webrtc_modules_audioproc_debug_proto_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_processing/aec/echo_cancellation.c \
+	third_party/webrtc/modules/audio_processing/aec/aec_core.c \
+	third_party/webrtc/modules/audio_processing/aec/aec_rdft.c \
+	third_party/webrtc/modules/audio_processing/aec/aec_resampler.c \
+	third_party/webrtc/modules/audio_processing/aecm/echo_control_mobile.c \
+	third_party/webrtc/modules/audio_processing/aecm/aecm_core.c \
+	third_party/webrtc/modules/audio_processing/agc/analog_agc.c \
+	third_party/webrtc/modules/audio_processing/agc/digital_agc.c \
+	third_party/webrtc/modules/audio_processing/audio_buffer.cc \
+	third_party/webrtc/modules/audio_processing/audio_processing_impl.cc \
+	third_party/webrtc/modules/audio_processing/echo_cancellation_impl.cc \
+	third_party/webrtc/modules/audio_processing/echo_control_mobile_impl.cc \
+	third_party/webrtc/modules/audio_processing/gain_control_impl.cc \
+	third_party/webrtc/modules/audio_processing/high_pass_filter_impl.cc \
+	third_party/webrtc/modules/audio_processing/level_estimator_impl.cc \
+	third_party/webrtc/modules/audio_processing/noise_suppression_impl.cc \
+	third_party/webrtc/modules/audio_processing/processing_component.cc \
+	third_party/webrtc/modules/audio_processing/typing_detection.cc \
+	third_party/webrtc/modules/audio_processing/utility/delay_estimator.c \
+	third_party/webrtc/modules/audio_processing/utility/delay_estimator_wrapper.c \
+	third_party/webrtc/modules/audio_processing/utility/fft4g.c \
+	third_party/webrtc/modules/audio_processing/utility/ring_buffer.c \
+	third_party/webrtc/modules/audio_processing/voice_detection_impl.cc \
+	third_party/webrtc/modules/audio_processing/ns/noise_suppression.c \
+	third_party/webrtc/modules/audio_processing/ns/ns_core.c \
+	third_party/webrtc/modules/audio_processing/aecm/aecm_core_c.c
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +74,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +116,11 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_AUDIOPROC_DEBUG_DUMP' \
+	'-DWEBRTC_NS_FLOAT' \
+	'-DPROTOBUF_USE_DLLS' \
+	'-DGOOGLE_PROTOBUF_NO_RTTI' \
+	'-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +139,13 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(gyp_shared_intermediate_dir)/protoc_out \
+	$(LOCAL_PATH)/third_party/protobuf \
+	$(LOCAL_PATH)/third_party/protobuf/src \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +163,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +182,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +224,11 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_AUDIOPROC_DEBUG_DUMP' \
+	'-DWEBRTC_NS_FLOAT' \
+	'-DPROTOBUF_USE_DLLS' \
+	'-DGOOGLE_PROTOBUF_NO_RTTI' \
+	'-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +248,13 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(gyp_shared_intermediate_dir)/protoc_out \
+	$(LOCAL_PATH)/third_party/protobuf \
+	$(LOCAL_PATH)/third_party/protobuf/src \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +282,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +296,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -318,7 +307,8 @@
 
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
-LOCAL_STATIC_LIBRARIES :=
+LOCAL_STATIC_LIBRARIES := \
+	third_party_webrtc_modules_audioproc_debug_proto_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
@@ -329,10 +319,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_audio_processing_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: audio_processing
+audio_processing: third_party_webrtc_modules_audio_processing_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/audio_processing/aec/aec_core.c b/modules/audio_processing/aec/aec_core.c
index 3f3d2c0..b1b0e11 100644
--- a/modules/audio_processing/aec/aec_core.c
+++ b/modules/audio_processing/aec/aec_core.c
@@ -473,6 +473,7 @@
   aec->delay_logging_enabled = 0;
   memset(aec->delay_histogram, 0, sizeof(aec->delay_histogram));
 
+  aec->reported_delay_enabled = 1;
   aec->extended_filter_enabled = 0;
   aec->num_partitions = kNormalNumPartitions;
 
@@ -785,6 +786,14 @@
   }
 }
 
+void WebRtcAec_enable_reported_delay(AecCore* self, int enable) {
+  self->reported_delay_enabled = enable;
+}
+
+int WebRtcAec_reported_delay_enabled(AecCore* self) {
+  return self->reported_delay_enabled;
+}
+
 void WebRtcAec_enable_delay_correction(AecCore* self, int enable) {
   self->extended_filter_enabled = enable;
   self->num_partitions = enable ? kExtendedNumPartitions : kNormalNumPartitions;
diff --git a/modules/audio_processing/aec/aec_core.h b/modules/audio_processing/aec/aec_core.h
index e1f6f90..327a5a9 100644
--- a/modules/audio_processing/aec/aec_core.h
+++ b/modules/audio_processing/aec/aec_core.h
@@ -22,17 +22,6 @@
 #define PART_LEN1 (PART_LEN + 1)  // Unique fft coefficients
 #define PART_LEN2 (PART_LEN * 2)  // Length of partition * 2
 
-// Delay estimator constants, used for logging.
-enum {
-  kMaxDelayBlocks = 60
-};
-enum {
-  kLookaheadBlocks = 15
-};
-enum {
-  kHistorySizeBlocks = kMaxDelayBlocks + kLookaheadBlocks
-};
-
 typedef float complex_t[2];
 // For performance reasons, some arrays of complex numbers are replaced by twice
 // as long arrays of float, all the real parts followed by all the imaginary
@@ -104,6 +93,12 @@
                              int metrics_mode,
                              int delay_logging);
 
+// Non-zero enables, zero disables.
+void WebRtcAec_enable_reported_delay(AecCore* self, int enable);
+
+// Returns non-zero if reported delay is enabled and zero if disabled.
+int WebRtcAec_reported_delay_enabled(AecCore* self);
+
 // We now interpret delay correction to mean an extended filter length feature.
 // We reuse the delay correction infrastructure to avoid changes through to
 // libjingle. See details along with |DelayCorrection| in
diff --git a/modules/audio_processing/aec/aec_core_internal.h b/modules/audio_processing/aec/aec_core_internal.h
index c6b762a..1c560f9 100644
--- a/modules/audio_processing/aec/aec_core_internal.h
+++ b/modules/audio_processing/aec/aec_core_internal.h
@@ -26,6 +26,17 @@
 };
 static const int kNormalNumPartitions = 12;
 
+// Delay estimator constants, used for logging.
+enum {
+  kMaxDelayBlocks = 60
+};
+enum {
+  kLookaheadBlocks = 15
+};
+enum {
+  kHistorySizeBlocks = kMaxDelayBlocks + kLookaheadBlocks
+};
+
 // Extended filter adaptation parameters.
 // TODO(ajm): No narrowband tuning yet.
 static const float kExtendedMu = 0.4f;
@@ -122,6 +133,7 @@
   void* delay_estimator_farend;
   void* delay_estimator;
 
+  int reported_delay_enabled;  // 0 = disabled, otherwise enabled.
   // 1 = extended filter mode enabled, 0 = disabled.
   int extended_filter_enabled;
   // Runtime selection of number of filter partitions.
diff --git a/modules/audio_processing/aec/echo_cancellation.c b/modules/audio_processing/aec/echo_cancellation.c
index bbdd5f6..c7f4a9c 100644
--- a/modules/audio_processing/aec/echo_cancellation.c
+++ b/modules/audio_processing/aec/echo_cancellation.c
@@ -254,7 +254,7 @@
   aecpc->checkBuffSize = 1;
   aecpc->firstVal = 0;
 
-  aecpc->startup_phase = 1;
+  aecpc->startup_phase = WebRtcAec_reported_delay_enabled(aecpc->aec);
   aecpc->bufSizeStart = 0;
   aecpc->checkBufSizeCtr = 0;
   aecpc->msInSndCardBuf = 0;
@@ -766,7 +766,9 @@
     }
   } else {
     // AEC is enabled.
-    EstBufDelayNormal(aecpc);
+    if (WebRtcAec_reported_delay_enabled(aecpc->aec)) {
+      EstBufDelayNormal(aecpc);
+    }
 
     // Note that 1 frame is supported for NB and 2 frames for WB.
     for (i = 0; i < nFrames; i++) {
@@ -842,7 +844,9 @@
     self->startup_phase = 0;
   }
 
-  EstBufDelayExtended(self);
+  if (WebRtcAec_reported_delay_enabled(self->aec)) {
+    EstBufDelayExtended(self);
+  }
 
   {
     // |delay_diff_offset| gives us the option to manually rewind the delay on
diff --git a/modules/audio_processing/audio_buffer.cc b/modules/audio_processing/audio_buffer.cc
index 6936155..c53d4df 100644
--- a/modules/audio_processing/audio_buffer.cc
+++ b/modules/audio_processing/audio_buffer.cc
@@ -23,6 +23,35 @@
   kSamplesPer32kHzChannel = 320
 };
 
+bool HasKeyboardChannel(AudioProcessing::ChannelLayout layout) {
+  switch (layout) {
+    case AudioProcessing::kMono:
+    case AudioProcessing::kStereo:
+      return false;
+    case AudioProcessing::kMonoAndKeyboard:
+    case AudioProcessing::kStereoAndKeyboard:
+      return true;
+  }
+  assert(false);
+  return false;
+}
+
+int KeyboardChannelIndex(AudioProcessing::ChannelLayout layout) {
+  switch (layout) {
+    case AudioProcessing::kMono:
+    case AudioProcessing::kStereo:
+      assert(false);
+      return -1;
+    case AudioProcessing::kMonoAndKeyboard:
+      return 1;
+    case AudioProcessing::kStereoAndKeyboard:
+      return 2;
+  }
+  assert(false);
+  return -1;
+}
+
+
 void StereoToMono(const float* left, const float* right, float* out,
                   int samples_per_channel) {
   for (int i = 0; i < samples_per_channel; ++i) {
@@ -32,8 +61,9 @@
 
 void StereoToMono(const int16_t* left, const int16_t* right, int16_t* out,
                   int samples_per_channel) {
-  for (int i = 0; i < samples_per_channel; i++)
+  for (int i = 0; i < samples_per_channel; ++i) {
     out[i] = (left[i] + right[i]) >> 1;
+  }
 }
 
 }  // namespace
@@ -72,6 +102,7 @@
     activity_(AudioFrame::kVadUnknown),
     is_muted_(false),
     data_(NULL),
+    keyboard_data_(NULL),
     channels_(new ChannelBuffer<int16_t>(proc_samples_per_channel_,
                                          num_proc_channels_)) {
   assert(input_samples_per_channel_ > 0);
@@ -118,6 +149,8 @@
   }
 }
 
+AudioBuffer::~AudioBuffer() {}
+
 void AudioBuffer::CopyFrom(const float* const* data,
                            int samples_per_channel,
                            AudioProcessing::ChannelLayout layout) {
@@ -125,6 +158,10 @@
   assert(ChannelsFromLayout(layout) == num_input_channels_);
   InitForNewData();
 
+  if (HasKeyboardChannel(layout)) {
+    keyboard_data_ = data[KeyboardChannelIndex(layout)];
+  }
+
   // Downmix.
   const float* const* data_ptr = data;
   if (num_input_channels_ == 2 && num_proc_channels_ == 1) {
@@ -180,10 +217,9 @@
   }
 }
 
-AudioBuffer::~AudioBuffer() {}
-
 void AudioBuffer::InitForNewData() {
   data_ = NULL;
+  keyboard_data_ = NULL;
   data_was_mixed_ = false;
   num_mixed_channels_ = 0;
   num_mixed_low_pass_channels_ = 0;
@@ -240,6 +276,10 @@
   return low_pass_reference_channels_->channel(channel);
 }
 
+const float* AudioBuffer::keyboard_data() const {
+  return keyboard_data_;
+}
+
 SplitFilterStates* AudioBuffer::filter_states(int channel) const {
   assert(channel >= 0 && channel < num_proc_channels_);
   return &filter_states_[channel];
@@ -269,6 +309,11 @@
   return samples_per_split_channel_;
 }
 
+int AudioBuffer::samples_per_keyboard_channel() const {
+  // We don't resample the keyboard channel.
+  return input_samples_per_channel_;
+}
+
 // TODO(andrew): Do deinterleaving and mixing in one step?
 void AudioBuffer::DeinterleaveFrom(AudioFrame* frame) {
   assert(proc_samples_per_channel_ == input_samples_per_channel_);
diff --git a/modules/audio_processing/audio_buffer.h b/modules/audio_processing/audio_buffer.h
index 45e62a4..eaf53eb 100644
--- a/modules/audio_processing/audio_buffer.h
+++ b/modules/audio_processing/audio_buffer.h
@@ -53,6 +53,7 @@
   int num_channels() const;
   int samples_per_channel() const;
   int samples_per_split_channel() const;
+  int samples_per_keyboard_channel() const;
 
   int16_t* data(int channel) const;
   int16_t* low_pass_split_data(int channel) const;
@@ -60,6 +61,7 @@
   int16_t* mixed_data(int channel) const;
   int16_t* mixed_low_pass_data(int channel) const;
   int16_t* low_pass_reference(int channel) const;
+  const float* keyboard_data() const;
 
   SplitFilterStates* filter_states(int channel) const;
 
@@ -106,6 +108,7 @@
   bool is_muted_;
 
   int16_t* data_;
+  const float* keyboard_data_;
   scoped_ptr<ChannelBuffer<int16_t> > channels_;
   scoped_ptr<SplitChannelBuffer> split_channels_;
   scoped_ptr<SplitFilterStates[]> filter_states_;
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index 147cb18..de387ed 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -468,48 +468,46 @@
   }
 #endif
 
+  AudioBuffer* ca = capture_audio_.get();  // For brevity.
   bool data_processed = is_data_processed();
   if (analysis_needed(data_processed)) {
     for (int i = 0; i < fwd_proc_format_.num_channels(); i++) {
-      SplitFilterStates* filter_states = capture_audio_->filter_states(i);
       // Split into a low and high band.
-      WebRtcSpl_AnalysisQMF(capture_audio_->data(i),
-                            capture_audio_->samples_per_channel(),
-                            capture_audio_->low_pass_split_data(i),
-                            capture_audio_->high_pass_split_data(i),
-                            filter_states->analysis_filter_state1,
-                            filter_states->analysis_filter_state2);
+      WebRtcSpl_AnalysisQMF(ca->data(i),
+                            ca->samples_per_channel(),
+                            ca->low_pass_split_data(i),
+                            ca->high_pass_split_data(i),
+                            ca->filter_states(i)->analysis_filter_state1,
+                            ca->filter_states(i)->analysis_filter_state2);
     }
   }
 
-  RETURN_ON_ERR(high_pass_filter_->ProcessCaptureAudio(capture_audio_.get()));
-  RETURN_ON_ERR(gain_control_->AnalyzeCaptureAudio(capture_audio_.get()));
-  RETURN_ON_ERR(echo_cancellation_->ProcessCaptureAudio(capture_audio_.get()));
+  RETURN_ON_ERR(high_pass_filter_->ProcessCaptureAudio(ca));
+  RETURN_ON_ERR(gain_control_->AnalyzeCaptureAudio(ca));
+  RETURN_ON_ERR(echo_cancellation_->ProcessCaptureAudio(ca));
 
   if (echo_control_mobile_->is_enabled() && noise_suppression_->is_enabled()) {
-    capture_audio_->CopyLowPassToReference();
+    ca->CopyLowPassToReference();
   }
-  RETURN_ON_ERR(noise_suppression_->ProcessCaptureAudio(capture_audio_.get()));
-  RETURN_ON_ERR(
-      echo_control_mobile_->ProcessCaptureAudio(capture_audio_.get()));
-  RETURN_ON_ERR(voice_detection_->ProcessCaptureAudio(capture_audio_.get()));
-  RETURN_ON_ERR(gain_control_->ProcessCaptureAudio(capture_audio_.get()));
+  RETURN_ON_ERR(noise_suppression_->ProcessCaptureAudio(ca));
+  RETURN_ON_ERR(echo_control_mobile_->ProcessCaptureAudio(ca));
+  RETURN_ON_ERR(voice_detection_->ProcessCaptureAudio(ca));
+  RETURN_ON_ERR(gain_control_->ProcessCaptureAudio(ca));
 
   if (synthesis_needed(data_processed)) {
     for (int i = 0; i < fwd_proc_format_.num_channels(); i++) {
       // Recombine low and high bands.
-      SplitFilterStates* filter_states = capture_audio_->filter_states(i);
-      WebRtcSpl_SynthesisQMF(capture_audio_->low_pass_split_data(i),
-                             capture_audio_->high_pass_split_data(i),
-                             capture_audio_->samples_per_split_channel(),
-                             capture_audio_->data(i),
-                             filter_states->synthesis_filter_state1,
-                             filter_states->synthesis_filter_state2);
+      WebRtcSpl_SynthesisQMF(ca->low_pass_split_data(i),
+                             ca->high_pass_split_data(i),
+                             ca->samples_per_split_channel(),
+                             ca->data(i),
+                             ca->filter_states(i)->synthesis_filter_state1,
+                             ca->filter_states(i)->synthesis_filter_state2);
     }
   }
 
   // The level estimator operates on the recombined data.
-  RETURN_ON_ERR(level_estimator_->ProcessStream(capture_audio_.get()));
+  RETURN_ON_ERR(level_estimator_->ProcessStream(ca));
 
   was_stream_delay_set_ = false;
   return kNoError;
@@ -592,27 +590,23 @@
   return AnalyzeReverseStreamLocked();
 }
 
-// TODO(ajm): Have AnalyzeReverseStream accept sample rates not matching the
-// primary stream and convert ourselves rather than having the user manage it.
-// We can be smarter and use the splitting filter when appropriate. Similarly,
-// perform downmixing here.
 int AudioProcessingImpl::AnalyzeReverseStreamLocked() {
+  AudioBuffer* ra = render_audio_.get();  // For brevity.
   if (rev_proc_format_.rate() == kSampleRate32kHz) {
     for (int i = 0; i < rev_proc_format_.num_channels(); i++) {
       // Split into low and high band.
-      SplitFilterStates* filter_states = render_audio_->filter_states(i);
-      WebRtcSpl_AnalysisQMF(render_audio_->data(i),
-                            render_audio_->samples_per_channel(),
-                            render_audio_->low_pass_split_data(i),
-                            render_audio_->high_pass_split_data(i),
-                            filter_states->analysis_filter_state1,
-                            filter_states->analysis_filter_state2);
+      WebRtcSpl_AnalysisQMF(ra->data(i),
+                            ra->samples_per_channel(),
+                            ra->low_pass_split_data(i),
+                            ra->high_pass_split_data(i),
+                            ra->filter_states(i)->analysis_filter_state1,
+                            ra->filter_states(i)->analysis_filter_state2);
     }
   }
 
-  RETURN_ON_ERR(echo_cancellation_->ProcessRenderAudio(render_audio_.get()));
-  RETURN_ON_ERR(echo_control_mobile_->ProcessRenderAudio(render_audio_.get()));
-  RETURN_ON_ERR(gain_control_->ProcessRenderAudio(render_audio_.get()));
+  RETURN_ON_ERR(echo_cancellation_->ProcessRenderAudio(ra));
+  RETURN_ON_ERR(echo_control_mobile_->ProcessRenderAudio(ra));
+  RETURN_ON_ERR(gain_control_->ProcessRenderAudio(ra));
 
   return kNoError;
 }
diff --git a/modules/audio_processing/common.h b/modules/audio_processing/common.h
index e4ac6ee..42454df 100644
--- a/modules/audio_processing/common.h
+++ b/modules/audio_processing/common.h
@@ -11,6 +11,7 @@
 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_COMMON_H_
 #define WEBRTC_MODULES_AUDIO_PROCESSING_COMMON_H_
 
+#include <assert.h>
 #include <string.h>
 
 #include "webrtc/modules/audio_processing/include/audio_processing.h"
diff --git a/modules/audio_processing/echo_cancellation_impl.cc b/modules/audio_processing/echo_cancellation_impl.cc
index f0bd95e..d4bd781 100644
--- a/modules/audio_processing/echo_cancellation_impl.cc
+++ b/modules/audio_processing/echo_cancellation_impl.cc
@@ -67,7 +67,8 @@
     was_stream_drift_set_(false),
     stream_has_echo_(false),
     delay_logging_enabled_(false),
-    delay_correction_enabled_(false) {}
+    delay_correction_enabled_(false),
+    reported_delay_enabled_(true) {}
 
 EchoCancellationImpl::~EchoCancellationImpl() {}
 
@@ -361,6 +362,8 @@
 
   WebRtcAec_enable_delay_correction(WebRtcAec_aec_core(
       static_cast<Handle*>(handle)), delay_correction_enabled_ ? 1 : 0);
+  WebRtcAec_enable_reported_delay(WebRtcAec_aec_core(
+      static_cast<Handle*>(handle)), reported_delay_enabled_ ? 1 : 0);
   return WebRtcAec_set_config(static_cast<Handle*>(handle), config);
 }
 
diff --git a/modules/audio_processing/echo_cancellation_impl.h b/modules/audio_processing/echo_cancellation_impl.h
index b364193..b9c116a 100644
--- a/modules/audio_processing/echo_cancellation_impl.h
+++ b/modules/audio_processing/echo_cancellation_impl.h
@@ -72,6 +72,7 @@
   bool stream_has_echo_;
   bool delay_logging_enabled_;
   bool delay_correction_enabled_;
+  bool reported_delay_enabled_;
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/gen_aecm_core_neon_offsets_h.target.darwin-arm.mk b/modules/audio_processing/gen_aecm_core_neon_offsets_h.target.darwin-arm.mk
index d81e0c1..3b2e3de 100644
--- a/modules/audio_processing/gen_aecm_core_neon_offsets_h.target.darwin-arm.mk
+++ b/modules/audio_processing/gen_aecm_core_neon_offsets_h.target.darwin-arm.mk
@@ -23,7 +23,7 @@
 $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets/aecm_core_neon_offsets.o: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets/aecm_core_neon_offsets.o: $(LOCAL_PATH)/third_party/libvpx/unpack_lib_posix.sh $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_webrtc_modules_audio_processing_gen_core_neon_offsets_chromium_gyp_gen_aecm_core_neon_offsets_h_target_unpack_lib_posix ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/webrtc/modules/audio_processing; mkdir -p $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets; ../../../../third_party/libvpx/unpack_lib_posix.sh -d "$(gyp_shared_intermediate_dir)/audio_processing/asm_offsets" -f aecm_core_neon_offsets.o -a "$(gyp_shared_intermediate_dir)/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/third_party/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(PWD)/$(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX))/lib_core_neon_offsets.a" -r "$(PWD)/$($(GYP_VAR_PREFIX)TARGET_AR)"
+	$(hide)cd $(gyp_local_path)/third_party/webrtc/modules/audio_processing; mkdir -p $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets; ../../../../third_party/libvpx/unpack_lib_posix.sh -d "$(gyp_shared_intermediate_dir)/audio_processing/asm_offsets" -f aecm_core_neon_offsets.o -a "$(gyp_shared_intermediate_dir)/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/third_party/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(realpath $(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX)))/lib_core_neon_offsets.a" -r "$(realpath $($(GYP_VAR_PREFIX)TARGET_AR))"
 
 
 
diff --git a/modules/audio_processing/gen_aecm_core_neon_offsets_h.target.linux-arm.mk b/modules/audio_processing/gen_aecm_core_neon_offsets_h.target.linux-arm.mk
index d81e0c1..3b2e3de 100644
--- a/modules/audio_processing/gen_aecm_core_neon_offsets_h.target.linux-arm.mk
+++ b/modules/audio_processing/gen_aecm_core_neon_offsets_h.target.linux-arm.mk
@@ -23,7 +23,7 @@
 $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets/aecm_core_neon_offsets.o: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets/aecm_core_neon_offsets.o: $(LOCAL_PATH)/third_party/libvpx/unpack_lib_posix.sh $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_webrtc_modules_audio_processing_gen_core_neon_offsets_chromium_gyp_gen_aecm_core_neon_offsets_h_target_unpack_lib_posix ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/webrtc/modules/audio_processing; mkdir -p $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets; ../../../../third_party/libvpx/unpack_lib_posix.sh -d "$(gyp_shared_intermediate_dir)/audio_processing/asm_offsets" -f aecm_core_neon_offsets.o -a "$(gyp_shared_intermediate_dir)/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/third_party/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(PWD)/$(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX))/lib_core_neon_offsets.a" -r "$(PWD)/$($(GYP_VAR_PREFIX)TARGET_AR)"
+	$(hide)cd $(gyp_local_path)/third_party/webrtc/modules/audio_processing; mkdir -p $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets; ../../../../third_party/libvpx/unpack_lib_posix.sh -d "$(gyp_shared_intermediate_dir)/audio_processing/asm_offsets" -f aecm_core_neon_offsets.o -a "$(gyp_shared_intermediate_dir)/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/third_party/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(realpath $(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX)))/lib_core_neon_offsets.a" -r "$(realpath $($(GYP_VAR_PREFIX)TARGET_AR))"
 
 
 
diff --git a/modules/audio_processing/gen_nsx_core_neon_offsets_h.target.darwin-arm.mk b/modules/audio_processing/gen_nsx_core_neon_offsets_h.target.darwin-arm.mk
index 380d72d..d82ef39 100644
--- a/modules/audio_processing/gen_nsx_core_neon_offsets_h.target.darwin-arm.mk
+++ b/modules/audio_processing/gen_nsx_core_neon_offsets_h.target.darwin-arm.mk
@@ -23,7 +23,7 @@
 $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets/nsx_core_neon_offsets.o: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets/nsx_core_neon_offsets.o: $(LOCAL_PATH)/third_party/libvpx/unpack_lib_posix.sh $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_webrtc_modules_audio_processing_gen_core_neon_offsets_chromium_gyp_gen_nsx_core_neon_offsets_h_target_unpack_lib_posix ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/webrtc/modules/audio_processing; mkdir -p $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets; ../../../../third_party/libvpx/unpack_lib_posix.sh -d "$(gyp_shared_intermediate_dir)/audio_processing/asm_offsets" -f nsx_core_neon_offsets.o -a "$(gyp_shared_intermediate_dir)/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/third_party/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(PWD)/$(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX))/lib_core_neon_offsets.a" -r "$(PWD)/$($(GYP_VAR_PREFIX)TARGET_AR)"
+	$(hide)cd $(gyp_local_path)/third_party/webrtc/modules/audio_processing; mkdir -p $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets; ../../../../third_party/libvpx/unpack_lib_posix.sh -d "$(gyp_shared_intermediate_dir)/audio_processing/asm_offsets" -f nsx_core_neon_offsets.o -a "$(gyp_shared_intermediate_dir)/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/third_party/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(realpath $(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX)))/lib_core_neon_offsets.a" -r "$(realpath $($(GYP_VAR_PREFIX)TARGET_AR))"
 
 
 
diff --git a/modules/audio_processing/gen_nsx_core_neon_offsets_h.target.linux-arm.mk b/modules/audio_processing/gen_nsx_core_neon_offsets_h.target.linux-arm.mk
index 380d72d..d82ef39 100644
--- a/modules/audio_processing/gen_nsx_core_neon_offsets_h.target.linux-arm.mk
+++ b/modules/audio_processing/gen_nsx_core_neon_offsets_h.target.linux-arm.mk
@@ -23,7 +23,7 @@
 $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets/nsx_core_neon_offsets.o: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
 $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets/nsx_core_neon_offsets.o: $(LOCAL_PATH)/third_party/libvpx/unpack_lib_posix.sh $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_webrtc_modules_audio_processing_gen_core_neon_offsets_chromium_gyp_gen_nsx_core_neon_offsets_h_target_unpack_lib_posix ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/webrtc/modules/audio_processing; mkdir -p $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets; ../../../../third_party/libvpx/unpack_lib_posix.sh -d "$(gyp_shared_intermediate_dir)/audio_processing/asm_offsets" -f nsx_core_neon_offsets.o -a "$(gyp_shared_intermediate_dir)/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/third_party/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(PWD)/$(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX))/lib_core_neon_offsets.a" -r "$(PWD)/$($(GYP_VAR_PREFIX)TARGET_AR)"
+	$(hide)cd $(gyp_local_path)/third_party/webrtc/modules/audio_processing; mkdir -p $(gyp_shared_intermediate_dir)/audio_processing/asm_offsets; ../../../../third_party/libvpx/unpack_lib_posix.sh -d "$(gyp_shared_intermediate_dir)/audio_processing/asm_offsets" -f nsx_core_neon_offsets.o -a "$(gyp_shared_intermediate_dir)/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(obj).$(TOOLSET)/third_party/webrtc/modules/audio_processing/lib_core_neon_offsets.a" -a "$(realpath $(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX)))/lib_core_neon_offsets.a" -r "$(realpath $($(GYP_VAR_PREFIX)TARGET_AR))"
 
 
 
diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h
index 6db1d12..68b679d 100644
--- a/modules/audio_processing/include/audio_processing.h
+++ b/modules/audio_processing/include/audio_processing.h
@@ -61,7 +61,12 @@
   bool enabled;
 };
 
+#if defined(ANDROID) || defined(IOS)
+// AECM only supports 8kHz & 16kHz.
+static const int kAudioProcMaxNativeSampleRateHz = 16000;
+#else
 static const int kAudioProcMaxNativeSampleRateHz = 32000;
+#endif
 
 // The Audio Processing Module (APM) provides a collection of voice processing
 // components designed for real-time communications software.
diff --git a/modules/audio_processing/lib_core_neon_offsets.gypi b/modules/audio_processing/lib_core_neon_offsets.gypi
index a4d6b74..ce257a8 100644
--- a/modules/audio_processing/lib_core_neon_offsets.gypi
+++ b/modules/audio_processing/lib_core_neon_offsets.gypi
@@ -14,7 +14,7 @@
       'lib_intermediate_name': '',
       'conditions' : [
         ['android_webview_build==1', {
-          'lib_intermediate_name' : '<(android_src)/$(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX))/lib_core_neon_offsets.a',
+          'lib_intermediate_name' : '$(realpath $(call intermediates-dir-for, STATIC_LIBRARIES, lib_core_neon_offsets,,, $(GYP_VAR_PREFIX)))/lib_core_neon_offsets.a',
         }],
       ],
     },
diff --git a/modules/audio_processing/test/audio_processing_unittest.cc b/modules/audio_processing/test/audio_processing_unittest.cc
index 257c05e..0c5b67d 100644
--- a/modules/audio_processing/test/audio_processing_unittest.cc
+++ b/modules/audio_processing/test/audio_processing_unittest.cc
@@ -81,6 +81,21 @@
   ConvertToFloat(frame.data_, cb);
 }
 
+// Number of channels including the keyboard channel.
+int TotalChannelsFromLayout(AudioProcessing::ChannelLayout layout) {
+  switch (layout) {
+    case AudioProcessing::kMono:
+      return 1;
+    case AudioProcessing::kMonoAndKeyboard:
+    case AudioProcessing::kStereo:
+      return 2;
+    case AudioProcessing::kStereoAndKeyboard:
+      return 3;
+  }
+  assert(false);
+  return -1;
+}
+
 int TruncateToMultipleOf10(int value) {
   return (value / 10) * 10;
 }
@@ -229,13 +244,15 @@
 }
 
 std::string OutputFilePath(std::string name,
-                           int sample_rate_hz,
+                           int input_rate,
+                           int output_rate,
+                           int reverse_rate,
                            int num_input_channels,
                            int num_output_channels,
                            int num_reverse_channels) {
   std::ostringstream ss;
-  ss << name << sample_rate_hz / 1000 << "_" << num_reverse_channels << "r" <<
-      num_input_channels << "i" << "_";
+  ss << name << "_i" << num_input_channels << "_" << input_rate / 1000
+     << "_r" << num_reverse_channels << "_" << reverse_rate  / 1000 << "_";
   if (num_output_channels == 1) {
     ss << "mono";
   } else if (num_output_channels == 2) {
@@ -243,7 +260,7 @@
   } else {
     assert(false);
   }
-  ss << ".pcm";
+  ss << output_rate / 1000 << ".pcm";
 
   return test::OutputPath() + ss.str();
 }
@@ -427,8 +444,13 @@
     if (out_file_) {
       ASSERT_EQ(0, fclose(out_file_));
     }
-    filename = OutputFilePath("out", sample_rate_hz, num_input_channels,
-                              num_output_channels, num_reverse_channels);
+    filename = OutputFilePath("out",
+                              sample_rate_hz,
+                              output_sample_rate_hz,
+                              reverse_sample_rate_hz,
+                              num_input_channels,
+                              num_output_channels,
+                              num_reverse_channels);
     out_file_ = fopen(filename.c_str(), "wb");
     ASSERT_TRUE(out_file_ != NULL) << "Could not open file " <<
           filename << "\n";
@@ -1909,6 +1931,43 @@
 
 #endif  // WEBRTC_AUDIOPROC_BIT_EXACT
 
+TEST_F(ApmTest, NoErrorsWithKeyboardChannel) {
+  struct ChannelFormat {
+    AudioProcessing::ChannelLayout in_layout;
+    AudioProcessing::ChannelLayout out_layout;
+  };
+  ChannelFormat cf[] = {
+    {AudioProcessing::kMonoAndKeyboard, AudioProcessing::kMono},
+    {AudioProcessing::kStereoAndKeyboard, AudioProcessing::kMono},
+    {AudioProcessing::kStereoAndKeyboard, AudioProcessing::kStereo},
+  };
+  size_t channel_format_size = sizeof(cf) / sizeof(*cf);
+
+  scoped_ptr<AudioProcessing> ap(AudioProcessing::Create());
+  // Enable one component just to ensure some processing takes place.
+  ap->noise_suppression()->Enable(true);
+  for (size_t i = 0; i < channel_format_size; ++i) {
+    const int in_rate = 44100;
+    const int out_rate = 48000;
+    ChannelBuffer<float> in_cb(SamplesFromRate(in_rate),
+                               TotalChannelsFromLayout(cf[i].in_layout));
+    ChannelBuffer<float> out_cb(SamplesFromRate(out_rate),
+                                ChannelsFromLayout(cf[i].out_layout));
+
+    // Run over a few chunks.
+    for (int j = 0; j < 10; ++j) {
+      EXPECT_NOERR(ap->ProcessStream(
+          in_cb.channels(),
+          in_cb.samples_per_channel(),
+          in_rate,
+          cf[i].in_layout,
+          out_rate,
+          cf[i].out_layout,
+          out_cb.channels()));
+    }
+  }
+}
+
 // Reads a 10 ms chunk of int16 interleaved audio from the given (assumed
 // stereo) file, converts to deinterleaved float (optionally downmixing) and
 // returns the result in |cb|. Returns false if the file ended (or on error) and
@@ -2046,7 +2105,9 @@
     FILE* far_file = fopen(ResourceFilePath("far", reverse_rate).c_str(), "rb");
     FILE* near_file = fopen(ResourceFilePath("near", input_rate).c_str(), "rb");
     FILE* out_file = fopen(OutputFilePath(output_file_prefix,
+                                          input_rate,
                                           output_rate,
+                                          reverse_rate,
                                           num_input_channels,
                                           num_output_channels,
                                           num_reverse_channels).c_str(), "wb");
@@ -2152,13 +2213,17 @@
 #endif
 
     FILE* out_file = fopen(OutputFilePath("out",
+                                          input_rate_,
                                           output_rate_,
+                                          reverse_rate_,
                                           cf[i].num_input,
                                           cf[i].num_output,
                                           cf[i].num_reverse).c_str(), "rb");
     // The reference files always have matching input and output channels.
     FILE* ref_file = fopen(OutputFilePath("ref",
                                           ref_rate,
+                                          ref_rate,
+                                          ref_rate,
                                           cf[i].num_output,
                                           cf[i].num_output,
                                           cf[i].num_reverse).c_str(), "rb");
diff --git a/modules/audio_processing/test/process_test.cc b/modules/audio_processing/test/process_test.cc
index 95984f5..01f9dce 100644
--- a/modules/audio_processing/test/process_test.cc
+++ b/modules/audio_processing/test/process_test.cc
@@ -518,7 +518,7 @@
 
     const size_t path_size =
         apm->echo_control_mobile()->echo_path_size_bytes();
-    scoped_array<char> echo_path(new char[path_size]);
+    scoped_ptr<char[]> echo_path(new char[path_size]);
     ASSERT_EQ(path_size, fread(echo_path.get(),
                                sizeof(char),
                                path_size,
@@ -1004,7 +1004,7 @@
   if (aecm_echo_path_out_file != NULL) {
     const size_t path_size =
         apm->echo_control_mobile()->echo_path_size_bytes();
-    scoped_array<char> echo_path(new char[path_size]);
+    scoped_ptr<char[]> echo_path(new char[path_size]);
     apm->echo_control_mobile()->GetEchoPath(echo_path.get(), path_size);
     ASSERT_EQ(path_size, fwrite(echo_path.get(),
                                 sizeof(char),
diff --git a/modules/audio_processing/utility/ring_buffer_unittest.cc b/modules/audio_processing/utility/ring_buffer_unittest.cc
index bd68f94..5dacf0b 100644
--- a/modules/audio_processing/utility/ring_buffer_unittest.cc
+++ b/modules/audio_processing/utility/ring_buffer_unittest.cc
@@ -61,8 +61,8 @@
   srand(seed);
   for (int i = 0; i < kNumTests; i++) {
     const int buffer_size = std::max(rand() % kMaxBufferSize, 1);
-    scoped_array<int> write_data(new int[buffer_size]);
-    scoped_array<int> read_data(new int[buffer_size]);
+    scoped_ptr<int[]> write_data(new int[buffer_size]);
+    scoped_ptr<int[]> read_data(new int[buffer_size]);
     scoped_ring_buffer buffer(WebRtc_CreateBuffer(buffer_size, sizeof(int)));
     ASSERT_TRUE(buffer.get() != NULL);
     ASSERT_EQ(0, WebRtc_InitBuffer(buffer.get()));
diff --git a/modules/audioproc_debug_proto.target.darwin-arm64.mk b/modules/audioproc_debug_proto.target.darwin-arm64.mk
new file mode 100644
index 0000000..d16a03a
--- /dev/null
+++ b/modules/audioproc_debug_proto.target.darwin-arm64.mk
@@ -0,0 +1,312 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := third_party_webrtc_modules_audioproc_debug_proto_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(gyp_shared_intermediate_dir)/protoc
+
+
+### Generated for rule "third_party_webrtc_modules_modules_gyp_audioproc_debug_proto_target_genproto":
+# "{'inputs': ['../../../tools/protoc_wrapper/protoc_wrapper.py', '$(gyp_shared_intermediate_dir)/protoc'], 'process_outputs_as_sources': '1', 'extension': 'proto', 'outputs': ['$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/%(INPUT_ROOT)s_pb2.py', '$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/%(INPUT_ROOT)s.pb.cc', '$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/%(INPUT_ROOT)s.pb.h'], 'rule_name': 'genproto', 'rule_sources': ['audio_processing/debug.proto'], 'action': ['python', '../../../tools/protoc_wrapper/protoc_wrapper.py', '--include', '', '--protobuf', '$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/%(INPUT_ROOT)s.pb.h', '--proto-in-dir', 'audio_processing', '--proto-in-file', '%(INPUT_ROOT)s$(suffix $<)', '--use-system-protobuf=0', '--', '$(gyp_shared_intermediate_dir)/protoc', '--cpp_out', '$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing', '--python_out', '$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing'], 'message': 'Generating C++ and Python code from $(RULE_SOURCES)'}":
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: $(LOCAL_PATH)/third_party/webrtc/modules/audio_processing/debug.proto $(LOCAL_PATH)/tools/protoc_wrapper/protoc_wrapper.py $(gyp_shared_intermediate_dir)/protoc $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing $(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing; cd $(gyp_local_path)/third_party/webrtc/modules; python ../../../tools/protoc_wrapper/protoc_wrapper.py --include "" --protobuf "$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.h" --proto-in-dir audio_processing --proto-in-file "debug$(suffix $<)" "--use-system-protobuf=0" -- "$(gyp_shared_intermediate_dir)/protoc" --cpp_out "$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing" --python_out "$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing"
+
+$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.cc: $(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py ;
+$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.h: $(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py ;
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py \
+	$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.cc \
+	$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.h
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+$(gyp_intermediate_dir)/debug.pb.cc: $(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.cc
+	mkdir -p $(@D); cp $< $@
+LOCAL_GENERATED_SOURCES := \
+	$(gyp_intermediate_dir)/debug.pb.cc \
+	$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py \
+	$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.h
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS := \
+	$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing
+
+LOCAL_SRC_FILES :=
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DWEBRTC_RESTRICT_LOGGING' \
+	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
+	'-DWEBRTC_CHROMIUM_BUILD' \
+	'-DWEBRTC_POSIX' \
+	'-DWEBRTC_LINUX' \
+	'-DWEBRTC_ANDROID' \
+	'-DWEBRTC_ANDROID_OPENSLES' \
+	'-DPROTOBUF_USE_DLLS' \
+	'-DGOOGLE_PROTOBUF_NO_RTTI' \
+	'-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(LOCAL_PATH)/third_party \
+	$(LOCAL_PATH) \
+	$(gyp_shared_intermediate_dir)/protoc_out \
+	$(LOCAL_PATH)/third_party/protobuf \
+	$(LOCAL_PATH)/third_party/protobuf/src \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DWEBRTC_RESTRICT_LOGGING' \
+	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
+	'-DWEBRTC_CHROMIUM_BUILD' \
+	'-DWEBRTC_POSIX' \
+	'-DWEBRTC_LINUX' \
+	'-DWEBRTC_ANDROID' \
+	'-DWEBRTC_ANDROID_OPENSLES' \
+	'-DPROTOBUF_USE_DLLS' \
+	'-DGOOGLE_PROTOBUF_NO_RTTI' \
+	'-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(LOCAL_PATH)/third_party \
+	$(LOCAL_PATH) \
+	$(gyp_shared_intermediate_dir)/protoc_out \
+	$(LOCAL_PATH)/third_party/protobuf \
+	$(LOCAL_PATH)/third_party/protobuf/src \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES :=
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_webrtc_modules_audioproc_debug_proto_gyp
+
+# Alias gyp target name.
+.PHONY: audioproc_debug_proto
+audioproc_debug_proto: third_party_webrtc_modules_audioproc_debug_proto_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/audioproc_debug_proto.target.linux-arm64.mk b/modules/audioproc_debug_proto.target.linux-arm64.mk
new file mode 100644
index 0000000..d16a03a
--- /dev/null
+++ b/modules/audioproc_debug_proto.target.linux-arm64.mk
@@ -0,0 +1,312 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := third_party_webrtc_modules_audioproc_debug_proto_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(gyp_shared_intermediate_dir)/protoc
+
+
+### Generated for rule "third_party_webrtc_modules_modules_gyp_audioproc_debug_proto_target_genproto":
+# "{'inputs': ['../../../tools/protoc_wrapper/protoc_wrapper.py', '$(gyp_shared_intermediate_dir)/protoc'], 'process_outputs_as_sources': '1', 'extension': 'proto', 'outputs': ['$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/%(INPUT_ROOT)s_pb2.py', '$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/%(INPUT_ROOT)s.pb.cc', '$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/%(INPUT_ROOT)s.pb.h'], 'rule_name': 'genproto', 'rule_sources': ['audio_processing/debug.proto'], 'action': ['python', '../../../tools/protoc_wrapper/protoc_wrapper.py', '--include', '', '--protobuf', '$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/%(INPUT_ROOT)s.pb.h', '--proto-in-dir', 'audio_processing', '--proto-in-file', '%(INPUT_ROOT)s$(suffix $<)', '--use-system-protobuf=0', '--', '$(gyp_shared_intermediate_dir)/protoc', '--cpp_out', '$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing', '--python_out', '$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing'], 'message': 'Generating C++ and Python code from $(RULE_SOURCES)'}":
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py: $(LOCAL_PATH)/third_party/webrtc/modules/audio_processing/debug.proto $(LOCAL_PATH)/tools/protoc_wrapper/protoc_wrapper.py $(gyp_shared_intermediate_dir)/protoc $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing $(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing; cd $(gyp_local_path)/third_party/webrtc/modules; python ../../../tools/protoc_wrapper/protoc_wrapper.py --include "" --protobuf "$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.h" --proto-in-dir audio_processing --proto-in-file "debug$(suffix $<)" "--use-system-protobuf=0" -- "$(gyp_shared_intermediate_dir)/protoc" --cpp_out "$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing" --python_out "$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing"
+
+$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.cc: $(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py ;
+$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.h: $(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py ;
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py \
+	$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.cc \
+	$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.h
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+$(gyp_intermediate_dir)/debug.pb.cc: $(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.cc
+	mkdir -p $(@D); cp $< $@
+LOCAL_GENERATED_SOURCES := \
+	$(gyp_intermediate_dir)/debug.pb.cc \
+	$(gyp_shared_intermediate_dir)/pyproto/webrtc/audio_processing/debug_pb2.py \
+	$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing/debug.pb.h
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS := \
+	$(gyp_shared_intermediate_dir)/protoc_out/webrtc/audio_processing
+
+LOCAL_SRC_FILES :=
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DWEBRTC_RESTRICT_LOGGING' \
+	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
+	'-DWEBRTC_CHROMIUM_BUILD' \
+	'-DWEBRTC_POSIX' \
+	'-DWEBRTC_LINUX' \
+	'-DWEBRTC_ANDROID' \
+	'-DWEBRTC_ANDROID_OPENSLES' \
+	'-DPROTOBUF_USE_DLLS' \
+	'-DGOOGLE_PROTOBUF_NO_RTTI' \
+	'-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(LOCAL_PATH)/third_party \
+	$(LOCAL_PATH) \
+	$(gyp_shared_intermediate_dir)/protoc_out \
+	$(LOCAL_PATH)/third_party/protobuf \
+	$(LOCAL_PATH)/third_party/protobuf/src \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DWEBRTC_RESTRICT_LOGGING' \
+	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
+	'-DWEBRTC_CHROMIUM_BUILD' \
+	'-DWEBRTC_POSIX' \
+	'-DWEBRTC_LINUX' \
+	'-DWEBRTC_ANDROID' \
+	'-DWEBRTC_ANDROID_OPENSLES' \
+	'-DPROTOBUF_USE_DLLS' \
+	'-DGOOGLE_PROTOBUF_NO_RTTI' \
+	'-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(LOCAL_PATH)/third_party \
+	$(LOCAL_PATH) \
+	$(gyp_shared_intermediate_dir)/protoc_out \
+	$(LOCAL_PATH)/third_party/protobuf \
+	$(LOCAL_PATH)/third_party/protobuf/src \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES :=
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_webrtc_modules_audioproc_debug_proto_gyp
+
+# Alias gyp target name.
+.PHONY: audioproc_debug_proto
+audioproc_debug_proto: third_party_webrtc_modules_audioproc_debug_proto_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/bitrate_controller.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/bitrate_controller.target.darwin-arm64.mk
index c84869c..9ab4c78 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/bitrate_controller.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_bitrate_controller_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,18 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc \
+	third_party/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +49,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +91,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +109,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +127,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +146,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +188,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +207,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +235,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +249,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +271,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_bitrate_controller_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: bitrate_controller
+bitrate_controller: third_party_webrtc_modules_bitrate_controller_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/bitrate_controller.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/bitrate_controller.target.linux-arm64.mk
index c84869c..9ab4c78 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/bitrate_controller.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_bitrate_controller_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,18 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc \
+	third_party/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +49,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +91,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +109,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +127,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +146,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +188,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +207,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +235,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +249,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +271,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_bitrate_controller_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: bitrate_controller
+bitrate_controller: third_party_webrtc_modules_bitrate_controller_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/desktop_capture/differ.h b/modules/desktop_capture/differ.h
index 8edce80..0b419d2 100644
--- a/modules/desktop_capture/differ.h
+++ b/modules/desktop_capture/differ.h
@@ -76,7 +76,7 @@
   int bytes_per_row_;
 
   // Diff information for each block in the image.
-  scoped_array<DiffInfo> diff_info_;
+  scoped_ptr<DiffInfo[]> diff_info_;
 
   // Dimensions and total size of diff info array.
   int diff_info_width_;
diff --git a/modules/desktop_capture/differ_unittest.cc b/modules/desktop_capture/differ_unittest.cc
index 40fde4d..da1a214 100644
--- a/modules/desktop_capture/differ_unittest.cc
+++ b/modules/desktop_capture/differ_unittest.cc
@@ -200,8 +200,8 @@
   int buffer_size_;
 
   // Previous and current screen buffers.
-  scoped_array<uint8_t> prev_;
-  scoped_array<uint8_t> curr_;
+  scoped_ptr<uint8_t[]> prev_;
+  scoped_ptr<uint8_t[]> curr_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(DifferTest);
diff --git a/modules/desktop_capture/mouse_cursor.cc b/modules/desktop_capture/mouse_cursor.cc
index 07c89f0..22a9c0e 100644
--- a/modules/desktop_capture/mouse_cursor.cc
+++ b/modules/desktop_capture/mouse_cursor.cc
@@ -10,6 +10,8 @@
 
 #include "webrtc/modules/desktop_capture/mouse_cursor.h"
 
+#include <assert.h>
+
 #include "webrtc/modules/desktop_capture/desktop_frame.h"
 
 namespace webrtc {
diff --git a/modules/desktop_capture/screen_capture_frame_queue.cc b/modules/desktop_capture/screen_capture_frame_queue.cc
index b045f05..45a3507 100644
--- a/modules/desktop_capture/screen_capture_frame_queue.cc
+++ b/modules/desktop_capture/screen_capture_frame_queue.cc
@@ -10,6 +10,7 @@
 
 #include "webrtc/modules/desktop_capture/screen_capture_frame_queue.h"
 
+#include <assert.h>
 #include <algorithm>
 
 #include "webrtc/modules/desktop_capture/desktop_frame.h"
diff --git a/modules/desktop_capture/screen_capturer_helper.cc b/modules/desktop_capture/screen_capturer_helper.cc
index 75af043..86761c1 100644
--- a/modules/desktop_capture/screen_capturer_helper.cc
+++ b/modules/desktop_capture/screen_capturer_helper.cc
@@ -10,6 +10,7 @@
 
 #include "webrtc/modules/desktop_capture/screen_capturer_helper.h"
 
+#include <assert.h>
 #include <algorithm>
 
 #include "webrtc/system_wrappers/interface/logging.h"
diff --git a/modules/desktop_capture/win/cursor.cc b/modules/desktop_capture/win/cursor.cc
index 11bb2db..00055c4 100644
--- a/modules/desktop_capture/win/cursor.cc
+++ b/modules/desktop_capture/win/cursor.cc
@@ -137,7 +137,7 @@
 
   int width = bitmap_info.bmWidth;
   int height = bitmap_info.bmHeight;
-  scoped_array<uint32_t> mask_data(new uint32_t[width * height]);
+  scoped_ptr<uint32_t[]> mask_data(new uint32_t[width * height]);
 
   // Get pixel data from |scoped_mask| converting it to 32bpp along the way.
   // GetDIBits() sets the alpha component of every pixel to 0.
diff --git a/modules/desktop_capture/win/cursor_unittest.cc b/modules/desktop_capture/win/cursor_unittest.cc
index 9d23874..b046ace 100644
--- a/modules/desktop_capture/win/cursor_unittest.cc
+++ b/modules/desktop_capture/win/cursor_unittest.cc
@@ -62,7 +62,7 @@
 
   // Get the pixels from |scoped_color|.
   int size = width * height;
-  scoped_array<uint32_t> data(new uint32_t[size]);
+  scoped_ptr<uint32_t[]> data(new uint32_t[size]);
   EXPECT_TRUE(GetBitmapBits(scoped_color, size * sizeof(uint32_t), data.get()));
 
   // Compare the 32bpp image in |mouse_shape| with the one loaded from |right|.
diff --git a/modules/desktop_capture/window_capturer_mac.mm b/modules/desktop_capture/window_capturer_mac.mm
index 3ceae31..d177fc4 100644
--- a/modules/desktop_capture/window_capturer_mac.mm
+++ b/modules/desktop_capture/window_capturer_mac.mm
@@ -42,6 +42,18 @@
   return true;
 }
 
+bool IsWindowValid(CGWindowID id) {
+  CFArrayRef window_id_array =
+      CFArrayCreate(NULL, reinterpret_cast<const void **>(&id), 1, NULL);
+  CFArrayRef window_array =
+      CGWindowListCreateDescriptionFromArray(window_id_array);
+  bool valid = window_array && CFArrayGetCount(window_array);
+  CFRelease(window_id_array);
+  CFRelease(window_array);
+
+  return valid;
+}
+
 class WindowCapturerMac : public WindowCapturer {
  public:
   WindowCapturerMac();
@@ -115,22 +127,8 @@
 }
 
 bool WindowCapturerMac::SelectWindow(WindowId id) {
-  // Request description for the specified window to make sure |id| is valid.
-  CGWindowID ids[1];
-  ids[0] = id;
-  CFArrayRef window_id_array =
-      CFArrayCreate(NULL, reinterpret_cast<const void **>(&ids), 1, NULL);
-  CFArrayRef window_array =
-      CGWindowListCreateDescriptionFromArray(window_id_array);
-  int results_count = window_array ? CFArrayGetCount(window_array) : 0;
-  CFRelease(window_id_array);
-  CFRelease(window_array);
-
-  if (results_count == 0) {
-    // Could not find the window. It might have been closed.
+  if (!IsWindowValid(id))
     return false;
-  }
-
   window_id_ = id;
   return true;
 }
@@ -180,6 +178,11 @@
 }
 
 void WindowCapturerMac::Capture(const DesktopRegion& region) {
+  if (!IsWindowValid(window_id_)) {
+    callback_->OnCaptureCompleted(NULL);
+    return;
+  }
+
   CGImageRef window_image = CGWindowListCreateImage(
       CGRectNull, kCGWindowListOptionIncludingWindow,
       window_id_, kCGWindowImageBoundsIgnoreFraming);
diff --git a/modules/desktop_capture/window_capturer_win.cc b/modules/desktop_capture/window_capturer_win.cc
index b9764b3..a002185 100644
--- a/modules/desktop_capture/window_capturer_win.cc
+++ b/modules/desktop_capture/window_capturer_win.cc
@@ -182,8 +182,8 @@
     return;
   }
 
-  // Stop capturing if the window has been minimized or hidden.
-  if (IsIconic(window_) || !IsWindowVisible(window_)) {
+  // Stop capturing if the window has been closed or hidden.
+  if (!IsWindow(window_) || !IsWindowVisible(window_)) {
     callback_->OnCaptureCompleted(NULL);
     return;
   }
diff --git a/modules/desktop_capture/window_capturer_x11.cc b/modules/desktop_capture/window_capturer_x11.cc
index baeb894..b641c93 100755
--- a/modules/desktop_capture/window_capturer_x11.cc
+++ b/modules/desktop_capture/window_capturer_x11.cc
@@ -278,6 +278,12 @@
 }
 
 void WindowCapturerLinux::Capture(const DesktopRegion& region) {
+  if (!x_server_pixel_buffer_.IsWindowValid()) {
+    LOG(LS_INFO) << "The window is no longer valid.";
+    callback_->OnCaptureCompleted(NULL);
+    return;
+  }
+
   x_display_->ProcessPendingXEvents();
 
   if (!has_composite_extension_) {
diff --git a/modules/desktop_capture/x11/x_server_pixel_buffer.cc b/modules/desktop_capture/x11/x_server_pixel_buffer.cc
index 6983a6d..be00fa7 100644
--- a/modules/desktop_capture/x11/x_server_pixel_buffer.cc
+++ b/modules/desktop_capture/x11/x_server_pixel_buffer.cc
@@ -213,6 +213,18 @@
   return true;
 }
 
+bool XServerPixelBuffer::IsWindowValid() const {
+  XWindowAttributes attributes;
+  {
+    XErrorTrap error_trap(display_);
+    if (!XGetWindowAttributes(display_, window_, &attributes) ||
+        error_trap.GetLastErrorAndDisable() != 0) {
+      return false;
+    }
+  }
+  return true;
+}
+
 void XServerPixelBuffer::Synchronize() {
   if (shm_segment_info_ && !shm_pixmap_) {
     // XShmGetImage can fail if the display is being reconfigured.
diff --git a/modules/desktop_capture/x11/x_server_pixel_buffer.h b/modules/desktop_capture/x11/x_server_pixel_buffer.h
index b81096c..98f263f 100644
--- a/modules/desktop_capture/x11/x_server_pixel_buffer.h
+++ b/modules/desktop_capture/x11/x_server_pixel_buffer.h
@@ -40,6 +40,9 @@
   // Returns the size of the window the buffer was initialized for.
   const DesktopSize& window_size() { return window_size_; }
 
+  // Returns true if the window can be found.
+  bool IsWindowValid() const;
+
   // If shared memory is being used without pixmaps, synchronize this pixel
   // buffer with the root window contents (otherwise, this is a no-op).
   // This is to avoid doing a full-screen capture for each individual
diff --git a/modules/iLBC.target.darwin-arm64.mk b/modules/iLBC.target.darwin-arm64.mk
new file mode 100644
index 0000000..48a373e
--- /dev/null
+++ b/modules/iLBC.target.darwin-arm64.mk
@@ -0,0 +1,354 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := third_party_webrtc_modules_iLBC_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/abs_quant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/abs_quant_loop.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/augmented_cb_corr.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/bw_expand.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_construct.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy_augmentation.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy_calc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_search.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_search_core.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_update_best_index.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/chebyshev.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/comp_corr.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/constants.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/create_augmented_vec.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/decode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/decode_residual.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/decoder_interpolate_lsf.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/do_plc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/energy_inverse.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/enh_upsample.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/enhancer.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/enhancer_interface.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/filtered_cb_vecs.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/frame_classify.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/gain_dequant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/gain_quant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/get_cd_vec.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/get_lsp_poly.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/get_sync_seq.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/hp_input.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/hp_output.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/ilbc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/index_conv_dec.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/index_conv_enc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/init_decode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/init_encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/interpolate.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/interpolate_samples.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lpc_encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_check.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_interpolate_to_poly_dec.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_interpolate_to_poly_enc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_to_lsp.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_to_poly.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsp_to_lsf.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/my_corr.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/nearest_neighbor.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/pack_bits.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/poly_to_lsf.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/poly_to_lsp.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/refiner.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/simple_interpolate_lsf.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/simple_lpc_analysis.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/simple_lsf_dequant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/simple_lsf_quant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/smooth.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/smooth_out_data.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/sort_sq.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/split_vq.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/state_construct.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/state_search.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/swap_bytes.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/unpack_bits.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/vq3.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/vq4.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/window32_w32.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/xcorr_coef.c
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DWEBRTC_RESTRICT_LOGGING' \
+	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
+	'-DWEBRTC_CHROMIUM_BUILD' \
+	'-DWEBRTC_POSIX' \
+	'-DWEBRTC_LINUX' \
+	'-DWEBRTC_ANDROID' \
+	'-DWEBRTC_ANDROID_OPENSLES' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(LOCAL_PATH)/third_party \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
+	$(LOCAL_PATH)/third_party/webrtc \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DWEBRTC_RESTRICT_LOGGING' \
+	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
+	'-DWEBRTC_CHROMIUM_BUILD' \
+	'-DWEBRTC_POSIX' \
+	'-DWEBRTC_LINUX' \
+	'-DWEBRTC_ANDROID' \
+	'-DWEBRTC_ANDROID_OPENSLES' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(LOCAL_PATH)/third_party \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
+	$(LOCAL_PATH)/third_party/webrtc \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES :=
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_webrtc_modules_iLBC_gyp
+
+# Alias gyp target name.
+.PHONY: iLBC
+iLBC: third_party_webrtc_modules_iLBC_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/iLBC.target.linux-arm64.mk b/modules/iLBC.target.linux-arm64.mk
new file mode 100644
index 0000000..48a373e
--- /dev/null
+++ b/modules/iLBC.target.linux-arm64.mk
@@ -0,0 +1,354 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := third_party_webrtc_modules_iLBC_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/abs_quant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/abs_quant_loop.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/augmented_cb_corr.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/bw_expand.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_construct.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy_augmentation.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_mem_energy_calc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_search.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_search_core.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/cb_update_best_index.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/chebyshev.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/comp_corr.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/constants.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/create_augmented_vec.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/decode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/decode_residual.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/decoder_interpolate_lsf.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/do_plc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/energy_inverse.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/enh_upsample.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/enhancer.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/enhancer_interface.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/filtered_cb_vecs.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/frame_classify.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/gain_dequant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/gain_quant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/get_cd_vec.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/get_lsp_poly.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/get_sync_seq.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/hp_input.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/hp_output.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/ilbc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/index_conv_dec.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/index_conv_enc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/init_decode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/init_encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/interpolate.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/interpolate_samples.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lpc_encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_check.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_interpolate_to_poly_dec.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_interpolate_to_poly_enc.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_to_lsp.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsf_to_poly.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/lsp_to_lsf.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/my_corr.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/nearest_neighbor.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/pack_bits.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/poly_to_lsf.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/poly_to_lsp.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/refiner.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/simple_interpolate_lsf.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/simple_lpc_analysis.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/simple_lsf_dequant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/simple_lsf_quant.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/smooth.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/smooth_out_data.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/sort_sq.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/split_vq.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/state_construct.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/state_search.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/swap_bytes.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/unpack_bits.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/vq3.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/vq4.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/window32_w32.c \
+	third_party/webrtc/modules/audio_coding/codecs/ilbc/xcorr_coef.c
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DWEBRTC_RESTRICT_LOGGING' \
+	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
+	'-DWEBRTC_CHROMIUM_BUILD' \
+	'-DWEBRTC_POSIX' \
+	'-DWEBRTC_LINUX' \
+	'-DWEBRTC_ANDROID' \
+	'-DWEBRTC_ANDROID_OPENSLES' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(LOCAL_PATH)/third_party \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
+	$(LOCAL_PATH)/third_party/webrtc \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-fno-builtin-cos \
+	-fno-builtin-sin \
+	-fno-builtin-cosf \
+	-fno-builtin-sinf \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DWEBRTC_RESTRICT_LOGGING' \
+	'-DWEBRTC_MODULE_UTILITY_VIDEO' \
+	'-DWEBRTC_CHROMIUM_BUILD' \
+	'-DWEBRTC_POSIX' \
+	'-DWEBRTC_LINUX' \
+	'-DWEBRTC_ANDROID' \
+	'-DWEBRTC_ANDROID_OPENSLES' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(LOCAL_PATH)/third_party \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/ilbc/interface \
+	$(LOCAL_PATH)/third_party/webrtc \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES :=
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_webrtc_modules_iLBC_gyp
+
+# Alias gyp target name.
+.PHONY: iLBC
+iLBC: third_party_webrtc_modules_iLBC_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/iSAC.target.darwin-arm64.mk
similarity index 70%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/iSAC.target.darwin-arm64.mk
index c84869c..b0f1e93 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/iSAC.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_iSAC_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,44 +23,38 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/arith_routines.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/arith_routines_hist.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/arith_routines_logist.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/bandwidth_estimator.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/crc.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/decode.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/decode_bwe.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/encode_lpc_swb.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/entropy_coding.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/fft.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/filter_functions.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/filterbank_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/intialize.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/isac.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/filterbanks.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_lag_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lattice.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_gain_swb_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_analysis.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_shape_swb12_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_shape_swb16_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_estimator.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_filter.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_gain_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/spectrum_ar_model_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/transform.c
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +74,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +116,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,9 +134,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -169,7 +156,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +175,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +217,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,9 +236,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -289,8 +268,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +282,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +304,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_iSAC_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: iSAC
+iSAC: third_party_webrtc_modules_iSAC_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/iSAC.target.linux-arm64.mk
similarity index 70%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/iSAC.target.linux-arm64.mk
index c84869c..b0f1e93 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/iSAC.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_iSAC_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,44 +23,38 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/arith_routines.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/arith_routines_hist.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/arith_routines_logist.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/bandwidth_estimator.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/crc.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/decode.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/decode_bwe.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/encode_lpc_swb.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/entropy_coding.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/fft.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/filter_functions.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/filterbank_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/intialize.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/isac.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/filterbanks.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_lag_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lattice.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_gain_swb_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_analysis.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_shape_swb12_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_shape_swb16_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_estimator.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_filter.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_gain_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/spectrum_ar_model_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/main/source/transform.c
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +74,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +116,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,9 +134,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -169,7 +156,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +175,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +217,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,9 +236,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/main/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
@@ -289,8 +268,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +282,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +304,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_iSAC_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: iSAC
+iSAC: third_party_webrtc_modules_iSAC_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/iSACFix.target.darwin-arm64.mk
similarity index 70%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/iSACFix.target.darwin-arm64.mk
index c84869c..7275617 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/iSACFix.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_iSACFix_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,44 +23,36 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/arith_routines.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/arith_routines_hist.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/arith_routines_logist.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/decode.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/decode_bwe.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/decode_plc.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/entropy_coding.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/fft.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/filterbank_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/filterbanks.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/filters.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/initialize.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/isacfix.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/lattice.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/lattice_c.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/lpc_masking_model.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/lpc_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_estimator.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_filter.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_filter_c.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_gain_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_lag_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/spectrum_ar_model_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/transform.c
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +72,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +114,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +132,12 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +155,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +174,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +216,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +235,12 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +268,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +282,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +304,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_iSACFix_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: iSACFix
+iSACFix: third_party_webrtc_modules_iSACFix_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/iSACFix.target.linux-arm64.mk
similarity index 70%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/iSACFix.target.linux-arm64.mk
index c84869c..7275617 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/iSACFix.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_iSACFix_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,44 +23,36 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/arith_routines.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/arith_routines_hist.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/arith_routines_logist.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/decode.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/decode_bwe.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/decode_plc.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/encode.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/entropy_coding.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/fft.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/filterbank_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/filterbanks.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/filters.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/initialize.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/isacfix.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/lattice.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/lattice_c.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/lpc_masking_model.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/lpc_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_estimator.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_filter.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_filter_c.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_gain_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/pitch_lag_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/spectrum_ar_model_tables.c \
+	third_party/webrtc/modules/audio_coding/codecs/isac/fix/source/transform.c
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +72,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +114,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +132,12 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +155,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +174,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +216,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +235,12 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/isac/fix/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +268,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +282,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +304,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_iSACFix_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: iSACFix
+iSACFix: third_party_webrtc_modules_iSACFix_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/media_file.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/media_file.target.darwin-arm64.mk
index c84869c..f663425 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/media_file.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_media_file_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,19 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/media_file/source/avi_file.cc \
+	third_party/webrtc/modules/media_file/source/media_file_impl.cc \
+	third_party/webrtc/modules/media_file/source/media_file_utility.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +50,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +92,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +110,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +130,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +149,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +191,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +210,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +240,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +254,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +276,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_media_file_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: media_file
+media_file: third_party_webrtc_modules_media_file_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/media_file.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/media_file.target.linux-arm64.mk
index c84869c..f663425 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/media_file.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_media_file_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,19 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/media_file/source/avi_file.cc \
+	third_party/webrtc/modules/media_file/source/media_file_impl.cc \
+	third_party/webrtc/modules/media_file/source/media_file_utility.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +50,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +92,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +110,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +130,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +149,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +191,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +210,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +240,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +254,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +276,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_media_file_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: media_file
+media_file: third_party_webrtc_modules_media_file_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/modules.gyp b/modules/modules.gyp
index 8fd0714..444c665 100644
--- a/modules/modules.gyp
+++ b/modules/modules.gyp
@@ -16,8 +16,7 @@
     'audio_coding/codecs/isac/main/source/isac.gypi',
     'audio_coding/codecs/isac/fix/source/isacfix.gypi',
     'audio_coding/codecs/pcm16b/pcm16b.gypi',
-    'audio_coding/main/source/audio_coding_module.gypi',
-    'audio_coding/neteq/neteq.gypi',
+    'audio_coding/main/acm2/audio_coding_module.gypi',
     'audio_coding/neteq4/neteq.gypi',
     'audio_conference_mixer/source/audio_conference_mixer.gypi',
     'audio_device/audio_device.gypi',
@@ -76,7 +75,6 @@
             'desktop_capture',
             'iSACFix',
             'media_file',
-            'NetEq',
             'NetEq4',
             'NetEq4TestTools',
             'neteq_unittest_tools',
@@ -107,7 +105,6 @@
             'audio_coding/main/acm2/call_statistics_unittest.cc',
             'audio_coding/main/acm2/initial_delay_manager_unittest.cc',
             'audio_coding/main/acm2/nack_unittest.cc',
-            'audio_coding/main/source/acm_neteq_unittest.cc',
             'audio_coding/codecs/cng/cng_unittest.cc',
             'audio_coding/codecs/isac/fix/source/filters_unittest.cc',
             'audio_coding/codecs/isac/fix/source/filterbanks_unittest.cc',
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/paced_sender.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/paced_sender.target.darwin-arm64.mk
index c84869c..7708ece 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/paced_sender.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_paced_sender_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,17 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/pacing/paced_sender.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +48,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +126,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +145,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +187,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +206,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +234,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +248,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +270,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_paced_sender_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: paced_sender
+paced_sender: third_party_webrtc_modules_paced_sender_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/paced_sender.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/paced_sender.target.linux-arm64.mk
index c84869c..7708ece 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/paced_sender.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_paced_sender_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,17 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/pacing/paced_sender.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +48,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +126,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +145,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +187,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +206,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +234,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +248,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +270,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_paced_sender_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: paced_sender
+paced_sender: third_party_webrtc_modules_paced_sender_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/remote_bitrate_estimator.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/remote_bitrate_estimator.target.darwin-arm64.mk
index c84869c..67fb35d 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/remote_bitrate_estimator.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_remote_bitrate_estimator_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,18 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/remote_bitrate_estimator/rate_statistics.cc \
+	third_party/webrtc/modules/remote_bitrate_estimator/rtp_to_ntp.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +49,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +91,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +109,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +127,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +146,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +188,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +207,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +235,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +249,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +271,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_remote_bitrate_estimator_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: remote_bitrate_estimator
+remote_bitrate_estimator: third_party_webrtc_modules_remote_bitrate_estimator_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/remote_bitrate_estimator.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/remote_bitrate_estimator.target.linux-arm64.mk
index c84869c..67fb35d 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/remote_bitrate_estimator.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_remote_bitrate_estimator_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,18 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/remote_bitrate_estimator/rate_statistics.cc \
+	third_party/webrtc/modules/remote_bitrate_estimator/rtp_to_ntp.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +49,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +91,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +109,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +127,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +146,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +188,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +207,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +235,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +249,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +271,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_remote_bitrate_estimator_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: remote_bitrate_estimator
+remote_bitrate_estimator: third_party_webrtc_modules_remote_bitrate_estimator_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/remote_bitrate_estimator/bwe_simulations.cc b/modules/remote_bitrate_estimator/bwe_simulations.cc
index e4c67b5..6b208e4 100644
--- a/modules/remote_bitrate_estimator/bwe_simulations.cc
+++ b/modules/remote_bitrate_estimator/bwe_simulations.cc
@@ -8,65 +8,63 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include "gtest/gtest.h"
 #include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
 #include "webrtc/modules/remote_bitrate_estimator/test/bwe_test.h"
 #include "webrtc/test/testsupport/fileutils.h"
 
+using std::string;
+
 namespace webrtc {
 namespace testing {
 namespace bwe {
 #if BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
-std::vector<BweTestConfig::EstimatorConfig> SingleEstimatorConfig() {
+BweTestConfig::EstimatorConfig CreateEstimatorConfig(
+    int flow_id, bool plot_delay, bool plot_estimate) {
   static const AbsoluteSendTimeRemoteBitrateEstimatorFactory factory =
       AbsoluteSendTimeRemoteBitrateEstimatorFactory();
 
-  std::vector<BweTestConfig::EstimatorConfig> result;
-  result.push_back(BweTestConfig::EstimatorConfig("AST", &factory, kAimdControl,
-                                                  false));
+  return BweTestConfig::EstimatorConfig("AST", flow_id, &factory, kAimdControl,
+                                        plot_delay, plot_estimate);
+}
+
+BweTestConfig MakeAdaptiveBweTestConfig() {
+  BweTestConfig result;
+  result.estimator_configs.push_back(CreateEstimatorConfig(0, true, true));
   return result;
 }
 
-std::vector<const PacketSenderFactory*> AdaptiveVideoSenderFactories(
-    uint32_t count) {
-  static const AdaptiveVideoPacketSenderFactory factories[] = {
-    AdaptiveVideoPacketSenderFactory(30.00f, 150, 0x1234, 0.13f),
-    AdaptiveVideoPacketSenderFactory(30.00f, 300, 0x3456, 0.26f),
-    AdaptiveVideoPacketSenderFactory(15.00f, 600, 0x4567, 0.39f),
-  };
-
-  assert(count <= sizeof(factories) / sizeof(factories[0]));
-
-  std::vector<const PacketSenderFactory*> result;
-  for (uint32_t i = 0; i < count; ++i) {
-    result.push_back(&factories[i]);
+BweTestConfig MakeMultiFlowBweTestConfig(int flow_count) {
+  BweTestConfig result;
+  for (int i = 0; i < flow_count; ++i) {
+    result.estimator_configs.push_back(CreateEstimatorConfig(i, false, true));
   }
   return result;
 }
 
-BweTestConfig MakeAdaptiveBweTestConfig(uint32_t sender_count) {
-  BweTestConfig result = {
-    AdaptiveVideoSenderFactories(sender_count), SingleEstimatorConfig()
-  };
-  return result;
-}
-
 // This test fixture is used to instantiate tests running with adaptive video
 // senders.
-class BweSimulation : public BweTest {
+class BweSimulation : public BweTest,
+                      public ::testing::TestWithParam<BweTestConfig> {
  public:
   BweSimulation() : BweTest() {}
   virtual ~BweSimulation() {}
 
+  virtual void SetUp() {
+    const BweTestConfig& config = GetParam();
+    SetupTestFromConfig(config);
+  }
+
  private:
   DISALLOW_COPY_AND_ASSIGN(BweSimulation);
 };
 
 INSTANTIATE_TEST_CASE_P(VideoSendersTest, BweSimulation,
-    ::testing::Values(MakeAdaptiveBweTestConfig(1),
-                      MakeAdaptiveBweTestConfig(3)));
+    ::testing::Values(MakeAdaptiveBweTestConfig()));
 
 TEST_P(BweSimulation, SprintUplinkTest) {
   VerboseLogging(true);
+  AdaptiveVideoSender sender(0, this, 30, 300, 0, 0);
   RateCounterFilter counter1(this, "sender_output");
   TraceBasedDeliveryFilter filter(this, "link_capacity");
   RateCounterFilter counter2(this, "receiver_input");
@@ -76,6 +74,7 @@
 
 TEST_P(BweSimulation, Verizon4gDownlinkTest) {
   VerboseLogging(true);
+  AdaptiveVideoSender sender(0, this, 30, 300, 0, 0);
   RateCounterFilter counter1(this, "sender_output");
   TraceBasedDeliveryFilter filter(this, "link_capacity");
   RateCounterFilter counter2(this, "receiver_input");
@@ -85,6 +84,7 @@
 
 TEST_P(BweSimulation, Choke1000kbps500kbps1000kbps) {
   VerboseLogging(true);
+  AdaptiveVideoSender sender(0, this, 30, 300, 0, 0);
   ChokeFilter filter(this);
   RateCounterFilter counter(this, "receiver_input");
   filter.SetCapacity(1000);
@@ -98,6 +98,7 @@
 
 TEST_P(BweSimulation, Choke200kbps30kbps200kbps) {
   VerboseLogging(true);
+  AdaptiveVideoSender sender(0, this, 30, 300, 0, 0);
   ChokeFilter filter(this);
   RateCounterFilter counter(this, "receiver_input");
   filter.SetCapacity(200);
@@ -111,6 +112,7 @@
 
 TEST_P(BweSimulation, GoogleWifiTrace3Mbps) {
   VerboseLogging(true);
+  AdaptiveVideoSender sender(0, this, 30, 300, 0, 0);
   RateCounterFilter counter1(this, "sender_output");
   TraceBasedDeliveryFilter filter(this, "link_capacity");
   filter.SetMaxDelay(500);
@@ -118,6 +120,42 @@
   ASSERT_TRUE(filter.Init(test::ResourcePath("google-wifi-3mbps", "rx")));
   RunFor(300 * 1000);
 }
+
+class MultiFlowBweSimulation : public BweSimulation {
+ public:
+  MultiFlowBweSimulation() : BweSimulation() {}
+  virtual ~MultiFlowBweSimulation() {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MultiFlowBweSimulation);
+};
+
+INSTANTIATE_TEST_CASE_P(VideoSendersTest, MultiFlowBweSimulation,
+    ::testing::Values(MakeMultiFlowBweTestConfig(3)));
+
+TEST_P(MultiFlowBweSimulation, SelfFairnessTest) {
+  VerboseLogging(true);
+  const int kAllFlowIds[] = {0, 1, 2};
+  const size_t kNumFlows = sizeof(kAllFlowIds) / sizeof(kAllFlowIds[0]);
+  scoped_ptr<AdaptiveVideoSender> senders[kNumFlows];
+  for (size_t i = 0; i < kNumFlows; ++i) {
+    senders[i].reset(new AdaptiveVideoSender(kAllFlowIds[i], this, 30, 300, 0,
+                                             0));
+  }
+  // Second and third flow.
+  ChokeFilter choke(this, CreateFlowIds(&kAllFlowIds[1], 2));
+  choke.SetCapacity(1500);
+  // First flow.
+  ChokeFilter choke2(this, CreateFlowIds(&kAllFlowIds[0], 1));
+  choke2.SetCapacity(1000);
+
+  scoped_ptr<RateCounterFilter> rate_counters[kNumFlows];
+  for (size_t i = 0; i < kNumFlows; ++i) {
+    rate_counters[i].reset(new RateCounterFilter(
+        this, CreateFlowIds(&kAllFlowIds[i], 1), "receiver_input"));
+  }
+  RunFor(30 * 60 * 1000);
+}
 #endif  // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
 }  // namespace bwe
 }  // namespace testing
diff --git a/modules/remote_bitrate_estimator/include/rtp_to_ntp.h b/modules/remote_bitrate_estimator/include/rtp_to_ntp.h
index 7928abf..08a4d46 100644
--- a/modules/remote_bitrate_estimator/include/rtp_to_ntp.h
+++ b/modules/remote_bitrate_estimator/include/rtp_to_ntp.h
@@ -29,6 +29,15 @@
 
 typedef std::list<RtcpMeasurement> RtcpList;
 
+// Updates |rtcp_list| with timestamps from the latest RTCP SR.
+// |new_rtcp_sr| will be set to true if these are the timestamps which have
+// never be added to |rtcp_list|.
+bool UpdateRtcpList(uint32_t ntp_secs,
+                    uint32_t ntp_frac,
+                    uint32_t rtp_timestamp,
+                    RtcpList* rtcp_list,
+                    bool* new_rtcp_sr);
+
 // Converts an RTP timestamp to the NTP domain in milliseconds using two
 // (RTP timestamp, NTP timestamp) pairs.
 bool RtpToNtpMs(int64_t rtp_timestamp, const RtcpList& rtcp,
diff --git a/modules/remote_bitrate_estimator/rate_statistics.cc b/modules/remote_bitrate_estimator/rate_statistics.cc
index 4a9b448..48485ff 100644
--- a/modules/remote_bitrate_estimator/rate_statistics.cc
+++ b/modules/remote_bitrate_estimator/rate_statistics.cc
@@ -10,6 +10,8 @@
 
 #include "webrtc/modules/remote_bitrate_estimator/rate_statistics.h"
 
+#include <assert.h>
+
 namespace webrtc {
 
 RateStatistics::RateStatistics(uint32_t window_size_ms, float scale)
diff --git a/modules/remote_bitrate_estimator/rate_statistics.h b/modules/remote_bitrate_estimator/rate_statistics.h
index 4296690..f97371b 100644
--- a/modules/remote_bitrate_estimator/rate_statistics.h
+++ b/modules/remote_bitrate_estimator/rate_statistics.h
@@ -34,7 +34,7 @@
   // Counters are kept in buckets (circular buffer), with one bucket
   // per millisecond.
   const int num_buckets_;
-  scoped_array<uint32_t> buckets_;
+  scoped_ptr<uint32_t[]> buckets_;
 
   // Total count recorded in buckets.
   uint32_t accumulated_count_;
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/remote_bitrate_estimator/rbe_components.target.darwin-arm64.mk
similarity index 63%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/remote_bitrate_estimator/rbe_components.target.darwin-arm64.mk
index c84869c..de6b173 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/remote_bitrate_estimator/rbe_components.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_remote_bitrate_estimator_rbe_components_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,19 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/remote_bitrate_estimator/overuse_detector.cc \
+	third_party/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc \
+	third_party/webrtc/modules/remote_bitrate_estimator/remote_rate_control.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +46,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +88,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +106,6 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +123,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +138,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +180,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +199,6 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +226,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +240,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +262,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_remote_bitrate_estimator_rbe_components_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: rbe_components
+rbe_components: third_party_webrtc_modules_remote_bitrate_estimator_rbe_components_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/remote_bitrate_estimator/rbe_components.target.linux-arm64.mk
similarity index 63%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/remote_bitrate_estimator/rbe_components.target.linux-arm64.mk
index c84869c..de6b173 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/remote_bitrate_estimator/rbe_components.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_remote_bitrate_estimator_rbe_components_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,19 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/remote_bitrate_estimator/overuse_detector.cc \
+	third_party/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc \
+	third_party/webrtc/modules/remote_bitrate_estimator/remote_rate_control.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +46,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +88,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +106,6 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +123,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +138,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +180,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +199,6 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +226,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +240,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +262,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_remote_bitrate_estimator_rbe_components_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: rbe_components
+rbe_components: third_party_webrtc_modules_remote_bitrate_estimator_rbe_components_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimators_test.cc b/modules/remote_bitrate_estimator/remote_bitrate_estimators_test.cc
index e4fb4fa..67b6084 100644
--- a/modules/remote_bitrate_estimator/remote_bitrate_estimators_test.cc
+++ b/modules/remote_bitrate_estimator/remote_bitrate_estimators_test.cc
@@ -8,72 +8,95 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include <sstream>
+
 #include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
 #include "webrtc/modules/remote_bitrate_estimator/test/bwe_test.h"
 #include "webrtc/test/testsupport/fileutils.h"
+#include "webrtc/test/testsupport/perf_test.h"
+
+using std::string;
 
 namespace webrtc {
 namespace testing {
 namespace bwe {
-std::vector<const PacketSenderFactory*> VideoSenderFactories(uint32_t count) {
-  static const VideoPacketSenderFactory factories[] = {
-    VideoPacketSenderFactory(30.00f, 150, 0x1234, 0.13f),
-    VideoPacketSenderFactory(15.00f, 500, 0x2345, 0.16f),
-    VideoPacketSenderFactory(30.00f, 1200, 0x3456, 0.26f),
-    VideoPacketSenderFactory(7.49f, 150, 0x4567, 0.05f),
-    VideoPacketSenderFactory(7.50f, 150, 0x5678, 0.15f),
-    VideoPacketSenderFactory(7.51f, 150, 0x6789, 0.25f),
-    VideoPacketSenderFactory(15.02f, 150, 0x7890, 0.27f),
-    VideoPacketSenderFactory(15.03f, 150, 0x8901, 0.38f),
-    VideoPacketSenderFactory(30.02f, 150, 0x9012, 0.39f),
-    VideoPacketSenderFactory(30.03f, 150, 0x0123, 0.52f)
-  };
+enum Estimator { kAbsSendTime, kTransmissionOffset };
 
-  assert(count <= sizeof(factories) / sizeof(factories[0]));
-
-  std::vector<const PacketSenderFactory*> result;
-  for (uint32_t i = 0; i < count; ++i) {
-    result.push_back(&factories[i]);
-  }
-
-  return result;
-}
-
-std::vector<BweTestConfig::EstimatorConfig> EstimatorConfigs() {
+BweTestConfig::EstimatorConfig EstimatorConfigs(Estimator estimator,
+                                                int flow_id) {
   static const RemoteBitrateEstimatorFactory factories[] = {
     RemoteBitrateEstimatorFactory(),
     AbsoluteSendTimeRemoteBitrateEstimatorFactory()
   };
+  switch (estimator) {
+    case kTransmissionOffset:
+      return BweTestConfig::EstimatorConfig("TOF", flow_id, &factories[0],
+                                            kMimdControl, false, false);
+    case kAbsSendTime:
+      return BweTestConfig::EstimatorConfig("AST", flow_id, &factories[1],
+                                            kMimdControl, false, false);
+  }
+  assert(false);
+  return BweTestConfig::EstimatorConfig();
+}
 
-  std::vector<BweTestConfig::EstimatorConfig> result;
-  result.push_back(BweTestConfig::EstimatorConfig("TOF", &factories[0]));
-  result.push_back(BweTestConfig::EstimatorConfig("AST", &factories[1]));
+struct DefaultBweTestConfig {
+  BweTestConfig bwe_test_config;
+  size_t number_of_senders;
+};
+
+DefaultBweTestConfig MakeBweTestConfig(uint32_t sender_count,
+                                       Estimator estimator) {
+  DefaultBweTestConfig result;
+  result.bwe_test_config.estimator_configs.push_back(
+      EstimatorConfigs(estimator, 0));
+  result.number_of_senders = sender_count;
   return result;
 }
 
-BweTestConfig MakeBweTestConfig(uint32_t sender_count) {
-  BweTestConfig result = {
-    VideoSenderFactories(sender_count), EstimatorConfigs()
-  };
-  return result;
-}
+class DefaultBweTest : public BweTest,
+                       public ::testing::TestWithParam<DefaultBweTestConfig> {
+ public:
+  DefaultBweTest() : packet_senders_() {}
+  virtual ~DefaultBweTest() {}
 
-INSTANTIATE_TEST_CASE_P(VideoSendersTest, BweTest,
-    ::testing::Values(MakeBweTestConfig(1),
-                      MakeBweTestConfig(3)));
+  virtual void SetUp() {
+    const DefaultBweTestConfig& config = GetParam();
+    SetupTestFromConfig(config.bwe_test_config);
+    for (size_t i = 0; i < config.number_of_senders; ++i) {
+      packet_senders_.push_back(new VideoSender(0, this, 30, 300, 0, 0));
+    }
+  }
 
-TEST_P(BweTest, UnlimitedSpeed) {
+  virtual void TearDown() {
+    while (!packet_senders_.empty()) {
+      delete packet_senders_.front();
+      packet_senders_.pop_front();
+    }
+  }
+
+ protected:
+  std::list<PacketSender*> packet_senders_;
+};
+
+INSTANTIATE_TEST_CASE_P(VideoSendersTest, DefaultBweTest,
+    ::testing::Values(MakeBweTestConfig(1, kAbsSendTime),
+                      MakeBweTestConfig(3, kAbsSendTime),
+                      MakeBweTestConfig(1, kTransmissionOffset),
+                      MakeBweTestConfig(3, kTransmissionOffset)));
+
+TEST_P(DefaultBweTest, UnlimitedSpeed) {
   VerboseLogging(false);
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, DISABLED_SteadyLoss) {
+TEST_P(DefaultBweTest, DISABLED_SteadyLoss) {
   LossFilter loss(this);
   loss.SetLoss(20.0);
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, IncreasingLoss1) {
+TEST_P(DefaultBweTest, IncreasingLoss1) {
   LossFilter loss(this);
   for (int i = 0; i < 76; ++i) {
     loss.SetLoss(i);
@@ -81,13 +104,13 @@
   }
 }
 
-TEST_P(BweTest, SteadyDelay) {
+TEST_P(DefaultBweTest, SteadyDelay) {
   DelayFilter delay(this);
   delay.SetDelay(1000);
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, DISABLED_IncreasingDelay1) {
+TEST_P(DefaultBweTest, DISABLED_IncreasingDelay1) {
   DelayFilter delay(this);
   RunFor(10 * 60 * 1000);
   for (int i = 0; i < 30 * 2; ++i) {
@@ -97,7 +120,7 @@
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, IncreasingDelay2) {
+TEST_P(DefaultBweTest, IncreasingDelay2) {
   DelayFilter delay(this);
   RateCounterFilter counter(this);
   RunFor(1 * 60 * 1000);
@@ -109,7 +132,7 @@
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, JumpyDelay1) {
+TEST_P(DefaultBweTest, JumpyDelay1) {
   DelayFilter delay(this);
   RunFor(10 * 60 * 1000);
   for (int i = 1; i < 200; ++i) {
@@ -122,14 +145,14 @@
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, SteadyJitter) {
+TEST_P(DefaultBweTest, SteadyJitter) {
   JitterFilter jitter(this);
   RateCounterFilter counter(this);
   jitter.SetJitter(20);
   RunFor(2 * 60 * 1000);
 }
 
-TEST_P(BweTest, IncreasingJitter1) {
+TEST_P(DefaultBweTest, IncreasingJitter1) {
   JitterFilter jitter(this);
   for (int i = 0; i < 2 * 60 * 2; ++i) {
     jitter.SetJitter(i);
@@ -138,7 +161,7 @@
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, IncreasingJitter2) {
+TEST_P(DefaultBweTest, IncreasingJitter2) {
   JitterFilter jitter(this);
   RunFor(30 * 1000);
   for (int i = 1; i < 51; ++i) {
@@ -149,13 +172,13 @@
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, SteadyReorder) {
+TEST_P(DefaultBweTest, SteadyReorder) {
   ReorderFilter reorder(this);
   reorder.SetReorder(20.0);
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, IncreasingReorder1) {
+TEST_P(DefaultBweTest, IncreasingReorder1) {
   ReorderFilter reorder(this);
   for (int i = 0; i < 76; ++i) {
     reorder.SetReorder(i);
@@ -163,13 +186,13 @@
   }
 }
 
-TEST_P(BweTest, DISABLED_SteadyChoke) {
+TEST_P(DefaultBweTest, DISABLED_SteadyChoke) {
   ChokeFilter choke(this);
   choke.SetCapacity(140);
   RunFor(10 * 60 * 1000);
 }
 
-TEST_P(BweTest, DISABLED_IncreasingChoke1) {
+TEST_P(DefaultBweTest, DISABLED_IncreasingChoke1) {
   ChokeFilter choke(this);
   for (int i = 1200; i >= 100; i -= 100) {
     choke.SetCapacity(i);
@@ -177,7 +200,7 @@
   }
 }
 
-TEST_P(BweTest, DISABLED_IncreasingChoke2) {
+TEST_P(DefaultBweTest, DISABLED_IncreasingChoke2) {
   ChokeFilter choke(this);
   RunFor(60 * 1000);
   for (int i = 1200; i >= 100; i -= 20) {
@@ -186,7 +209,7 @@
   }
 }
 
-TEST_P(BweTest, DISABLED_Multi1) {
+TEST_P(DefaultBweTest, DISABLED_Multi1) {
   DelayFilter delay(this);
   ChokeFilter choke(this);
   RateCounterFilter counter(this);
@@ -201,7 +224,7 @@
   RunFor(5 * 60 * 1000);
 }
 
-TEST_P(BweTest, Multi2) {
+TEST_P(DefaultBweTest, Multi2) {
   ChokeFilter choke(this);
   JitterFilter jitter(this);
   RateCounterFilter counter(this);
@@ -209,6 +232,108 @@
   jitter.SetJitter(120);
   RunFor(5 * 60 * 1000);
 }
+
+// This test fixture is used to instantiate tests running with adaptive video
+// senders.
+class BweFeedbackTest : public BweTest,
+                        public ::testing::TestWithParam<BweTestConfig> {
+ public:
+  BweFeedbackTest() : BweTest() {}
+  virtual ~BweFeedbackTest() {}
+
+  virtual void SetUp() {
+    BweTestConfig config;
+    config.estimator_configs.push_back(EstimatorConfigs(kAbsSendTime, 0));
+    SetupTestFromConfig(config);
+  }
+
+  void PrintResults(double max_throughput_kbps, Stats<double> throughput_kbps,
+                    Stats<double> delay_ms) {
+    double utilization = throughput_kbps.GetMean() / max_throughput_kbps;
+    webrtc::test::PrintResult("BwePerformance",
+                              GetTestName(),
+                              "Utilization",
+                              utilization * 100.0,
+                              "%",
+                              false);
+    std::stringstream ss;
+    ss << throughput_kbps.GetStdDev() / throughput_kbps.GetMean();
+    webrtc::test::PrintResult("BwePerformance",
+                              GetTestName(),
+                              "Utilization var coeff",
+                              ss.str(),
+                              "",
+                              false);
+    webrtc::test::PrintResult("BwePerformance",
+                              GetTestName(),
+                              "Average delay",
+                              delay_ms.AsString(),
+                              "ms",
+                              false);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(BweFeedbackTest);
+};
+
+TEST_F(BweFeedbackTest, Choke1000kbps500kbps1000kbps) {
+  AdaptiveVideoSender sender(0, this, 30, 300, 0, 0);
+  ChokeFilter filter(this);
+  RateCounterFilter counter(this, "receiver_input");
+  const int kHighCapacityKbps = 1000;
+  const int kLowCapacityKbps = 500;
+  filter.SetCapacity(kHighCapacityKbps);
+  filter.SetMaxDelay(500);
+  RunFor(60 * 1000);
+  filter.SetCapacity(kLowCapacityKbps);
+  RunFor(60 * 1000);
+  filter.SetCapacity(kHighCapacityKbps);
+  RunFor(60 * 1000);
+  PrintResults((2 * kHighCapacityKbps + kLowCapacityKbps) / 3.0,
+               counter.GetBitrateStats(), filter.GetDelayStats());
+}
+
+TEST_F(BweFeedbackTest, Choke200kbps30kbps200kbps) {
+  AdaptiveVideoSender sender(0, this, 30, 300, 0, 0);
+  ChokeFilter filter(this);
+  RateCounterFilter counter(this, "receiver_input");
+  const int kHighCapacityKbps = 200;
+  const int kLowCapacityKbps = 30;
+  filter.SetCapacity(kHighCapacityKbps);
+  filter.SetMaxDelay(500);
+  RunFor(60 * 1000);
+  filter.SetCapacity(kLowCapacityKbps);
+  RunFor(60 * 1000);
+  filter.SetCapacity(kHighCapacityKbps);
+  RunFor(60 * 1000);
+
+  PrintResults((2 * kHighCapacityKbps + kLowCapacityKbps) / 3.0,
+               counter.GetBitrateStats(), filter.GetDelayStats());
+}
+
+TEST_F(BweFeedbackTest, Verizon4gDownlinkTest) {
+  AdaptiveVideoSender sender(0, this, 30, 300, 0, 0);
+  RateCounterFilter counter1(this, "sender_output");
+  TraceBasedDeliveryFilter filter(this, "link_capacity");
+  RateCounterFilter counter2(this, "receiver_input");
+  ASSERT_TRUE(filter.Init(test::ResourcePath("verizon4g-downlink", "rx")));
+  RunFor(22 * 60 * 1000);
+  PrintResults(filter.GetBitrateStats().GetMean(), counter2.GetBitrateStats(),
+               filter.GetDelayStats());
+}
+
+// webrtc:3277
+TEST_F(BweFeedbackTest, DISABLED_GoogleWifiTrace3Mbps) {
+  AdaptiveVideoSender sender(0, this, 30, 300, 0, 0);
+  RateCounterFilter counter1(this, "sender_output");
+  TraceBasedDeliveryFilter filter(this, "link_capacity");
+  filter.SetMaxDelay(500);
+  RateCounterFilter counter2(this, "receiver_input");
+  ASSERT_TRUE(filter.Init(test::ResourcePath("google-wifi-3mbps", "rx")));
+  RunFor(300 * 1000);
+  PrintResults(filter.GetBitrateStats().GetMean(), counter2.GetBitrateStats(),
+               filter.GetDelayStats());
+}
 }  // namespace bwe
 }  // namespace testing
 }  // namespace webrtc
diff --git a/modules/remote_bitrate_estimator/rtp_to_ntp.cc b/modules/remote_bitrate_estimator/rtp_to_ntp.cc
index 109edae..775cd0d 100644
--- a/modules/remote_bitrate_estimator/rtp_to_ntp.cc
+++ b/modules/remote_bitrate_estimator/rtp_to_ntp.cc
@@ -57,6 +57,40 @@
   return true;
 }
 
+bool UpdateRtcpList(uint32_t ntp_secs,
+                    uint32_t ntp_frac,
+                    uint32_t rtp_timestamp,
+                    RtcpList* rtcp_list,
+                    bool* new_rtcp_sr) {
+  *new_rtcp_sr = false;
+  if (ntp_secs == 0 && ntp_frac == 0) {
+    return false;
+  }
+
+  RtcpMeasurement measurement;
+  measurement.ntp_secs = ntp_secs;
+  measurement.ntp_frac = ntp_frac;
+  measurement.rtp_timestamp = rtp_timestamp;
+
+  for (RtcpList::iterator it = rtcp_list->begin();
+       it != rtcp_list->end(); ++it) {
+    if (measurement.ntp_secs == (*it).ntp_secs &&
+        measurement.ntp_frac == (*it).ntp_frac) {
+      // This RTCP has already been added to the list.
+      return true;
+    }
+  }
+
+  // We need two RTCP SR reports to map between RTP and NTP. More than two will
+  // not improve the mapping.
+  if (rtcp_list->size() == 2) {
+    rtcp_list->pop_back();
+  }
+  rtcp_list->push_front(measurement);
+  *new_rtcp_sr = true;
+  return true;
+}
+
 // Converts |rtp_timestamp| to the NTP time base using the NTP and RTP timestamp
 // pairs in |rtcp|. The converted timestamp is returned in
 // |rtp_timestamp_in_ms|. This function compensates for wrap arounds in RTP
diff --git a/modules/remote_bitrate_estimator/test/bwe_test.cc b/modules/remote_bitrate_estimator/test/bwe_test.cc
index c500291..90ce6a3 100644
--- a/modules/remote_bitrate_estimator/test/bwe_test.cc
+++ b/modules/remote_bitrate_estimator/test/bwe_test.cc
@@ -23,44 +23,40 @@
 namespace testing {
 namespace bwe {
 
-namespace stl_helpers {
-template<typename T> void DeleteElements(T* container) {
-  if (!container) return;
-  for (typename T::iterator it = container->begin(); it != container->end();
-      ++it) {
-    delete *it;
-  }
-  container->clear();
-}
-}  // namespace stl_helpers
-
-class BweTest::TestedEstimator : public RemoteBitrateObserver {
+class TestedEstimator : public RemoteBitrateObserver {
  public:
   static const uint32_t kRemoteBitrateEstimatorMinBitrateBps = 30000;
+  static const int kDelayPlotIntervalMs = 100;
 
   TestedEstimator(const string& test_name,
                   const BweTestConfig::EstimatorConfig& config)
       : debug_name_(config.debug_name),
+        delay_log_prefix_(),
+        estimate_log_prefix_(),
+        last_delay_plot_ms_(0),
+        plot_delay_(config.plot_delay),
+        plot_estimate_(config.plot_estimate),
         clock_(0),
         stats_(),
-        relative_estimator_stats_(),
         latest_estimate_bps_(-1),
         estimator_(config.estimator_factory->Create(
             this, &clock_, config.control_type,
             kRemoteBitrateEstimatorMinBitrateBps)),
-        relative_estimator_(NULL),
         baseline_(BaseLineFileInterface::Create(test_name + "_" + debug_name_,
                                                 config.update_baseline)) {
     assert(estimator_.get());
     assert(baseline_.get());
+    // Setup the prefix strings used when logging.
+    std::stringstream ss;
+    ss << "Delay_" << config.flow_id << "#2";
+    delay_log_prefix_ = ss.str();
+    ss.str("");
+    ss << "Estimate_" << config.flow_id << "#1";
+    estimate_log_prefix_ = ss.str();
     // Default RTT in RemoteRateControl is 200 ms ; 50 ms is more realistic.
     estimator_->OnRttUpdate(50);
   }
 
-  void SetRelativeEstimator(TestedEstimator* relative_estimator) {
-    relative_estimator_ = relative_estimator;
-  }
-
   void EatPacket(const Packet& packet) {
     BWE_TEST_LOGGING_CONTEXT(debug_name_);
 
@@ -70,9 +66,15 @@
     // time once packet reaches the estimator.
     int64_t packet_time_ms = (packet.send_time_us() + 500) / 1000;
     BWE_TEST_LOGGING_TIME(packet_time_ms);
-    BWE_TEST_LOGGING_PLOT("Delay_#2", clock_.TimeInMilliseconds(),
-                          packet_time_ms -
-                          (packet.creation_time_us() + 500) / 1000);
+    if (plot_delay_) {
+      if (clock_.TimeInMilliseconds() - last_delay_plot_ms_ >
+          kDelayPlotIntervalMs) {
+        BWE_TEST_LOGGING_PLOT(delay_log_prefix_, clock_.TimeInMilliseconds(),
+                              packet_time_ms -
+                              (packet.creation_time_us() + 500) / 1000);
+        last_delay_plot_ms_ = clock_.TimeInMilliseconds();
+      }
+    }
 
     int64_t step_ms = estimator_->TimeUntilNextProcess();
     while ((clock_.TimeInMilliseconds() + step_ms) < packet_time_ms) {
@@ -97,14 +99,9 @@
 
       double estimated_kbps = static_cast<double>(estimated_bps) / 1000.0;
       stats_.Push(estimated_kbps);
-      BWE_TEST_LOGGING_PLOT("Estimate_#1", clock_.TimeInMilliseconds(),
-                            estimated_kbps);
-      uint32_t relative_estimate_bps = 0;
-      if (relative_estimator_ &&
-          relative_estimator_->LatestEstimate(&relative_estimate_bps)) {
-        double relative_estimate_kbps =
-            static_cast<double>(relative_estimate_bps) / 1000.0;
-        relative_estimator_stats_.Push(estimated_kbps - relative_estimate_kbps);
+      if (plot_estimate_) {
+        BWE_TEST_LOGGING_PLOT(estimate_log_prefix_, clock_.TimeInMilliseconds(),
+                              estimated_kbps);
       }
       return true;
     }
@@ -115,10 +112,6 @@
     BWE_TEST_LOGGING_CONTEXT(debug_name_);
     BWE_TEST_LOGGING_CONTEXT("Mean");
     stats_.Log("kbps");
-    if (relative_estimator_) {
-      BWE_TEST_LOGGING_CONTEXT("Diff");
-      relative_estimator_stats_.Log("kbps");
-    }
   }
 
   void VerifyOrWriteBaseline() {
@@ -144,145 +137,217 @@
   }
 
   string debug_name_;
+  string delay_log_prefix_;
+  string estimate_log_prefix_;
+  int64_t last_delay_plot_ms_;
+  bool plot_delay_;
+  bool plot_estimate_;
   SimulatedClock clock_;
   Stats<double> stats_;
-  Stats<double> relative_estimator_stats_;
   int64_t latest_estimate_bps_;
   scoped_ptr<RemoteBitrateEstimator> estimator_;
-  TestedEstimator* relative_estimator_;
   scoped_ptr<BaseLineFileInterface> baseline_;
 
   DISALLOW_IMPLICIT_CONSTRUCTORS(TestedEstimator);
 };
 
+class PacketProcessorRunner {
+ public:
+  explicit PacketProcessorRunner(PacketProcessor* processor)
+      : processor_(processor) {}
+
+  bool HasProcessor(const PacketProcessor* processor) const {
+    return processor == processor_;
+  }
+
+  void RunFor(int64_t time_ms, int64_t time_now_ms, Packets* in_out) {
+    Packets to_process;
+    FindPacketsToProcess(processor_->flow_ids(), in_out, &to_process);
+    processor_->RunFor(time_ms, &to_process);
+    QueuePackets(&to_process, time_now_ms * 1000);
+    if (!to_process.empty()) {
+      processor_->Plot((to_process.back().send_time_us() + 500) / 1000);
+    }
+    in_out->merge(to_process);
+  }
+
+ private:
+  void FindPacketsToProcess(const FlowIds& flow_ids, Packets* in,
+                            Packets* out) {
+    assert(out->empty());
+    for (Packets::iterator it = in->begin(); it != in->end();) {
+      // TODO(holmer): Further optimize this by looking for consecutive flow ids
+      // in the packet list and only doing the binary search + splice once for a
+      // sequence.
+      if (std::binary_search(flow_ids.begin(), flow_ids.end(), it->flow_id())) {
+        Packets::iterator next = it;
+        ++next;
+        out->splice(out->end(), *in, it);
+        it = next;
+      } else {
+        ++it;
+      }
+    }
+  }
+
+  void QueuePackets(Packets* batch, int64_t end_of_batch_time_us) {
+    queue_.merge(*batch);
+    if (queue_.empty()) {
+      return;
+    }
+    Packets to_transfer;
+    Packets::iterator it = queue_.begin();
+    for (; it != queue_.end(); ++it) {
+      if (it->send_time_us() > end_of_batch_time_us) {
+        break;
+      }
+    }
+    to_transfer.splice(to_transfer.begin(), queue_, queue_.begin(), it);
+    batch->merge(to_transfer);
+  }
+
+  PacketProcessor* processor_;
+  Packets queue_;
+};
+
 BweTest::BweTest()
     : run_time_ms_(0),
+      time_now_ms_(-1),
       simulation_interval_ms_(-1),
-      previous_packets_(),
-      packet_senders_(),
       estimators_(),
       processors_() {
 }
 
 BweTest::~BweTest() {
-  stl_helpers::DeleteElements(&estimators_);
-  stl_helpers::DeleteElements(&packet_senders_);
+  BWE_TEST_LOGGING_GLOBAL_ENABLE(true);
+  for (EstimatorMap::iterator it = estimators_.begin(); it != estimators_.end();
+      ++it) {
+    it->second->VerifyOrWriteBaseline();
+    it->second->LogStats();
+  }
+  BWE_TEST_LOGGING_GLOBAL_CONTEXT("");
+
+  for (EstimatorMap::iterator it = estimators_.begin();
+       it != estimators_.end(); ++it) {
+    delete it->second;
+  }
 }
 
-void BweTest::SetUp() {
+void BweTest::SetupTestFromConfig(const BweTestConfig& config) {
   const ::testing::TestInfo* const test_info =
       ::testing::UnitTest::GetInstance()->current_test_info();
   string test_name =
       string(test_info->test_case_name()) + "_" + string(test_info->name());
   BWE_TEST_LOGGING_GLOBAL_CONTEXT(test_name);
-
-  const BweTestConfig& config = GetParam();
-
-  uint32_t total_capacity = 0;
-  for (vector<const PacketSenderFactory*>::const_iterator it =
-      config.sender_factories.begin(); it != config.sender_factories.end();
-      ++it) {
-    PacketSender* sender = (*it)->Create();
-    assert(sender);
-    total_capacity += sender->GetCapacityKbps();
-    packet_senders_.push_back(sender);
-    processors_.push_back(sender);
+  for (vector<BweTestConfig::EstimatorConfig>::const_iterator it =
+       config.estimator_configs.begin(); it != config.estimator_configs.end();
+       ++it) {
+    estimators_.insert(std::make_pair(it->flow_id, new TestedEstimator(
+        test_name, *it)));
   }
-  BWE_TEST_LOGGING_LOG1("RequiredLinkCapacity", "%d kbps", total_capacity)
-
-  // Set simulation interval from first packet sender.
-  if (packet_senders_.size() > 0) {
-    simulation_interval_ms_ = packet_senders_[0]->GetFeedbackIntervalMs();
-  }
-
-  for (vector<BweTestConfig::EstimatorConfig>:: const_iterator it =
-      config.estimator_configs.begin(); it != config.estimator_configs.end();
-      ++it) {
-    estimators_.push_back(new TestedEstimator(test_name, *it));
-  }
-  if (estimators_.size() > 1) {
-    // Set all estimators as relative to the first one.
-    for (uint32_t i = 1; i < estimators_.size(); ++i) {
-      estimators_[i]->SetRelativeEstimator(estimators_[0]);
-    }
-  }
-
   BWE_TEST_LOGGING_GLOBAL_ENABLE(false);
 }
 
-void BweTest::TearDown() {
-  BWE_TEST_LOGGING_GLOBAL_ENABLE(true);
-
-  for (vector<TestedEstimator*>::iterator eit = estimators_.begin();
-      eit != estimators_.end(); ++eit) {
-    (*eit)->VerifyOrWriteBaseline();
-    (*eit)->LogStats();
-  }
-
-  BWE_TEST_LOGGING_GLOBAL_CONTEXT("");
-}
-
-void BweTest::AddPacketProcessor(
-    PacketProcessor* processor) {
+void BweTest::AddPacketProcessor(PacketProcessor* processor, bool is_sender) {
   assert(processor);
-  processors_.push_back(processor);
+  processors_.push_back(PacketProcessorRunner(processor));
+  if (is_sender) {
+    senders_.push_back(static_cast<PacketSender*>(processor));
+  }
+  const FlowIds& flow_ids = processor->flow_ids();
+  for (size_t i = 0; i < flow_ids.size(); ++i) {
+    assert(estimators_.count(flow_ids[i]) == 1);
+  }
 }
 
 void BweTest::RemovePacketProcessor(
     PacketProcessor* processor) {
-  vector<PacketProcessor*>::iterator it =
-      std::find(processors_.begin(), processors_.end(), processor);
-  assert(it != processors_.end());
-  processors_.erase(it);
+  for (vector<PacketProcessorRunner>::iterator it = processors_.begin();
+       it != processors_.end(); ++it) {
+    if (it->HasProcessor(processor)) {
+      processors_.erase(it);
+      return;
+    }
+  }
+  assert(false);
 }
 
 void BweTest::VerboseLogging(bool enable) {
   BWE_TEST_LOGGING_GLOBAL_ENABLE(enable);
 }
 
+void BweTest::GiveFeedbackToAffectedSenders(int flow_id,
+                                            TestedEstimator* estimator) {
+  std::list<PacketSender*> affected_senders;
+  for (std::vector<PacketSender*>::iterator psit =
+       senders_.begin(); psit != senders_.end(); ++psit) {
+    const FlowIds& flow_ids = (*psit)->flow_ids();
+    if (std::binary_search(flow_ids.begin(), flow_ids.end(), flow_id)) {
+      affected_senders.push_back(*psit);
+    }
+  }
+  PacketSender::Feedback feedback = {0};
+  if (estimator->CheckEstimate(&feedback) && !affected_senders.empty()) {
+    // Allocate the bitrate evenly between the senders.
+    feedback.estimated_bps /= affected_senders.size();
+    for (std::list<PacketSender*>::iterator psit = affected_senders.begin();
+        psit != affected_senders.end(); ++psit) {
+      (*psit)->GiveFeedback(feedback);
+    }
+  }
+}
+
 void BweTest::RunFor(int64_t time_ms) {
-  for (run_time_ms_ += time_ms; run_time_ms_ >= simulation_interval_ms_;
-      run_time_ms_ -= simulation_interval_ms_) {
+  // Set simulation interval from first packet sender.
+  // TODO(holmer): Support different feedback intervals for different flows.
+  if (!senders_.empty()) {
+    simulation_interval_ms_ = senders_[0]->GetFeedbackIntervalMs();
+  }
+  assert(simulation_interval_ms_ > 0);
+  if (time_now_ms_ == -1) {
+    time_now_ms_ = simulation_interval_ms_;
+  }
+  for (run_time_ms_ += time_ms;
+       time_now_ms_ <= run_time_ms_ - simulation_interval_ms_;
+       time_now_ms_ += simulation_interval_ms_) {
     Packets packets;
-    for (vector<PacketProcessor*>::const_iterator it =
+    for (vector<PacketProcessorRunner>::iterator it =
          processors_.begin(); it != processors_.end(); ++it) {
-      (*it)->RunFor(simulation_interval_ms_, &packets);
-      if (!packets.empty()) {
-        (*it)->Plot((packets.back().send_time_us() + 500) / 1000);
-      }
+      it->RunFor(simulation_interval_ms_, time_now_ms_, &packets);
     }
 
     // Verify packets are in order between batches.
-    if (!packets.empty() && !previous_packets_.empty()) {
-      packets.splice(packets.begin(), previous_packets_,
-                     --previous_packets_.end());
-      ASSERT_TRUE(IsTimeSorted(packets));
-      packets.erase(packets.begin());
+    if (!packets.empty()) {
+      if (!previous_packets_.empty()) {
+        packets.splice(packets.begin(), previous_packets_,
+                       --previous_packets_.end());
+        ASSERT_TRUE(IsTimeSorted(packets));
+        packets.erase(packets.begin());
+      }
+      ASSERT_LE(packets.front().send_time_us(), time_now_ms_ * 1000);
+      ASSERT_LE(packets.back().send_time_us(), time_now_ms_ * 1000);
     } else {
       ASSERT_TRUE(IsTimeSorted(packets));
     }
 
-    for (PacketsConstIt pit = packets.begin(); pit != packets.end(); ++pit) {
-      for (vector<TestedEstimator*>::iterator eit = estimators_.begin();
-          eit != estimators_.end(); ++eit) {
-        (*eit)->EatPacket(*pit);
-      }
+    for (PacketsConstIt it = packets.begin(); it != packets.end(); ++it) {
+      EstimatorMap::iterator est_it = estimators_.find(it->flow_id());
+      ASSERT_TRUE(est_it != estimators_.end());
+      est_it->second->EatPacket(*it);
     }
 
-    previous_packets_.swap(packets);
-
-    for (vector<TestedEstimator*>::iterator eit = estimators_.begin();
-        eit != estimators_.end(); ++eit) {
-      PacketSender::Feedback feedback = {0};
-      if ((*eit)->CheckEstimate(&feedback)) {
-        for (vector<PacketSender*>::iterator psit = packet_senders_.begin();
-            psit != packet_senders_.end(); ++psit) {
-          (*psit)->GiveFeedback(feedback);
-        }
-      }
+    for (EstimatorMap::iterator est_it = estimators_.begin();
+         est_it != estimators_.end(); ++est_it) {
+      GiveFeedbackToAffectedSenders(est_it->first, est_it->second);
     }
   }
 }
+
+string BweTest::GetTestName() const {
+  const ::testing::TestInfo* const test_info =
+      ::testing::UnitTest::GetInstance()->current_test_info();
+  return string(test_info->name());
+}
 }  // namespace bwe
 }  // namespace testing
 }  // namespace webrtc
diff --git a/modules/remote_bitrate_estimator/test/bwe_test.h b/modules/remote_bitrate_estimator/test/bwe_test.h
index cb708f4..ef35179 100644
--- a/modules/remote_bitrate_estimator/test/bwe_test.h
+++ b/modules/remote_bitrate_estimator/test/bwe_test.h
@@ -8,6 +8,7 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include <map>
 #include <string>
 #include <vector>
 #include "gtest/gtest.h"
@@ -26,60 +27,96 @@
   struct EstimatorConfig {
     EstimatorConfig()
         : debug_name(),
+          flow_id(0),
           estimator_factory(NULL),
           control_type(kMimdControl),
-          update_baseline(false) {
+          update_baseline(false),
+          plot_delay(true),
+          plot_estimate(true) {
     }
     EstimatorConfig(std::string debug_name,
-                    const RemoteBitrateEstimatorFactory* estimator_factory)
+                    int flow_id,
+                    const RemoteBitrateEstimatorFactory* estimator_factory,
+                    bool plot_delay,
+                    bool plot_estimate)
         : debug_name(debug_name),
+          flow_id(flow_id),
           estimator_factory(estimator_factory),
           control_type(kMimdControl),
-          update_baseline(false) {
+          update_baseline(false),
+          plot_delay(plot_delay),
+          plot_estimate(plot_estimate) {
     }
     EstimatorConfig(std::string debug_name,
+                    int flow_id,
+                    const RemoteBitrateEstimatorFactory* estimator_factory,
+                    RateControlType control_type,
+                    bool plot_delay,
+                    bool plot_estimate)
+        : debug_name(debug_name),
+          flow_id(flow_id),
+          estimator_factory(estimator_factory),
+          control_type(control_type),
+          update_baseline(false),
+          plot_delay(plot_delay),
+          plot_estimate(plot_estimate) {
+    }
+    EstimatorConfig(std::string debug_name,
+                    int flow_id,
                     const RemoteBitrateEstimatorFactory* estimator_factory,
                     RateControlType control_type,
                     bool update_baseline)
         : debug_name(debug_name),
+          flow_id(flow_id),
           estimator_factory(estimator_factory),
           control_type(control_type),
-          update_baseline(update_baseline) {
+          update_baseline(update_baseline),
+          plot_delay(false),
+          plot_estimate(false) {
     }
     std::string debug_name;
+    int flow_id;
     const RemoteBitrateEstimatorFactory* estimator_factory;
     RateControlType control_type;
     bool update_baseline;
+    bool plot_delay;
+    bool plot_estimate;
   };
 
-  std::vector<const PacketSenderFactory*> sender_factories;
   std::vector<EstimatorConfig> estimator_configs;
 };
 
-class BweTest : public ::testing::TestWithParam<BweTestConfig>,
-    public PacketProcessorListener {
+class TestedEstimator;
+class PacketProcessorRunner;
+
+class BweTest : public PacketProcessorListener {
  public:
   BweTest();
   virtual ~BweTest();
 
-  virtual void SetUp();
-  virtual void TearDown();
-  virtual void AddPacketProcessor(PacketProcessor* processor);
+  virtual void AddPacketProcessor(PacketProcessor* processor, bool is_sender);
   virtual void RemovePacketProcessor(PacketProcessor* processor);
 
  protected:
+  void SetupTestFromConfig(const BweTestConfig& config);
   void VerboseLogging(bool enable);
   void RunFor(int64_t time_ms);
+  std::string GetTestName() const;
 
  private:
-  class TestedEstimator;
+  typedef std::map<int, TestedEstimator*> EstimatorMap;
+
+  void FindPacketsToProcess(const FlowIds& flow_ids, Packets* in,
+                            Packets* out);
+  void GiveFeedbackToAffectedSenders(int flow_id, TestedEstimator* estimator);
 
   int64_t run_time_ms_;
+  int64_t time_now_ms_;
   int64_t simulation_interval_ms_;
+  EstimatorMap estimators_;
   Packets previous_packets_;
-  std::vector<PacketSender*> packet_senders_;
-  std::vector<TestedEstimator*> estimators_;
-  std::vector<PacketProcessor*> processors_;
+  std::vector<PacketSender*> senders_;
+  std::vector<PacketProcessorRunner> processors_;
 
   DISALLOW_COPY_AND_ASSIGN(BweTest);
 };
diff --git a/modules/remote_bitrate_estimator/test/bwe_test_framework.cc b/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
index 893b6fe..b3cd7db 100644
--- a/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
+++ b/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
@@ -45,6 +45,11 @@
   DISALLOW_COPY_AND_ASSIGN(DelayCapHelper);
 };
 
+const FlowIds CreateFlowIds(const int *flow_ids_array, size_t num_flow_ids) {
+  FlowIds flow_ids(&flow_ids_array[0], flow_ids_array + num_flow_ids);
+  return flow_ids;
+}
+
 class RateCounter {
  public:
   RateCounter()
@@ -115,26 +120,29 @@
 }
 
 Packet::Packet()
-    : creation_time_us_(-1),
+    : flow_id_(0),
+      creation_time_us_(-1),
       send_time_us_(-1),
       payload_size_(0) {
-   memset(&header_, 0, sizeof(header_));
+  memset(&header_, 0, sizeof(header_));
 }
 
-Packet::Packet(int64_t send_time_us, uint32_t payload_size,
+Packet::Packet(int flow_id, int64_t send_time_us, uint32_t payload_size,
                const RTPHeader& header)
-  : creation_time_us_(send_time_us),
-    send_time_us_(send_time_us),
-    payload_size_(payload_size),
-    header_(header) {
+    : flow_id_(flow_id),
+      creation_time_us_(send_time_us),
+      send_time_us_(send_time_us),
+      payload_size_(payload_size),
+      header_(header) {
 }
 
 Packet::Packet(int64_t send_time_us, uint32_t sequence_number)
-    : creation_time_us_(send_time_us),
+    : flow_id_(0),
+      creation_time_us_(send_time_us),
       send_time_us_(send_time_us),
       payload_size_(0) {
-   memset(&header_, 0, sizeof(header_));
-   header_.sequenceNumber = sequence_number;
+  memset(&header_, 0, sizeof(header_));
+  header_.sequenceNumber = sequence_number;
 }
 
 bool Packet::operator<(const Packet& rhs) const {
@@ -157,10 +165,20 @@
   return true;
 }
 
-PacketProcessor::PacketProcessor(PacketProcessorListener* listener)
-    : listener_(listener) {
+PacketProcessor::PacketProcessor(PacketProcessorListener* listener,
+                                 bool is_sender)
+    : listener_(listener), flow_ids_(1, 0) {
   if (listener_) {
-    listener_->AddPacketProcessor(this);
+    listener_->AddPacketProcessor(this, is_sender);
+  }
+}
+
+PacketProcessor::PacketProcessor(PacketProcessorListener* listener,
+                                 const FlowIds& flow_ids,
+                                 bool is_sender)
+    : listener_(listener), flow_ids_(flow_ids) {
+  if (listener_) {
+    listener_->AddPacketProcessor(this, is_sender);
   }
 }
 
@@ -171,20 +189,36 @@
 }
 
 RateCounterFilter::RateCounterFilter(PacketProcessorListener* listener)
-    : PacketProcessor(listener),
+    : PacketProcessor(listener, false),
       rate_counter_(new RateCounter()),
-      pps_stats_(),
+      packets_per_second_stats_(),
       kbps_stats_(),
       name_("") {}
 
 RateCounterFilter::RateCounterFilter(PacketProcessorListener* listener,
                                      const std::string& name)
-    : PacketProcessor(listener),
+    : PacketProcessor(listener, false),
       rate_counter_(new RateCounter()),
-      pps_stats_(),
+      packets_per_second_stats_(),
       kbps_stats_(),
       name_(name) {}
 
+RateCounterFilter::RateCounterFilter(PacketProcessorListener* listener,
+                                     const FlowIds& flow_ids,
+                                     const std::string& name)
+    : PacketProcessor(listener, flow_ids, false),
+      rate_counter_(new RateCounter()),
+      packets_per_second_stats_(),
+      kbps_stats_(),
+      name_(name) {
+  std::stringstream ss;
+  ss << name_ << "_";
+  for (size_t i = 0; i < flow_ids.size(); ++i) {
+    ss << flow_ids[i] << ",";
+  }
+  name_ = ss.str();
+}
+
 RateCounterFilter::~RateCounterFilter() {
   LogStats();
 }
@@ -199,7 +233,7 @@
 
 void RateCounterFilter::LogStats() {
   BWE_TEST_LOGGING_CONTEXT("RateCounterFilter");
-  pps_stats_.Log("pps");
+  packets_per_second_stats_.Log("pps");
   kbps_stats_.Log("kbps");
 }
 
@@ -218,12 +252,12 @@
   for (PacketsConstIt it = in_out->begin(); it != in_out->end(); ++it) {
     rate_counter_->UpdateRates(it->send_time_us(), it->payload_size());
   }
-  pps_stats_.Push(rate_counter_->packets_per_second());
+  packets_per_second_stats_.Push(rate_counter_->packets_per_second());
   kbps_stats_.Push(rate_counter_->bits_per_second() / 1000.0);
 }
 
 LossFilter::LossFilter(PacketProcessorListener* listener)
-    : PacketProcessor(listener),
+    : PacketProcessor(listener, false),
       random_(0x12345678),
       loss_fraction_(0.0f) {
 }
@@ -248,7 +282,7 @@
 }
 
 DelayFilter::DelayFilter(PacketProcessorListener* listener)
-    : PacketProcessor(listener),
+    : PacketProcessor(listener, false),
       delay_us_(0),
       last_send_time_us_(0) {
 }
@@ -270,7 +304,7 @@
 }
 
 JitterFilter::JitterFilter(PacketProcessorListener* listener)
-    : PacketProcessor(listener),
+    : PacketProcessor(listener, false),
       random_(0x89674523),
       stddev_jitter_us_(0),
       last_send_time_us_(0) {
@@ -295,7 +329,7 @@
 }
 
 ReorderFilter::ReorderFilter(PacketProcessorListener* listener)
-    : PacketProcessor(listener),
+    : PacketProcessor(listener, false),
       random_(0x27452389),
       reorder_fraction_(0.0f) {
 }
@@ -327,7 +361,15 @@
 }
 
 ChokeFilter::ChokeFilter(PacketProcessorListener* listener)
-    : PacketProcessor(listener),
+    : PacketProcessor(listener, false),
+      kbps_(1200),
+      last_send_time_us_(0),
+      delay_cap_helper_(new DelayCapHelper()) {
+}
+
+ChokeFilter::ChokeFilter(PacketProcessorListener* listener,
+                         const FlowIds& flow_ids)
+    : PacketProcessor(listener, flow_ids, false),
       kbps_(1200),
       last_send_time_us_(0),
       delay_cap_helper_(new DelayCapHelper()) {
@@ -369,26 +411,30 @@
 
 TraceBasedDeliveryFilter::TraceBasedDeliveryFilter(
     PacketProcessorListener* listener)
-    : PacketProcessor(listener),
+    : PacketProcessor(listener, false),
       current_offset_us_(0),
       delivery_times_us_(),
       next_delivery_it_(),
       local_time_us_(-1),
       rate_counter_(new RateCounter),
       name_(""),
-      delay_cap_helper_(new DelayCapHelper()) {}
+      delay_cap_helper_(new DelayCapHelper()),
+      packets_per_second_stats_(),
+      kbps_stats_() {}
 
 TraceBasedDeliveryFilter::TraceBasedDeliveryFilter(
     PacketProcessorListener* listener,
     const std::string& name)
-    : PacketProcessor(listener),
+    : PacketProcessor(listener, false),
       current_offset_us_(0),
       delivery_times_us_(),
       next_delivery_it_(),
       local_time_us_(-1),
       rate_counter_(new RateCounter),
       name_(name),
-      delay_cap_helper_(new DelayCapHelper()) {}
+      delay_cap_helper_(new DelayCapHelper()),
+      packets_per_second_stats_(),
+      kbps_stats_() {}
 
 TraceBasedDeliveryFilter::~TraceBasedDeliveryFilter() {
 }
@@ -449,6 +495,8 @@
     }
     ++it;
   }
+  packets_per_second_stats_.Push(rate_counter_->packets_per_second());
+  kbps_stats_.Push(rate_counter_->bits_per_second() / 1000.0);
 }
 
 void TraceBasedDeliveryFilter::SetMaxDelay(int max_delay_ms) {
@@ -459,6 +507,10 @@
   return delay_cap_helper_->delay_stats();
 }
 
+Stats<double> TraceBasedDeliveryFilter::GetBitrateStats() const {
+  return kbps_stats_;
+}
+
 void TraceBasedDeliveryFilter::ProceedToNextSlot() {
   if (*next_delivery_it_ <= local_time_us_) {
     ++next_delivery_it_;
@@ -478,12 +530,18 @@
 }
 
 PacketSender::PacketSender(PacketProcessorListener* listener)
-    : PacketProcessor(listener) {
+    : PacketProcessor(listener, true) {}
+
+PacketSender::PacketSender(PacketProcessorListener* listener,
+                           const FlowIds& flow_ids)
+    : PacketProcessor(listener, flow_ids, true) {
+
 }
 
-VideoSender::VideoSender(PacketProcessorListener* listener, float fps,
-                         uint32_t kbps, uint32_t ssrc, float first_frame_offset)
-    : PacketSender(listener),
+VideoSender::VideoSender(int flow_id, PacketProcessorListener* listener,
+                         float fps, uint32_t kbps, uint32_t ssrc,
+                         float first_frame_offset)
+    : PacketSender(listener, FlowIds(1, flow_id)),
       kMaxPayloadSizeBytes(1200),
       kTimestampBase(0xff80ff00ul),
       frame_period_ms_(1000.0 / fps),
@@ -506,7 +564,7 @@
 void VideoSender::RunFor(int64_t time_ms, Packets* in_out) {
   assert(in_out);
   now_ms_ += time_ms;
-  Packets newPackets;
+  Packets new_packets;
   while (now_ms_ >= next_frame_ms_) {
     prototype_header_.sequenceNumber++;
     prototype_header_.timestamp = kTimestampBase +
@@ -524,21 +582,23 @@
     uint32_t payload_size = frame_size_bytes_;
     while (payload_size > 0) {
       uint32_t size = std::min(kMaxPayloadSizeBytes, payload_size);
-      newPackets.push_back(Packet(send_time_us, size, prototype_header_));
+      new_packets.push_back(Packet(flow_ids()[0], send_time_us, size,
+                                   prototype_header_));
       payload_size -= size;
     }
 
     next_frame_ms_ += frame_period_ms_;
   }
-  in_out->merge(newPackets);
+  in_out->merge(new_packets);
 }
 
-AdaptiveVideoSender::AdaptiveVideoSender(PacketProcessorListener* listener,
+AdaptiveVideoSender::AdaptiveVideoSender(int flow_id,
+                                         PacketProcessorListener* listener,
                                          float fps,
                                          uint32_t kbps,
                                          uint32_t ssrc,
                                          float first_frame_offset)
-    : VideoSender(listener, fps, kbps, ssrc, first_frame_offset) {}
+    : VideoSender(flow_id, listener, fps, kbps, ssrc, first_frame_offset) {}
 
 void AdaptiveVideoSender::GiveFeedback(const PacketSender::Feedback& feedback) {
   bytes_per_second_ = feedback.estimated_bps / 8;
diff --git a/modules/remote_bitrate_estimator/test/bwe_test_framework.h b/modules/remote_bitrate_estimator/test/bwe_test_framework.h
index 5302ba3..8af07f9 100644
--- a/modules/remote_bitrate_estimator/test/bwe_test_framework.h
+++ b/modules/remote_bitrate_estimator/test/bwe_test_framework.h
@@ -17,6 +17,7 @@
 #include <algorithm>
 #include <list>
 #include <numeric>
+#include <sstream>
 #include <string>
 #include <vector>
 
@@ -31,6 +32,10 @@
 class DelayCapHelper;
 class RateCounter;
 
+
+typedef std::vector<int> FlowIds;
+const FlowIds CreateFlowIds(const int *flow_ids_array, size_t num_flow_ids);
+
 template<typename T> class Stats {
  public:
   Stats()
@@ -84,6 +89,13 @@
     return max_;
   }
 
+  std::string AsString() {
+    std::stringstream ss;
+    ss << (GetMean() >= 0 ? GetMean() : -1) << ", " <<
+        (GetStdDev() >= 0 ? GetStdDev() : -1);
+    return ss.str();
+  }
+
   void Log(const std::string& units) {
     BWE_TEST_LOGGING_LOG5("", "%f %s\t+/-%f\t[%f,%f]",
         GetMean(), units.c_str(), GetStdDev(), GetMin(), GetMax());
@@ -139,12 +151,13 @@
 class Packet {
  public:
   Packet();
-  Packet(int64_t send_time_us, uint32_t payload_size,
+  Packet(int flow_id, int64_t send_time_us, uint32_t payload_size,
          const RTPHeader& header);
   Packet(int64_t send_time_us, uint32_t sequence_number);
 
   bool operator<(const Packet& rhs) const;
 
+  int flow_id() const { return flow_id_; }
   int64_t creation_time_us() const { return creation_time_us_; }
   void set_send_time_us(int64_t send_time_us);
   int64_t send_time_us() const { return send_time_us_; }
@@ -152,6 +165,7 @@
   const RTPHeader& header() const { return header_; }
 
  private:
+  int flow_id_;
   int64_t creation_time_us_;  // Time when the packet was created.
   int64_t send_time_us_;   // Time the packet left last processor touching it.
   uint32_t payload_size_;  // Size of the (non-existent, simulated) payload.
@@ -170,13 +184,16 @@
  public:
   virtual ~PacketProcessorListener() {}
 
-  virtual void AddPacketProcessor(PacketProcessor* processor) = 0;
+  virtual void AddPacketProcessor(PacketProcessor* processor,
+                                  bool is_sender) = 0;
   virtual void RemovePacketProcessor(PacketProcessor* processor) = 0;
 };
 
 class PacketProcessor {
  public:
-  explicit PacketProcessor(PacketProcessorListener* listener);
+  PacketProcessor(PacketProcessorListener* listener, bool is_sender);
+  PacketProcessor(PacketProcessorListener* listener, const FlowIds& flow_ids,
+                  bool is_sender);
   virtual ~PacketProcessor();
 
   // Called after each simulation batch to allow the processor to plot any
@@ -188,8 +205,11 @@
   // |send_time_us_|. The simulation time |time_ms| is optional to use.
   virtual void RunFor(int64_t time_ms, Packets* in_out) = 0;
 
+  const FlowIds& flow_ids() const { return flow_ids_; }
+
  private:
   PacketProcessorListener* listener_;
+  FlowIds flow_ids_;
 
   DISALLOW_COPY_AND_ASSIGN(PacketProcessor);
 };
@@ -199,6 +219,9 @@
   explicit RateCounterFilter(PacketProcessorListener* listener);
   RateCounterFilter(PacketProcessorListener* listener,
                     const std::string& name);
+  RateCounterFilter(PacketProcessorListener* listener,
+                    const FlowIds& flow_ids,
+                    const std::string& name);
   virtual ~RateCounterFilter();
 
   uint32_t packets_per_second() const;
@@ -211,7 +234,7 @@
 
  private:
   scoped_ptr<RateCounter> rate_counter_;
-  Stats<double> pps_stats_;
+  Stats<double> packets_per_second_stats_;
   Stats<double> kbps_stats_;
   std::string name_;
 
@@ -283,6 +306,7 @@
 class ChokeFilter : public PacketProcessor {
  public:
   explicit ChokeFilter(PacketProcessorListener* listener);
+  ChokeFilter(PacketProcessorListener* listener, const FlowIds& flow_ids);
   virtual ~ChokeFilter();
 
   void SetCapacity(uint32_t kbps);
@@ -315,6 +339,7 @@
 
   void SetMaxDelay(int max_delay_ms);
   Stats<double> GetDelayStats() const;
+  Stats<double> GetBitrateStats() const;
 
  private:
   void ProceedToNextSlot();
@@ -327,6 +352,8 @@
   scoped_ptr<RateCounter> rate_counter_;
   std::string name_;
   scoped_ptr<DelayCapHelper> delay_cap_helper_;
+  Stats<double> packets_per_second_stats_;
+  Stats<double> kbps_stats_;
 
   DISALLOW_COPY_AND_ASSIGN(TraceBasedDeliveryFilter);
 };
@@ -338,6 +365,7 @@
   };
 
   explicit PacketSender(PacketProcessorListener* listener);
+  PacketSender(PacketProcessorListener* listener, const FlowIds& flow_ids);
   virtual ~PacketSender() {}
 
   virtual uint32_t GetCapacityKbps() const { return 0; }
@@ -347,23 +375,17 @@
   // Note that changing the feedback interval affects the timing of when the
   // output of the estimators is sampled and therefore the baseline files may
   // have to be regenerated.
-  virtual int64_t GetFeedbackIntervalMs() const { return 1000; }
+  virtual int GetFeedbackIntervalMs() const { return 1000; }
   virtual void GiveFeedback(const Feedback& feedback) {}
 
  private:
   DISALLOW_COPY_AND_ASSIGN(PacketSender);
 };
 
-struct PacketSenderFactory {
-  PacketSenderFactory() {}
-  virtual ~PacketSenderFactory() {}
-  virtual PacketSender* Create() const = 0;
-};
-
 class VideoSender : public PacketSender {
  public:
-  VideoSender(PacketProcessorListener* listener, float fps, uint32_t kbps,
-              uint32_t ssrc, float first_frame_offset);
+  VideoSender(int flow_id, PacketProcessorListener* listener, float fps,
+              uint32_t kbps, uint32_t ssrc, float first_frame_offset);
   virtual ~VideoSender() {}
 
   uint32_t max_payload_size_bytes() const { return kMaxPayloadSizeBytes; }
@@ -390,48 +412,17 @@
 
 class AdaptiveVideoSender : public VideoSender {
  public:
-  AdaptiveVideoSender(PacketProcessorListener* listener, float fps,
-                      uint32_t kbps, uint32_t ssrc, float first_frame_offset);
+  AdaptiveVideoSender(int flow_id, PacketProcessorListener* listener,
+                      float fps, uint32_t kbps, uint32_t ssrc,
+                      float first_frame_offset);
   virtual ~AdaptiveVideoSender() {}
 
-  virtual int64_t GetFeedbackIntervalMs() const { return 100; }
+  virtual int GetFeedbackIntervalMs() const { return 100; }
   virtual void GiveFeedback(const Feedback& feedback);
 
 private:
   DISALLOW_IMPLICIT_CONSTRUCTORS(AdaptiveVideoSender);
 };
-
-class VideoPacketSenderFactory : public PacketSenderFactory {
- public:
-  VideoPacketSenderFactory(float fps, uint32_t kbps, uint32_t ssrc,
-                           float frame_offset)
-      : fps_(fps),
-        kbps_(kbps),
-        ssrc_(ssrc),
-        frame_offset_(frame_offset) {
-  }
-  virtual ~VideoPacketSenderFactory() {}
-  virtual PacketSender* Create() const {
-    return new VideoSender(NULL, fps_, kbps_, ssrc_, frame_offset_);
-  }
- protected:
-  float fps_;
-  uint32_t kbps_;
-  uint32_t ssrc_;
-  float frame_offset_;
-};
-
-class AdaptiveVideoPacketSenderFactory : public VideoPacketSenderFactory {
- public:
-  AdaptiveVideoPacketSenderFactory(float fps, uint32_t kbps, uint32_t ssrc,
-                                   float frame_offset)
-      : VideoPacketSenderFactory(fps, kbps, ssrc, frame_offset) {}
-  virtual ~AdaptiveVideoPacketSenderFactory() {}
-  virtual PacketSender* Create() const {
-    return new AdaptiveVideoSender(NULL, fps_, kbps_, ssrc_, frame_offset_);
-  }
-};
-
 }  // namespace bwe
 }  // namespace testing
 }  // namespace webrtc
diff --git a/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc b/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
index 56329b6..4ff35df 100644
--- a/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
+++ b/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
@@ -184,7 +184,7 @@
     RTPHeader header;
     // "Send" a packet every 10 ms.
     for (int64_t i = 0; i < run_for_ms; i += 10, now_ms_ += 10) {
-      packets.push_back(Packet(now_ms_ * 1000, payload_bits / 8, header));
+      packets.push_back(Packet(0, now_ms_ * 1000, payload_bits / 8, header));
     }
     filter_.RunFor(run_for_ms, &packets);
     ASSERT_TRUE(IsTimeSorted(packets));
@@ -587,7 +587,7 @@
       int64_t send_time_ms = now_ms_ + (i * run_for_ms) / packets_to_generate;
       header.sequenceNumber = sequence_number_++;
       // Payload is 1000 bits.
-      packets.push_back(Packet(send_time_ms * 1000, 125, header));
+      packets.push_back(Packet(0, send_time_ms * 1000, 125, header));
       send_times_us_.push_back(send_time_ms * 1000);
     }
     ASSERT_TRUE(IsTimeSorted(packets));
@@ -768,7 +768,7 @@
 
 TEST(BweTestFramework_VideoSenderTest, Fps1Kbps80_1s) {
   // 1 fps, 80 kbps
-  VideoSender sender(NULL, 1.0f, 80, 0x1234, 0);
+  VideoSender sender(0, NULL, 1.0f, 80, 0x1234, 0);
   EXPECT_EQ(10000u, sender.bytes_per_second());
   // We're at 1 fps, so all packets should be generated on first call, giving 10
   // packets of each 1000 bytes, total 10000 bytes.
@@ -785,7 +785,7 @@
 
 TEST(BweTestFramework_VideoSenderTest, Fps1Kbps80_1s_Offset) {
   // 1 fps, 80 kbps, offset 0.5 of a frame period, ==0.5s in this case.
-  VideoSender sender(NULL, 1.0f, 80, 0x1234, 0.5f);
+  VideoSender sender(0, NULL, 1.0f, 80, 0x1234, 0.5f);
   EXPECT_EQ(10000u, sender.bytes_per_second());
   // 499ms, no output.
   TestVideoSender(&sender, 499, 0, 0, 0);
@@ -805,7 +805,7 @@
 
 TEST(BweTestFramework_VideoSenderTest, Fps50Kpbs80_11s) {
   // 50 fps, 80 kbps.
-  VideoSender sender(NULL, 50.0f, 80, 0x1234, 0);
+  VideoSender sender(0, NULL, 50.0f, 80, 0x1234, 0);
   EXPECT_EQ(10000u, sender.bytes_per_second());
   // 9998ms, should see 500 frames, 200 byte payloads, total 100000 bytes.
   TestVideoSender(&sender, 9998, 500, 200, 100000);
@@ -821,7 +821,7 @@
 
 TEST(BweTestFramework_VideoSenderTest, Fps10Kpbs120_1s) {
   // 20 fps, 120 kbps.
-  VideoSender sender(NULL, 20.0f, 120, 0x1234, 0);
+  VideoSender sender(0, NULL, 20.0f, 120, 0x1234, 0);
   EXPECT_EQ(15000u, sender.bytes_per_second());
   // 498ms, 10 frames with 750 byte payloads, total 7500 bytes.
   TestVideoSender(&sender, 498, 10, 750, 7500);
@@ -837,7 +837,7 @@
 
 TEST(BweTestFramework_VideoSenderTest, Fps30Kbps800_20s) {
   // 20 fps, 820 kbps.
-  VideoSender sender(NULL, 25.0f, 820, 0x1234, 0);
+  VideoSender sender(0, NULL, 25.0f, 820, 0x1234, 0);
   EXPECT_EQ(102500u, sender.bytes_per_second());
   // 9998ms, 250 frames. 820 kbps = 102500 bytes/s, so total should be 1025000.
   // Each frame is 102500/25=4100 bytes, or 5 packets (4 @1000 bytes, 1 @100),
@@ -858,7 +858,7 @@
 
 TEST(BweTestFramework_VideoSenderTest, TestAppendInOrder) {
   // 1 fps, 80 kbps, 250ms offset.
-  VideoSender sender1(NULL, 1.0f, 80, 0x1234, 0.25f);
+  VideoSender sender1(0, NULL, 1.0f, 80, 0x1234, 0.25f);
   EXPECT_EQ(10000u, sender1.bytes_per_second());
   Packets packets;
   // Generate some packets, verify they are sorted.
@@ -873,7 +873,7 @@
   EXPECT_EQ(18u, packets.size());
 
   // Another sender, 2 fps, 160 kpbs, 150ms offset
-  VideoSender sender2(NULL, 2.0f, 160, 0x2234, 0.30f);
+  VideoSender sender2(0, NULL, 2.0f, 160, 0x2234, 0.30f);
   EXPECT_EQ(20000u, sender2.bytes_per_second());
   // Generate some packets, verify that they are merged with the packets already
   // on the list.
@@ -887,7 +887,7 @@
 }
 
 TEST(BweTestFramework_VideoSenderTest, FeedbackIneffective) {
-  VideoSender sender(NULL, 25.0f, 820, 0x1234, 0);
+  VideoSender sender(0, NULL, 25.0f, 820, 0x1234, 0);
   EXPECT_EQ(102500u, sender.bytes_per_second());
   TestVideoSender(&sender, 9998, 1000, 500, 1025000);
 
@@ -899,7 +899,7 @@
 }
 
 TEST(BweTestFramework_AdaptiveVideoSenderTest, FeedbackChangesBitrate) {
-  AdaptiveVideoSender sender(NULL, 25.0f, 820, 0x1234, 0);
+  AdaptiveVideoSender sender(0, NULL, 25.0f, 820, 0x1234, 0);
   EXPECT_EQ(102500u, sender.bytes_per_second());
   TestVideoSender(&sender, 9998, 1000, 500, 1025000);
 
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/rtp_rtcp.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/rtp_rtcp.target.darwin-arm64.mk
index 3b05cd9..987f969 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/rtp_rtcp.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_rtp_rtcp_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,41 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/rtp_rtcp/source/bitrate.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/fec_receiver_impl.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_header_parser.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_receiver_help.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_utility.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_header_extension.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_receiver_impl.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_sender.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_utility.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/ssrc_database.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/tmmbr_help.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/dtmf_queue.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_receiver_audio.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction_internal.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/producer_fec.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_packet_history.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_payload_registry.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_receiver_strategy.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_receiver_video.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_format_vp8.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/vp8_partition_aggregator.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +67,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +76,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +87,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +118,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +136,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +164,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +173,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +184,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +215,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +234,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +262,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +276,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +298,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_rtp_rtcp_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: rtp_rtcp
+rtp_rtcp: third_party_webrtc_modules_rtp_rtcp_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/rtp_rtcp.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/rtp_rtcp.target.linux-arm64.mk
index 3b05cd9..987f969 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/rtp_rtcp.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_rtp_rtcp_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,41 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/rtp_rtcp/source/bitrate.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/fec_receiver_impl.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_header_parser.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_receiver_help.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtcp_utility.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_header_extension.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_receiver_impl.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_sender.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_utility.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/ssrc_database.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/tmmbr_help.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/dtmf_queue.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_receiver_audio.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction_internal.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/producer_fec.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_packet_history.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_payload_registry.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_receiver_strategy.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_receiver_video.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/rtp_format_vp8.cc \
+	third_party/webrtc/modules/rtp_rtcp/source/vp8_partition_aggregator.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +67,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +76,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +87,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +118,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +136,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +164,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +173,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +184,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +215,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +234,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +262,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +276,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +298,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_rtp_rtcp_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: rtp_rtcp
+rtp_rtcp: third_party_webrtc_modules_rtp_rtcp_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index dc65336..70a3443 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -733,7 +733,12 @@
                                uint16_t* avg_rtt,
                                uint16_t* min_rtt,
                                uint16_t* max_rtt) const {
-  return rtcp_receiver_.RTT(remote_ssrc, rtt, avg_rtt, min_rtt, max_rtt);
+  int32_t ret = rtcp_receiver_.RTT(remote_ssrc, rtt, avg_rtt, min_rtt, max_rtt);
+  if (rtt && *rtt == 0) {
+    // Try to get RTT from RtcpRttStats class.
+    *rtt = static_cast<uint16_t>(rtt_ms());
+  }
+  return ret;
 }
 
 // Reset RoundTripTime statistics.
diff --git a/modules/rtp_rtcp/source/rtp_utility.cc b/modules/rtp_rtcp/source/rtp_utility.cc
index 3f99845..c1f3c64 100644
--- a/modules/rtp_rtcp/source/rtp_utility.cc
+++ b/modules/rtp_rtcp/source/rtp_utility.cc
@@ -472,7 +472,8 @@
     RTPExtensionType type;
     if (ptrExtensionMap->GetType(id, &type) != 0) {
       // If we encounter an unknown extension, just skip over it.
-      LOG(LS_WARNING) << "Failed to find extension id: " << id;
+      LOG(LS_WARNING) << "Failed to find extension id: "
+                      << static_cast<int>(id);
     } else {
       switch (type) {
         case kRtpExtensionTransmissionTimeOffset: {
diff --git a/modules/rtp_rtcp/test/testFec/test_packet_masks_metrics.cc b/modules/rtp_rtcp/test/testFec/test_packet_masks_metrics.cc
index cc1ee84..2fb0968 100644
--- a/modules/rtp_rtcp/test/testFec/test_packet_masks_metrics.cc
+++ b/modules/rtp_rtcp/test/testFec/test_packet_masks_metrics.cc
@@ -198,7 +198,7 @@
   int RecoveredMediaPackets(int num_media_packets,
                             int num_fec_packets,
                             uint8_t* state) {
-    scoped_array<uint8_t> state_tmp(
+    scoped_ptr<uint8_t[]> state_tmp(
         new uint8_t[num_media_packets + num_fec_packets]);
     memcpy(state_tmp.get(), state, num_media_packets + num_fec_packets);
     int num_recovered_packets = 0;
@@ -392,7 +392,7 @@
   // (which containes the code size parameters/protection length).
   void ComputeMetricsForCode(CodeType code_type,
                              int code_index) {
-    scoped_array<double> prob_weight(new double[kNumLossModels]);
+    scoped_ptr<double[]> prob_weight(new double[kNumLossModels]);
     memset(prob_weight.get() , 0, sizeof(double) * kNumLossModels);
     MetricsFecCode metrics_code;
     SetMetricsZero(&metrics_code);
@@ -400,7 +400,7 @@
     int num_media_packets = code_params_[code_index].num_media_packets;
     int num_fec_packets = code_params_[code_index].num_fec_packets;
     int tot_num_packets = num_media_packets + num_fec_packets;
-    scoped_array<uint8_t> state(new uint8_t[tot_num_packets]);
+    scoped_ptr<uint8_t[]> state(new uint8_t[tot_num_packets]);
     memset(state.get() , 0, tot_num_packets);
 
     int num_loss_configurations = static_cast<int>(pow(2.0f, tot_num_packets));
diff --git a/modules/utility/source/video_frames_queue.cc b/modules/utility/source/video_frames_queue.cc
index fbcbd2c..63afbe9 100644
--- a/modules/utility/source/video_frames_queue.cc
+++ b/modules/utility/source/video_frames_queue.cc
@@ -80,8 +80,10 @@
       // List is traversed beginning to end. If ptrRenderFrame is not
       // NULL it must be the first, and thus oldest, VideoFrame in the
       // queue. It can be recycled.
-      ReturnFrame(ptrRenderFrame);
-      iter = _incomingFrames.erase(iter);
+      if (ptrRenderFrame) {
+        ReturnFrame(ptrRenderFrame);
+       _incomingFrames.pop_front();
+      }
       ptrRenderFrame = ptrOldestFrameInList;
     } else {
       // All VideoFrames following this one will be even newer. No match
diff --git a/modules/video_capture/test/video_capture_unittest.cc b/modules/video_capture/test/video_capture_unittest.cc
index db0c818..4c2263d 100644
--- a/modules/video_capture/test/video_capture_unittest.cc
+++ b/modules/video_capture/test/video_capture_unittest.cc
@@ -25,6 +25,7 @@
 #include "webrtc/system_wrappers/interface/scoped_refptr.h"
 #include "webrtc/system_wrappers/interface/sleep.h"
 #include "webrtc/system_wrappers/interface/tick_util.h"
+#include "webrtc/test/testsupport/gtest_disable.h"
 
 using webrtc::CriticalSectionWrapper;
 using webrtc::CriticalSectionScoped;
@@ -473,7 +474,7 @@
   unsigned int length = webrtc::CalcBufferSize(webrtc::kI420,
                                                test_frame_.width(),
                                                test_frame_.height());
-  webrtc::scoped_array<uint8_t> test_buffer(new uint8_t[length]);
+  webrtc::scoped_ptr<uint8_t[]> test_buffer(new uint8_t[length]);
   webrtc::ExtractBuffer(test_frame_, length, test_buffer.get());
   EXPECT_EQ(0, capture_input_interface_->IncomingFrame(test_buffer.get(),
       length, capture_callback_.capability(), 0));
@@ -550,7 +551,8 @@
 }
 
 // Test frame rate and no picture alarm.
-TEST_F(VideoCaptureExternalTest , FrameRate) {
+// Flaky on Win32, see webrtc:3270.
+TEST_F(VideoCaptureExternalTest, DISABLED_ON_WIN(FrameRate)) {
   int64_t testTime = 3;
   TickTime startTime = TickTime::Now();
 
@@ -558,7 +560,7 @@
      unsigned int length = webrtc::CalcBufferSize(webrtc::kI420,
                                                  test_frame_.width(),
                                                  test_frame_.height());
-     webrtc::scoped_array<uint8_t> test_buffer(new uint8_t[length]);
+     webrtc::scoped_ptr<uint8_t[]> test_buffer(new uint8_t[length]);
      webrtc::ExtractBuffer(test_frame_, length, test_buffer.get());
      EXPECT_EQ(0, capture_input_interface_->IncomingFrame(test_buffer.get(),
        length, capture_callback_.capability(), 0));
@@ -574,7 +576,7 @@
     unsigned int length = webrtc::CalcBufferSize(webrtc::kI420,
                                                  test_frame_.width(),
                                                  test_frame_.height());
-    webrtc::scoped_array<uint8_t> test_buffer(new uint8_t[length]);
+    webrtc::scoped_ptr<uint8_t[]> test_buffer(new uint8_t[length]);
     webrtc::ExtractBuffer(test_frame_, length, test_buffer.get());
     EXPECT_EQ(0, capture_input_interface_->IncomingFrame(test_buffer.get(),
       length, capture_callback_.capability(), 0));
@@ -592,7 +594,7 @@
   unsigned int length = webrtc::CalcBufferSize(webrtc::kI420,
                                                test_frame_.width(),
                                                test_frame_.height());
-  webrtc::scoped_array<uint8_t> test_buffer(new uint8_t[length]);
+  webrtc::scoped_ptr<uint8_t[]> test_buffer(new uint8_t[length]);
   webrtc::ExtractBuffer(test_frame_, length, test_buffer.get());
   EXPECT_EQ(0, capture_input_interface_->IncomingFrame(test_buffer.get(),
     length, capture_callback_.capability(), 0));
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/video_capture_module.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/video_capture_module.target.darwin-arm64.mk
index c84869c..a260b9b 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/video_capture_module.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_capture_module_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,21 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_capture/device_info_impl.cc \
+	third_party/webrtc/modules/video_capture/video_capture_factory.cc \
+	third_party/webrtc/modules/video_capture/video_capture_impl.cc \
+	third_party/webrtc/modules/video_capture/external/device_info_external.cc \
+	third_party/webrtc/modules/video_capture/external/video_capture_external.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +52,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +94,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +112,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +132,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +151,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +193,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +212,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +242,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +256,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +278,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_capture_module_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_capture_module
+video_capture_module: third_party_webrtc_modules_video_capture_module_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/video_capture_module.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/video_capture_module.target.linux-arm64.mk
index c84869c..a260b9b 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/video_capture_module.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_capture_module_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,21 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_capture/device_info_impl.cc \
+	third_party/webrtc/modules/video_capture/video_capture_factory.cc \
+	third_party/webrtc/modules/video_capture/video_capture_impl.cc \
+	third_party/webrtc/modules/video_capture/external/device_info_external.cc \
+	third_party/webrtc/modules/video_capture/external/video_capture_external.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +52,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +94,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +112,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +132,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +151,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +193,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +212,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +242,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +256,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +278,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_capture_module_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_capture_module
+video_capture_module: third_party_webrtc_modules_video_capture_module_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/video_coding/codecs/test/videoprocessor.cc b/modules/video_coding/codecs/test/videoprocessor.cc
index 30ee6a8..93738ca 100644
--- a/modules/video_coding/codecs/test/videoprocessor.cc
+++ b/modules/video_coding/codecs/test/videoprocessor.cc
@@ -331,7 +331,7 @@
     }
     // TODO(mikhal): Extracting the buffer for now - need to update test.
     int length = CalcBufferSize(kI420, up_image.width(), up_image.height());
-    scoped_array<uint8_t> image_buffer(new uint8_t[length]);
+    scoped_ptr<uint8_t[]> image_buffer(new uint8_t[length]);
     length = ExtractBuffer(up_image, length, image_buffer.get());
     // Update our copy of the last successful frame:
     memcpy(last_successful_frame_buffer_, image_buffer.get(), length);
@@ -344,7 +344,7 @@
     // Update our copy of the last successful frame:
     // TODO(mikhal): Add as a member function, so won't be allocated per frame.
     int length = CalcBufferSize(kI420, image.width(), image.height());
-    scoped_array<uint8_t> image_buffer(new uint8_t[length]);
+    scoped_ptr<uint8_t[]> image_buffer(new uint8_t[length]);
     length = ExtractBuffer(image, length, image_buffer.get());
     assert(length > 0);
     memcpy(last_successful_frame_buffer_, image_buffer.get(), length);
diff --git a/modules/video_coding/codecs/test_framework/unit_test.cc b/modules/video_coding/codecs/test_framework/unit_test.cc
index 3b034e0..ec12a51 100644
--- a/modules/video_coding/codecs/test_framework/unit_test.cc
+++ b/modules/video_coding/codecs/test_framework/unit_test.cc
@@ -565,7 +565,7 @@
         frameLength = WaitForDecodedFrame();
     }
     unsigned int length = CalcBufferSize(kI420, width, height);
-    scoped_array<uint8_t> decoded_buffer(new uint8_t[length]);
+    scoped_ptr<uint8_t[]> decoded_buffer(new uint8_t[length]);
     ExtractBuffer(_decodedVideoBuffer, _lengthSourceFrame,
                   decoded_buffer.get());
     EXPECT_TRUE(CheckIfBitExact(decoded_buffer.get(), frameLength, _refDecFrame,
@@ -645,7 +645,7 @@
 
         // check that decoded frame matches with reference
         unsigned int length = CalcBufferSize(kI420, width, height);
-        scoped_array<uint8_t> decoded_buffer(new uint8_t[length]);
+        scoped_ptr<uint8_t[]> decoded_buffer(new uint8_t[length]);
         ExtractBuffer(_decodedVideoBuffer, length, decoded_buffer.get());
         EXPECT_TRUE(CheckIfBitExact(decoded_buffer.get(), length,
                                     _refDecFrame, _lengthSourceFrame) == true);
diff --git a/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc b/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc
index ff99ed2..3cc8bc3 100644
--- a/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc
+++ b/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc
@@ -181,7 +181,7 @@
 
   scoped_ptr<Vp8UnitTestEncodeCompleteCallback> encode_complete_callback_;
   scoped_ptr<Vp8UnitTestDecodeCompleteCallback> decode_complete_callback_;
-  scoped_array<uint8_t> source_buffer_;
+  scoped_ptr<uint8_t[]> source_buffer_;
   FILE* source_file_;
   I420VideoFrame input_frame_;
   scoped_ptr<VideoEncoder> encoder_;
diff --git a/modules/video_coding/codecs/vp8/vp8_sequence_coder.cc b/modules/video_coding/codecs/vp8/vp8_sequence_coder.cc
index 1bd3e1a..ffa0bcc 100644
--- a/modules/video_coding/codecs/vp8/vp8_sequence_coder.cc
+++ b/modules/video_coding/codecs/vp8/vp8_sequence_coder.cc
@@ -142,7 +142,7 @@
   EXPECT_EQ(0, decoder->InitDecode(&inst, 1));
   webrtc::I420VideoFrame input_frame;
   unsigned int length = webrtc::CalcBufferSize(webrtc::kI420, width, height);
-  webrtc::scoped_array<uint8_t> frame_buffer(new uint8_t[length]);
+  webrtc::scoped_ptr<uint8_t[]> frame_buffer(new uint8_t[length]);
 
   int half_width = (width + 1) / 2;
   // Set and register callbacks.
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/video_coding/codecs/vp8/webrtc_vp8.target.darwin-arm64.mk
similarity index 63%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/video_coding/codecs/vp8/webrtc_vp8.target.darwin-arm64.mk
index c84869c..7cfaea8 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/video_coding/codecs/vp8/webrtc_vp8.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_coding_codecs_vp8_webrtc_vp8_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,21 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_coding/codecs/vp8/reference_picture_selection.cc \
+	third_party/webrtc/modules/video_coding/codecs/vp8/vp8_factory.cc \
+	third_party/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc \
+	third_party/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc \
+	third_party/webrtc/modules/video_coding/codecs/vp8/realtime_temporal_layers.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +48,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,10 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/libvpx/source/libvpx \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +129,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +144,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +186,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +205,10 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/libvpx/source/libvpx \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +236,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +250,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +272,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_coding_codecs_vp8_webrtc_vp8_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_vp8
+webrtc_vp8: third_party_webrtc_modules_video_coding_codecs_vp8_webrtc_vp8_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/video_coding/codecs/vp8/webrtc_vp8.target.linux-arm64.mk
similarity index 63%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/video_coding/codecs/vp8/webrtc_vp8.target.linux-arm64.mk
index c84869c..7cfaea8 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/video_coding/codecs/vp8/webrtc_vp8.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_coding_codecs_vp8_webrtc_vp8_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,21 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_coding/codecs/vp8/reference_picture_selection.cc \
+	third_party/webrtc/modules/video_coding/codecs/vp8/vp8_factory.cc \
+	third_party/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc \
+	third_party/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc \
+	third_party/webrtc/modules/video_coding/codecs/vp8/realtime_temporal_layers.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +48,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,10 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/libvpx/source/libvpx \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +129,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +144,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +186,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +205,10 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
+	$(LOCAL_PATH)/third_party/libvpx/source/libvpx \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +236,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +250,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +272,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_coding_codecs_vp8_webrtc_vp8_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_vp8
+webrtc_vp8: third_party_webrtc_modules_video_coding_codecs_vp8_webrtc_vp8_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/video_coding/main/test/rtp_player.cc b/modules/video_coding/main/test/rtp_player.cc
index e314a7c..f02aebb 100644
--- a/modules/video_coding/main/test/rtp_player.cc
+++ b/modules/video_coding/main/test/rtp_player.cc
@@ -61,7 +61,7 @@
   uint16_t seq_num() const { return seq_num_; }
 
  private:
-  scoped_array<uint8_t> data_;
+  scoped_ptr<uint8_t[]> data_;
   uint32_t length_;
   int64_t resend_time_ms_;
   uint32_t ssrc_;
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/video_coding/utility/video_coding_utility.target.darwin-arm64.mk
similarity index 63%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/video_coding/utility/video_coding_utility.target.darwin-arm64.mk
index c84869c..59c6a59 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/video_coding/utility/video_coding_utility.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_coding_utility_video_coding_utility_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,18 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_coding/utility/exp_filter.cc \
+	third_party/webrtc/modules/video_coding/utility/frame_dropper.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +45,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +87,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +105,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +123,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +138,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +180,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +199,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +227,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +241,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +263,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_coding_utility_video_coding_utility_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_coding_utility
+video_coding_utility: third_party_webrtc_modules_video_coding_utility_video_coding_utility_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/video_coding/utility/video_coding_utility.target.linux-arm64.mk
similarity index 63%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/video_coding/utility/video_coding_utility.target.linux-arm64.mk
index c84869c..59c6a59 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/video_coding/utility/video_coding_utility.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_coding_utility_video_coding_utility_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,18 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_coding/utility/exp_filter.cc \
+	third_party/webrtc/modules/video_coding/utility/frame_dropper.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +45,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +87,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +105,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +123,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +138,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +180,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +199,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +227,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +241,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +263,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_coding_utility_video_coding_utility_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_coding_utility
+video_coding_utility: third_party_webrtc_modules_video_coding_utility_video_coding_utility_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/video_processing.target.darwin-arm64.mk
similarity index 69%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/video_processing.target.darwin-arm64.mk
index 3b05cd9..359aade 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/video_processing.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_processing_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,22 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_processing/main/source/brighten.cc \
+	third_party/webrtc/modules/video_processing/main/source/brightness_detection.cc \
+	third_party/webrtc/modules/video_processing/main/source/color_enhancement.cc \
+	third_party/webrtc/modules/video_processing/main/source/content_analysis.cc \
+	third_party/webrtc/modules/video_processing/main/source/deflickering.cc \
+	third_party/webrtc/modules/video_processing/main/source/denoising.cc \
+	third_party/webrtc/modules/video_processing/main/source/frame_preprocessor.cc \
+	third_party/webrtc/modules/video_processing/main/source/spatial_resampler.cc \
+	third_party/webrtc/modules/video_processing/main/source/video_decimator.cc \
+	third_party/webrtc/modules/video_processing/main/source/video_processing_impl.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +48,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +57,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +68,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +99,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +117,12 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +150,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +159,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +170,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +201,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +220,12 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +253,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +267,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +289,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_processing_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_processing
+video_processing: third_party_webrtc_modules_video_processing_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/video_processing.target.linux-arm64.mk
similarity index 69%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/video_processing.target.linux-arm64.mk
index 3b05cd9..359aade 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/video_processing.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_processing_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,22 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_processing/main/source/brighten.cc \
+	third_party/webrtc/modules/video_processing/main/source/brightness_detection.cc \
+	third_party/webrtc/modules/video_processing/main/source/color_enhancement.cc \
+	third_party/webrtc/modules/video_processing/main/source/content_analysis.cc \
+	third_party/webrtc/modules/video_processing/main/source/deflickering.cc \
+	third_party/webrtc/modules/video_processing/main/source/denoising.cc \
+	third_party/webrtc/modules/video_processing/main/source/frame_preprocessor.cc \
+	third_party/webrtc/modules/video_processing/main/source/spatial_resampler.cc \
+	third_party/webrtc/modules/video_processing/main/source/video_decimator.cc \
+	third_party/webrtc/modules/video_processing/main/source/video_processing_impl.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +48,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +57,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +68,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +99,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +117,12 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +150,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +159,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +170,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +201,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +220,12 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +253,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +267,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +289,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_processing_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_processing
+video_processing: third_party_webrtc_modules_video_processing_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/video_processing/main/test/unit_test/brightness_detection_test.cc b/modules/video_processing/main/test/unit_test/brightness_detection_test.cc
index d7ac729..c53c1fb 100644
--- a/modules/video_processing/main/test/unit_test/brightness_detection_test.cc
+++ b/modules/video_processing/main/test/unit_test/brightness_detection_test.cc
@@ -19,7 +19,7 @@
     uint32_t frameNum = 0;
     int32_t brightnessWarning = 0;
     uint32_t warningCount = 0;
-    scoped_array<uint8_t> video_buffer(new uint8_t[frame_length_]);
+    scoped_ptr<uint8_t[]> video_buffer(new uint8_t[frame_length_]);
     while (fread(video_buffer.get(), 1, frame_length_, source_file_) ==
            frame_length_)
     {
diff --git a/modules/video_processing/main/test/unit_test/color_enhancement_test.cc b/modules/video_processing/main/test/unit_test/color_enhancement_test.cc
index fc560be..c1cd462 100644
--- a/modules/video_processing/main/test/unit_test/color_enhancement_test.cc
+++ b/modules/video_processing/main/test/unit_test/color_enhancement_test.cc
@@ -39,7 +39,7 @@
     ASSERT_TRUE(modFile != NULL) << "Could not open output file.\n";
 
     uint32_t frameNum = 0;
-    scoped_array<uint8_t> video_buffer(new uint8_t[frame_length_]);
+    scoped_ptr<uint8_t[]> video_buffer(new uint8_t[frame_length_]);
     while (fread(video_buffer.get(), 1, frame_length_, source_file_) ==
         frame_length_)
     {
@@ -86,7 +86,7 @@
                                    width_, half_width_, half_width_);
 
     // Compare frame-by-frame.
-    scoped_array<uint8_t> ref_buffer(new uint8_t[frame_length_]);
+    scoped_ptr<uint8_t[]> ref_buffer(new uint8_t[frame_length_]);
     while (fread(video_buffer.get(), 1, frame_length_, modFile) ==
         frame_length_)
     {
@@ -114,7 +114,7 @@
     // Verify that all color pixels are enhanced, and no luminance values are
     // altered.
 
-    scoped_array<uint8_t> testFrame(new uint8_t[frame_length_]);
+    scoped_ptr<uint8_t[]> testFrame(new uint8_t[frame_length_]);
 
     // Use value 128 as probe value, since we know that this will be changed
     // in the enhancement.
diff --git a/modules/video_processing/main/test/unit_test/content_metrics_test.cc b/modules/video_processing/main/test/unit_test/content_metrics_test.cc
index 36a1ad7..c0d1ab4 100644
--- a/modules/video_processing/main/test/unit_test/content_metrics_test.cc
+++ b/modules/video_processing/main/test/unit_test/content_metrics_test.cc
@@ -23,7 +23,7 @@
   ca__c.Initialize(width_,height_);
   ca__sse.Initialize(width_,height_);
 
-  scoped_array<uint8_t> video_buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> video_buffer(new uint8_t[frame_length_]);
   while (fread(video_buffer.get(), 1, frame_length_, source_file_)
        == frame_length_) {
     // Using ConvertToI420 to add stride to the image.
diff --git a/modules/video_processing/main/test/unit_test/deflickering_test.cc b/modules/video_processing/main/test/unit_test/deflickering_test.cc
index 0fa3f48..1bf53fc 100644
--- a/modules/video_processing/main/test/unit_test/deflickering_test.cc
+++ b/modules/video_processing/main/test/unit_test/deflickering_test.cc
@@ -43,7 +43,7 @@
         "Could not open output file: " << output_file << "\n";
 
     printf("\nRun time [us / frame]:\n");
-    scoped_array<uint8_t> video_buffer(new uint8_t[frame_length_]);
+    scoped_ptr<uint8_t[]> video_buffer(new uint8_t[frame_length_]);
     for (uint32_t run_idx = 0; run_idx < NumRuns; run_idx++)
     {
         TickTime t0;
diff --git a/modules/video_processing/main/test/unit_test/denoising_test.cc b/modules/video_processing/main/test/unit_test/denoising_test.cc
index 3023a2d..c00db6a 100644
--- a/modules/video_processing/main/test/unit_test/denoising_test.cc
+++ b/modules/video_processing/main/test/unit_test/denoising_test.cc
@@ -49,7 +49,7 @@
         int32_t modifiedPixels = 0;
 
         frameNum = 0;
-        scoped_array<uint8_t> video_buffer(new uint8_t[frame_length_]);
+        scoped_ptr<uint8_t[]> video_buffer(new uint8_t[frame_length_]);
         while (fread(video_buffer.get(), 1, frame_length_, source_file_) ==
             frame_length_)
         {
diff --git a/modules/video_processing/main/test/unit_test/video_processing_unittest.cc b/modules/video_processing/main/test/unit_test/video_processing_unittest.cc
index 6e54923..9d70e67 100644
--- a/modules/video_processing/main/test/unit_test/video_processing_unittest.cc
+++ b/modules/video_processing/main/test/unit_test/video_processing_unittest.cc
@@ -89,7 +89,7 @@
 
 TEST_F(VideoProcessingModuleTest, HandleBadStats) {
   VideoProcessingModule::FrameStats stats;
-  scoped_array<uint8_t> video_buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> video_buffer(new uint8_t[frame_length_]);
   ASSERT_EQ(frame_length_, fread(video_buffer.get(), 1, frame_length_,
                                  source_file_));
   EXPECT_EQ(0, ConvertToI420(kI420, video_buffer.get(), 0, 0,
@@ -129,7 +129,7 @@
   I420VideoFrame video_frame2;
   VideoProcessingModule::FrameStats stats;
   // Only testing non-static functions here.
-  scoped_array<uint8_t> video_buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> video_buffer(new uint8_t[frame_length_]);
   ASSERT_EQ(frame_length_, fread(video_buffer.get(), 1, frame_length_,
                                 source_file_));
   EXPECT_EQ(0, ConvertToI420(kI420, video_buffer.get(), 0, 0,
@@ -172,7 +172,7 @@
 
 TEST_F(VideoProcessingModuleTest, FrameStats) {
   VideoProcessingModule::FrameStats stats;
-  scoped_array<uint8_t> video_buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> video_buffer(new uint8_t[frame_length_]);
   ASSERT_EQ(frame_length_, fread(video_buffer.get(), 1, frame_length_,
                                  source_file_));
   EXPECT_EQ(0, ConvertToI420(kI420, video_buffer.get(), 0, 0,
@@ -242,7 +242,7 @@
   vpm_->EnableTemporalDecimation(false);
 
   // Reading test frame
-  scoped_array<uint8_t> video_buffer(new uint8_t[frame_length_]);
+  scoped_ptr<uint8_t[]> video_buffer(new uint8_t[frame_length_]);
   ASSERT_EQ(frame_length_, fread(video_buffer.get(), 1, frame_length_,
                                  source_file_));
   // Using ConvertToI420 to add stride to the image.
diff --git a/modules/video_render/video_render.gypi b/modules/video_render/video_render.gypi
index a3c0f6d..3cb6167 100644
--- a/modules/video_render/video_render.gypi
+++ b/modules/video_render/video_render.gypi
@@ -87,6 +87,12 @@
             'android/video_render_android_surface_view.cc',
             'android/video_render_opengles20.cc',
           ],
+        }, {
+          'all_dependent_settings': {
+            'libraries': [
+              '-lGLESv2',
+            ],
+          },
         }],
         ['OS!="ios" or include_internal_video_render==0', {
           'sources!': [
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/video_render_module.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/video_render_module.target.darwin-arm64.mk
index c84869c..4b1d803 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/video_render_module.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_render_module_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,20 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_render/external/video_render_external_impl.cc \
+	third_party/webrtc/modules/video_render/incoming_video_stream.cc \
+	third_party/webrtc/modules/video_render/video_render_frames.cc \
+	third_party/webrtc/modules/video_render/video_render_impl.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +51,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +93,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +111,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +131,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +150,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +192,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +211,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +241,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +255,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +277,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_render_module_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_render_module
+video_render_module: third_party_webrtc_modules_video_render_module_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/video_render_module.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/video_render_module.target.linux-arm64.mk
index c84869c..4b1d803 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/video_render_module.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_video_render_module_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,20 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_render/external/video_render_external_impl.cc \
+	third_party/webrtc/modules/video_render/incoming_video_stream.cc \
+	third_party/webrtc/modules/video_render/video_render_frames.cc \
+	third_party/webrtc/modules/video_render/video_render_impl.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +51,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +93,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +111,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +131,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +150,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +192,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +211,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +241,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +255,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +277,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_video_render_module_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_render_module
+video_render_module: third_party_webrtc_modules_video_render_module_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/webrtc_i420.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/webrtc_i420.target.darwin-arm64.mk
index c84869c..b234379 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/webrtc_i420.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_webrtc_i420_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,17 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_coding/codecs/i420/main/source/i420.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +48,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +126,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +145,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +187,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +206,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +234,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +248,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +270,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_webrtc_i420_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_i420
+webrtc_i420: third_party_webrtc_modules_webrtc_i420_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/webrtc_i420.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/webrtc_i420.target.linux-arm64.mk
index c84869c..b234379 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/webrtc_i420.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_webrtc_i420_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,17 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_coding/codecs/i420/main/source/i420.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +48,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +90,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +108,7 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +126,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +145,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +187,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +206,7 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +234,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +248,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +270,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_webrtc_i420_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_i420
+webrtc_i420: third_party_webrtc_modules_webrtc_i420_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/webrtc_opus.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/webrtc_opus.target.darwin-arm64.mk
index 3b05cd9..dd361fc 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/webrtc_opus.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_webrtc_opus_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,7 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/opus/opus_interface.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +38,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +47,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +58,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +89,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +107,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +136,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +145,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +156,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +187,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +206,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +235,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +249,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +271,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_webrtc_opus_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_opus
+webrtc_opus: third_party_webrtc_modules_webrtc_opus_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/webrtc_opus.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/webrtc_opus.target.linux-arm64.mk
index 3b05cd9..dd361fc 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/webrtc_opus.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_webrtc_opus_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,7 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/audio_coding/codecs/opus/opus_interface.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +38,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +47,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +58,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +89,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +107,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +136,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +145,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +156,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +187,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +206,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/opus/src/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +235,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +249,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +271,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_webrtc_opus_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_opus
+webrtc_opus: third_party_webrtc_modules_webrtc_opus_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/webrtc_utility.target.darwin-arm64.mk
similarity index 70%
rename from modules/NetEq.target.darwin-x86_64.mk
rename to modules/webrtc_utility.target.darwin-arm64.mk
index c84869c..ea90c75 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/webrtc_utility.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_webrtc_utility_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,26 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/utility/source/audio_frame_operations.cc \
+	third_party/webrtc/modules/utility/source/coder.cc \
+	third_party/webrtc/modules/utility/source/file_player_impl.cc \
+	third_party/webrtc/modules/utility/source/file_recorder_impl.cc \
+	third_party/webrtc/modules/utility/source/helpers_android.cc \
+	third_party/webrtc/modules/utility/source/process_thread_impl.cc \
+	third_party/webrtc/modules/utility/source/rtp_dump_impl.cc \
+	third_party/webrtc/modules/utility/source/frame_scaler.cc \
+	third_party/webrtc/modules/utility/source/video_coder.cc \
+	third_party/webrtc/modules/utility/source/video_frames_queue.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +57,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +99,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +117,14 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +142,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +161,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +203,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +222,14 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +257,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +271,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +293,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_webrtc_utility_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_utility
+webrtc_utility: third_party_webrtc_modules_webrtc_utility_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/modules/webrtc_utility.target.linux-arm64.mk
similarity index 70%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to modules/webrtc_utility.target.linux-arm64.mk
index c84869c..ea90c75 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/modules/webrtc_utility.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_webrtc_utility_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,26 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/utility/source/audio_frame_operations.cc \
+	third_party/webrtc/modules/utility/source/coder.cc \
+	third_party/webrtc/modules/utility/source/file_player_impl.cc \
+	third_party/webrtc/modules/utility/source/file_recorder_impl.cc \
+	third_party/webrtc/modules/utility/source/helpers_android.cc \
+	third_party/webrtc/modules/utility/source/process_thread_impl.cc \
+	third_party/webrtc/modules/utility/source/rtp_dump_impl.cc \
+	third_party/webrtc/modules/utility/source/frame_scaler.cc \
+	third_party/webrtc/modules/utility/source/video_coder.cc \
+	third_party/webrtc/modules/utility/source/video_frames_queue.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -80,13 +57,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +99,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +117,14 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +142,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -189,13 +161,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +203,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +222,14 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
 	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +257,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +271,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +293,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_webrtc_utility_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_utility
+webrtc_utility: third_party_webrtc_modules_webrtc_utility_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/webrtc_video_coding.target.darwin-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/webrtc_video_coding.target.darwin-arm64.mk
index 3b05cd9..0f62005 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/webrtc_video_coding.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_webrtc_video_coding_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,36 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_coding/main/source/codec_database.cc \
+	third_party/webrtc/modules/video_coding/main/source/codec_timer.cc \
+	third_party/webrtc/modules/video_coding/main/source/content_metrics_processing.cc \
+	third_party/webrtc/modules/video_coding/main/source/decoding_state.cc \
+	third_party/webrtc/modules/video_coding/main/source/encoded_frame.cc \
+	third_party/webrtc/modules/video_coding/main/source/frame_buffer.cc \
+	third_party/webrtc/modules/video_coding/main/source/generic_decoder.cc \
+	third_party/webrtc/modules/video_coding/main/source/generic_encoder.cc \
+	third_party/webrtc/modules/video_coding/main/source/inter_frame_delay.cc \
+	third_party/webrtc/modules/video_coding/main/source/jitter_buffer.cc \
+	third_party/webrtc/modules/video_coding/main/source/jitter_estimator.cc \
+	third_party/webrtc/modules/video_coding/main/source/media_opt_util.cc \
+	third_party/webrtc/modules/video_coding/main/source/media_optimization.cc \
+	third_party/webrtc/modules/video_coding/main/source/packet.cc \
+	third_party/webrtc/modules/video_coding/main/source/qm_select.cc \
+	third_party/webrtc/modules/video_coding/main/source/receiver.cc \
+	third_party/webrtc/modules/video_coding/main/source/rtt_filter.cc \
+	third_party/webrtc/modules/video_coding/main/source/session_info.cc \
+	third_party/webrtc/modules/video_coding/main/source/timestamp_extrapolator.cc \
+	third_party/webrtc/modules/video_coding/main/source/timestamp_map.cc \
+	third_party/webrtc/modules/video_coding/main/source/timing.cc \
+	third_party/webrtc/modules/video_coding/main/source/video_coding_impl.cc \
+	third_party/webrtc/modules/video_coding/main/source/video_sender.cc \
+	third_party/webrtc/modules/video_coding/main/source/video_receiver.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +62,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +71,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +82,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +113,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +131,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +161,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +170,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +181,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +212,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +231,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +261,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +275,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +297,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_webrtc_video_coding_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_video_coding
+webrtc_video_coding: third_party_webrtc_modules_webrtc_video_coding_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/modules/webrtc_video_coding.target.linux-arm64.mk
similarity index 65%
copy from modules/NetEq.target.darwin-x86.mk
copy to modules/webrtc_video_coding.target.linux-arm64.mk
index 3b05cd9..0f62005 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/modules/webrtc_video_coding.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_modules_webrtc_video_coding_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,36 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/modules/video_coding/main/source/codec_database.cc \
+	third_party/webrtc/modules/video_coding/main/source/codec_timer.cc \
+	third_party/webrtc/modules/video_coding/main/source/content_metrics_processing.cc \
+	third_party/webrtc/modules/video_coding/main/source/decoding_state.cc \
+	third_party/webrtc/modules/video_coding/main/source/encoded_frame.cc \
+	third_party/webrtc/modules/video_coding/main/source/frame_buffer.cc \
+	third_party/webrtc/modules/video_coding/main/source/generic_decoder.cc \
+	third_party/webrtc/modules/video_coding/main/source/generic_encoder.cc \
+	third_party/webrtc/modules/video_coding/main/source/inter_frame_delay.cc \
+	third_party/webrtc/modules/video_coding/main/source/jitter_buffer.cc \
+	third_party/webrtc/modules/video_coding/main/source/jitter_estimator.cc \
+	third_party/webrtc/modules/video_coding/main/source/media_opt_util.cc \
+	third_party/webrtc/modules/video_coding/main/source/media_optimization.cc \
+	third_party/webrtc/modules/video_coding/main/source/packet.cc \
+	third_party/webrtc/modules/video_coding/main/source/qm_select.cc \
+	third_party/webrtc/modules/video_coding/main/source/receiver.cc \
+	third_party/webrtc/modules/video_coding/main/source/rtt_filter.cc \
+	third_party/webrtc/modules/video_coding/main/source/session_info.cc \
+	third_party/webrtc/modules/video_coding/main/source/timestamp_extrapolator.cc \
+	third_party/webrtc/modules/video_coding/main/source/timestamp_map.cc \
+	third_party/webrtc/modules/video_coding/main/source/timing.cc \
+	third_party/webrtc/modules/video_coding/main/source/video_coding_impl.cc \
+	third_party/webrtc/modules/video_coding/main/source/video_sender.cc \
+	third_party/webrtc/modules/video_coding/main/source/video_receiver.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,6 +62,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -78,11 +71,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +82,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +113,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +131,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,6 +161,7 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
@@ -187,11 +170,6 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +181,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +212,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +231,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +261,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +275,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +297,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_modules_webrtc_video_coding_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: webrtc_video_coding
+webrtc_video_coding: third_party_webrtc_modules_webrtc_video_coding_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/supplement.gypi b/supplement.gypi
index 7898d4c..2fad574 100644
--- a/supplement.gypi
+++ b/supplement.gypi
@@ -1,5 +1,6 @@
 {
   'variables': {
     'build_with_chromium': 0,
+    'use_sanitizer_options': 0,
   }
 }
diff --git a/system_wrappers/interface/scoped_ptr.h b/system_wrappers/interface/scoped_ptr.h
index fb20363..8998f81 100644
--- a/system_wrappers/interface/scoped_ptr.h
+++ b/system_wrappers/interface/scoped_ptr.h
@@ -563,82 +563,4 @@
   return p1 != p2.get();
 }
 
-namespace webrtc {
-
-// DEPRECATED: Use scoped_ptr<T[]> instead.
-// TODO(ajm): Remove scoped_array.
-//
-//  scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to
-//  is guaranteed, either on destruction of the scoped_array or via an explicit
-//  reset(). Use shared_array or std::vector if your needs are more complex.
-
-template<typename T>
-class scoped_array {
- private:
-
-  T* ptr;
-
-  scoped_array(scoped_array const &);
-  scoped_array & operator=(scoped_array const &);
-
- public:
-
-  typedef T element_type;
-
-  explicit scoped_array(T* p = NULL) : ptr(p) {}
-
-  ~scoped_array() {
-    typedef char type_must_be_complete[sizeof(T)];
-    delete[] ptr;
-  }
-
-  void reset(T* p = NULL) {
-    typedef char type_must_be_complete[sizeof(T)];
-
-    if (ptr != p) {
-      T* arr = ptr;
-      ptr = p;
-      // Delete last, in case arr destructor indirectly results in ~scoped_array
-      delete [] arr;
-    }
-  }
-
-  T& operator[](ptrdiff_t i) const {
-    assert(ptr != NULL);
-    assert(i >= 0);
-    return ptr[i];
-  }
-
-  T* get() const {
-    return ptr;
-  }
-
-  void swap(scoped_array & b) {
-    T* tmp = b.ptr;
-    b.ptr = ptr;
-    ptr = tmp;
-  }
-
-  T* release() {
-    T* tmp = ptr;
-    ptr = NULL;
-    return tmp;
-  }
-
-  T** accept() {
-    if (ptr) {
-      delete [] ptr;
-      ptr = NULL;
-    }
-    return &ptr;
-  }
-};
-
-template<class T> inline
-void swap(scoped_array<T>& a, scoped_array<T>& b) {
-  a.swap(b);
-}
-
-}  // namespace webrtc
-
 #endif  // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_SCOPED_PTR_H_
diff --git a/modules/NetEq.target.darwin-x86.mk b/system_wrappers/source/cpu_features_android.target.darwin-arm64.mk
similarity index 62%
copy from modules/NetEq.target.darwin-x86.mk
copy to system_wrappers/source/cpu_features_android.target.darwin-arm64.mk
index 3b05cd9..eb07d4e 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/system_wrappers/source/cpu_features_android.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_system_wrappers_source_cpu_features_android_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,7 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/system_wrappers/source/cpu_features_android.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,19 +38,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +54,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +85,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +103,6 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,19 +130,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +146,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +177,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +196,6 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +223,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +237,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -318,7 +248,8 @@
 
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
-LOCAL_STATIC_LIBRARIES :=
+LOCAL_STATIC_LIBRARIES := \
+	cpufeatures
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
@@ -329,10 +260,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_system_wrappers_source_cpu_features_android_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: cpu_features_android
+cpu_features_android: third_party_webrtc_system_wrappers_source_cpu_features_android_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/system_wrappers/source/cpu_features_android.target.linux-arm64.mk
similarity index 62%
copy from modules/NetEq.target.darwin-x86.mk
copy to system_wrappers/source/cpu_features_android.target.linux-arm64.mk
index 3b05cd9..eb07d4e 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/system_wrappers/source/cpu_features_android.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_system_wrappers_source_cpu_features_android_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -23,39 +23,7 @@
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/system_wrappers/source/cpu_features_android.c
 
 
 # Flags passed to both C and C++ files.
@@ -70,19 +38,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +54,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +85,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +103,6 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,19 +130,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +146,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +177,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +196,6 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +223,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +237,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -318,7 +248,8 @@
 
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
-LOCAL_STATIC_LIBRARIES :=
+LOCAL_STATIC_LIBRARIES := \
+	cpufeatures
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
@@ -329,10 +260,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_system_wrappers_source_cpu_features_android_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: cpu_features_android
+cpu_features_android: third_party_webrtc_system_wrappers_source_cpu_features_android_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/system_wrappers/source/system_wrappers.target.darwin-arm64.mk
similarity index 63%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to system_wrappers/source/system_wrappers.target.darwin-arm64.mk
index c84869c..a8f5ad8 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/system_wrappers/source/system_wrappers.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_system_wrappers_source_system_wrappers_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,43 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/system_wrappers/source/aligned_malloc.cc \
+	third_party/webrtc/system_wrappers/source/atomic32_posix.cc \
+	third_party/webrtc/system_wrappers/source/clock.cc \
+	third_party/webrtc/system_wrappers/source/condition_variable.cc \
+	third_party/webrtc/system_wrappers/source/condition_variable_posix.cc \
+	third_party/webrtc/system_wrappers/source/cpu_info.cc \
+	third_party/webrtc/system_wrappers/source/cpu_features.cc \
+	third_party/webrtc/system_wrappers/source/critical_section.cc \
+	third_party/webrtc/system_wrappers/source/critical_section_posix.cc \
+	third_party/webrtc/system_wrappers/source/data_log_c.cc \
+	third_party/webrtc/system_wrappers/source/data_log_no_op.cc \
+	third_party/webrtc/system_wrappers/source/event.cc \
+	third_party/webrtc/system_wrappers/source/event_posix.cc \
+	third_party/webrtc/system_wrappers/source/event_tracer.cc \
+	third_party/webrtc/system_wrappers/source/file_impl.cc \
+	third_party/webrtc/system_wrappers/source/logcat_trace_context.cc \
+	third_party/webrtc/system_wrappers/source/logging.cc \
+	third_party/webrtc/system_wrappers/source/rw_lock.cc \
+	third_party/webrtc/system_wrappers/source/rw_lock_generic.cc \
+	third_party/webrtc/system_wrappers/source/rw_lock_posix.cc \
+	third_party/webrtc/system_wrappers/source/sleep.cc \
+	third_party/webrtc/system_wrappers/source/sort.cc \
+	third_party/webrtc/system_wrappers/source/tick_util.cc \
+	third_party/webrtc/system_wrappers/source/thread.cc \
+	third_party/webrtc/system_wrappers/source/thread_posix.cc \
+	third_party/webrtc/system_wrappers/source/trace_impl.cc \
+	third_party/webrtc/system_wrappers/source/trace_posix.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +70,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +112,8 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_THREAD_RR' \
+	'-DWEBRTC_CLOCK_TYPE_REALTIME' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +132,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/source/spreadsortlib \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +151,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +166,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +208,8 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_THREAD_RR' \
+	'-DWEBRTC_CLOCK_TYPE_REALTIME' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +229,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/source/spreadsortlib \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +258,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +272,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +294,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_system_wrappers_source_system_wrappers_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: system_wrappers
+system_wrappers: third_party_webrtc_system_wrappers_source_system_wrappers_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86_64.mk b/system_wrappers/source/system_wrappers.target.linux-arm64.mk
similarity index 63%
copy from modules/NetEq.target.darwin-x86_64.mk
copy to system_wrappers/source/system_wrappers.target.linux-arm64.mk
index c84869c..a8f5ad8 100644
--- a/modules/NetEq.target.darwin-x86_64.mk
+++ b/system_wrappers/source/system_wrappers.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_system_wrappers_source_system_wrappers_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,49 +18,43 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/system_wrappers/source/aligned_malloc.cc \
+	third_party/webrtc/system_wrappers/source/atomic32_posix.cc \
+	third_party/webrtc/system_wrappers/source/clock.cc \
+	third_party/webrtc/system_wrappers/source/condition_variable.cc \
+	third_party/webrtc/system_wrappers/source/condition_variable_posix.cc \
+	third_party/webrtc/system_wrappers/source/cpu_info.cc \
+	third_party/webrtc/system_wrappers/source/cpu_features.cc \
+	third_party/webrtc/system_wrappers/source/critical_section.cc \
+	third_party/webrtc/system_wrappers/source/critical_section_posix.cc \
+	third_party/webrtc/system_wrappers/source/data_log_c.cc \
+	third_party/webrtc/system_wrappers/source/data_log_no_op.cc \
+	third_party/webrtc/system_wrappers/source/event.cc \
+	third_party/webrtc/system_wrappers/source/event_posix.cc \
+	third_party/webrtc/system_wrappers/source/event_tracer.cc \
+	third_party/webrtc/system_wrappers/source/file_impl.cc \
+	third_party/webrtc/system_wrappers/source/logcat_trace_context.cc \
+	third_party/webrtc/system_wrappers/source/logging.cc \
+	third_party/webrtc/system_wrappers/source/rw_lock.cc \
+	third_party/webrtc/system_wrappers/source/rw_lock_generic.cc \
+	third_party/webrtc/system_wrappers/source/rw_lock_posix.cc \
+	third_party/webrtc/system_wrappers/source/sleep.cc \
+	third_party/webrtc/system_wrappers/source/sort.cc \
+	third_party/webrtc/system_wrappers/source/tick_util.cc \
+	third_party/webrtc/system_wrappers/source/thread.cc \
+	third_party/webrtc/system_wrappers/source/thread_posix.cc \
+	third_party/webrtc/system_wrappers/source/trace_impl.cc \
+	third_party/webrtc/system_wrappers/source/trace_posix.cc
 
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Debug := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -76,17 +70,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -126,8 +112,8 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_THREAD_RR' \
+	'-DWEBRTC_CLOCK_TYPE_REALTIME' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +132,8 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/source/spreadsortlib \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -169,7 +151,6 @@
 
 # Flags passed to both C and C++ files.
 MY_CFLAGS_Release := \
-	-fstack-protector \
 	--param=ssp-buffer-size=4 \
 	-Werror \
 	-fno-exceptions \
@@ -185,17 +166,9 @@
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
-	-fstack-protector \
 	-fno-short-enums \
 	-finline-limit=64 \
 	-Wa,--noexecstack \
@@ -235,8 +208,8 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
+	'-DWEBRTC_THREAD_RR' \
+	'-DWEBRTC_CLOCK_TYPE_REALTIME' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +229,8 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/source/spreadsortlib \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +258,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +272,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +294,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_system_wrappers_source_system_wrappers_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: system_wrappers
+system_wrappers: third_party_webrtc_system_wrappers_source_system_wrappers_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/test/direct_transport.h b/test/direct_transport.h
index 9dc9e1f..c40a8c3 100644
--- a/test/direct_transport.h
+++ b/test/direct_transport.h
@@ -49,7 +49,7 @@
   scoped_ptr<CriticalSectionWrapper> lock_;
   scoped_ptr<EventWrapper> packet_event_;
   scoped_ptr<ThreadWrapper> thread_;
-  Clock* clock_;
+  Clock* const clock_;
 
   bool shutting_down_;
 
diff --git a/test/fake_decoder.cc b/test/fake_decoder.cc
index a9e6f50..1624ea0 100644
--- a/test/fake_decoder.cc
+++ b/test/fake_decoder.cc
@@ -36,6 +36,7 @@
                             const CodecSpecificInfo* codec_specific_info,
                             int64_t render_time_ms) {
   frame_.set_timestamp(input._timeStamp);
+  frame_.set_ntp_time_ms(input.ntp_time_ms_);
   frame_.set_render_time_ms(render_time_ms);
 
   callback_->Decoded(frame_);
diff --git a/test/fake_encoder.h b/test/fake_encoder.h
index c0709c1..2a444a1 100644
--- a/test/fake_encoder.h
+++ b/test/fake_encoder.h
@@ -42,7 +42,7 @@
                            uint32_t framerate) OVERRIDE;
 
  private:
-  Clock* clock_;
+  Clock* const clock_;
   VideoCodec config_;
   EncodedImageCallback* callback_;
   int target_bitrate_kbps_;
diff --git a/test/fake_network_pipe_unittest.cc b/test/fake_network_pipe_unittest.cc
index 5076bc0..6655fa1 100644
--- a/test/fake_network_pipe_unittest.cc
+++ b/test/fake_network_pipe_unittest.cc
@@ -47,7 +47,7 @@
   }
 
   void SendPackets(FakeNetworkPipe* pipe, int number_packets, int kPacketSize) {
-    scoped_array<uint8_t> packet(new uint8_t[kPacketSize]);
+    scoped_ptr<uint8_t[]> packet(new uint8_t[kPacketSize]);
     for (int i = 0; i < number_packets; ++i) {
       pipe->SendPacket(packet.get(), kPacketSize);
     }
diff --git a/test/frame_generator_capturer.cc b/test/frame_generator_capturer.cc
index 6570c6f..d1c17c7 100644
--- a/test/frame_generator_capturer.cc
+++ b/test/frame_generator_capturer.cc
@@ -67,7 +67,8 @@
       tick_(EventWrapper::Create()),
       lock_(CriticalSectionWrapper::CreateCriticalSection()),
       frame_generator_(frame_generator),
-      target_fps_(target_fps) {
+      target_fps_(target_fps),
+      first_frame_capture_time_(-1) {
   assert(input != NULL);
   assert(frame_generator != NULL);
   assert(target_fps > 0);
@@ -113,6 +114,9 @@
     if (sending_) {
       I420VideoFrame* frame = frame_generator_->NextFrame();
       frame->set_render_time_ms(clock_->CurrentNtpInMilliseconds());
+      if (first_frame_capture_time_ == -1) {
+        first_frame_capture_time_ = frame->render_time_ms();
+      }
       input_->SwapFrame(frame);
     }
   }
diff --git a/test/frame_generator_capturer.h b/test/frame_generator_capturer.h
index 5be6bb2..ee3f0e0 100644
--- a/test/frame_generator_capturer.h
+++ b/test/frame_generator_capturer.h
@@ -43,6 +43,8 @@
   virtual void Start() OVERRIDE;
   virtual void Stop() OVERRIDE;
 
+  int64_t first_frame_capture_time() const { return first_frame_capture_time_; }
+
  private:
   FrameGeneratorCapturer(Clock* clock,
                          VideoSendStreamInput* input,
@@ -52,7 +54,7 @@
   void InsertFrame();
   static bool Run(void* obj);
 
-  Clock* clock_;
+  Clock* const clock_;
   bool sending_;
 
   scoped_ptr<EventWrapper> tick_;
@@ -61,6 +63,8 @@
   scoped_ptr<FrameGenerator> frame_generator_;
 
   int target_fps_;
+
+  int64_t first_frame_capture_time_;
 };
 }  // test
 }  // webrtc
diff --git a/test/rtp_rtcp_observer.h b/test/rtp_rtcp_observer.h
index 00422cc..e448653 100644
--- a/test/rtp_rtcp_observer.h
+++ b/test/rtp_rtcp_observer.h
@@ -53,15 +53,15 @@
  protected:
   RtpRtcpObserver(unsigned int event_timeout_ms,
       const FakeNetworkPipe::Config& configuration)
-      : lock_(CriticalSectionWrapper::CreateCriticalSection()),
+      : crit_(CriticalSectionWrapper::CreateCriticalSection()),
         observation_complete_(EventWrapper::Create()),
         parser_(RtpHeaderParser::Create()),
-        send_transport_(lock_.get(),
+        send_transport_(crit_.get(),
                         this,
                         &RtpRtcpObserver::OnSendRtp,
                         &RtpRtcpObserver::OnSendRtcp,
                         configuration),
-        receive_transport_(lock_.get(),
+        receive_transport_(crit_.get(),
                            this,
                            &RtpRtcpObserver::OnReceiveRtp,
                            &RtpRtcpObserver::OnReceiveRtcp,
@@ -69,15 +69,15 @@
         timeout_ms_(event_timeout_ms) {}
 
   explicit RtpRtcpObserver(unsigned int event_timeout_ms)
-      : lock_(CriticalSectionWrapper::CreateCriticalSection()),
+      : crit_(CriticalSectionWrapper::CreateCriticalSection()),
         observation_complete_(EventWrapper::Create()),
         parser_(RtpHeaderParser::Create()),
-        send_transport_(lock_.get(),
+        send_transport_(crit_.get(),
                         this,
                         &RtpRtcpObserver::OnSendRtp,
                         &RtpRtcpObserver::OnSendRtcp,
                         FakeNetworkPipe::Config()),
-        receive_transport_(lock_.get(),
+        receive_transport_(crit_.get(),
                            this,
                            &RtpRtcpObserver::OnReceiveRtp,
                            &RtpRtcpObserver::OnReceiveRtcp,
@@ -89,23 +89,26 @@
     DROP_PACKET,
   };
 
-  virtual Action OnSendRtp(const uint8_t* packet, size_t length) {
+  virtual Action OnSendRtp(const uint8_t* packet, size_t length)
+      EXCLUSIVE_LOCKS_REQUIRED(crit_) {
     return SEND_PACKET;
   }
 
-  virtual Action OnSendRtcp(const uint8_t* packet, size_t length) {
+  virtual Action OnSendRtcp(const uint8_t* packet, size_t length)
+      EXCLUSIVE_LOCKS_REQUIRED(crit_) {
     return SEND_PACKET;
   }
 
-  virtual Action OnReceiveRtp(const uint8_t* packet, size_t length) {
+  virtual Action OnReceiveRtp(const uint8_t* packet, size_t length)
+      EXCLUSIVE_LOCKS_REQUIRED(crit_) {
     return SEND_PACKET;
   }
 
-  virtual Action OnReceiveRtcp(const uint8_t* packet, size_t length) {
+  virtual Action OnReceiveRtcp(const uint8_t* packet, size_t length)
+      EXCLUSIVE_LOCKS_REQUIRED(crit_) {
     return SEND_PACKET;
   }
 
-
  private:
   class PacketTransport : public test::DirectTransport {
    public:
@@ -118,7 +121,7 @@
                     PacketTransportAction on_rtcp,
                     const FakeNetworkPipe::Config& configuration)
         : test::DirectTransport(configuration),
-          lock_(lock),
+          crit_(lock),
           observer_(observer),
           on_rtp_(on_rtp),
           on_rtcp_(on_rtcp) {}
@@ -128,7 +131,7 @@
       EXPECT_FALSE(RtpHeaderParser::IsRtcp(packet, static_cast<int>(length)));
       Action action;
       {
-        CriticalSectionScoped crit_(lock_);
+        CriticalSectionScoped lock(crit_);
         action = (observer_->*on_rtp_)(packet, length);
       }
       switch (action) {
@@ -145,7 +148,7 @@
       EXPECT_TRUE(RtpHeaderParser::IsRtcp(packet, static_cast<int>(length)));
       Action action;
       {
-        CriticalSectionScoped crit_(lock_);
+        CriticalSectionScoped lock(crit_);
         action = (observer_->*on_rtcp_)(packet, length);
       }
       switch (action) {
@@ -159,16 +162,16 @@
     }
 
     // Pointer to shared lock instance protecting on_rtp_/on_rtcp_ calls.
-    CriticalSectionWrapper* lock_;
+    CriticalSectionWrapper* const crit_;
 
-    RtpRtcpObserver* observer_;
-    PacketTransportAction on_rtp_, on_rtcp_;
+    RtpRtcpObserver* const observer_;
+    const PacketTransportAction on_rtp_, on_rtcp_;
   };
 
  protected:
-  scoped_ptr<CriticalSectionWrapper> lock_;
-  scoped_ptr<EventWrapper> observation_complete_;
-  scoped_ptr<RtpHeaderParser> parser_;
+  const scoped_ptr<CriticalSectionWrapper> crit_;
+  const scoped_ptr<EventWrapper> observation_complete_;
+  const scoped_ptr<RtpHeaderParser> parser_;
 
  private:
   PacketTransport send_transport_, receive_transport_;
diff --git a/test/testsupport/fileutils.cc b/test/testsupport/fileutils.cc
index 9d04ab0..a3e6620 100644
--- a/test/testsupport/fileutils.cc
+++ b/test/testsupport/fileutils.cc
@@ -10,8 +10,9 @@
 
 #include "webrtc/test/testsupport/fileutils.h"
 
-#ifdef WIN32
 #include <assert.h>
+
+#ifdef WIN32
 #include <direct.h>
 #include <tchar.h>
 #include <windows.h>
diff --git a/test/testsupport/metrics/video_metrics.cc b/test/testsupport/metrics/video_metrics.cc
index f537e03..1e19806 100644
--- a/test/testsupport/metrics/video_metrics.cc
+++ b/test/testsupport/metrics/video_metrics.cc
@@ -111,8 +111,8 @@
   const size_t frame_length = 3 * width * height >> 1;
   I420VideoFrame ref_frame;
   I420VideoFrame test_frame;
-  scoped_array<uint8_t> ref_buffer(new uint8_t[frame_length]);
-  scoped_array<uint8_t> test_buffer(new uint8_t[frame_length]);
+  scoped_ptr<uint8_t[]> ref_buffer(new uint8_t[frame_length]);
+  scoped_ptr<uint8_t[]> test_buffer(new uint8_t[frame_length]);
 
   // Set decoded image parameters.
   int half_width = (width + 1) / 2;
diff --git a/tools/frame_editing/frame_editing_lib.cc b/tools/frame_editing/frame_editing_lib.cc
index 6e252e8..93a548f 100644
--- a/tools/frame_editing/frame_editing_lib.cc
+++ b/tools/frame_editing/frame_editing_lib.cc
@@ -38,7 +38,7 @@
   // Frame size of I420.
   int frame_length = CalcBufferSize(kI420, width, height);
 
-  webrtc::scoped_array<uint8_t> temp_buffer(new uint8_t[frame_length]);
+  webrtc::scoped_ptr<uint8_t[]> temp_buffer(new uint8_t[frame_length]);
 
   FILE* out_fid = fopen(out_path.c_str(), "wb");
 
diff --git a/tools/frame_editing/frame_editing_unittest.cc b/tools/frame_editing/frame_editing_unittest.cc
index 8330218..bdcc2f2 100644
--- a/tools/frame_editing/frame_editing_unittest.cc
+++ b/tools/frame_editing/frame_editing_unittest.cc
@@ -53,8 +53,8 @@
   }
   // Compares the frames in both streams to the end of one of the streams.
   void CompareToTheEnd(FILE* test_video_fid, FILE* ref_video_fid,
-                       scoped_array<int>* ref_buffer,
-                       scoped_array<int>* test_buffer) {
+                       scoped_ptr<int[]>* ref_buffer,
+                       scoped_ptr<int[]>* test_buffer) {
     while (!feof(test_video_fid) && !feof(ref_video_fid)) {
       num_bytes_read_ = fread(ref_buffer->get(), 1, kFrameSize, ref_video_fid);
       if (!feof(ref_video_fid)) {
@@ -78,8 +78,8 @@
   FILE* original_fid_;
   FILE* edited_fid_;
   int num_bytes_read_;
-  scoped_array<int> original_buffer_;
-  scoped_array<int> edited_buffer_;
+  scoped_ptr<int[]> original_buffer_;
+  scoped_ptr<int[]> edited_buffer_;
   int num_frames_read_;
 };
 
diff --git a/video/bitrate_estimator_tests.cc b/video/bitrate_estimator_tests.cc
index 73e66a2..0cb30e3 100644
--- a/video/bitrate_estimator_tests.cc
+++ b/video/bitrate_estimator_tests.cc
@@ -17,6 +17,7 @@
 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
 #include "webrtc/system_wrappers/interface/event_wrapper.h"
 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
+#include "webrtc/system_wrappers/interface/thread_annotations.h"
 #include "webrtc/test/direct_transport.h"
 #include "webrtc/test/encoder_settings.h"
 #include "webrtc/test/fake_decoder.h"
@@ -54,7 +55,6 @@
     // Create receiver call first so that we are guaranteed to have a trace
     // callback when sender call is created.
     Call::Config receiver_call_config(&receive_transport_);
-    receiver_call_config.trace_callback = &receiver_trace_;
     receiver_call_.reset(Call::Create(receiver_call_config));
 
     Call::Config sender_call_config(&send_transport_);
@@ -112,14 +112,14 @@
     }
 
     void PushExpectedLogLine(const std::string& expected_log_line) {
-      CriticalSectionScoped cs(crit_sect_.get());
+      CriticalSectionScoped lock(crit_sect_.get());
       expected_log_lines_.push_back(expected_log_line);
     }
 
     virtual void Print(TraceLevel level,
                        const char* message,
                        int length) OVERRIDE {
-      CriticalSectionScoped cs(crit_sect_.get());
+      CriticalSectionScoped lock(crit_sect_.get());
       if (!(level & kTraceStateInfo)) {
         return;
       }
@@ -148,9 +148,9 @@
 
    private:
     typedef std::list<std::string> Strings;
-    scoped_ptr<CriticalSectionWrapper> crit_sect_;
-    Strings received_log_lines_;
-    Strings expected_log_lines_;
+    const scoped_ptr<CriticalSectionWrapper> crit_sect_;
+    Strings received_log_lines_ GUARDED_BY(crit_sect_);
+    Strings expected_log_lines_ GUARDED_BY(crit_sect_);
     scoped_ptr<EventWrapper> done_;
   };
 
@@ -175,7 +175,7 @@
           test_->send_config_.encoder_settings.streams[0].height,
           30,
           Clock::GetRealTimeClock()));
-      send_stream_->StartSending();
+      send_stream_->Start();
       frame_generator_capturer_->Start();
 
       ExternalVideoDecoder decoder;
@@ -186,7 +186,7 @@
       test_->receive_config_.external_decoders.push_back(decoder);
       receive_stream_ = test_->receiver_call_->CreateVideoReceiveStream(
           test_->receive_config_);
-      receive_stream_->StartReceiving();
+      receive_stream_->Start();
 
       is_sending_receiving_ = true;
     }
@@ -202,8 +202,8 @@
     void StopSending() {
       if (is_sending_receiving_) {
         frame_generator_capturer_->Stop();
-        send_stream_->StopSending();
-        receive_stream_->StopReceiving();
+        send_stream_->Stop();
+        receive_stream_->Stop();
         is_sending_receiving_ = false;
       }
     }
diff --git a/video/call.cc b/video/call.cc
index bcdcbf7..a327654 100644
--- a/video/call.cc
+++ b/video/call.cc
@@ -21,6 +21,7 @@
 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
 #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
+#include "webrtc/system_wrappers/interface/thread_annotations.h"
 #include "webrtc/system_wrappers/interface/trace.h"
 #include "webrtc/video/video_receive_stream.h"
 #include "webrtc/video/video_send_stream.h"
@@ -45,18 +46,18 @@
   virtual ~CpuOveruseObserverProxy() {}
 
   virtual void OveruseDetected() OVERRIDE {
-    CriticalSectionScoped cs(crit_.get());
+    CriticalSectionScoped lock(crit_.get());
     overuse_callback_->OnOveruse();
   }
 
   virtual void NormalUsage() OVERRIDE {
-    CriticalSectionScoped cs(crit_.get());
+    CriticalSectionScoped lock(crit_.get());
     overuse_callback_->OnNormalUse();
   }
 
  private:
-  scoped_ptr<CriticalSectionWrapper> crit_;
-  OveruseCallback* overuse_callback_;
+  const scoped_ptr<CriticalSectionWrapper> crit_;
+  OveruseCallback* overuse_callback_ GUARDED_BY(crit_);
 };
 
 class Call : public webrtc::Call, public PacketReceiver {
@@ -95,10 +96,11 @@
 
   Call::Config config_;
 
-  std::map<uint32_t, VideoReceiveStream*> receive_ssrcs_;
+  std::map<uint32_t, VideoReceiveStream*> receive_ssrcs_
+      GUARDED_BY(receive_lock_);
   scoped_ptr<RWLockWrapper> receive_lock_;
 
-  std::map<uint32_t, VideoSendStream*> send_ssrcs_;
+  std::map<uint32_t, VideoSendStream*> send_ssrcs_ GUARDED_BY(send_lock_);
   scoped_ptr<RWLockWrapper> send_lock_;
 
   scoped_ptr<RtpHeaderParser> rtp_header_parser_;
@@ -115,83 +117,7 @@
 };
 }  // namespace internal
 
-class TraceDispatcher : public TraceCallback {
- public:
-  TraceDispatcher()
-      : lock_(CriticalSectionWrapper::CreateCriticalSection()),
-        filter_(kTraceNone) {
-    Trace::CreateTrace();
-    VideoEngine::SetTraceCallback(this);
-    VideoEngine::SetTraceFilter(kTraceNone);
-  }
-
-  ~TraceDispatcher() {
-    Trace::ReturnTrace();
-    VideoEngine::SetTraceCallback(NULL);
-  }
-
-  virtual void Print(TraceLevel level,
-                     const char* message,
-                     int length) OVERRIDE {
-    CriticalSectionScoped crit(lock_.get());
-    for (std::map<Call*, Call::Config*>::iterator it = callbacks_.begin();
-         it != callbacks_.end();
-         ++it) {
-      if ((level & it->second->trace_filter) != kTraceNone)
-        it->second->trace_callback->Print(level, message, length);
-    }
-  }
-
-  void RegisterCallback(Call* call, Call::Config* config) {
-    if (config->trace_callback == NULL)
-      return;
-
-    CriticalSectionScoped crit(lock_.get());
-    callbacks_[call] = config;
-
-    filter_ |= config->trace_filter;
-    VideoEngine::SetTraceFilter(filter_);
-  }
-
-  void DeregisterCallback(Call* call) {
-    CriticalSectionScoped crit(lock_.get());
-    callbacks_.erase(call);
-
-    filter_ = kTraceNone;
-    for (std::map<Call*, Call::Config*>::iterator it = callbacks_.begin();
-         it != callbacks_.end();
-         ++it) {
-      filter_ |= it->second->trace_filter;
-    }
-
-    VideoEngine::SetTraceFilter(filter_);
-  }
-
- private:
-  scoped_ptr<CriticalSectionWrapper> lock_;
-  unsigned int filter_;
-  std::map<Call*, Call::Config*> callbacks_;
-};
-
-namespace internal {
-TraceDispatcher* global_trace_dispatcher = NULL;
-}  // internal
-
-void CreateTraceDispatcher() {
-  if (internal::global_trace_dispatcher == NULL) {
-    TraceDispatcher* dispatcher = new TraceDispatcher();
-    // TODO(pbos): Atomic compare and exchange.
-    if (internal::global_trace_dispatcher == NULL) {
-      internal::global_trace_dispatcher = dispatcher;
-    } else {
-      delete dispatcher;
-    }
-  }
-}
-
 Call* Call::Create(const Call::Config& config) {
-  CreateTraceDispatcher();
-
   VideoEngine* video_engine = config.webrtc_config != NULL
                                   ? VideoEngine::Create(*config.webrtc_config)
                                   : VideoEngine::Create();
@@ -217,8 +143,6 @@
         new CpuOveruseObserverProxy(config.overuse_callback));
   }
 
-  global_trace_dispatcher->RegisterCallback(this, &config_);
-
   rtp_rtcp_ = ViERTP_RTCP::GetInterface(video_engine_);
   assert(rtp_rtcp_ != NULL);
 
@@ -235,7 +159,6 @@
 }
 
 Call::~Call() {
-  global_trace_dispatcher->DeregisterCallback(this);
   base_->DeleteChannel(base_channel_id_);
   base_->Release();
   codec_->Release();
diff --git a/video/call_perf_tests.cc b/video/call_perf_tests.cc
index f7768fb..6b8ff96 100644
--- a/video/call_perf_tests.cc
+++ b/video/call_perf_tests.cc
@@ -22,6 +22,7 @@
 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
+#include "webrtc/system_wrappers/interface/thread_annotations.h"
 #include "webrtc/test/direct_transport.h"
 #include "webrtc/test/encoder_settings.h"
 #include "webrtc/test/fake_audio_device.h"
@@ -67,19 +68,24 @@
     scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer(
         test::FrameGeneratorCapturer::Create(
             send_stream_->Input(), 320, 240, 30, Clock::GetRealTimeClock()));
-    send_stream_->StartSending();
+    send_stream_->Start();
     frame_generator_capturer->Start();
 
     EXPECT_EQ(kEventSignaled, observer->Wait());
 
     observer->StopSending();
     frame_generator_capturer->Stop();
-    send_stream_->StopSending();
+    send_stream_->Stop();
     call->DestroyVideoSendStream(send_stream_);
   }
 
   void TestMinTransmitBitrate(bool pad_to_min_bitrate);
 
+  void TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
+                          int threshold_ms,
+                          int start_time_ms,
+                          int run_time_ms);
+
   VideoSendStream* send_stream_;
   test::FakeEncoder fake_encoder_;
 };
@@ -88,7 +94,7 @@
  public:
   explicit SyncRtcpObserver(const FakeNetworkPipe::Config& config)
       : test::RtpRtcpObserver(kLongTimeoutMs, config),
-        critical_section_(CriticalSectionWrapper::CreateCriticalSection()) {}
+        crit_(CriticalSectionWrapper::CreateCriticalSection()) {}
 
   virtual Action OnSendRtcp(const uint8_t* packet, size_t length) OVERRIDE {
     RTCPUtility::RTCPParserV2 parser(packet, length, true);
@@ -110,7 +116,7 @@
   }
 
   int64_t RtpTimestampToNtp(uint32_t timestamp) const {
-    CriticalSectionScoped cs(critical_section_.get());
+    CriticalSectionScoped lock(crit_.get());
     int64_t timestamp_in_ms = -1;
     if (ntp_rtp_pairs_.size() == 2) {
       // TODO(stefan): We can't EXPECT_TRUE on this call due to a bug in the
@@ -124,7 +130,7 @@
 
  private:
   void StoreNtpRtpPair(synchronization::RtcpMeasurement ntp_rtp_pair) {
-    CriticalSectionScoped cs(critical_section_.get());
+    CriticalSectionScoped lock(crit_.get());
     for (synchronization::RtcpList::iterator it = ntp_rtp_pairs_.begin();
          it != ntp_rtp_pairs_.end();
          ++it) {
@@ -142,8 +148,8 @@
     ntp_rtp_pairs_.push_front(ntp_rtp_pair);
   }
 
-  scoped_ptr<CriticalSectionWrapper> critical_section_;
-  synchronization::RtcpList ntp_rtp_pairs_;
+  const scoped_ptr<CriticalSectionWrapper> crit_;
+  synchronization::RtcpList ntp_rtp_pairs_ GUARDED_BY(crit_);
 };
 
 class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer {
@@ -208,7 +214,7 @@
   }
 
  private:
-  Clock* clock_;
+  Clock* const clock_;
   int voe_channel_;
   VoEVideoSync* voe_sync_;
   SyncRtcpObserver* audio_observer_;
@@ -310,8 +316,8 @@
           send_config.encoder_settings.streams[0].height,
           30,
           Clock::GetRealTimeClock()));
-  receive_stream->StartReceiving();
-  send_stream->StartSending();
+  receive_stream->Start();
+  send_stream->Start();
   capturer->Start();
 
   fake_audio_device.Start();
@@ -328,8 +334,8 @@
   fake_audio_device.Stop();
 
   capturer->Stop();
-  send_stream->StopSending();
-  receive_stream->StopReceiving();
+  send_stream->Stop();
+  receive_stream->Stop();
   observer.StopSending();
   audio_observer.StopSending();
 
@@ -343,6 +349,195 @@
   VoiceEngine::Delete(voice_engine);
 }
 
+class CaptureNtpTimeObserver : public test::RtpRtcpObserver,
+                               public VideoRenderer {
+ public:
+  CaptureNtpTimeObserver(Clock* clock,
+                         const FakeNetworkPipe::Config& config,
+                         int threshold_ms,
+                         int start_time_ms,
+                         int run_time_ms)
+      : RtpRtcpObserver(kLongTimeoutMs, config),
+        clock_(clock),
+        threshold_ms_(threshold_ms),
+        start_time_ms_(start_time_ms),
+        run_time_ms_(run_time_ms),
+        creation_time_ms_(clock_->TimeInMilliseconds()),
+        capturer_(NULL),
+        rtp_start_timestamp_set_(false),
+        rtp_start_timestamp_(0) {}
+
+  virtual void RenderFrame(const I420VideoFrame& video_frame,
+                           int time_to_render_ms) OVERRIDE {
+    if (video_frame.ntp_time_ms() <= 0) {
+      // Haven't got enough RTCP SR in order to calculate the capture ntp time.
+      return;
+    }
+
+    int64_t now_ms = clock_->TimeInMilliseconds();
+    int64_t time_since_creation = now_ms - creation_time_ms_;
+    if (time_since_creation < start_time_ms_) {
+      // Wait for |start_time_ms_| before start measuring.
+      return;
+    }
+
+    if (time_since_creation > run_time_ms_) {
+      observation_complete_->Set();
+    }
+
+    FrameCaptureTimeList::iterator iter =
+        capture_time_list_.find(video_frame.timestamp());
+    EXPECT_TRUE(iter != capture_time_list_.end());
+
+    // The real capture time has been wrapped to uint32_t before converted
+    // to rtp timestamp in the sender side. So here we convert the estimated
+    // capture time to a uint32_t 90k timestamp also for comparing.
+    uint32_t estimated_capture_timestamp =
+        90 * static_cast<uint32_t>(video_frame.ntp_time_ms());
+    uint32_t real_capture_timestamp = iter->second;
+    int time_offset_ms = real_capture_timestamp - estimated_capture_timestamp;
+    time_offset_ms = time_offset_ms / 90;
+    std::stringstream ss;
+    ss << time_offset_ms;
+
+    webrtc::test::PrintResult("capture_ntp_time",
+                              "",
+                              "real - estimated",
+                              ss.str(),
+                              "ms",
+                              true);
+    EXPECT_TRUE(std::abs(time_offset_ms) < threshold_ms_);
+  }
+
+  virtual Action OnSendRtp(const uint8_t* packet, size_t length) {
+    RTPHeader header;
+    EXPECT_TRUE(parser_->Parse(packet, static_cast<int>(length), &header));
+
+    if (!rtp_start_timestamp_set_) {
+      // Calculate the rtp timestamp offset in order to calculate the real
+      // capture time.
+      uint32_t first_capture_timestamp =
+          90 * static_cast<uint32_t>(capturer_->first_frame_capture_time());
+      rtp_start_timestamp_ = header.timestamp - first_capture_timestamp;
+      rtp_start_timestamp_set_ = true;
+    }
+
+    uint32_t capture_timestamp = header.timestamp - rtp_start_timestamp_;
+    capture_time_list_.insert(capture_time_list_.end(),
+                              std::make_pair(header.timestamp,
+                                             capture_timestamp));
+    return SEND_PACKET;
+  }
+
+  void SetCapturer(test::FrameGeneratorCapturer* capturer) {
+    capturer_ = capturer;
+  }
+
+ private:
+  Clock* clock_;
+  int threshold_ms_;
+  int start_time_ms_;
+  int run_time_ms_;
+  int64_t creation_time_ms_;
+  test::FrameGeneratorCapturer* capturer_;
+  bool rtp_start_timestamp_set_;
+  uint32_t rtp_start_timestamp_;
+  typedef std::map<uint32_t, uint32_t> FrameCaptureTimeList;
+  FrameCaptureTimeList capture_time_list_;
+};
+
+void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
+                                      int threshold_ms,
+                                      int start_time_ms,
+                                      int run_time_ms) {
+  CaptureNtpTimeObserver observer(Clock::GetRealTimeClock(),
+                                  net_config,
+                                  threshold_ms,
+                                  start_time_ms,
+                                  run_time_ms);
+
+  // Sender/receiver call.
+  Call::Config receiver_config(observer.ReceiveTransport());
+  scoped_ptr<Call> receiver_call(Call::Create(receiver_config));
+  scoped_ptr<Call> sender_call(
+      Call::Create(Call::Config(observer.SendTransport())));
+  observer.SetReceivers(receiver_call->Receiver(), sender_call->Receiver());
+
+  // Configure send stream.
+  VideoSendStream::Config send_config = GetSendTestConfig(sender_call.get());
+  VideoSendStream* send_stream =
+      sender_call->CreateVideoSendStream(send_config);
+  scoped_ptr<test::FrameGeneratorCapturer> capturer(
+      test::FrameGeneratorCapturer::Create(
+          send_stream->Input(),
+          send_config.encoder_settings.streams[0].width,
+          send_config.encoder_settings.streams[0].height,
+          30,
+          Clock::GetRealTimeClock()));
+  observer.SetCapturer(capturer.get());
+
+  // Configure receive stream.
+  VideoReceiveStream::Config receive_config =
+      receiver_call->GetDefaultReceiveConfig();
+  assert(receive_config.codecs.empty());
+  VideoCodec codec =
+      test::CreateDecoderVideoCodec(send_config.encoder_settings);
+  receive_config.codecs.push_back(codec);
+  assert(receive_config.external_decoders.empty());
+  ExternalVideoDecoder decoder;
+  test::FakeDecoder fake_decoder;
+  decoder.decoder = &fake_decoder;
+  decoder.payload_type = send_config.encoder_settings.payload_type;
+  receive_config.external_decoders.push_back(decoder);
+  receive_config.rtp.remote_ssrc = send_config.rtp.ssrcs[0];
+  receive_config.rtp.local_ssrc = kReceiverLocalSsrc;
+  receive_config.renderer = &observer;
+  // Enable the receiver side rtt calculation.
+  receive_config.rtp.rtcp_xr.receiver_reference_time_report = true;
+  VideoReceiveStream* receive_stream =
+      receiver_call->CreateVideoReceiveStream(receive_config);
+
+  // Start the test
+  receive_stream->Start();
+  send_stream->Start();
+  capturer->Start();
+
+  EXPECT_EQ(kEventSignaled, observer.Wait())
+      << "Timed out while waiting for estimated capture ntp time to be "
+      << "within bounds.";
+
+  capturer->Stop();
+  send_stream->Stop();
+  receive_stream->Stop();
+  observer.StopSending();
+
+  sender_call->DestroyVideoSendStream(send_stream);
+  receiver_call->DestroyVideoReceiveStream(receive_stream);
+}
+
+TEST_F(CallPerfTest, CaptureNtpTimeWithNetworkDelay) {
+  FakeNetworkPipe::Config net_config;
+  net_config.queue_delay_ms = 100;
+  // TODO(wu): lower the threshold as the calculation/estimatation becomes more
+  // accurate.
+  const int kThresholdMs = 30;
+  const int kStartTimeMs = 10000;
+  const int kRunTimeMs = 20000;
+  TestCaptureNtpTime(net_config, kThresholdMs, kStartTimeMs, kRunTimeMs);
+}
+
+// Flaky, webrtc:3271.
+TEST_F(CallPerfTest, DISABLED_CaptureNtpTimeWithNetworkJitter) {
+  FakeNetworkPipe::Config net_config;
+  net_config.delay_standard_deviation_ms = 10;
+  // TODO(wu): lower the threshold as the calculation/estimatation becomes more
+  // accurate.
+  const int kThresholdMs = 30;
+  const int kStartTimeMs = 10000;
+  const int kRunTimeMs = 20000;
+  TestCaptureNtpTime(net_config, kThresholdMs, kStartTimeMs, kRunTimeMs);
+}
+
 TEST_F(CallPerfTest, RegisterCpuOveruseObserver) {
   // Verifies that either a normal or overuse callback is triggered.
   class OveruseCallbackObserver : public test::RtpRtcpObserver,
@@ -477,15 +672,15 @@
           30,
           Clock::GetRealTimeClock()));
   observer.SetSendStream(send_stream);
-  receive_stream->StartReceiving();
-  send_stream->StartSending();
+  receive_stream->Start();
+  send_stream->Start();
   capturer->Start();
 
   EXPECT_EQ(kEventSignaled, observer.Wait())
       << "Timeout while waiting for send-bitrate stats.";
 
-  send_stream->StopSending();
-  receive_stream->StopReceiving();
+  send_stream->Stop();
+  receive_stream->Stop();
   observer.StopSending();
   capturer->Stop();
   sender_call->DestroyVideoSendStream(send_stream);
diff --git a/video/call_tests.cc b/video/call_tests.cc
index 44d442d..617b944 100644
--- a/video/call_tests.cc
+++ b/video/call_tests.cc
@@ -106,8 +106,8 @@
   }
 
   void StartSending() {
-    receive_stream_->StartReceiving();
-    send_stream_->StartSending();
+    receive_stream_->Start();
+    send_stream_->Start();
     if (frame_generator_capturer_.get() != NULL)
       frame_generator_capturer_->Start();
   }
@@ -116,9 +116,9 @@
     if (frame_generator_capturer_.get() != NULL)
       frame_generator_capturer_->Stop();
     if (send_stream_ != NULL)
-      send_stream_->StopSending();
+      send_stream_->Stop();
     if (receive_stream_ != NULL)
-      receive_stream_->StopReceiving();
+      receive_stream_->Stop();
   }
 
   void DestroyStreams() {
@@ -222,63 +222,6 @@
   int nacks_left_;
 };
 
-// Test disabled, ongoing work disabled traces causing UsesTraceCallback to
-// fail. Tracked by webrtc:3157.
-TEST_F(CallTest, DISABLED_UsesTraceCallback) {
-  const unsigned int kSenderTraceFilter = kTraceDebug;
-  const unsigned int kReceiverTraceFilter = kTraceDefault & (~kTraceDebug);
-  class TraceObserver : public TraceCallback {
-   public:
-    explicit TraceObserver(unsigned int filter)
-        : filter_(filter), messages_left_(50), done_(EventWrapper::Create()) {}
-
-    virtual void Print(TraceLevel level,
-                       const char* message,
-                       int length) OVERRIDE {
-      EXPECT_EQ(0u, level & (~filter_));
-      if (--messages_left_ == 0)
-        done_->Set();
-    }
-
-    EventTypeWrapper Wait() { return done_->Wait(kDefaultTimeoutMs); }
-
-   private:
-    unsigned int filter_;
-    unsigned int messages_left_;
-    scoped_ptr<EventWrapper> done_;
-  } sender_trace(kSenderTraceFilter), receiver_trace(kReceiverTraceFilter);
-
-  test::DirectTransport send_transport, receive_transport;
-  Call::Config sender_call_config(&send_transport);
-  sender_call_config.trace_callback = &sender_trace;
-  sender_call_config.trace_filter = kSenderTraceFilter;
-  Call::Config receiver_call_config(&receive_transport);
-  receiver_call_config.trace_callback = &receiver_trace;
-  receiver_call_config.trace_filter = kReceiverTraceFilter;
-  CreateCalls(sender_call_config, receiver_call_config);
-  send_transport.SetReceiver(receiver_call_->Receiver());
-  receive_transport.SetReceiver(sender_call_->Receiver());
-
-  CreateTestConfigs();
-
-  CreateStreams();
-  CreateFrameGenerator();
-  StartSending();
-
-  // Wait() waits for a couple of trace callbacks to occur.
-  EXPECT_EQ(kEventSignaled, sender_trace.Wait());
-  EXPECT_EQ(kEventSignaled, receiver_trace.Wait());
-
-  StopSending();
-  send_transport.StopSending();
-  receive_transport.StopSending();
-  DestroyStreams();
-
-  // The TraceCallback instance MUST outlive Calls, destroy Calls explicitly.
-  sender_call_.reset();
-  receiver_call_.reset();
-}
-
 TEST_F(CallTest, ReceiverCanBeStartedTwice) {
   test::NullTransport transport;
   CreateCalls(Call::Config(&transport), Call::Config(&transport));
@@ -286,8 +229,8 @@
   CreateTestConfigs();
   CreateStreams();
 
-  receive_stream_->StartReceiving();
-  receive_stream_->StartReceiving();
+  receive_stream_->Start();
+  receive_stream_->Start();
 
   DestroyStreams();
 }
@@ -299,8 +242,8 @@
   CreateTestConfigs();
   CreateStreams();
 
-  receive_stream_->StopReceiving();
-  receive_stream_->StopReceiving();
+  receive_stream_->Stop();
+  receive_stream_->Stop();
 
   DestroyStreams();
 }
@@ -492,7 +435,8 @@
   DestroyStreams();
 }
 
-TEST_F(CallTest, CanReceiveFec) {
+// TODO(pbos): Flaky, webrtc:3269
+TEST_F(CallTest, DISABLED_CanReceiveFec) {
   class FecRenderObserver : public test::RtpRtcpObserver, public VideoRenderer {
    public:
     FecRenderObserver()
@@ -502,7 +446,8 @@
           protected_frame_timestamp_(0) {}
 
    private:
-    virtual Action OnSendRtp(const uint8_t* packet, size_t length) OVERRIDE {
+    virtual Action OnSendRtp(const uint8_t* packet, size_t length) OVERRIDE
+        EXCLUSIVE_LOCKS_REQUIRED(crit_) {
       RTPHeader header;
       EXPECT_TRUE(parser_->Parse(packet, static_cast<int>(length), &header));
 
@@ -543,7 +488,7 @@
 
     virtual void RenderFrame(const I420VideoFrame& video_frame,
                              int time_to_render_ms) OVERRIDE {
-      CriticalSectionScoped crit_(lock_.get());
+      CriticalSectionScoped lock(crit_.get());
       // Rendering frame with timestamp associated with dropped packet -> FEC
       // protection worked.
       if (state_ == kProtectedPacketDropped &&
@@ -559,8 +504,8 @@
       kProtectedPacketDropped,
     } state_;
 
-    uint32_t protected_sequence_number_;
-    uint32_t protected_frame_timestamp_;
+    uint32_t protected_sequence_number_ GUARDED_BY(crit_);
+    uint32_t protected_frame_timestamp_ GUARDED_BY(crit_);
   } observer;
 
   CreateCalls(Call::Config(observer.SendTransport()),
@@ -637,7 +582,7 @@
     }
 
     virtual void FrameCallback(I420VideoFrame* frame) OVERRIDE {
-      CriticalSectionScoped crit_(lock_.get());
+      CriticalSectionScoped lock(crit_.get());
       if (frame->timestamp() == retransmitted_timestamp_) {
         EXPECT_TRUE(frame_retransmitted_);
         observation_complete_->Set();
@@ -841,7 +786,7 @@
 
   virtual void RenderFrame(const I420VideoFrame& video_frame,
                            int time_to_render_ms) OVERRIDE {
-    CriticalSectionScoped crit_(lock_.get());
+    CriticalSectionScoped lock(crit_.get());
     if (received_pli_ && video_frame.timestamp() > highest_dropped_timestamp_) {
       observation_complete_->Set();
     }
@@ -1116,7 +1061,7 @@
     stream->min_bitrate_bps = stream->target_bitrate_bps =
         stream->max_bitrate_bps = 100000;
     send_streams[i] = sender_call->CreateVideoSendStream(send_config);
-    send_streams[i]->StartSending();
+    send_streams[i]->Start();
 
     VideoReceiveStream::Config receive_config =
         receiver_call->GetDefaultReceiveConfig();
@@ -1128,7 +1073,7 @@
     receive_config.codecs.push_back(codec);
     receive_streams[i] =
         receiver_call->CreateVideoReceiveStream(receive_config);
-    receive_streams[i]->StartReceiving();
+    receive_streams[i]->Start();
 
     frame_generators[i] = test::FrameGeneratorCapturer::Create(
         send_streams[i]->Input(), width, height, 30, Clock::GetRealTimeClock());
diff --git a/video/full_stack.cc b/video/full_stack.cc
index 0d3c8ee..51c0a8a 100644
--- a/video/full_stack.cc
+++ b/video/full_stack.cc
@@ -24,6 +24,7 @@
 #include "webrtc/system_wrappers/interface/event_wrapper.h"
 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "webrtc/system_wrappers/interface/sleep.h"
+#include "webrtc/system_wrappers/interface/thread_annotations.h"
 #include "webrtc/test/direct_transport.h"
 #include "webrtc/test/encoder_settings.h"
 #include "webrtc/test/fake_encoder.h"
@@ -81,18 +82,18 @@
         transport_(transport),
         receiver_(NULL),
         test_label_(test_label),
+        frames_left_(duration_frames),
         dropped_frames_(0),
-        rtp_timestamp_delta_(0),
-        first_send_frame_(NULL),
         last_render_time_(0),
+        rtp_timestamp_delta_(0),
+        crit_(CriticalSectionWrapper::CreateCriticalSection()),
+        first_send_frame_(NULL),
         avg_psnr_threshold_(avg_psnr_threshold),
         avg_ssim_threshold_(avg_ssim_threshold),
-        frames_left_(duration_frames),
-        crit_(CriticalSectionWrapper::CreateCriticalSection()),
         comparison_lock_(CriticalSectionWrapper::CreateCriticalSection()),
         comparison_thread_(ThreadWrapper::CreateThread(&FrameComparisonThread,
                                                        this)),
-        trigger_(EventWrapper::Create()) {
+        done_(EventWrapper::Create()) {
     unsigned int id;
     EXPECT_TRUE(comparison_thread_->Start(id));
   }
@@ -117,7 +118,7 @@
     RTPHeader header;
     parser->Parse(packet, static_cast<int>(length), &header);
     {
-      CriticalSectionScoped cs(crit_.get());
+      CriticalSectionScoped lock(crit_.get());
       recv_times_[header.timestamp - rtp_timestamp_delta_] =
           Clock::GetRealTimeClock()->CurrentNtpInMilliseconds();
     }
@@ -132,7 +133,7 @@
   virtual void SwapFrame(I420VideoFrame* video_frame) OVERRIDE {
     I420VideoFrame* copy = NULL;
     {
-      CriticalSectionScoped cs(crit_.get());
+      CriticalSectionScoped lock(crit_.get());
       if (frame_pool_.size() > 0) {
         copy = frame_pool_.front();
         frame_pool_.pop_front();
@@ -145,7 +146,7 @@
     copy->set_timestamp(copy->render_time_ms() * 90);
 
     {
-      CriticalSectionScoped cs(crit_.get());
+      CriticalSectionScoped lock(crit_.get());
       if (first_send_frame_ == NULL && rtp_timestamp_delta_ == 0)
         first_send_frame_ = copy;
 
@@ -161,7 +162,7 @@
     parser->Parse(packet, static_cast<int>(length), &header);
 
     {
-      CriticalSectionScoped cs(crit_.get());
+      CriticalSectionScoped lock(crit_.get());
       if (rtp_timestamp_delta_ == 0) {
         rtp_timestamp_delta_ =
             header.timestamp - first_send_frame_->timestamp();
@@ -184,29 +185,27 @@
         Clock::GetRealTimeClock()->CurrentNtpInMilliseconds();
     uint32_t send_timestamp = video_frame.timestamp() - rtp_timestamp_delta_;
 
-    {
-      CriticalSectionScoped cs(crit_.get());
-      while (frames_.front()->timestamp() < send_timestamp) {
-        AddFrameComparison(
-            frames_.front(), &last_rendered_frame_, true, render_time_ms);
-        frame_pool_.push_back(frames_.front());
-        frames_.pop_front();
-      }
-
-      I420VideoFrame* reference_frame = frames_.front();
+    CriticalSectionScoped lock(crit_.get());
+    while (frames_.front()->timestamp() < send_timestamp) {
+      AddFrameComparison(
+          frames_.front(), &last_rendered_frame_, true, render_time_ms);
+      frame_pool_.push_back(frames_.front());
       frames_.pop_front();
-      assert(reference_frame != NULL);
-      EXPECT_EQ(reference_frame->timestamp(), send_timestamp);
-      assert(reference_frame->timestamp() == send_timestamp);
-
-      AddFrameComparison(reference_frame, &video_frame, false, render_time_ms);
-      frame_pool_.push_back(reference_frame);
     }
 
+    I420VideoFrame* reference_frame = frames_.front();
+    frames_.pop_front();
+    assert(reference_frame != NULL);
+    EXPECT_EQ(reference_frame->timestamp(), send_timestamp);
+    assert(reference_frame->timestamp() == send_timestamp);
+
+    AddFrameComparison(reference_frame, &video_frame, false, render_time_ms);
+    frame_pool_.push_back(reference_frame);
+
     last_rendered_frame_.CopyFrame(video_frame);
   }
 
-  void Wait() { trigger_->Wait(120 * 1000); }
+  void Wait() { done_->Wait(120 * 1000); }
 
   VideoSendStreamInput* input_;
   Transport* transport_;
@@ -250,7 +249,8 @@
   void AddFrameComparison(const I420VideoFrame* reference,
                           const I420VideoFrame* render,
                           bool dropped,
-                          int64_t render_time_ms) {
+                          int64_t render_time_ms)
+      EXCLUSIVE_LOCKS_REQUIRED(crit_) {
     int64_t send_time_ms = send_times_[reference->timestamp()];
     send_times_.erase(reference->timestamp());
     int64_t recv_time_ms = recv_times_[reference->timestamp()];
@@ -313,7 +313,7 @@
         PrintResult("time_between_rendered_frames", rendered_delta_, " ms");
         EXPECT_GT(psnr_.Mean(), avg_psnr_threshold_);
         EXPECT_GT(ssim_.Mean(), avg_ssim_threshold_);
-        trigger_->Set();
+        done_->Set();
 
         return false;
       }
@@ -353,31 +353,32 @@
            unit);
   }
 
-  const char* test_label_;
+  const char* const test_label_;
   test::Statistics sender_time_;
   test::Statistics receiver_time_;
   test::Statistics psnr_;
   test::Statistics ssim_;
   test::Statistics end_to_end_;
   test::Statistics rendered_delta_;
-
-  int dropped_frames_;
-  std::deque<I420VideoFrame*> frames_;
-  std::deque<I420VideoFrame*> frame_pool_;
-  I420VideoFrame last_rendered_frame_;
-  std::map<uint32_t, int64_t> send_times_;
-  std::map<uint32_t, int64_t> recv_times_;
-  uint32_t rtp_timestamp_delta_;
-  I420VideoFrame* first_send_frame_;
-  int64_t last_render_time_;
-  double avg_psnr_threshold_;
-  double avg_ssim_threshold_;
   int frames_left_;
-  scoped_ptr<CriticalSectionWrapper> crit_;
-  scoped_ptr<CriticalSectionWrapper> comparison_lock_;
-  scoped_ptr<ThreadWrapper> comparison_thread_;
-  std::deque<FrameComparison> comparisons_;
-  scoped_ptr<EventWrapper> trigger_;
+  int dropped_frames_;
+  int64_t last_render_time_;
+  uint32_t rtp_timestamp_delta_;
+
+  const scoped_ptr<CriticalSectionWrapper> crit_;
+  std::deque<I420VideoFrame*> frames_ GUARDED_BY(crit_);
+  std::deque<I420VideoFrame*> frame_pool_ GUARDED_BY(crit_);
+  I420VideoFrame last_rendered_frame_ GUARDED_BY(crit_);
+  std::map<uint32_t, int64_t> send_times_ GUARDED_BY(crit_);
+  std::map<uint32_t, int64_t> recv_times_ GUARDED_BY(crit_);
+  I420VideoFrame* first_send_frame_ GUARDED_BY(crit_);
+  double avg_psnr_threshold_ GUARDED_BY(crit_);
+  double avg_ssim_threshold_ GUARDED_BY(crit_);
+
+  const scoped_ptr<CriticalSectionWrapper> comparison_lock_;
+  const scoped_ptr<ThreadWrapper> comparison_thread_;
+  std::deque<FrameComparison> comparisons_ GUARDED_BY(comparison_lock_);
+  const scoped_ptr<EventWrapper> done_;
 };
 
 TEST_P(FullStackTest, NoPacketLoss) {
@@ -437,16 +438,15 @@
   VideoReceiveStream* receive_stream =
       call->CreateVideoReceiveStream(receive_config);
 
-  receive_stream->StartReceiving();
-  send_stream->StartSending();
-
+  receive_stream->Start();
+  send_stream->Start();
   file_capturer->Start();
 
   analyzer.Wait();
 
   file_capturer->Stop();
-  send_stream->StopSending();
-  receive_stream->StopReceiving();
+  send_stream->Stop();
+  receive_stream->Stop();
 
   call->DestroyVideoReceiveStream(receive_stream);
   call->DestroyVideoSendStream(send_stream);
diff --git a/video/loopback.cc b/video/loopback.cc
index 0131aa9..c99183a 100644
--- a/video/loopback.cc
+++ b/video/loopback.cc
@@ -91,15 +91,15 @@
   VideoReceiveStream* receive_stream =
       call->CreateVideoReceiveStream(receive_config);
 
-  receive_stream->StartReceiving();
-  send_stream->StartSending();
+  receive_stream->Start();
+  send_stream->Start();
   camera->Start();
 
   test::PressEnterToContinue();
 
   camera->Stop();
-  send_stream->StopSending();
-  receive_stream->StopReceiving();
+  send_stream->Stop();
+  receive_stream->Stop();
 
   call->DestroyVideoReceiveStream(receive_stream);
   call->DestroyVideoSendStream(send_stream);
diff --git a/video/rampup_tests.cc b/video/rampup_tests.cc
index ca6fb10..32a2998 100644
--- a/video/rampup_tests.cc
+++ b/video/rampup_tests.cc
@@ -48,14 +48,14 @@
   StreamObserver(const SsrcMap& rtx_media_ssrcs,
                  newapi::Transport* feedback_transport,
                  Clock* clock)
-      : critical_section_(CriticalSectionWrapper::CreateCriticalSection()),
+      : clock_(clock),
         test_done_(EventWrapper::Create()),
         rtp_parser_(RtpHeaderParser::Create()),
         feedback_transport_(feedback_transport),
         receive_stats_(ReceiveStatistics::Create(clock)),
         payload_registry_(
             new RTPPayloadRegistry(RTPPayloadStrategy::CreateStrategy(false))),
-        clock_(clock),
+        crit_(CriticalSectionWrapper::CreateCriticalSection()),
         expected_bitrate_bps_(0),
         rtx_media_ssrcs_(rtx_media_ssrcs),
         total_sent_(0),
@@ -85,12 +85,13 @@
   }
 
   void set_expected_bitrate_bps(unsigned int expected_bitrate_bps) {
+    CriticalSectionScoped lock(crit_.get());
     expected_bitrate_bps_ = expected_bitrate_bps;
   }
 
   virtual void OnReceiveBitrateChanged(const std::vector<unsigned int>& ssrcs,
                                        unsigned int bitrate) OVERRIDE {
-    CriticalSectionScoped lock(critical_section_.get());
+    CriticalSectionScoped lock(crit_.get());
     assert(expected_bitrate_bps_ > 0);
     if (bitrate >= expected_bitrate_bps_) {
       // Just trigger if there was any rtx padding packet.
@@ -104,7 +105,7 @@
   }
 
   virtual bool SendRtp(const uint8_t* packet, size_t length) OVERRIDE {
-    CriticalSectionScoped lock(critical_section_.get());
+    CriticalSectionScoped lock(crit_.get());
     RTPHeader header;
     EXPECT_TRUE(rtp_parser_->Parse(packet, static_cast<int>(length), &header));
     receive_stats_->IncomingPacket(header, length, false);
@@ -156,7 +157,7 @@
         value, units, false);
   }
 
-  void TriggerTestDone() {
+  void TriggerTestDone() EXCLUSIVE_LOCKS_REQUIRED(crit_) {
     ReportResult("total-sent", total_sent_, "bytes");
     ReportResult("padding-sent", padding_sent_, "bytes");
     ReportResult("rtx-media-sent", rtx_media_sent_, "bytes");
@@ -166,23 +167,24 @@
     test_done_->Set();
   }
 
-  scoped_ptr<CriticalSectionWrapper> critical_section_;
-  scoped_ptr<EventWrapper> test_done_;
-  scoped_ptr<RtpHeaderParser> rtp_parser_;
+  Clock* const clock_;
+  const scoped_ptr<EventWrapper> test_done_;
+  const scoped_ptr<RtpHeaderParser> rtp_parser_;
   scoped_ptr<RtpRtcp> rtp_rtcp_;
   internal::TransportAdapter feedback_transport_;
-  scoped_ptr<ReceiveStatistics> receive_stats_;
-  scoped_ptr<RTPPayloadRegistry> payload_registry_;
+  const scoped_ptr<ReceiveStatistics> receive_stats_;
+  const scoped_ptr<RTPPayloadRegistry> payload_registry_;
   scoped_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_;
-  Clock* clock_;
-  unsigned int expected_bitrate_bps_;
-  SsrcMap rtx_media_ssrcs_;
-  size_t total_sent_;
-  size_t padding_sent_;
-  size_t rtx_media_sent_;
-  int total_packets_sent_;
-  int padding_packets_sent_;
-  int rtx_media_packets_sent_;
+
+  const scoped_ptr<CriticalSectionWrapper> crit_;
+  unsigned int expected_bitrate_bps_ GUARDED_BY(crit_);
+  SsrcMap rtx_media_ssrcs_ GUARDED_BY(crit_);
+  size_t total_sent_ GUARDED_BY(crit_);
+  size_t padding_sent_ GUARDED_BY(crit_);
+  size_t rtx_media_sent_ GUARDED_BY(crit_);
+  int total_packets_sent_ GUARDED_BY(crit_);
+  int padding_packets_sent_ GUARDED_BY(crit_);
+  int rtx_media_packets_sent_ GUARDED_BY(crit_);
 };
 
 class LowRateStreamObserver : public test::DirectTransport,
@@ -193,21 +195,21 @@
                         Clock* clock,
                         size_t number_of_streams,
                         bool rtx_used)
-      : critical_section_(CriticalSectionWrapper::CreateCriticalSection()),
+      : clock_(clock),
+        number_of_streams_(number_of_streams),
+        rtx_used_(rtx_used),
         test_done_(EventWrapper::Create()),
         rtp_parser_(RtpHeaderParser::Create()),
         feedback_transport_(feedback_transport),
         receive_stats_(ReceiveStatistics::Create(clock)),
-        clock_(clock),
+        crit_(CriticalSectionWrapper::CreateCriticalSection()),
+        send_stream_(NULL),
         test_state_(kFirstRampup),
         state_start_ms_(clock_->TimeInMilliseconds()),
         interval_start_ms_(state_start_ms_),
         last_remb_bps_(0),
         sent_bytes_(0),
         total_overuse_bytes_(0),
-        number_of_streams_(number_of_streams),
-        rtx_used_(rtx_used),
-        send_stream_(NULL),
         suspended_in_stats_(false) {
     RtpRtcp::Configuration config;
     config.receive_statistics = receive_stats_.get();
@@ -231,12 +233,13 @@
   }
 
   virtual void SetSendStream(const VideoSendStream* send_stream) {
+    CriticalSectionScoped lock(crit_.get());
     send_stream_ = send_stream;
   }
 
   virtual void OnReceiveBitrateChanged(const std::vector<unsigned int>& ssrcs,
                                        unsigned int bitrate) {
-    CriticalSectionScoped lock(critical_section_.get());
+    CriticalSectionScoped lock(crit_.get());
     rtp_rtcp_->SetREMBData(
         bitrate, static_cast<uint8_t>(ssrcs.size()), &ssrcs[0]);
     rtp_rtcp_->Process();
@@ -244,6 +247,7 @@
   }
 
   virtual bool SendRtp(const uint8_t* data, size_t length) OVERRIDE {
+    CriticalSectionScoped lock(crit_.get());
     sent_bytes_ += length;
     int64_t now_ms = clock_->TimeInMilliseconds();
     if (now_ms > interval_start_ms_ + 1000) {  // Let at least 1 second pass.
@@ -265,7 +269,7 @@
   }
 
   virtual bool DeliverPacket(const uint8_t* packet, size_t length) OVERRIDE {
-    CriticalSectionScoped lock(critical_section_.get());
+    CriticalSectionScoped lock(crit_.get());
     RTPHeader header;
     EXPECT_TRUE(rtp_parser_->Parse(packet, static_cast<int>(length), &header));
     receive_stats_->IncomingPacket(header, length, false);
@@ -300,8 +304,8 @@
   // This method defines the state machine for the ramp up-down-up test.
   void EvolveTestState(unsigned int bitrate_bps) {
     int64_t now = clock_->TimeInMilliseconds();
+    CriticalSectionScoped lock(crit_.get());
     assert(send_stream_ != NULL);
-    CriticalSectionScoped lock(critical_section_.get());
     switch (test_state_) {
       case kFirstRampup: {
         EXPECT_FALSE(suspended_in_stats_);
@@ -374,25 +378,26 @@
   static const unsigned int kExpectedLowBitrateBps = 20000;
   enum TestStates { kFirstRampup, kLowRate, kSecondRampup };
 
-  scoped_ptr<CriticalSectionWrapper> critical_section_;
-  scoped_ptr<EventWrapper> test_done_;
-  scoped_ptr<RtpHeaderParser> rtp_parser_;
-  scoped_ptr<RtpRtcp> rtp_rtcp_;
-  internal::TransportAdapter feedback_transport_;
-  scoped_ptr<ReceiveStatistics> receive_stats_;
-  scoped_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_;
-  Clock* clock_;
-  FakeNetworkPipe::Config forward_transport_config_;
-  TestStates test_state_;
-  int64_t state_start_ms_;
-  int64_t interval_start_ms_;
-  unsigned int last_remb_bps_;
-  size_t sent_bytes_;
-  size_t total_overuse_bytes_;
+  Clock* const clock_;
   const size_t number_of_streams_;
   const bool rtx_used_;
-  const VideoSendStream* send_stream_;
-  bool suspended_in_stats_ GUARDED_BY(critical_section_);
+  const scoped_ptr<EventWrapper> test_done_;
+  const scoped_ptr<RtpHeaderParser> rtp_parser_;
+  scoped_ptr<RtpRtcp> rtp_rtcp_;
+  internal::TransportAdapter feedback_transport_;
+  const scoped_ptr<ReceiveStatistics> receive_stats_;
+  scoped_ptr<RemoteBitrateEstimator> remote_bitrate_estimator_;
+
+  scoped_ptr<CriticalSectionWrapper> crit_;
+  const VideoSendStream* send_stream_ GUARDED_BY(crit_);
+  FakeNetworkPipe::Config forward_transport_config_ GUARDED_BY(crit_);
+  TestStates test_state_ GUARDED_BY(crit_);
+  int64_t state_start_ms_ GUARDED_BY(crit_);
+  int64_t interval_start_ms_ GUARDED_BY(crit_);
+  unsigned int last_remb_bps_ GUARDED_BY(crit_);
+  size_t sent_bytes_ GUARDED_BY(crit_);
+  size_t total_overuse_bytes_ GUARDED_BY(crit_);
+  bool suspended_in_stats_ GUARDED_BY(crit_);
 };
 }
 
@@ -469,13 +474,13 @@
             send_config.encoder_settings.streams.back().max_framerate,
             Clock::GetRealTimeClock()));
 
-    send_stream->StartSending();
+    send_stream->Start();
     frame_generator_capturer->Start();
 
     EXPECT_EQ(kEventSignaled, stream_observer.Wait());
 
     frame_generator_capturer->Stop();
-    send_stream->StopSending();
+    send_stream->Stop();
 
     call->DestroyVideoSendStream(send_stream);
   }
@@ -528,7 +533,7 @@
                                              30,
                                              Clock::GetRealTimeClock()));
 
-    send_stream->StartSending();
+    send_stream->Start();
     frame_generator_capturer->Start();
 
     EXPECT_EQ(kEventSignaled, stream_observer.Wait());
@@ -536,7 +541,7 @@
     stream_observer.StopSending();
     receiver_transport.StopSending();
     frame_generator_capturer->Stop();
-    send_stream->StopSending();
+    send_stream->Stop();
 
     call->DestroyVideoSendStream(send_stream);
   }
diff --git a/video/receive_statistics_proxy.cc b/video/receive_statistics_proxy.cc
index f42e4d3..6004281 100644
--- a/video/receive_statistics_proxy.cc
+++ b/video/receive_statistics_proxy.cc
@@ -22,13 +22,13 @@
                                                ViECodec* codec,
                                                int channel)
     : channel_(channel),
-      lock_(CriticalSectionWrapper::CreateCriticalSection()),
       clock_(clock),
+      codec_(codec),
+      rtp_rtcp_(rtp_rtcp),
+      crit_(CriticalSectionWrapper::CreateCriticalSection()),
       // 1000ms window, scale 1000 for ms to s.
       decode_fps_estimator_(1000, 1000),
-      renders_fps_estimator_(1000, 1000),
-      codec_(codec),
-      rtp_rtcp_(rtp_rtcp) {
+      renders_fps_estimator_(1000, 1000) {
   stats_.ssrc = ssrc;
 }
 
@@ -37,7 +37,7 @@
 VideoReceiveStream::Stats ReceiveStatisticsProxy::GetStats() const {
   VideoReceiveStream::Stats stats;
   {
-    CriticalSectionScoped cs(lock_.get());
+    CriticalSectionScoped lock(crit_.get());
     stats = stats_;
   }
   stats.c_name = GetCName();
@@ -59,7 +59,7 @@
 void ReceiveStatisticsProxy::IncomingRate(const int video_channel,
                                           const unsigned int framerate,
                                           const unsigned int bitrate) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   stats_.network_frame_rate = framerate;
   stats_.bitrate_bps = bitrate;
 }
@@ -67,7 +67,7 @@
 void ReceiveStatisticsProxy::StatisticsUpdated(
     const webrtc::RtcpStatistics& statistics,
     uint32_t ssrc) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
 
   stats_.rtcp_stats = statistics;
 }
@@ -75,7 +75,7 @@
 void ReceiveStatisticsProxy::DataCountersUpdated(
     const webrtc::StreamDataCounters& counters,
     uint32_t ssrc) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
 
   stats_.rtp_stats = counters;
 }
@@ -83,7 +83,7 @@
 void ReceiveStatisticsProxy::OnDecodedFrame() {
   uint64_t now = clock_->TimeInMilliseconds();
 
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   decode_fps_estimator_.Update(1, now);
   stats_.decode_frame_rate = decode_fps_estimator_.Rate(now);
 }
@@ -91,7 +91,7 @@
 void ReceiveStatisticsProxy::OnRenderedFrame() {
   uint64_t now = clock_->TimeInMilliseconds();
 
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   renders_fps_estimator_.Update(1, now);
   stats_.render_frame_rate = renders_fps_estimator_.Rate(now);
 }
diff --git a/video/receive_statistics_proxy.h b/video/receive_statistics_proxy.h
index bedebb3..35e5cc3 100644
--- a/video/receive_statistics_proxy.h
+++ b/video/receive_statistics_proxy.h
@@ -16,6 +16,7 @@
 #include "webrtc/common_types.h"
 #include "webrtc/frame_callback.h"
 #include "webrtc/modules/remote_bitrate_estimator/rate_statistics.h"
+#include "webrtc/system_wrappers/interface/thread_annotations.h"
 #include "webrtc/video_engine/include/vie_codec.h"
 #include "webrtc/video_engine/include/vie_rtp_rtcp.h"
 #include "webrtc/video_receive_stream.h"
@@ -73,13 +74,14 @@
   std::string GetCName() const;
 
   const int channel_;
-  scoped_ptr<CriticalSectionWrapper> lock_;
-  Clock* clock_;
-  VideoReceiveStream::Stats stats_;
-  RateStatistics decode_fps_estimator_;
-  RateStatistics renders_fps_estimator_;
-  ViECodec* codec_;
-  ViERTP_RTCP* rtp_rtcp_;
+  Clock* const clock_;
+  ViECodec* const codec_;
+  ViERTP_RTCP* const rtp_rtcp_;
+
+  scoped_ptr<CriticalSectionWrapper> crit_;
+  VideoReceiveStream::Stats stats_ GUARDED_BY(crit_);
+  RateStatistics decode_fps_estimator_ GUARDED_BY(crit_);
+  RateStatistics renders_fps_estimator_ GUARDED_BY(crit_);
 };
 
 }  // namespace internal
diff --git a/video/send_statistics_proxy.cc b/video/send_statistics_proxy.cc
index 1cd4e26..c9bd05c 100644
--- a/video/send_statistics_proxy.cc
+++ b/video/send_statistics_proxy.cc
@@ -20,33 +20,34 @@
     const VideoSendStream::Config& config,
     SendStatisticsProxy::StatsProvider* stats_provider)
     : config_(config),
-      lock_(CriticalSectionWrapper::CreateCriticalSection()),
-      stats_provider_(stats_provider) {}
+      stats_provider_(stats_provider),
+      crit_(CriticalSectionWrapper::CreateCriticalSection()) {
+}
 
 SendStatisticsProxy::~SendStatisticsProxy() {}
 
 void SendStatisticsProxy::OutgoingRate(const int video_channel,
                                        const unsigned int framerate,
                                        const unsigned int bitrate) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   stats_.encode_frame_rate = framerate;
 }
 
 void SendStatisticsProxy::SuspendChange(int video_channel, bool is_suspended) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   stats_.suspended = is_suspended;
 }
 
 void SendStatisticsProxy::CapturedFrameRate(const int capture_id,
                                             const unsigned char frame_rate) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   stats_.input_frame_rate = frame_rate;
 }
 
 VideoSendStream::Stats SendStatisticsProxy::GetStats() const {
   VideoSendStream::Stats stats;
   {
-    CriticalSectionScoped cs(lock_.get());
+    CriticalSectionScoped lock(crit_.get());
     stats = stats_;
   }
   stats_provider_->GetSendSideDelay(&stats);
@@ -68,7 +69,7 @@
 
 void SendStatisticsProxy::StatisticsUpdated(const RtcpStatistics& statistics,
                                             uint32_t ssrc) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   StreamStats* stats = GetStatsEntry(ssrc);
   if (stats == NULL)
     return;
@@ -79,7 +80,7 @@
 void SendStatisticsProxy::DataCountersUpdated(
     const StreamDataCounters& counters,
     uint32_t ssrc) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   StreamStats* stats = GetStatsEntry(ssrc);
   if (stats == NULL)
     return;
@@ -89,7 +90,7 @@
 
 void SendStatisticsProxy::Notify(const BitrateStatistics& bitrate,
                                  uint32_t ssrc) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   StreamStats* stats = GetStatsEntry(ssrc);
   if (stats == NULL)
     return;
@@ -100,7 +101,7 @@
 void SendStatisticsProxy::FrameCountUpdated(FrameType frame_type,
                                             uint32_t frame_count,
                                             const unsigned int ssrc) {
-  CriticalSectionScoped cs(lock_.get());
+  CriticalSectionScoped lock(crit_.get());
   StreamStats* stats = GetStatsEntry(ssrc);
   if (stats == NULL)
     return;
diff --git a/video/send_statistics_proxy.h b/video/send_statistics_proxy.h
index 2f45ff7..a1ff14c 100644
--- a/video/send_statistics_proxy.h
+++ b/video/send_statistics_proxy.h
@@ -81,12 +81,12 @@
                               const CaptureAlarm alarm) OVERRIDE {}
 
  private:
-  StreamStats* GetStatsEntry(uint32_t ssrc) EXCLUSIVE_LOCKS_REQUIRED(lock_);
+  StreamStats* GetStatsEntry(uint32_t ssrc) EXCLUSIVE_LOCKS_REQUIRED(crit_);
 
   const VideoSendStream::Config config_;
-  scoped_ptr<CriticalSectionWrapper> lock_;
-  VideoSendStream::Stats stats_ GUARDED_BY(lock_);
   StatsProvider* const stats_provider_;
+  scoped_ptr<CriticalSectionWrapper> crit_;
+  VideoSendStream::Stats stats_ GUARDED_BY(crit_);
 };
 
 }  // namespace webrtc
diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc
index d3eedc3..012ca68 100644
--- a/video/video_receive_stream.cc
+++ b/video/video_receive_stream.cc
@@ -212,7 +212,7 @@
   rtp_rtcp_->Release();
 }
 
-void VideoReceiveStream::StartReceiving() {
+void VideoReceiveStream::Start() {
   transport_adapter_.Enable();
   if (render_->StartRender(channel_) != 0)
     abort();
@@ -220,7 +220,7 @@
     abort();
 }
 
-void VideoReceiveStream::StopReceiving() {
+void VideoReceiveStream::Stop() {
   if (render_->StopRender(channel_) != 0)
     abort();
   if (video_engine_base_->StopReceive(channel_) != 0)
diff --git a/video/video_receive_stream.h b/video/video_receive_stream.h
index 14653de..4ff086a 100644
--- a/video/video_receive_stream.h
+++ b/video/video_receive_stream.h
@@ -49,8 +49,8 @@
                      int base_channel);
   virtual ~VideoReceiveStream();
 
-  virtual void StartReceiving() OVERRIDE;
-  virtual void StopReceiving() OVERRIDE;
+  virtual void Start() OVERRIDE;
+  virtual void Stop() OVERRIDE;
   virtual Stats GetStats() const OVERRIDE;
 
   virtual void GetCurrentReceiveCodec(VideoCodec* receive_codec) OVERRIDE;
@@ -70,7 +70,7 @@
   TransportAdapter transport_adapter_;
   EncodedFrameCallbackAdapter encoded_frame_proxy_;
   VideoReceiveStream::Config config_;
-  Clock* clock_;
+  Clock* const clock_;
 
   ViEBase* video_engine_base_;
   ViECodec* codec_;
diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc
index a7eebef..e6e683a 100644
--- a/video/video_send_stream.cc
+++ b/video/video_send_stream.cc
@@ -37,7 +37,8 @@
       codec_lock_(CriticalSectionWrapper::CreateCriticalSection()),
       config_(config),
       external_codec_(NULL),
-      channel_(-1) {
+      channel_(-1),
+      stats_proxy_(new SendStatisticsProxy(config, this)) {
   video_engine_base_ = ViEBase::GetInterface(video_engine);
   video_engine_base_->CreateChannel(channel_, base_channel);
   assert(channel_ != -1);
@@ -142,8 +143,6 @@
     codec_->SuspendBelowMinBitrate(channel_);
   }
 
-  stats_proxy_.reset(new SendStatisticsProxy(config, this));
-
   rtp_rtcp_->RegisterSendChannelRtcpStatisticsCallback(channel_,
                                                        stats_proxy_.get());
   rtp_rtcp_->RegisterSendChannelRtpStatisticsCallback(channel_,
@@ -210,13 +209,13 @@
 
 VideoSendStreamInput* VideoSendStream::Input() { return this; }
 
-void VideoSendStream::StartSending() {
+void VideoSendStream::Start() {
   transport_adapter_.Enable();
   video_engine_base_->StartSend(channel_);
   video_engine_base_->StartReceive(channel_);
 }
 
-void VideoSendStream::StopSending() {
+void VideoSendStream::Stop() {
   video_engine_base_->StopSend(channel_);
   video_engine_base_->StopReceive(channel_);
   transport_adapter_.Disable();
diff --git a/video/video_send_stream.h b/video/video_send_stream.h
index 15cf642..b8f5661 100644
--- a/video/video_send_stream.h
+++ b/video/video_send_stream.h
@@ -46,9 +46,8 @@
 
   virtual ~VideoSendStream();
 
-  virtual void StartSending() OVERRIDE;
-
-  virtual void StopSending() OVERRIDE;
+  virtual void Start() OVERRIDE;
+  virtual void Stop() OVERRIDE;
 
   virtual bool ReconfigureVideoEncoder(const std::vector<VideoStream>& streams,
                                        void* encoder_settings) OVERRIDE;
@@ -88,7 +87,7 @@
   int channel_;
   int capture_id_;
 
-  scoped_ptr<SendStatisticsProxy> stats_proxy_;
+  const scoped_ptr<SendStatisticsProxy> stats_proxy_;
 };
 }  // namespace internal
 }  // namespace webrtc
diff --git a/video/video_send_stream_tests.cc b/video/video_send_stream_tests.cc
index 656bfab..13ac01c 100644
--- a/video/video_send_stream_tests.cc
+++ b/video/video_send_stream_tests.cc
@@ -51,14 +51,14 @@
     scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer(
         test::FrameGeneratorCapturer::Create(
             send_stream_->Input(), 320, 240, 30, Clock::GetRealTimeClock()));
-    send_stream_->StartSending();
+    send_stream_->Start();
     frame_generator_capturer->Start();
 
     EXPECT_EQ(kEventSignaled, observer->Wait());
 
     observer->StopSending();
     frame_generator_capturer->Stop();
-    send_stream_->StopSending();
+    send_stream_->Stop();
     call->DestroyVideoSendStream(send_stream_);
   }
 
@@ -179,7 +179,7 @@
   scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer(
       test::FrameGeneratorCapturer::Create(
           send_stream_->Input(), 320, 240, 30, Clock::GetRealTimeClock()));
-  send_stream_->StartSending();
+  send_stream_->Start();
   frame_generator_capturer->Start();
 
   EXPECT_EQ(kEventSignaled, observer.Wait())
@@ -195,7 +195,7 @@
 
   observer.StopSending();
   frame_generator_capturer->Stop();
-  send_stream_->StopSending();
+  send_stream_->Stop();
   call->DestroyVideoSendStream(send_stream_);
 }
 
@@ -206,8 +206,8 @@
 
   VideoSendStream::Config config = GetSendTestConfig(call.get(), 1);
   VideoSendStream* stream = call->CreateVideoSendStream(config);
-  stream->StartSending();
-  stream->StartSending();
+  stream->Start();
+  stream->Start();
   call->DestroyVideoSendStream(stream);
 }
 
@@ -218,8 +218,8 @@
 
   VideoSendStream::Config config = GetSendTestConfig(call.get(), 1);
   VideoSendStream* stream = call->CreateVideoSendStream(config);
-  stream->StopSending();
-  stream->StopSending();
+  stream->Stop();
+  stream->Stop();
   call->DestroyVideoSendStream(stream);
 }
 
@@ -415,7 +415,7 @@
 
   VideoSendStream::Config send_config = GetSendTestConfig(call.get(), 1);
   VideoSendStream* video_send_stream = call->CreateVideoSendStream(send_config);
-  video_send_stream->StartSending();
+  video_send_stream->Start();
 
   I420VideoFrame frame;
   frame.CreateEmptyFrame(
@@ -820,14 +820,14 @@
         : RtpRtcpObserver(30 * 1000),  // Timeout after 30 seconds.
           transport_adapter_(&transport_),
           clock_(Clock::GetRealTimeClock()),
+          send_stream_ptr_(send_stream_ptr),
+          crit_(CriticalSectionWrapper::CreateCriticalSection()),
           test_state_(kBeforeSuspend),
           rtp_count_(0),
           last_sequence_number_(0),
           suspended_frame_count_(0),
           low_remb_bps_(0),
-          high_remb_bps_(0),
-          crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
-          send_stream_ptr_(send_stream_ptr) {
+          high_remb_bps_(0) {
       transport_adapter_.Enable();
     }
 
@@ -838,13 +838,13 @@
     virtual Action OnSendRtcp(const uint8_t* packet, size_t length) OVERRIDE {
       // Receive statistics reporting having lost 0% of the packets.
       // This is needed for the send-side bitrate controller to work properly.
-      CriticalSectionScoped lock(crit_sect_.get());
+      CriticalSectionScoped lock(crit_.get());
       SendRtcpFeedback(0);  // REMB is only sent if value is > 0.
       return SEND_PACKET;
     }
 
     virtual Action OnSendRtp(const uint8_t* packet, size_t length) OVERRIDE {
-      CriticalSectionScoped lock(crit_sect_.get());
+      CriticalSectionScoped lock(crit_.get());
       ++rtp_count_;
       RTPHeader header;
       EXPECT_TRUE(parser_->Parse(packet, static_cast<int>(length), &header));
@@ -880,7 +880,7 @@
 
     // This method implements the I420FrameCallback.
     void FrameCallback(I420VideoFrame* video_frame) OVERRIDE {
-      CriticalSectionScoped lock(crit_sect_.get());
+      CriticalSectionScoped lock(crit_.get());
       if (test_state_ == kDuringSuspend &&
           ++suspended_frame_count_ > kSuspendTimeFrames) {
         assert(*send_stream_ptr_);
@@ -891,9 +891,15 @@
       }
     }
 
-    void set_low_remb_bps(int value) { low_remb_bps_ = value; }
+    void set_low_remb_bps(int value) {
+      CriticalSectionScoped lock(crit_.get());
+      low_remb_bps_ = value;
+    }
 
-    void set_high_remb_bps(int value) { high_remb_bps_ = value; }
+    void set_high_remb_bps(int value) {
+      CriticalSectionScoped lock(crit_.get());
+      high_remb_bps_ = value;
+    }
 
     void Stop() { transport_.StopSending(); }
 
@@ -905,7 +911,8 @@
       kWaitingForStats
     };
 
-    virtual void SendRtcpFeedback(int remb_value) {
+    virtual void SendRtcpFeedback(int remb_value)
+        EXCLUSIVE_LOCKS_REQUIRED(crit_) {
       FakeReceiveStatistics receive_stats(
           kSendSsrc, last_sequence_number_, rtp_count_, 0);
       RTCPSender rtcp_sender(0, false, clock_, &receive_stats);
@@ -923,15 +930,16 @@
 
     internal::TransportAdapter transport_adapter_;
     test::DirectTransport transport_;
-    Clock* clock_;
-    TestState test_state_;
-    int rtp_count_;
-    int last_sequence_number_;
-    int suspended_frame_count_;
-    int low_remb_bps_;
-    int high_remb_bps_;
-    scoped_ptr<CriticalSectionWrapper> crit_sect_;
-    VideoSendStream** send_stream_ptr_;
+    Clock* const clock_;
+    VideoSendStream** const send_stream_ptr_;
+
+    const scoped_ptr<CriticalSectionWrapper> crit_;
+    TestState test_state_ GUARDED_BY(crit_);
+    int rtp_count_ GUARDED_BY(crit_);
+    int last_sequence_number_ GUARDED_BY(crit_);
+    int suspended_frame_count_ GUARDED_BY(crit_);
+    int low_remb_bps_ GUARDED_BY(crit_);
+    int high_remb_bps_ GUARDED_BY(crit_);
   } observer(&send_stream_);
   // Note that |send_stream_| is created in RunSendTest(), called below. This
   // is why a pointer to |send_stream_| must be provided here.
@@ -961,26 +969,27 @@
     PacketObserver()
         : RtpRtcpObserver(30 * 1000),  // Timeout after 30 seconds.
           clock_(Clock::GetRealTimeClock()),
-          last_packet_time_ms_(-1),
           transport_adapter_(ReceiveTransport()),
-          capturer_(NULL),
-          crit_sect_(CriticalSectionWrapper::CreateCriticalSection()) {
+          crit_(CriticalSectionWrapper::CreateCriticalSection()),
+          last_packet_time_ms_(-1),
+          capturer_(NULL) {
       transport_adapter_.Enable();
     }
 
     void SetCapturer(test::FrameGeneratorCapturer* capturer) {
+      CriticalSectionScoped lock(crit_.get());
       capturer_ = capturer;
     }
 
     virtual Action OnSendRtp(const uint8_t* packet, size_t length) OVERRIDE {
-      CriticalSectionScoped lock(crit_sect_.get());
+      CriticalSectionScoped lock(crit_.get());
       last_packet_time_ms_ = clock_->TimeInMilliseconds();
       capturer_->Stop();
       return SEND_PACKET;
     }
 
     virtual Action OnSendRtcp(const uint8_t* packet, size_t length) OVERRIDE {
-      CriticalSectionScoped lock(crit_sect_.get());
+      CriticalSectionScoped lock(crit_.get());
       const int kVideoMutedThresholdMs = 10000;
       if (last_packet_time_ms_ > 0 &&
           clock_->TimeInMilliseconds() - last_packet_time_ms_ >
@@ -1002,11 +1011,11 @@
     }
 
    private:
-    Clock* clock_;
-    int64_t last_packet_time_ms_;
+    Clock* const clock_;
     internal::TransportAdapter transport_adapter_;
-    test::FrameGeneratorCapturer* capturer_;
-    scoped_ptr<CriticalSectionWrapper> crit_sect_;
+    const scoped_ptr<CriticalSectionWrapper> crit_;
+    int64_t last_packet_time_ms_ GUARDED_BY(crit_);
+    test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_);
   } observer;
 
   Call::Config call_config(observer.SendTransport());
@@ -1020,7 +1029,7 @@
       test::FrameGeneratorCapturer::Create(
           send_stream_->Input(), 320, 240, 30, Clock::GetRealTimeClock()));
   observer.SetCapturer(frame_generator_capturer.get());
-  send_stream_->StartSending();
+  send_stream_->Start();
   frame_generator_capturer->Start();
 
   EXPECT_EQ(kEventSignaled, observer.Wait())
@@ -1028,7 +1037,7 @@
 
   observer.StopSending();
   frame_generator_capturer->Stop();
-  send_stream_->StopSending();
+  send_stream_->Stop();
   call->DestroyVideoSendStream(send_stream_);
 }
 
@@ -1107,7 +1116,7 @@
   scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer(
       test::FrameGeneratorCapturer::Create(
           send_stream_->Input(), 320, 240, 30, Clock::GetRealTimeClock()));
-  send_stream_->StartSending();
+  send_stream_->Start();
   frame_generator_capturer->Start();
 
   EXPECT_TRUE(observer.WaitForFilledStats())
@@ -1115,7 +1124,7 @@
 
   observer.StopSending();
   frame_generator_capturer->Stop();
-  send_stream_->StopSending();
+  send_stream_->Stop();
   call->DestroyVideoSendStream(send_stream_);
 }
 
@@ -1200,7 +1209,7 @@
   scoped_ptr<test::FrameGeneratorCapturer> frame_generator_capturer(
       test::FrameGeneratorCapturer::Create(
           send_stream_->Input(), 320, 240, 30, Clock::GetRealTimeClock()));
-  send_stream_->StartSending();
+  send_stream_->Start();
   frame_generator_capturer->Start();
 
   EXPECT_EQ(kEventSignaled, observer.Wait())
@@ -1208,7 +1217,7 @@
 
   observer.StopSending();
   frame_generator_capturer->Stop();
-  send_stream_->StopSending();
+  send_stream_->Stop();
   call->DestroyVideoSendStream(send_stream_);
 }
 
diff --git a/video_engine/test/auto_test/automated/vie_extended_integration_test.cc b/video_engine/test/auto_test/automated/vie_extended_integration_test.cc
index 01d92d1..e43fc75 100644
--- a/video_engine/test/auto_test/automated/vie_extended_integration_test.cc
+++ b/video_engine/test/auto_test/automated/vie_extended_integration_test.cc
@@ -53,7 +53,7 @@
 }
 
 TEST_F(DISABLED_ON_MAC(ViEExtendedIntegrationTest),
-       RunsRtpRtcpTestWithoutErrors) {
+       DISABLED_RunsRtpRtcpTestWithoutErrors) {
   tests_->ViERtpRtcpExtendedTest();
 }
 
diff --git a/video_engine/test/auto_test/automated/vie_standard_integration_test.cc b/video_engine/test/auto_test/automated/vie_standard_integration_test.cc
index 51208ba..584f9e9 100644
--- a/video_engine/test/auto_test/automated/vie_standard_integration_test.cc
+++ b/video_engine/test/auto_test/automated/vie_standard_integration_test.cc
@@ -51,13 +51,8 @@
   tests_->ViERenderStandardTest();
 }
 
-// Fails on Mac, see https://code.google.com/p/webrtc/issues/detail?id=1790
-#if defined(WEBRTC_MAC)
-#define MAYBE_RunsRtpRtcpTestWithoutErrors DISABLED_RunsRtpRtcpTestWithoutErrors
-#else
-#define MAYBE_RunsRtpRtcpTestWithoutErrors RunsRtpRtcpTestWithoutErrors
-#endif
-TEST_F(ViEStandardIntegrationTest, MAYBE_RunsRtpRtcpTestWithoutErrors)  {
+// Flaky, see webrtc:1790.
+TEST_F(ViEStandardIntegrationTest, DISABLED_RunsRtpRtcpTestWithoutErrors)  {
   tests_->ViERtpRtcpStandardTest();
 }
 
diff --git a/video_engine/test/auto_test/source/vie_autotest_codec.cc b/video_engine/test/auto_test/source/vie_autotest_codec.cc
index d806b47..93738c2 100644
--- a/video_engine/test/auto_test/source/vie_autotest_codec.cc
+++ b/video_engine/test/auto_test/source/vie_autotest_codec.cc
@@ -510,6 +510,13 @@
       break;
     }
   }
+  const unsigned int kMinBitrate = 123;
+  video_codec.minBitrate = kMinBitrate;
+  video_codec.startBitrate = 50;
+  EXPECT_EQ(0, codec->SetSendCodec(video_channel, video_codec));
+  EXPECT_EQ(0, codec->GetSendCodec(video_channel, video_codec));
+  EXPECT_EQ(kMinBitrate, video_codec.startBitrate);
+
   memset(&video_codec, 0, sizeof(video_codec));
   EXPECT_EQ(0, codec->GetSendCodec(video_channel, video_codec));
   EXPECT_EQ(webrtc::kVideoCodecVP8, video_codec.codecType);
diff --git a/video_engine/test/libvietest/helpers/vie_to_file_renderer.cc b/video_engine/test/libvietest/helpers/vie_to_file_renderer.cc
index 7864957..16c73f4 100644
--- a/video_engine/test/libvietest/helpers/vie_to_file_renderer.cc
+++ b/video_engine/test/libvietest/helpers/vie_to_file_renderer.cc
@@ -30,7 +30,7 @@
     memcpy(this->buffer.get(), buffer, buffer_size);
   }
 
-  webrtc::scoped_array<unsigned char> buffer;
+  webrtc::scoped_ptr<unsigned char[]> buffer;
   int buffer_size;
   uint32_t timestamp;
   int64_t render_time;
diff --git a/modules/NetEq.target.darwin-x86.mk b/video_engine/video_engine_core.target.darwin-arm64.mk
similarity index 62%
copy from modules/NetEq.target.darwin-x86.mk
copy to video_engine/video_engine_core.target.darwin-arm64.mk
index 3b05cd9..fd2c96a 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/video_engine/video_engine_core.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_video_engine_video_engine_core_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,42 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/video_engine/call_stats.cc \
+	third_party/webrtc/video_engine/encoder_state_feedback.cc \
+	third_party/webrtc/video_engine/overuse_frame_detector.cc \
+	third_party/webrtc/video_engine/stream_synchronization.cc \
+	third_party/webrtc/video_engine/vie_base_impl.cc \
+	third_party/webrtc/video_engine/vie_capture_impl.cc \
+	third_party/webrtc/video_engine/vie_codec_impl.cc \
+	third_party/webrtc/video_engine/vie_external_codec_impl.cc \
+	third_party/webrtc/video_engine/vie_image_process_impl.cc \
+	third_party/webrtc/video_engine/vie_impl.cc \
+	third_party/webrtc/video_engine/vie_network_impl.cc \
+	third_party/webrtc/video_engine/vie_ref_count.cc \
+	third_party/webrtc/video_engine/vie_render_impl.cc \
+	third_party/webrtc/video_engine/vie_rtp_rtcp_impl.cc \
+	third_party/webrtc/video_engine/vie_shared_data.cc \
+	third_party/webrtc/video_engine/vie_capturer.cc \
+	third_party/webrtc/video_engine/vie_channel.cc \
+	third_party/webrtc/video_engine/vie_channel_group.cc \
+	third_party/webrtc/video_engine/vie_channel_manager.cc \
+	third_party/webrtc/video_engine/vie_encoder.cc \
+	third_party/webrtc/video_engine/vie_file_image.cc \
+	third_party/webrtc/video_engine/vie_frame_provider_base.cc \
+	third_party/webrtc/video_engine/vie_input_manager.cc \
+	third_party/webrtc/video_engine/vie_manager_base.cc \
+	third_party/webrtc/video_engine/vie_receiver.cc \
+	third_party/webrtc/video_engine/vie_remb.cc \
+	third_party/webrtc/video_engine/vie_renderer.cc \
+	third_party/webrtc/video_engine/vie_render_manager.cc \
+	third_party/webrtc/video_engine/vie_sender.cc \
+	third_party/webrtc/video_engine/vie_sync_module.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,19 +68,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +84,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +115,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +133,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,19 +163,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +179,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +210,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +229,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +259,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +273,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +295,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_video_engine_video_engine_core_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_engine_core
+video_engine_core: third_party_webrtc_video_engine_video_engine_core_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/video_engine/video_engine_core.target.linux-arm64.mk
similarity index 62%
copy from modules/NetEq.target.darwin-x86.mk
copy to video_engine/video_engine_core.target.linux-arm64.mk
index 3b05cd9..fd2c96a 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/video_engine/video_engine_core.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_video_engine_video_engine_core_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,42 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/video_engine/call_stats.cc \
+	third_party/webrtc/video_engine/encoder_state_feedback.cc \
+	third_party/webrtc/video_engine/overuse_frame_detector.cc \
+	third_party/webrtc/video_engine/stream_synchronization.cc \
+	third_party/webrtc/video_engine/vie_base_impl.cc \
+	third_party/webrtc/video_engine/vie_capture_impl.cc \
+	third_party/webrtc/video_engine/vie_codec_impl.cc \
+	third_party/webrtc/video_engine/vie_external_codec_impl.cc \
+	third_party/webrtc/video_engine/vie_image_process_impl.cc \
+	third_party/webrtc/video_engine/vie_impl.cc \
+	third_party/webrtc/video_engine/vie_network_impl.cc \
+	third_party/webrtc/video_engine/vie_ref_count.cc \
+	third_party/webrtc/video_engine/vie_render_impl.cc \
+	third_party/webrtc/video_engine/vie_rtp_rtcp_impl.cc \
+	third_party/webrtc/video_engine/vie_shared_data.cc \
+	third_party/webrtc/video_engine/vie_capturer.cc \
+	third_party/webrtc/video_engine/vie_channel.cc \
+	third_party/webrtc/video_engine/vie_channel_group.cc \
+	third_party/webrtc/video_engine/vie_channel_manager.cc \
+	third_party/webrtc/video_engine/vie_encoder.cc \
+	third_party/webrtc/video_engine/vie_file_image.cc \
+	third_party/webrtc/video_engine/vie_frame_provider_base.cc \
+	third_party/webrtc/video_engine/vie_input_manager.cc \
+	third_party/webrtc/video_engine/vie_manager_base.cc \
+	third_party/webrtc/video_engine/vie_receiver.cc \
+	third_party/webrtc/video_engine/vie_remb.cc \
+	third_party/webrtc/video_engine/vie_renderer.cc \
+	third_party/webrtc/video_engine/vie_render_manager.cc \
+	third_party/webrtc/video_engine/vie_sender.cc \
+	third_party/webrtc/video_engine/vie_sync_module.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,19 +68,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +84,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +115,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +133,9 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,19 +163,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +179,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +210,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +229,9 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
-	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/interface \
+	$(LOCAL_PATH)/third_party/webrtc/common_video/libyuv/include \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +259,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +273,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +295,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_video_engine_video_engine_core_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: video_engine_core
+video_engine_core: third_party_webrtc_video_engine_video_engine_core_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/video_engine/vie_capture_impl.cc b/video_engine/vie_capture_impl.cc
index c4f4344..9581fb7 100644
--- a/video_engine/vie_capture_impl.cc
+++ b/video_engine/vie_capture_impl.cc
@@ -213,7 +213,7 @@
 
 int ViECaptureImpl::StartCapture(const int capture_id,
                                  const CaptureCapability& capture_capability) {
-  LOG(LS_ERROR) << "StartCapture " << capture_id;
+  LOG(LS_INFO) << "StartCapture " << capture_id;
 
   ViEInputManagerScoped is(*(shared_data_->input_manager()));
   ViECapturer* vie_capture = is.Capture(capture_id);
diff --git a/video_engine/vie_capturer.cc b/video_engine/vie_capturer.cc
index 94993ca..65159a1 100644
--- a/video_engine/vie_capturer.cc
+++ b/video_engine/vie_capturer.cc
@@ -535,7 +535,7 @@
     unsigned int length = CalcBufferSize(kI420,
                                          video_frame->width(),
                                          video_frame->height());
-    scoped_array<uint8_t> video_buffer(new uint8_t[length]);
+    scoped_ptr<uint8_t[]> video_buffer(new uint8_t[length]);
     ExtractBuffer(*video_frame, length, video_buffer.get());
     effect_filter_->Transform(length,
                               video_buffer.get(),
diff --git a/video_engine/vie_channel.cc b/video_engine/vie_channel.cc
index 94210a3..d5e0878 100644
--- a/video_engine/vie_channel.cc
+++ b/video_engine/vie_channel.cc
@@ -1401,7 +1401,7 @@
       unsigned int length = CalcBufferSize(kI420,
                                            video_frame.width(),
                                            video_frame.height());
-      scoped_array<uint8_t> video_buffer(new uint8_t[length]);
+      scoped_ptr<uint8_t[]> video_buffer(new uint8_t[length]);
       ExtractBuffer(video_frame, length, video_buffer.get());
       effect_filter_->Transform(length,
                                 video_buffer.get(),
diff --git a/video_engine/vie_codec_impl.cc b/video_engine/vie_codec_impl.cc
index d2aaab9..3ba56de 100644
--- a/video_engine/vie_codec_impl.cc
+++ b/video_engine/vie_codec_impl.cc
@@ -29,19 +29,19 @@
 
 static void LogCodec(const VideoCodec& codec) {
   LOG(LS_INFO) << "CodecType " << codec.codecType
-               << ", pl_type " << codec.plType
+               << ", pl_type " << static_cast<int>(codec.plType)
                << ", resolution " << codec.width
                << " x " << codec.height
                << ", start br " << codec.startBitrate
                << ", min br " << codec.minBitrate
                << ", max br " << codec.maxBitrate
-               << ", max fpr " << codec.maxFramerate
+               << ", max fps " << static_cast<int>(codec.maxFramerate)
                << ", max qp " << codec.qpMax
                << ", number of streams "
-               << codec.numberOfSimulcastStreams;
+               << static_cast<int>(codec.numberOfSimulcastStreams);
   if (codec.codecType == kVideoCodecVP8) {
     LOG(LS_INFO) << "VP8 specific settings";
-    LOG(LS_INFO) << "pivtureLossIndicationOn "
+    LOG(LS_INFO) << "pictureLossIndicationOn "
                  << codec.codecSpecific.VP8.pictureLossIndicationOn
                  << ", feedbackModeOn "
                  << codec.codecSpecific.VP8.feedbackModeOn
@@ -49,15 +49,17 @@
                  << codec.codecSpecific.VP8.complexity
                  << ", resilience "
                  << codec.codecSpecific.VP8.resilience
-                 << ", numberOfTeporalLayers "
-                 << codec.codecSpecific.VP8.numberOfTemporalLayers
+                 << ", numberOfTemporalLayers "
+                 << static_cast<int>(
+                     codec.codecSpecific.VP8.numberOfTemporalLayers)
                  << ", keyFrameinterval "
                  << codec.codecSpecific.VP8.keyFrameInterval;
     for (int idx = 0; idx < codec.numberOfSimulcastStreams; ++idx) {
       LOG(LS_INFO) << "Stream " << codec.simulcastStream[idx].width
                    << " x " << codec.simulcastStream[idx].height;
       LOG(LS_INFO) << "Temporal layers "
-                   << codec.simulcastStream[idx].numberOfTemporalLayers
+                   << static_cast<int>(
+                       codec.simulcastStream[idx].numberOfTemporalLayers)
                    << ", min br "
                    << codec.simulcastStream[idx].minBitrate
                    << ", target br "
@@ -66,7 +68,6 @@
                    << codec.simulcastStream[idx].maxBitrate
                    << ", qp max "
                    << codec.simulcastStream[idx].qpMax;
-
     }
   }
 }
@@ -168,6 +169,9 @@
     LOG(LS_INFO) << "New max bitrate set " << video_codec_internal.maxBitrate;
   }
 
+  if (video_codec_internal.startBitrate < video_codec_internal.minBitrate) {
+    video_codec_internal.startBitrate = video_codec_internal.minBitrate;
+  }
   if (video_codec_internal.startBitrate > video_codec_internal.maxBitrate) {
     video_codec_internal.startBitrate = video_codec_internal.maxBitrate;
   }
diff --git a/video_engine/vie_encoder.cc b/video_engine/vie_encoder.cc
index e2b70eb..957407d 100644
--- a/video_engine/vie_encoder.cc
+++ b/video_engine/vie_encoder.cc
@@ -503,7 +503,7 @@
       unsigned int length = CalcBufferSize(kI420,
                                            video_frame->width(),
                                            video_frame->height());
-      scoped_array<uint8_t> video_buffer(new uint8_t[length]);
+      scoped_ptr<uint8_t[]> video_buffer(new uint8_t[length]);
       ExtractBuffer(*video_frame, length, video_buffer.get());
       effect_filter_->Transform(length,
                                 video_buffer.get(),
diff --git a/video_engine/vie_receiver.cc b/video_engine/vie_receiver.cc
index 75f53ab..76228b3 100644
--- a/video_engine/vie_receiver.cc
+++ b/video_engine/vie_receiver.cc
@@ -21,7 +21,9 @@
 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
 #include "webrtc/modules/utility/interface/rtp_dump.h"
 #include "webrtc/modules/video_coding/main/interface/video_coding.h"
+#include "webrtc/modules/video_coding/main/source/timestamp_extrapolator.h"
 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
+#include "webrtc/system_wrappers/interface/logging.h"
 #include "webrtc/system_wrappers/interface/tick_util.h"
 #include "webrtc/system_wrappers/interface/trace.h"
 
@@ -45,6 +47,8 @@
       rtp_rtcp_(NULL),
       vcm_(module_vcm),
       remote_bitrate_estimator_(remote_bitrate_estimator),
+      clock_(Clock::GetRealTimeClock()),
+      ts_extrapolator_(new VCMTimestampExtrapolator(clock_)),
       rtp_dump_(NULL),
       receiving_(false),
       restored_packet_in_use_(false),
@@ -171,14 +175,37 @@
 int32_t ViEReceiver::OnReceivedPayloadData(
     const uint8_t* payload_data, const uint16_t payload_size,
     const WebRtcRTPHeader* rtp_header) {
-  // TODO(wu): Calculate ntp_time_ms
-  if (vcm_->IncomingPacket(payload_data, payload_size, *rtp_header) != 0) {
+  WebRtcRTPHeader rtp_header_with_ntp = *rtp_header;
+  CalculateCaptureNtpTime(&rtp_header_with_ntp);
+  if (vcm_->IncomingPacket(payload_data,
+                           payload_size,
+                           rtp_header_with_ntp) != 0) {
     // Check this...
     return -1;
   }
   return 0;
 }
 
+void ViEReceiver::CalculateCaptureNtpTime(WebRtcRTPHeader* rtp_header) {
+  if (rtcp_list_.size() < 2) {
+    // We need two RTCP SR reports to calculate NTP.
+    return;
+  }
+
+  int64_t sender_capture_ntp_ms = 0;
+  if (!synchronization::RtpToNtpMs(rtp_header->header.timestamp,
+                                   rtcp_list_,
+                                   &sender_capture_ntp_ms)) {
+    return;
+  }
+  uint32_t timestamp = sender_capture_ntp_ms * 90;
+  int64_t receiver_capture_ms =
+      ts_extrapolator_->ExtrapolateLocalTime(timestamp);
+  int64_t ntp_offset =
+      clock_->CurrentNtpInMilliseconds() - clock_->TimeInMilliseconds();
+  rtp_header->ntp_time_ms = receiver_capture_ms + ntp_offset;
+}
+
 bool ViEReceiver::OnRecoveredPacket(const uint8_t* rtp_packet,
                                     int rtp_packet_length) {
   RTPHeader header;
@@ -329,7 +356,56 @@
     }
   }
   assert(rtp_rtcp_);  // Should be set by owner at construction time.
-  return rtp_rtcp_->IncomingRtcpPacket(rtcp_packet, rtcp_packet_length);
+  int ret = rtp_rtcp_->IncomingRtcpPacket(rtcp_packet, rtcp_packet_length);
+  if (ret != 0) {
+    return ret;
+  }
+
+  if (!GetRtcpTimestamp()) {
+    LOG(LS_WARNING) << "Failed to retrieve timestamp information from RTCP SR.";
+  }
+
+  return 0;
+}
+
+bool ViEReceiver::GetRtcpTimestamp() {
+  uint16_t rtt = 0;
+  rtp_rtcp_->RTT(rtp_receiver_->SSRC(), &rtt, NULL, NULL, NULL);
+  if (rtt == 0) {
+    // Waiting for valid rtt.
+    return true;
+  }
+
+  // Update RTCP list
+  uint32_t ntp_secs = 0;
+  uint32_t ntp_frac = 0;
+  uint32_t rtp_timestamp = 0;
+  if (0 != rtp_rtcp_->RemoteNTP(&ntp_secs,
+                                &ntp_frac,
+                                NULL,
+                                NULL,
+                                &rtp_timestamp)) {
+    return false;
+  }
+
+  bool new_rtcp_sr = false;
+  if (!synchronization::UpdateRtcpList(
+      ntp_secs, ntp_frac, rtp_timestamp, &rtcp_list_, &new_rtcp_sr)) {
+    return false;
+  }
+
+  if (!new_rtcp_sr) {
+    // No new RTCP SR since last time this function was called.
+    return true;
+  }
+
+  // Update extrapolator with the new arrival time.
+  // The extrapolator assumes the TimeInMilliseconds time.
+  int64_t receiver_arrival_time = clock_->TimeInMilliseconds();
+  int64_t sender_send_time_ms = Clock::NtpToMs(ntp_secs, ntp_frac);
+  int64_t sender_arrival_time_90k = (sender_send_time_ms + rtt / 2) * 90;
+  ts_extrapolator_->Update(receiver_arrival_time, sender_arrival_time_90k);
+  return true;
 }
 
 void ViEReceiver::StartReceive() {
diff --git a/video_engine/vie_receiver.h b/video_engine/vie_receiver.h
index b987c99..512a7b6 100644
--- a/video_engine/vie_receiver.h
+++ b/video_engine/vie_receiver.h
@@ -14,6 +14,7 @@
 #include <list>
 
 #include "webrtc/engine_configurations.h"
+#include "webrtc/modules/remote_bitrate_estimator/include/rtp_to_ntp.h"
 #include "webrtc/modules/rtp_rtcp/interface/receive_statistics.h"
 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
@@ -21,6 +22,9 @@
 #include "webrtc/video_engine/include/vie_network.h"
 #include "webrtc/video_engine/vie_defines.h"
 
+// TODO(wu): Move rtp_to_ntp.h and timestamp_extrapolator.h to somewhere that
+// can be shared between audio and video.
+
 namespace webrtc {
 
 class CriticalSectionWrapper;
@@ -32,6 +36,7 @@
 class RTPPayloadRegistry;
 class RtpReceiver;
 class RtpRtcp;
+class VCMTimestampExtrapolator;
 class VideoCodingModule;
 struct ReceiveBandwidthEstimatorStats;
 
@@ -105,6 +110,9 @@
   bool IsPacketInOrder(const RTPHeader& header) const;
   bool IsPacketRetransmitted(const RTPHeader& header, bool in_order) const;
 
+  bool GetRtcpTimestamp();
+  void CalculateCaptureNtpTime(WebRtcRTPHeader* rtp_header);
+
   scoped_ptr<CriticalSectionWrapper> receive_cs_;
   const int32_t channel_id_;
   scoped_ptr<RtpHeaderParser> rtp_header_parser_;
@@ -117,6 +125,10 @@
   VideoCodingModule* vcm_;
   RemoteBitrateEstimator* remote_bitrate_estimator_;
 
+  Clock* clock_;
+  scoped_ptr<VCMTimestampExtrapolator> ts_extrapolator_;
+  synchronization::RtcpList rtcp_list_;
+
   RtpDump* rtp_dump_;
   bool receiving_;
   uint8_t restored_packet_[kViEMaxMtu];
diff --git a/video_engine/vie_sync_module.cc b/video_engine/vie_sync_module.cc
index 89da022..b7c74a7 100644
--- a/video_engine/vie_sync_module.cc
+++ b/video_engine/vie_sync_module.cc
@@ -30,31 +30,24 @@
     return -1;
   if (!receiver.LastReceivedTimeMs(&stream->latest_receive_time_ms))
     return -1;
-  synchronization::RtcpMeasurement measurement;
-  if (0 != rtp_rtcp.RemoteNTP(&measurement.ntp_secs,
-                              &measurement.ntp_frac,
+
+  uint32_t ntp_secs = 0;
+  uint32_t ntp_frac = 0;
+  uint32_t rtp_timestamp = 0;
+  if (0 != rtp_rtcp.RemoteNTP(&ntp_secs,
+                              &ntp_frac,
                               NULL,
                               NULL,
-                              &measurement.rtp_timestamp)) {
+                              &rtp_timestamp)) {
     return -1;
   }
-  if (measurement.ntp_secs == 0 && measurement.ntp_frac == 0) {
+
+  bool new_rtcp_sr = false;
+  if (!synchronization::UpdateRtcpList(
+      ntp_secs, ntp_frac, rtp_timestamp, &stream->rtcp, &new_rtcp_sr)) {
     return -1;
   }
-  for (synchronization::RtcpList::iterator it = stream->rtcp.begin();
-       it != stream->rtcp.end(); ++it) {
-    if (measurement.ntp_secs == (*it).ntp_secs &&
-        measurement.ntp_frac == (*it).ntp_frac) {
-      // This RTCP has already been added to the list.
-      return 0;
-    }
-  }
-  // We need two RTCP SR reports to map between RTP and NTP. More than two will
-  // not improve the mapping.
-  if (stream->rtcp.size() == 2) {
-    stream->rtcp.pop_back();
-  }
-  stream->rtcp.push_front(measurement);
+
   return 0;
 }
 
diff --git a/video_receive_stream.h b/video_receive_stream.h
index febb221..2584e20 100644
--- a/video_receive_stream.h
+++ b/video_receive_stream.h
@@ -171,8 +171,8 @@
     int target_delay_ms;
   };
 
-  virtual void StartReceiving() = 0;
-  virtual void StopReceiving() = 0;
+  virtual void Start() = 0;
+  virtual void Stop() = 0;
   virtual Stats GetStats() const = 0;
 
   // TODO(mflodman) Replace this with callback.
diff --git a/video_send_stream.h b/video_send_stream.h
index 4aa0419..aa027b0 100644
--- a/video_send_stream.h
+++ b/video_send_stream.h
@@ -159,8 +159,8 @@
   // VideoSendStream is valid.
   virtual VideoSendStreamInput* Input() = 0;
 
-  virtual void StartSending() = 0;
-  virtual void StopSending() = 0;
+  virtual void Start() = 0;
+  virtual void Stop() = 0;
 
   // Set which streams to send. Must have at least as many SSRCs as configured
   // in the config. Encoder settings are passed on to the encoder instance along
diff --git a/voice_engine/channel.cc b/voice_engine/channel.cc
index fb73c13..b3c53f8 100644
--- a/voice_engine/channel.cc
+++ b/voice_engine/channel.cc
@@ -3237,6 +3237,17 @@
   return SetSendRtpHeaderExtension(enable, kRtpExtensionAudioLevel, id);
 }
 
+int Channel::SetReceiveAudioLevelIndicationStatus(bool enable,
+                                                  unsigned char id) {
+  rtp_header_parser_->DeregisterRtpHeaderExtension(
+      kRtpExtensionAudioLevel);
+  if (enable && !rtp_header_parser_->RegisterRtpHeaderExtension(
+          kRtpExtensionAudioLevel, id)) {
+    return -1;
+  }
+  return 0;
+}
+
 int Channel::SetSendAbsoluteSenderTimeStatus(bool enable, unsigned char id) {
   return SetSendRtpHeaderExtension(enable, kRtpExtensionAbsoluteSendTime, id);
 }
@@ -4268,7 +4279,7 @@
 int32_t
 Channel::MixOrReplaceAudioWithFile(int mixingFrequency)
 {
-    scoped_array<int16_t> fileBuffer(new int16_t[640]);
+    scoped_ptr<int16_t[]> fileBuffer(new int16_t[640]);
     int fileSamples(0);
 
     {
@@ -4338,7 +4349,7 @@
 {
     assert(mixingFrequency <= 32000);
 
-    scoped_array<int16_t> fileBuffer(new int16_t[640]);
+    scoped_ptr<int16_t[]> fileBuffer(new int16_t[640]);
     int fileSamples(0);
 
     {
diff --git a/voice_engine/channel.h b/voice_engine/channel.h
index 8f47b48..8166f1c 100644
--- a/voice_engine/channel.h
+++ b/voice_engine/channel.h
@@ -319,6 +319,7 @@
     int GetRemoteSSRC(unsigned int& ssrc);
     int GetRemoteCSRCs(unsigned int arrCSRC[15]);
     int SetSendAudioLevelIndicationStatus(bool enable, unsigned char id);
+    int SetReceiveAudioLevelIndicationStatus(bool enable, unsigned char id);
     int SetSendAbsoluteSenderTimeStatus(bool enable, unsigned char id);
     int SetReceiveAbsoluteSenderTimeStatus(bool enable, unsigned char id);
     int SetRTCPStatus(bool enable);
diff --git a/voice_engine/include/mock/fake_voe_external_media.h b/voice_engine/include/mock/fake_voe_external_media.h
index f45e1ba..b327f3c 100644
--- a/voice_engine/include/mock/fake_voe_external_media.h
+++ b/voice_engine/include/mock/fake_voe_external_media.h
@@ -53,7 +53,7 @@
                    int samples_per_channel, int sample_rate_hz,
                    int num_channels) {
     const int length = samples_per_channel * num_channels;
-    scoped_array<int16_t> data;
+    scoped_ptr<int16_t[]> data;
     if (!audio) {
       data.reset(new int16_t[length]);
       memset(data.get(), 0, length * sizeof(data[0]));
diff --git a/voice_engine/include/voe_rtp_rtcp.h b/voice_engine/include/voe_rtp_rtcp.h
index 0dd649e..448cfc6 100644
--- a/voice_engine/include/voe_rtp_rtcp.h
+++ b/voice_engine/include/voe_rtp_rtcp.h
@@ -157,6 +157,15 @@
                                                   bool enable,
                                                   unsigned char id = 1) = 0;
 
+    // Sets the status of receiving rtp-audio-level-indication on a specific
+    // |channel|.
+    virtual int SetReceiveAudioLevelIndicationStatus(int channel,
+                                                     bool enable,
+                                                     unsigned char id = 1) {
+      // TODO(wu): Remove default implementation once talk is updated.
+      return 0;
+    }
+
     // Sets the status of sending absolute sender time on a specific |channel|.
     virtual int SetSendAbsoluteSenderTimeStatus(int channel,
                                                 bool enable,
diff --git a/voice_engine/test/auto_test/fixtures/before_initialization_fixture.cc b/voice_engine/test/auto_test/fixtures/before_initialization_fixture.cc
index ebb874e..408ebf9 100644
--- a/voice_engine/test/auto_test/fixtures/before_initialization_fixture.cc
+++ b/voice_engine/test/auto_test/fixtures/before_initialization_fixture.cc
@@ -10,19 +10,10 @@
 
 #include "webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.h"
 
-#include "gflags/gflags.h"
-#include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
 #include "webrtc/system_wrappers/interface/sleep.h"
 
-DECLARE_bool(use_acm_version_2);
-
-BeforeInitializationFixture::BeforeInitializationFixture() {
-  // TODO(minyue): Remove when the old ACM is removed (latest 2014-04-01).
-  config_.Set<webrtc::AudioCodingModuleFactory>(FLAGS_use_acm_version_2 ?
-      new webrtc::NewAudioCodingModuleFactory() :
-      new webrtc::AudioCodingModuleFactory());
-  voice_engine_ = webrtc::VoiceEngine::Create(config_);
-
+BeforeInitializationFixture::BeforeInitializationFixture()
+    : voice_engine_(webrtc::VoiceEngine::Create()) {
   EXPECT_TRUE(voice_engine_ != NULL);
 
   voe_base_ = webrtc::VoEBase::GetInterface(voice_engine_);
diff --git a/voice_engine/test/auto_test/voe_standard_test.cc b/voice_engine/test/auto_test/voe_standard_test.cc
index 5361445..944f3b1 100644
--- a/voice_engine/test/auto_test/voe_standard_test.cc
+++ b/voice_engine/test/auto_test/voe_standard_test.cc
@@ -10,11 +10,11 @@
 
 #include "webrtc/voice_engine/test/auto_test/voe_standard_test.h"
 
+#include <assert.h>
 #include <stdio.h>
 #include <string.h>
 
 #include "webrtc/engine_configurations.h"
-#include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
 #include "webrtc/system_wrappers/interface/event_wrapper.h"
 #include "webrtc/voice_engine/include/voe_neteq_stats.h"
 #include "webrtc/voice_engine/test/auto_test/automated_mode.h"
@@ -29,8 +29,6 @@
 DEFINE_bool(automated, false,
             "If true, we'll run the automated tests we have in noninteractive "
             "mode.");
-DEFINE_bool(use_acm_version_2, false,
-            "If true, we'll run the tests with Audio Coding Module version 2.");
 
 using namespace webrtc;
 
@@ -127,12 +125,7 @@
     return false;
   }
 
-  // TODO(minyue): Remove when the old ACM is removed (latest 2014-04-01).
-  config_.Set<AudioCodingModuleFactory>(FLAGS_use_acm_version_2 ?
-      new NewAudioCodingModuleFactory() :
-      new AudioCodingModuleFactory());
-  voice_engine_ = VoiceEngine::Create(config_);
-
+  voice_engine_ = VoiceEngine::Create();
   if (!voice_engine_) {
     TEST_LOG("Failed to create VoiceEngine\n");
     return false;
diff --git a/voice_engine/test/auto_test/voe_standard_test.h b/voice_engine/test/auto_test/voe_standard_test.h
index 566014d..3bf8936 100644
--- a/voice_engine/test/auto_test/voe_standard_test.h
+++ b/voice_engine/test/auto_test/voe_standard_test.h
@@ -15,7 +15,6 @@
 #include <string>
 
 #include "gflags/gflags.h"
-#include "webrtc/common.h"
 #include "webrtc/voice_engine/include/voe_audio_processing.h"
 #include "webrtc/voice_engine/include/voe_base.h"
 #include "webrtc/voice_engine/include/voe_dtmf.h"
@@ -201,8 +200,6 @@
   VoEAudioProcessing*    voe_apm_;
 
   ResourceManager        resource_manager_;
-
-  Config                 config_;
 };
 
 }  // namespace voetest
diff --git a/voice_engine/test/cmd_test/voe_cmd_test.cc b/voice_engine/test/cmd_test/voe_cmd_test.cc
index 1d13a82..4f6f132 100644
--- a/voice_engine/test/cmd_test/voe_cmd_test.cc
+++ b/voice_engine/test/cmd_test/voe_cmd_test.cc
@@ -19,10 +19,7 @@
 
 #include "gflags/gflags.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "webrtc/common.h"
-#include "webrtc/common_types.h"
 #include "webrtc/engine_configurations.h"
-#include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
 #include "webrtc/modules/audio_processing/include/audio_processing.h"
 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "webrtc/test/channel_transport/include/channel_transport.h"
@@ -42,8 +39,6 @@
 #include "webrtc/voice_engine/include/voe_video_sync.h"
 #include "webrtc/voice_engine/include/voe_volume_control.h"
 
-DEFINE_bool(use_acm_version_1, false,
-            "If true, we'll run the tests with Audio Coding Module version 2.");
 DEFINE_bool(use_log_file, false,
     "Output logs to a file; by default they will be printed to stderr.");
 
@@ -129,13 +124,7 @@
 
   printf("Test started \n");
 
-  // TODO(minyue): Remove when the old ACM is removed.
-  Config config;
-  config.Set<AudioCodingModuleFactory>(FLAGS_use_acm_version_1 ?
-      new AudioCodingModuleFactory() :
-      new NewAudioCodingModuleFactory());
-  m_voe = VoiceEngine::Create(config);
-
+  m_voe = VoiceEngine::Create();
   base1 = VoEBase::GetInterface(m_voe);
   codec = VoECodec::GetInterface(m_voe);
   apm = VoEAudioProcessing::GetInterface(m_voe);
diff --git a/voice_engine/transmit_mixer.cc b/voice_engine/transmit_mixer.cc
index d2467cf..cce2f94 100644
--- a/voice_engine/transmit_mixer.cc
+++ b/voice_engine/transmit_mixer.cc
@@ -1217,7 +1217,7 @@
 int32_t TransmitMixer::MixOrReplaceAudioWithFile(
     int mixingFrequency)
 {
-    scoped_array<int16_t> fileBuffer(new int16_t[640]);
+    scoped_ptr<int16_t[]> fileBuffer(new int16_t[640]);
 
     int fileSamples(0);
     {
diff --git a/voice_engine/voe_rtp_rtcp_impl.cc b/voice_engine/voe_rtp_rtcp_impl.cc
index e20695a..e25a933 100644
--- a/voice_engine/voe_rtp_rtcp_impl.cc
+++ b/voice_engine/voe_rtp_rtcp_impl.cc
@@ -246,6 +246,36 @@
     return channelPtr->SetSendAudioLevelIndicationStatus(enable, id);
 }
 
+int VoERTP_RTCPImpl::SetReceiveAudioLevelIndicationStatus(int channel,
+                                                          bool enable,
+                                                          unsigned char id) {
+  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
+      "SetReceiveAudioLevelIndicationStatus(channel=%d, enable=%d, id=%u)",
+      channel, enable, id);
+  if (!_shared->statistics().Initialized()) {
+    _shared->SetLastError(VE_NOT_INITED, kTraceError);
+    return -1;
+  }
+  if (enable &&
+      (id < kVoiceEngineMinRtpExtensionId ||
+       id > kVoiceEngineMaxRtpExtensionId)) {
+    // [RFC5285] The 4-bit id is the local identifier of this element in
+    // the range 1-14 inclusive.
+    _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError,
+        "SetReceiveAbsoluteSenderTimeStatus() invalid id parameter");
+    return -1;
+  }
+  // Set state and id for the specified channel.
+  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
+  voe::Channel* channel_ptr = ch.channel();
+  if (channel_ptr == NULL) {
+    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
+        "SetReceiveAudioLevelIndicationStatus() failed to locate channel");
+    return -1;
+  }
+  return channel_ptr->SetReceiveAudioLevelIndicationStatus(enable, id);
+}
+
 int VoERTP_RTCPImpl::SetSendAbsoluteSenderTimeStatus(int channel,
                                                      bool enable,
                                                      unsigned char id) {
diff --git a/voice_engine/voe_rtp_rtcp_impl.h b/voice_engine/voe_rtp_rtcp_impl.h
index f902b66..b89c0dc 100644
--- a/voice_engine/voe_rtp_rtcp_impl.h
+++ b/voice_engine/voe_rtp_rtcp_impl.h
@@ -66,6 +66,9 @@
     virtual int SetSendAudioLevelIndicationStatus(int channel,
                                                   bool enable,
                                                   unsigned char id);
+    virtual int SetReceiveAudioLevelIndicationStatus(int channel,
+                                                     bool enable,
+                                                     unsigned char id);
 
     // RTP Header Extension for Absolute Sender Time
     virtual int SetSendAbsoluteSenderTimeStatus(int channel,
diff --git a/modules/NetEq.target.darwin-x86.mk b/voice_engine/voice_engine.target.darwin-arm64.mk
similarity index 67%
copy from modules/NetEq.target.darwin-x86.mk
copy to voice_engine/voice_engine.target.darwin-arm64.mk
index 3b05cd9..5ae8e56 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/voice_engine/voice_engine.target.darwin-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_voice_engine_voice_engine_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,36 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/voice_engine/channel.cc \
+	third_party/webrtc/voice_engine/channel_manager.cc \
+	third_party/webrtc/voice_engine/dtmf_inband.cc \
+	third_party/webrtc/voice_engine/dtmf_inband_queue.cc \
+	third_party/webrtc/voice_engine/level_indicator.cc \
+	third_party/webrtc/voice_engine/monitor_module.cc \
+	third_party/webrtc/voice_engine/output_mixer.cc \
+	third_party/webrtc/voice_engine/shared_data.cc \
+	third_party/webrtc/voice_engine/statistics.cc \
+	third_party/webrtc/voice_engine/transmit_mixer.cc \
+	third_party/webrtc/voice_engine/utility.cc \
+	third_party/webrtc/voice_engine/voe_audio_processing_impl.cc \
+	third_party/webrtc/voice_engine/voe_base_impl.cc \
+	third_party/webrtc/voice_engine/voe_codec_impl.cc \
+	third_party/webrtc/voice_engine/voe_dtmf_impl.cc \
+	third_party/webrtc/voice_engine/voe_external_media_impl.cc \
+	third_party/webrtc/voice_engine/voe_file_impl.cc \
+	third_party/webrtc/voice_engine/voe_hardware_impl.cc \
+	third_party/webrtc/voice_engine/voe_neteq_stats_impl.cc \
+	third_party/webrtc/voice_engine/voe_network_impl.cc \
+	third_party/webrtc/voice_engine/voe_rtp_rtcp_impl.cc \
+	third_party/webrtc/voice_engine/voe_video_sync_impl.cc \
+	third_party/webrtc/voice_engine/voe_volume_control_impl.cc \
+	third_party/webrtc/voice_engine/voice_engine_impl.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,19 +62,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +78,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +109,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +127,16 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_conference_mixer/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,19 +164,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +180,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +211,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +230,16 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_conference_mixer/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +267,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +281,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +303,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_voice_engine_voice_engine_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: voice_engine
+voice_engine: third_party_webrtc_voice_engine_voice_engine_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/modules/NetEq.target.darwin-x86.mk b/voice_engine/voice_engine.target.linux-arm64.mk
similarity index 67%
copy from modules/NetEq.target.darwin-x86.mk
copy to voice_engine/voice_engine.target.linux-arm64.mk
index 3b05cd9..5ae8e56 100644
--- a/modules/NetEq.target.darwin-x86.mk
+++ b/voice_engine/voice_engine.target.linux-arm64.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := third_party_webrtc_modules_NetEq_gyp
+LOCAL_MODULE := third_party_webrtc_voice_engine_voice_engine_gyp
 LOCAL_MODULE_SUFFIX := .a
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
@@ -18,44 +18,36 @@
 # Make sure our deps and generated files are built first.
 LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
 
+LOCAL_CPP_EXTENSION := .cc
 LOCAL_GENERATED_SOURCES :=
 
 GYP_COPIED_SOURCE_ORIGIN_DIRS :=
 
 LOCAL_SRC_FILES := \
-	third_party/webrtc/modules/audio_coding/neteq/accelerate.c \
-	third_party/webrtc/modules/audio_coding/neteq/automode.c \
-	third_party/webrtc/modules/audio_coding/neteq/bgn_update.c \
-	third_party/webrtc/modules/audio_coding/neteq/bufstats_decision.c \
-	third_party/webrtc/modules/audio_coding/neteq/cng_internal.c \
-	third_party/webrtc/modules/audio_coding/neteq/codec_db.c \
-	third_party/webrtc/modules/audio_coding/neteq/correlator.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp.c \
-	third_party/webrtc/modules/audio_coding/neteq/dsp_helpfunctions.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/dtmf_tonegen.c \
-	third_party/webrtc/modules/audio_coding/neteq/expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_address_init.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_dsp_common.c \
-	third_party/webrtc/modules/audio_coding/neteq/mcu_reset.c \
-	third_party/webrtc/modules/audio_coding/neteq/merge.c \
-	third_party/webrtc/modules/audio_coding/neteq/min_distortion.c \
-	third_party/webrtc/modules/audio_coding/neteq/mix_voice_unvoice.c \
-	third_party/webrtc/modules/audio_coding/neteq/mute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/normal.c \
-	third_party/webrtc/modules/audio_coding/neteq/packet_buffer.c \
-	third_party/webrtc/modules/audio_coding/neteq/peak_detection.c \
-	third_party/webrtc/modules/audio_coding/neteq/preemptive_expand.c \
-	third_party/webrtc/modules/audio_coding/neteq/random_vector.c \
-	third_party/webrtc/modules/audio_coding/neteq/recin.c \
-	third_party/webrtc/modules/audio_coding/neteq/recout.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtcp.c \
-	third_party/webrtc/modules/audio_coding/neteq/rtp.c \
-	third_party/webrtc/modules/audio_coding/neteq/set_fs.c \
-	third_party/webrtc/modules/audio_coding/neteq/signal_mcu.c \
-	third_party/webrtc/modules/audio_coding/neteq/split_and_insert.c \
-	third_party/webrtc/modules/audio_coding/neteq/unmute_signal.c \
-	third_party/webrtc/modules/audio_coding/neteq/webrtc_neteq.c
+	third_party/webrtc/voice_engine/channel.cc \
+	third_party/webrtc/voice_engine/channel_manager.cc \
+	third_party/webrtc/voice_engine/dtmf_inband.cc \
+	third_party/webrtc/voice_engine/dtmf_inband_queue.cc \
+	third_party/webrtc/voice_engine/level_indicator.cc \
+	third_party/webrtc/voice_engine/monitor_module.cc \
+	third_party/webrtc/voice_engine/output_mixer.cc \
+	third_party/webrtc/voice_engine/shared_data.cc \
+	third_party/webrtc/voice_engine/statistics.cc \
+	third_party/webrtc/voice_engine/transmit_mixer.cc \
+	third_party/webrtc/voice_engine/utility.cc \
+	third_party/webrtc/voice_engine/voe_audio_processing_impl.cc \
+	third_party/webrtc/voice_engine/voe_base_impl.cc \
+	third_party/webrtc/voice_engine/voe_codec_impl.cc \
+	third_party/webrtc/voice_engine/voe_dtmf_impl.cc \
+	third_party/webrtc/voice_engine/voe_external_media_impl.cc \
+	third_party/webrtc/voice_engine/voe_file_impl.cc \
+	third_party/webrtc/voice_engine/voe_hardware_impl.cc \
+	third_party/webrtc/voice_engine/voe_neteq_stats_impl.cc \
+	third_party/webrtc/voice_engine/voe_network_impl.cc \
+	third_party/webrtc/voice_engine/voe_rtp_rtcp_impl.cc \
+	third_party/webrtc/voice_engine/voe_video_sync_impl.cc \
+	third_party/webrtc/voice_engine/voe_volume_control_impl.cc \
+	third_party/webrtc/voice_engine/voice_engine_impl.cc
 
 
 # Flags passed to both C and C++ files.
@@ -70,19 +62,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -94,7 +78,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-g \
 	-fomit-frame-pointer \
@@ -126,8 +109,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -146,12 +127,16 @@
 LOCAL_C_INCLUDES_Debug := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_conference_mixer/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,19 +164,11 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
+	-Wno-unused-local-typedefs \
 	-fno-builtin-cos \
 	-fno-builtin-sin \
 	-fno-builtin-cosf \
 	-fno-builtin-sinf \
-	-fno-builtin-cos \
-	-fno-builtin-sin \
-	-fno-builtin-cosf \
-	-fno-builtin-sinf \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
 	-ffunction-sections \
 	-funwind-tables \
 	-g \
@@ -203,7 +180,6 @@
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
 	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
 	-Os \
 	-fno-ident \
 	-fdata-sections \
@@ -235,8 +211,6 @@
 	'-DWEBRTC_LINUX' \
 	'-DWEBRTC_ANDROID' \
 	'-DWEBRTC_ANDROID_OPENSLES' \
-	'-DNETEQ_VOICEENGINE_CODECS' \
-	'-DSCRATCH' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -256,12 +230,16 @@
 LOCAL_C_INCLUDES_Release := \
 	$(LOCAL_PATH)/third_party \
 	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/neteq/interface \
-	$(LOCAL_PATH)/third_party/webrtc \
-	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/codecs/cng/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/resampler/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/signal_processing/include \
 	$(LOCAL_PATH)/third_party/webrtc/common_audio/vad/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_coding/main/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/interface \
+	$(LOCAL_PATH)/third_party/webrtc \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_conference_mixer/interface \
+	$(LOCAL_PATH)/third_party/webrtc/modules/audio_device/include \
+	$(LOCAL_PATH)/third_party/webrtc/modules/media_file/interface \
+	$(LOCAL_PATH)/third_party/webrtc/system_wrappers/interface \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -289,8 +267,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -305,8 +281,6 @@
 	-Wl,--fatal-warnings \
 	-Wl,-z,noexecstack \
 	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
@@ -329,10 +303,10 @@
 
 # Add target alias to "gyp_all_modules" target.
 .PHONY: gyp_all_modules
-gyp_all_modules: third_party_webrtc_modules_NetEq_gyp
+gyp_all_modules: third_party_webrtc_voice_engine_voice_engine_gyp
 
 # Alias gyp target name.
-.PHONY: NetEq
-NetEq: third_party_webrtc_modules_NetEq_gyp
+.PHONY: voice_engine
+voice_engine: third_party_webrtc_voice_engine_voice_engine_gyp
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/webrtc_tests.gypi b/webrtc_tests.gypi
index 57fd907..1ff3a9c 100644
--- a/webrtc_tests.gypi
+++ b/webrtc_tests.gypi
@@ -63,7 +63,7 @@
       'dependencies': [
         '<(DEPTH)/testing/gtest.gyp:gtest',
         '<(DEPTH)/third_party/gflags/gflags.gyp:gflags',
-        'modules/modules.gyp:neteq_unittest_tools',  # Needed by neteq_performance_unittest.
+        'modules/modules.gyp:neteq_test_support',  # Needed by neteq_performance_unittest.
         'modules/modules.gyp:rtp_rtcp',
         'test/webrtc_test_common.gyp:webrtc_test_common',
         'webrtc',