Android-cuttlefish cvd tool
audio_device.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2021 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <modules/audio_device/include/audio_device.h>
20
21#include <atomic>
22
24
25namespace cuttlefish {
26namespace webrtc_streaming {
27
28class CfAudioDeviceModule : public webrtc::AudioDeviceModule,
29 public AudioSource {
30 public:
32 ~CfAudioDeviceModule() override = default;
33
34 // Returns number of frames if there is data available, 0 if the stream is not
35 // playing (no clients or the streams are muted), -1 on error.
36 int GetMoreAudioData(void* data, int bytes_per_samples, int samples_per_channel,
37 int num_channels, int sample_rate, bool& muted) override;
38
39 // Retrieve the currently utilized audio layer
40 int32_t ActiveAudioLayer(AudioLayer* audioLayer) const override;
41
42 // Full-duplex transportation of PCM audio
43 int32_t RegisterAudioCallback(webrtc::AudioTransport* audio_callback) override;
44
45 // Main initialization and termination
46 int32_t Init() override;
47 int32_t Terminate() override;
48 bool Initialized() const override;
49
50 // Device enumeration
51 int16_t PlayoutDevices() override;
52 int16_t RecordingDevices() override;
53 int32_t PlayoutDeviceName(uint16_t index,
54 char name[webrtc::kAdmMaxDeviceNameSize],
55 char guid[webrtc::kAdmMaxGuidSize]) override;
56 int32_t RecordingDeviceName(uint16_t index,
57 char name[webrtc::kAdmMaxDeviceNameSize],
58 char guid[webrtc::kAdmMaxGuidSize]) override;
59
60 // Device selection
61 int32_t SetPlayoutDevice(uint16_t index) override;
62 int32_t SetPlayoutDevice(WindowsDeviceType device) override;
63 int32_t SetRecordingDevice(uint16_t index) override;
64 int32_t SetRecordingDevice(WindowsDeviceType device) override;
65
66 // Audio transport initialization
67 int32_t PlayoutIsAvailable(bool* available) override;
68 int32_t InitPlayout() override;
69 bool PlayoutIsInitialized() const override;
70 int32_t RecordingIsAvailable(bool* available) override;
71 int32_t InitRecording() override;
72 bool RecordingIsInitialized() const override;
73
74 // Audio transport control
75 int32_t StartPlayout() override;
76 int32_t StopPlayout() override;
77 bool Playing() const override;
78 int32_t StartRecording() override;
79 int32_t StopRecording() override;
80 bool Recording() const override;
81
82 // Audio mixer initialization
83 int32_t InitSpeaker() override;
84 bool SpeakerIsInitialized() const override;
85 int32_t InitMicrophone() override;
86 bool MicrophoneIsInitialized() const override;
87
88 // Speaker volume controls
89 int32_t SpeakerVolumeIsAvailable(bool* available) override;
90 int32_t SetSpeakerVolume(uint32_t volume) override;
91 int32_t SpeakerVolume(uint32_t* volume) const override;
92 int32_t MaxSpeakerVolume(uint32_t* maxVolume) const override;
93 int32_t MinSpeakerVolume(uint32_t* minVolume) const override;
94
95 // Microphone volume controls
96 int32_t MicrophoneVolumeIsAvailable(bool* available) override;
97 int32_t SetMicrophoneVolume(uint32_t volume) override;
98 int32_t MicrophoneVolume(uint32_t* volume) const override;
99 int32_t MaxMicrophoneVolume(uint32_t* maxVolume) const override;
100 int32_t MinMicrophoneVolume(uint32_t* minVolume) const override;
101
102 // Speaker mute control
103 int32_t SpeakerMuteIsAvailable(bool* available) override;
104 int32_t SetSpeakerMute(bool enable) override;
105 int32_t SpeakerMute(bool* enabled) const override;
106
107 // Microphone mute control
108 int32_t MicrophoneMuteIsAvailable(bool* available) override;
109 int32_t SetMicrophoneMute(bool enable) override;
110 int32_t MicrophoneMute(bool* enabled) const override;
111
112 // Stereo support
113 int32_t StereoPlayoutIsAvailable(bool* available) const override;
114 int32_t SetStereoPlayout(bool enable) override;
115 int32_t StereoPlayout(bool* enabled) const override;
116 int32_t StereoRecordingIsAvailable(bool* available) const override;
117 int32_t SetStereoRecording(bool enable) override;
118 int32_t StereoRecording(bool* enabled) const override;
119
120 // Playout delay
121 int32_t PlayoutDelay(uint16_t* delayMS) const override;
122
123 // Only supported on Android.
124 bool BuiltInAECIsAvailable() const override;
125 bool BuiltInAGCIsAvailable() const override;
126 bool BuiltInNSIsAvailable() const override;
127
128 // Enables the built-in audio effects. Only supported on Android.
129 int32_t EnableBuiltInAEC(bool enable) override;
130 int32_t EnableBuiltInAGC(bool enable) override;
131 int32_t EnableBuiltInNS(bool enable) override;
132
133 // Play underrun count. Only supported on Android (guest).
134 int32_t GetPlayoutUnderrunCount() const override;
135
136 private:
137 webrtc::AudioTransport* audio_callback_ = nullptr;
140 std::atomic<bool> playing_ = false;
141 std::atomic<bool> recording_ = false;
142};
143} // namespace webrtc_streaming
144} // namespace cuttlefish
Definition: audio_source.h:26
bool BuiltInAECIsAvailable() const override
Definition: audio_device.cpp:235
int32_t StereoPlayout(bool *enabled) const override
Definition: audio_device.cpp:208
int32_t SetSpeakerVolume(uint32_t volume) override
Definition: audio_device.cpp:156
int32_t RecordingDeviceName(uint16_t index, char name[webrtc::kAdmMaxDeviceNameSize], char guid[webrtc::kAdmMaxGuidSize]) override
Definition: audio_device.cpp:86
int32_t SpeakerMute(bool *enabled) const override
Definition: audio_device.cpp:189
int32_t StartPlayout() override
Definition: audio_device.cpp:126
int32_t InitSpeaker() override
Definition: audio_device.cpp:146
int32_t PlayoutIsAvailable(bool *available) override
Definition: audio_device.cpp:112
int GetMoreAudioData(void *data, int bytes_per_samples, int samples_per_channel, int num_channels, int sample_rate, bool &muted) override
Definition: audio_device.cpp:31
int32_t MinMicrophoneVolume(uint32_t *minVolume) const override
Definition: audio_device.cpp:179
int32_t SpeakerVolume(uint32_t *volume) const override
Definition: audio_device.cpp:157
bool stereo_recording_enabled_
Definition: audio_device.h:139
int32_t EnableBuiltInAEC(bool enable) override
Definition: audio_device.cpp:240
int32_t StopRecording() override
Definition: audio_device.cpp:139
int32_t Init() override
Definition: audio_device.cpp:65
int32_t Terminate() override
Definition: audio_device.cpp:66
int32_t SpeakerMuteIsAvailable(bool *available) override
Definition: audio_device.cpp:184
int32_t StereoPlayoutIsAvailable(bool *available) const override
Definition: audio_device.cpp:200
int32_t EnableBuiltInNS(bool enable) override
Definition: audio_device.cpp:242
int32_t ActiveAudioLayer(AudioLayer *audioLayer) const override
Definition: audio_device.cpp:53
bool stereo_playout_enabled_
Definition: audio_device.h:138
int32_t SetSpeakerMute(bool enable) override
Definition: audio_device.cpp:188
bool PlayoutIsInitialized() const override
Definition: audio_device.cpp:117
bool MicrophoneIsInitialized() const override
Definition: audio_device.cpp:149
int16_t RecordingDevices() override
Definition: audio_device.cpp:71
int32_t InitMicrophone() override
Definition: audio_device.cpp:148
int32_t InitRecording() override
Definition: audio_device.cpp:122
bool RecordingIsInitialized() const override
Definition: audio_device.cpp:123
int32_t MaxSpeakerVolume(uint32_t *maxVolume) const override
Definition: audio_device.cpp:160
CfAudioDeviceModule()
Definition: audio_device.cpp:29
int32_t StopPlayout() override
Definition: audio_device.cpp:130
bool Recording() const override
Definition: audio_device.cpp:143
int16_t PlayoutDevices() override
Definition: audio_device.cpp:70
int32_t MicrophoneMuteIsAvailable(bool *available) override
Definition: audio_device.cpp:192
int32_t MicrophoneMute(bool *enabled) const override
Definition: audio_device.cpp:197
std::atomic< bool > playing_
Definition: audio_device.h:140
bool BuiltInNSIsAvailable() const override
Definition: audio_device.cpp:237
int32_t StereoRecording(bool *enabled) const override
Definition: audio_device.cpp:220
int32_t MicrophoneVolumeIsAvailable(bool *available) override
Definition: audio_device.cpp:168
int32_t MaxMicrophoneVolume(uint32_t *maxVolume) const override
Definition: audio_device.cpp:176
int32_t InitPlayout() override
Definition: audio_device.cpp:116
webrtc::AudioTransport * audio_callback_
Definition: audio_device.h:137
bool BuiltInAGCIsAvailable() const override
Definition: audio_device.cpp:236
int32_t StereoRecordingIsAvailable(bool *available) const override
Definition: audio_device.cpp:212
int32_t SetRecordingDevice(uint16_t index) override
Definition: audio_device.cpp:106
int32_t GetPlayoutUnderrunCount() const override
Definition: audio_device.cpp:244
int32_t MinSpeakerVolume(uint32_t *minVolume) const override
Definition: audio_device.cpp:163
bool Playing() const override
Definition: audio_device.cpp:134
int32_t SpeakerVolumeIsAvailable(bool *available) override
Definition: audio_device.cpp:152
int32_t RegisterAudioCallback(webrtc::AudioTransport *audio_callback) override
Definition: audio_device.cpp:58
int32_t SetStereoRecording(bool enable) override
Definition: audio_device.cpp:216
int32_t SetMicrophoneVolume(uint32_t volume) override
Definition: audio_device.cpp:172
int32_t PlayoutDeviceName(uint16_t index, char name[webrtc::kAdmMaxDeviceNameSize], char guid[webrtc::kAdmMaxGuidSize]) override
Definition: audio_device.cpp:72
int32_t SetPlayoutDevice(uint16_t index) override
Definition: audio_device.cpp:102
bool SpeakerIsInitialized() const override
Definition: audio_device.cpp:147
std::atomic< bool > recording_
Definition: audio_device.h:141
int32_t StartRecording() override
Definition: audio_device.cpp:135
int32_t MicrophoneVolume(uint32_t *volume) const override
Definition: audio_device.cpp:173
int32_t PlayoutDelay(uint16_t *delayMS) const override
Definition: audio_device.cpp:226
int32_t SetStereoPlayout(bool enable) override
Definition: audio_device.cpp:204
int32_t SetMicrophoneMute(bool enable) override
Definition: audio_device.cpp:196
bool Initialized() const override
Definition: audio_device.cpp:67
int32_t RecordingIsAvailable(bool *available) override
Definition: audio_device.cpp:118
int32_t EnableBuiltInAGC(bool enable) override
Definition: audio_device.cpp:241
char data[Size]
Definition: incremental_server.cpp:1
Definition: alloc_utils.cpp:23