Index: webrtc/modules/audio_processing/echo_control_mobile_impl.h |
diff --git a/webrtc/modules/audio_processing/echo_control_mobile_impl.h b/webrtc/modules/audio_processing/echo_control_mobile_impl.h |
index da7022545f245171a3353a59f55fc991273d57f6..90313a72237642a85906c78688bfd0cdac46050e 100644 |
--- a/webrtc/modules/audio_processing/echo_control_mobile_impl.h |
+++ b/webrtc/modules/audio_processing/echo_control_mobile_impl.h |
@@ -11,11 +11,34 @@ |
#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_ECHO_CONTROL_MOBILE_IMPL_H_ |
#define WEBRTC_MODULES_AUDIO_PROCESSING_ECHO_CONTROL_MOBILE_IMPL_H_ |
+#include "webrtc/base/scoped_ptr.h" |
+#include "webrtc/common_audio/swap_queue.h" |
#include "webrtc/modules/audio_processing/include/audio_processing.h" |
#include "webrtc/modules/audio_processing/processing_component.h" |
namespace webrtc { |
+namespace { |
+// Functor to use when supplying a verifier function for the queue item |
+// verifcation. |
+class AecmRenderQueueItemVerifier { |
+ public: |
+ explicit AecmRenderQueueItemVerifier(size_t allowed_size_1, |
+ size_t allowed_size_2) |
+ : allowed_size_1_(allowed_size_1), allowed_size_2_(allowed_size_2) {} |
+ |
+ bool operator()(const std::vector<int16_t>& v) const { |
+ return (((v.size() == allowed_size_1_) || (v.size() == allowed_size_2_)) && |
+ (v.capacity() >= std::max(allowed_size_1_, allowed_size_2_))); |
+ } |
+ |
+ private: |
+ size_t allowed_size_1_; |
+ size_t allowed_size_2_; |
+}; |
+ |
+} // namespace anonymous |
+ |
class AudioBuffer; |
class CriticalSectionWrapper; |
@@ -37,7 +60,16 @@ class EchoControlMobileImpl : public EchoControlMobile, |
// ProcessingComponent implementation. |
int Initialize() override; |
+ // Reads render side data that has been queued on the render call. |
+ void ReadQueuedRenderData(); |
+ |
private: |
+ static const size_t kAllowedValuesOfSamplesPerFrame1 = 80; |
+ static const size_t kAllowedValuesOfSamplesPerFrame2 = 160; |
+ // TODO(peah): Decrease this once we properly handle hugely unbalanced |
+ // reverse and forward call numbers. |
+ static const size_t kMaxNumFramesToBuffer = 100; |
+ |
// EchoControlMobile implementation. |
int Enable(bool enable) override; |
int set_routing_mode(RoutingMode mode) override; |
@@ -53,11 +85,19 @@ class EchoControlMobileImpl : public EchoControlMobile, |
int num_handles_required() const override; |
int GetHandleError(void* handle) const override; |
+ void AllocateRenderQueue(); |
+ |
const AudioProcessing* apm_; |
CriticalSectionWrapper* crit_; |
RoutingMode routing_mode_; |
bool comfort_noise_enabled_; |
unsigned char* external_echo_path_; |
+ |
+ size_t render_queue_element_max_size_; |
+ std::vector<int16_t> render_queue_buffer_; |
+ std::vector<int16_t> capture_queue_buffer_; |
+ rtc::scoped_ptr<SwapQueue<std::vector<int16_t>, AecmRenderQueueItemVerifier> > |
kwiberg-webrtc
2015/10/27 10:43:07
>>
peah-webrtc
2015/10/29 11:36:57
Done.
|
+ render_signal_queue_; |
}; |
} // namespace webrtc |