| /* |
| * Copyright (c) 2013 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. |
| */ |
| |
| #ifndef WEBRTC_EXAMPLES_ANDROID_OPENSL_LOOPBACK_FAKE_AUDIO_DEVICE_BUFFER_H_ |
| #define WEBRTC_EXAMPLES_ANDROID_OPENSL_LOOPBACK_FAKE_AUDIO_DEVICE_BUFFER_H_ |
| |
| #include "webrtc/base/scoped_ptr.h" |
| #include "webrtc/modules/audio_device/android/audio_manager_jni.h" |
| #include "webrtc/modules/audio_device/android/single_rw_fifo.h" |
| #include "webrtc/modules/audio_device/audio_device_buffer.h" |
| |
| namespace webrtc { |
| |
| // Fake AudioDeviceBuffer implementation that returns audio data that is pushed |
| // to it. It implements all APIs used by the OpenSL implementation. |
| class FakeAudioDeviceBuffer : public AudioDeviceBuffer { |
| public: |
| FakeAudioDeviceBuffer(); |
| virtual ~FakeAudioDeviceBuffer() {} |
| |
| virtual int32_t SetRecordingSampleRate(uint32_t fsHz); |
| virtual int32_t SetPlayoutSampleRate(uint32_t fsHz); |
| virtual int32_t SetRecordingChannels(uint8_t channels); |
| virtual int32_t SetPlayoutChannels(uint8_t channels); |
| virtual int32_t SetRecordedBuffer(const void* audioBuffer, |
| uint32_t nSamples); |
| virtual void SetVQEData(int playDelayMS, |
| int recDelayMS, |
| int clockDrift) {} |
| virtual int32_t DeliverRecordedData() { return 0; } |
| virtual int32_t RequestPlayoutData(uint32_t nSamples); |
| virtual int32_t GetPlayoutData(void* audioBuffer); |
| |
| void ClearBuffer(); |
| |
| private: |
| enum { |
| // Each buffer contains 10 ms of data since that is what OpenSlesInput |
| // delivers. Keep 7 buffers which would cover 70 ms of data. These buffers |
| // are needed because of jitter between OpenSl recording and playing. |
| kNumBuffers = 7, |
| }; |
| int sample_rate() const; |
| int buffer_size_samples() const; |
| int buffer_size_bytes() const; |
| |
| // Java API handle |
| AudioManagerJni audio_manager_; |
| |
| SingleRwFifo fifo_; |
| rtc::scoped_ptr<rtc::scoped_ptr<int8_t[]>[]> buf_; |
| int next_available_buffer_; |
| |
| uint8_t record_channels_; |
| uint8_t play_channels_; |
| }; |
| |
| } // namespace webrtc |
| |
| #endif // WEBRTC_EXAMPLES_ANDROID_OPENSL_LOOPBACK_FAKE_AUDIO_DEVICE_BUFFER_H_ |