127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org/*
227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org *
427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org */
1027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
1127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org#ifndef WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_AUDIO_DEVICE_TEMPLATE_H_
1227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org#define WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_AUDIO_DEVICE_TEMPLATE_H_
1327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
1427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org#include "webrtc/modules/audio_device/audio_device_generic.h"
1527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
1627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org#include "webrtc/system_wrappers/interface/trace.h"
1727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
1827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.orgnamespace webrtc {
1927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
2027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org// InputType/OutputType can be any class that implements the capturing/rendering
2127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org// part of the AudioDeviceGeneric API.
2227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.orgtemplate <class InputType, class OutputType>
2327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.orgclass AudioDeviceTemplate : public AudioDeviceGeneric {
2427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org public:
2527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  static int32_t SetAndroidAudioDeviceObjects(void* javaVM,
2627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org                                       void* env,
2727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org                                       void* context) {
2827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    if (OutputType::SetAndroidAudioDeviceObjects(javaVM, env, context) == -1) {
2927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      return -1;
3027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    }
3127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return InputType::SetAndroidAudioDeviceObjects(javaVM, env, context);
3227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
33f3a2ef39a9ba3d382916bcfb67c952781ab91df3henrike@webrtc.org
34f3a2ef39a9ba3d382916bcfb67c952781ab91df3henrike@webrtc.org  static void ClearAndroidAudioDeviceObjects() {
35f3a2ef39a9ba3d382916bcfb67c952781ab91df3henrike@webrtc.org    OutputType::ClearAndroidAudioDeviceObjects();
36f3a2ef39a9ba3d382916bcfb67c952781ab91df3henrike@webrtc.org    InputType::ClearAndroidAudioDeviceObjects();
37f3a2ef39a9ba3d382916bcfb67c952781ab91df3henrike@webrtc.org  }
38f3a2ef39a9ba3d382916bcfb67c952781ab91df3henrike@webrtc.org
3927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  explicit AudioDeviceTemplate(const int32_t id)
4027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      : output_(id),
4127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org        input_(id, &output_) {
4227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
4327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
4427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  virtual ~AudioDeviceTemplate() {
4527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
4627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
4727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t ActiveAudioLayer(
4827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      AudioDeviceModule::AudioLayer& audioLayer) const { // NOLINT
4927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    audioLayer = AudioDeviceModule::kPlatformDefaultAudio;
5027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return 0;
5127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
5227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
5327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t Init() {
5427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.Init() | input_.Init();
5527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
5627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
5727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t Terminate()  {
5827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.Terminate() | input_.Terminate();
5927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
6027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
6127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool Initialized() const {
6227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.Initialized() && input_.Initialized();
6327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
6427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
6527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int16_t PlayoutDevices() {
6627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.PlayoutDevices();
6727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
6827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
6927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int16_t RecordingDevices() {
7027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.RecordingDevices();
7127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
7227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
7327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t PlayoutDeviceName(
7427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t index,
7527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      char name[kAdmMaxDeviceNameSize],
7627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      char guid[kAdmMaxGuidSize]) {
7727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.PlayoutDeviceName(index, name, guid);
7827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
7927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
8027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t RecordingDeviceName(
8127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t index,
8227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      char name[kAdmMaxDeviceNameSize],
8327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      char guid[kAdmMaxGuidSize]) {
8427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.RecordingDeviceName(index, name, guid);
8527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
8627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
8727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetPlayoutDevice(uint16_t index) {
8827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SetPlayoutDevice(index);
8927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
9027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
9127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetPlayoutDevice(
9227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      AudioDeviceModule::WindowsDeviceType device) {
9327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SetPlayoutDevice(device);
9427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
9527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
9627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetRecordingDevice(uint16_t index) {
9727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.SetRecordingDevice(index);
9827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
9927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
10027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetRecordingDevice(
10127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      AudioDeviceModule::WindowsDeviceType device) {
10227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.SetRecordingDevice(device);
10327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
10427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
10527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t PlayoutIsAvailable(
10627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& available) {  // NOLINT
10727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.PlayoutIsAvailable(available);
10827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
10927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
11027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t InitPlayout() {
11127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.InitPlayout();
11227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
11327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
11427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool PlayoutIsInitialized() const {
11527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.PlayoutIsInitialized();
11627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
11727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
11827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t RecordingIsAvailable(
11927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& available) {  // NOLINT
12027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.RecordingIsAvailable(available);
12127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
12227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
12327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t InitRecording() {
12427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.InitRecording();
12527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
12627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
12727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool RecordingIsInitialized() const {
12827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.RecordingIsInitialized();
12927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
13027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
13127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t StartPlayout() {
13227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.StartPlayout();
13327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
13427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
13527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t StopPlayout() {
13627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.StopPlayout();
13727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
13827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
13927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool Playing() const {
14027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.Playing();
14127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
14227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
14327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t StartRecording() {
14427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.StartRecording();
14527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
14627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
14727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t StopRecording() {
14827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.StopRecording();
14927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
15027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
15127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool Recording() const {
15227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.Recording() ;
15327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
15427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
15527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetAGC(bool enable) {
15627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.SetAGC(enable);
15727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
15827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
15927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool AGC() const {
16027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.AGC();
16127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
16227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
16327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetWaveOutVolume(uint16_t volumeLeft,
16427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org                           uint16_t volumeRight) {
16527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, 0,
16627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org                 "  API call not supported on this platform");
16727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return -1;
16827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
16927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
17027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t WaveOutVolume(
17127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t& volumeLeft,           // NOLINT
17227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t& volumeRight) const {  // NOLINT
17327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, 0,
17427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org                 "  API call not supported on this platform");
17527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return -1;
17627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
17727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
17827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t InitSpeaker() {
17927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.InitSpeaker();
18027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
18127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
18227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool SpeakerIsInitialized() const {
18327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SpeakerIsInitialized();
18427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
18527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
18627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t InitMicrophone() {
18727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.InitMicrophone();
18827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
18927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
19027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool MicrophoneIsInitialized() const {
19127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MicrophoneIsInitialized();
19227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
19327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
19427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SpeakerVolumeIsAvailable(
19527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& available) {  // NOLINT
19627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SpeakerVolumeIsAvailable(available);
19727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
19827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
19927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetSpeakerVolume(uint32_t volume) {
20027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SetSpeakerVolume(volume);
20127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
20227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
20327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SpeakerVolume(
20427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint32_t& volume) const {  // NOLINT
20527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SpeakerVolume(volume);
20627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
20727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
20827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MaxSpeakerVolume(
20927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint32_t& maxVolume) const {  // NOLINT
21027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.MaxSpeakerVolume(maxVolume);
21127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
21227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
21327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MinSpeakerVolume(
21427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint32_t& minVolume) const {  // NOLINT
21527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.MinSpeakerVolume(minVolume);
21627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
21727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
21827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SpeakerVolumeStepSize(
21927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t& stepSize) const {  // NOLINT
22027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SpeakerVolumeStepSize(stepSize);
22127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
22227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
22327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MicrophoneVolumeIsAvailable(
22427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& available) {  // NOLINT
22527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MicrophoneVolumeIsAvailable(available);
22627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
22727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
22827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetMicrophoneVolume(uint32_t volume) {
22927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.SetMicrophoneVolume(volume);
23027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
23127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
23227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MicrophoneVolume(
23327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint32_t& volume) const {  // NOLINT
23427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MicrophoneVolume(volume);
23527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
23627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
23727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MaxMicrophoneVolume(
23827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint32_t& maxVolume) const {  // NOLINT
23927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MaxMicrophoneVolume(maxVolume);
24027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
24127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
24227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MinMicrophoneVolume(
24327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint32_t& minVolume) const {  // NOLINT
24427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MinMicrophoneVolume(minVolume);
24527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
24627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
24727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MicrophoneVolumeStepSize(
24827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t& stepSize) const {  // NOLINT
24927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MicrophoneVolumeStepSize(stepSize);
25027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
25127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
25227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SpeakerMuteIsAvailable(
25327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& available) {  // NOLINT
25427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SpeakerMuteIsAvailable(available);
25527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
25627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
25727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetSpeakerMute(bool enable) {
25827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SetSpeakerMute(enable);
25927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
26027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
26127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SpeakerMute(
26227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& enabled) const {  // NOLINT
26327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SpeakerMute(enabled);
26427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
26527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
26627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MicrophoneMuteIsAvailable(
26727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& available) {  // NOLINT
26827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MicrophoneMuteIsAvailable(available);
26927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
27027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
27127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetMicrophoneMute(bool enable) {
27227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.SetMicrophoneMute(enable);
27327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
27427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
27527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MicrophoneMute(
27627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& enabled) const {  // NOLINT
27727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MicrophoneMute(enabled);
27827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
27927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
28027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MicrophoneBoostIsAvailable(
28127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& available) {  // NOLINT
28227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MicrophoneBoostIsAvailable(available);
28327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
28427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
28527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetMicrophoneBoost(bool enable) {
28627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.SetMicrophoneBoost(enable);
28727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
28827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
28927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t MicrophoneBoost(
29027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& enabled) const {  // NOLINT
29127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.MicrophoneBoost(enabled);
29227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
29327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
29427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t StereoPlayoutIsAvailable(
29527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& available) {  // NOLINT
29627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.StereoPlayoutIsAvailable(available);
29727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
29827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
29927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetStereoPlayout(bool enable) {
30027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SetStereoPlayout(enable);
30127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
30227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
30327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t StereoPlayout(
30427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& enabled) const {  // NOLINT
30527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.StereoPlayout(enabled);
30627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
30727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
30827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t StereoRecordingIsAvailable(
30927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& available) {  // NOLINT
31027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.StereoRecordingIsAvailable(available);
31127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
31227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
31327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetStereoRecording(bool enable) {
31427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.SetStereoRecording(enable);
31527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
31627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
31727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t StereoRecording(
31827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& enabled) const {  // NOLINT
31927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.StereoRecording(enabled);
32027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
32127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
32227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetPlayoutBuffer(
32327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      const AudioDeviceModule::BufferType type,
32427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t sizeMS) {
32527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SetPlayoutBuffer(type, sizeMS);
32627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
32727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
32827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t PlayoutBuffer(
32927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      AudioDeviceModule::BufferType& type,
33027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t& sizeMS) const {  // NOLINT
33127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.PlayoutBuffer(type, sizeMS);
33227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
33327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
33427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t PlayoutDelay(
33527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t& delayMS) const {  // NOLINT
33627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.PlayoutDelay(delayMS);
33727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
33827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
33927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t RecordingDelay(
34027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t& delayMS) const {  // NOLINT
34127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.RecordingDelay(delayMS);
34227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
34327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
34427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t CPULoad(
34527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      uint16_t& load) const {  // NOLINT
34627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, 0,
34727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org                 "  API call not supported on this platform");
34827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return -1;
34927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
35027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
35127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool PlayoutWarning() const {
35227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.PlayoutWarning();
35327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
35427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
35527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool PlayoutError() const {
35627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.PlayoutError();
35727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
35827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
35927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool RecordingWarning() const {
36027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.RecordingWarning();
36127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
36227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
36327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  bool RecordingError() const {
36427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.RecordingError();
36527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
36627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
36727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  void ClearPlayoutWarning() {
36827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.ClearPlayoutWarning();
36927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
37027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
37127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  void ClearPlayoutError() {
37227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.ClearPlayoutError();
37327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
37427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
37527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  void ClearRecordingWarning() {
37627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.ClearRecordingWarning();
37727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
37827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
37927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  void ClearRecordingError() {
38027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.ClearRecordingError();
38127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
38227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
38327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  void AttachAudioBuffer(
38427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      AudioDeviceBuffer* audioBuffer) {
38527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    output_.AttachAudioBuffer(audioBuffer);
38627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    input_.AttachAudioBuffer(audioBuffer);
38727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
38827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
38927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetRecordingSampleRate(
39027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      const uint32_t samplesPerSec) {
39127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return input_.SetRecordingSampleRate(samplesPerSec);
39227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
39327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
39427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetPlayoutSampleRate(
39527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      const uint32_t samplesPerSec) {
39627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SetPlayoutSampleRate(samplesPerSec);
39727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
39827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
39927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t SetLoudspeakerStatus(bool enable) {
40027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.SetLoudspeakerStatus(enable);
40127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
40227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
40327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  int32_t GetLoudspeakerStatus(
40427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org      bool& enable) const {  // NOLINT
40527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org    return output_.GetLoudspeakerStatus(enable);
40627f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  }
40727f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
40827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org private:
40927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  OutputType output_;
41027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org  InputType input_;
41127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org};
41227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
41327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org}  // namespace webrtc
41427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org
41527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org#endif  // WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_AUDIO_DEVICE_TEMPLATE_H_
416