Index: webrtc/modules/audio_processing/echo_cancellation_impl.h |
diff --git a/webrtc/modules/audio_processing/echo_cancellation_impl.h b/webrtc/modules/audio_processing/echo_cancellation_impl.h |
index 070dcabc5d6df0447dcaaa65dfe5c205031993ac..b2b1090153125f9e4e30a8e32d75aebd9c78e7d5 100644 |
--- a/webrtc/modules/audio_processing/echo_cancellation_impl.h |
+++ b/webrtc/modules/audio_processing/echo_cancellation_impl.h |
@@ -11,6 +11,8 @@ |
#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_ECHO_CANCELLATION_IMPL_H_ |
#define WEBRTC_MODULES_AUDIO_PROCESSING_ECHO_CANCELLATION_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" |
@@ -19,6 +21,21 @@ namespace webrtc { |
class AudioBuffer; |
class CriticalSectionWrapper; |
+// Functor to use when supplying a verifier function for the queue item |
hlundin-webrtc
2015/11/06 07:05:13
I'm not sure, but isn't there a risk you'll get mu
peah-webrtc
2015/11/06 10:44:20
Good point! It works as it is, but I instead creat
|
+// verifcation. |
+class AecRenderQueueItemVerifier { |
+ public: |
+ explicit AecRenderQueueItemVerifier(size_t minimum_capacity) |
+ : minimum_capacity_(minimum_capacity) {} |
+ |
+ bool operator()(const std::vector<float>& v) const { |
+ return v.capacity() >= minimum_capacity_; |
+ } |
+ |
+ private: |
+ size_t minimum_capacity_; |
+}; |
+ |
class EchoCancellationImpl : public EchoCancellation, |
public ProcessingComponent { |
public: |
@@ -42,7 +59,16 @@ class EchoCancellationImpl : public EchoCancellation, |
bool is_delay_agnostic_enabled() const; |
bool is_extended_filter_enabled() const; |
+ // 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; |
+ |
// EchoCancellation implementation. |
int Enable(bool enable) override; |
int enable_drift_compensation(bool enable) override; |
@@ -68,6 +94,8 @@ class EchoCancellationImpl : public EchoCancellation, |
int num_handles_required() const override; |
int GetHandleError(void* handle) const override; |
+ void AllocateRenderQueue(); |
+ |
const AudioProcessing* apm_; |
CriticalSectionWrapper* crit_; |
bool drift_compensation_enabled_; |
@@ -79,6 +107,12 @@ class EchoCancellationImpl : public EchoCancellation, |
bool delay_logging_enabled_; |
bool extended_filter_enabled_; |
bool delay_agnostic_enabled_; |
+ |
+ size_t render_queue_element_max_size_; |
+ std::vector<float> render_queue_buffer_; |
+ std::vector<float> capture_queue_buffer_; |
+ rtc::scoped_ptr<SwapQueue<std::vector<float>, AecRenderQueueItemVerifier>> |
+ render_signal_queue_; |
}; |
} // namespace webrtc |