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 <atomic>
20
21#include "modules/audio_device/include/audio_device.h"
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,
37 int samples_per_channel, int num_channels,
38 int sample_rate, bool& muted) override;
39
40 // Retrieve the currently utilized audio layer
41 int32_t ActiveAudioLayer(AudioLayer* audioLayer) const override;
42
43 // Full-duplex transportation of PCM audio
45 webrtc::AudioTransport* audio_callback) override;
46
47 // Main initialization and termination
48 int32_t Init() override;
49 int32_t Terminate() override;
50 bool Initialized() const override;
51
52 // Device enumeration
53 int16_t PlayoutDevices() override;
54 int16_t RecordingDevices() override;
55 int32_t PlayoutDeviceName(uint16_t index,
56 char name[webrtc::kAdmMaxDeviceNameSize],
57 char guid[webrtc::kAdmMaxGuidSize]) override;
58 int32_t RecordingDeviceName(uint16_t index,
59 char name[webrtc::kAdmMaxDeviceNameSize],
60 char guid[webrtc::kAdmMaxGuidSize]) override;
61
62 // Device selection
63 int32_t SetPlayoutDevice(uint16_t index) override;
64 int32_t SetPlayoutDevice(WindowsDeviceType device) override;
65 int32_t SetRecordingDevice(uint16_t index) override;
66 int32_t SetRecordingDevice(WindowsDeviceType device) override;
67
68 // Audio transport initialization
69 int32_t PlayoutIsAvailable(bool* available) override;
70 int32_t InitPlayout() override;
71 bool PlayoutIsInitialized() const override;
72 int32_t RecordingIsAvailable(bool* available) override;
73 int32_t InitRecording() override;
74 bool RecordingIsInitialized() const override;
75
76 // Audio transport control
77 int32_t StartPlayout() override;
78 int32_t StopPlayout() override;
79 bool Playing() const override;
80 int32_t StartRecording() override;
81 int32_t StopRecording() override;
82 bool Recording() const override;
83
84 // Audio mixer initialization
85 int32_t InitSpeaker() override;
86 bool SpeakerIsInitialized() const override;
87 int32_t InitMicrophone() override;
88 bool MicrophoneIsInitialized() const override;
89
90 // Speaker volume controls
91 int32_t SpeakerVolumeIsAvailable(bool* available) override;
92 int32_t SetSpeakerVolume(uint32_t volume) override;
93 int32_t SpeakerVolume(uint32_t* volume) const override;
94 int32_t MaxSpeakerVolume(uint32_t* maxVolume) const override;
95 int32_t MinSpeakerVolume(uint32_t* minVolume) const override;
96
97 // Microphone volume controls
98 int32_t MicrophoneVolumeIsAvailable(bool* available) override;
99 int32_t SetMicrophoneVolume(uint32_t volume) override;
100 int32_t MicrophoneVolume(uint32_t* volume) const override;
101 int32_t MaxMicrophoneVolume(uint32_t* maxVolume) const override;
102 int32_t MinMicrophoneVolume(uint32_t* minVolume) const override;
103
104 // Speaker mute control
105 int32_t SpeakerMuteIsAvailable(bool* available) override;
106 int32_t SetSpeakerMute(bool enable) override;
107 int32_t SpeakerMute(bool* enabled) const override;
108
109 // Microphone mute control
110 int32_t MicrophoneMuteIsAvailable(bool* available) override;
111 int32_t SetMicrophoneMute(bool enable) override;
112 int32_t MicrophoneMute(bool* enabled) const override;
113
114 // Stereo support
115 int32_t StereoPlayoutIsAvailable(bool* available) const override;
116 int32_t SetStereoPlayout(bool enable) override;
117 int32_t StereoPlayout(bool* enabled) const override;
118 int32_t StereoRecordingIsAvailable(bool* available) const override;
119 int32_t SetStereoRecording(bool enable) override;
120 int32_t StereoRecording(bool* enabled) const override;
121
122 // Playout delay
123 int32_t PlayoutDelay(uint16_t* delayMS) const override;
124
125 // Only supported on Android.
126 bool BuiltInAECIsAvailable() const override;
127 bool BuiltInAGCIsAvailable() const override;
128 bool BuiltInNSIsAvailable() const override;
129
130 // Enables the built-in audio effects. Only supported on Android.
131 int32_t EnableBuiltInAEC(bool enable) override;
132 int32_t EnableBuiltInAGC(bool enable) override;
133 int32_t EnableBuiltInNS(bool enable) override;
134
135 // Play underrun count. Only supported on Android (guest).
136 int32_t GetPlayoutUnderrunCount() const override;
137
138 private:
139 webrtc::AudioTransport* audio_callback_ = nullptr;
142 std::atomic<bool> playing_ = false;
143 std::atomic<bool> recording_ = false;
144};
145} // namespace webrtc_streaming
146} // namespace cuttlefish
Definition: audio_source.h:26
bool BuiltInAECIsAvailable() const override
Definition: audio_device.cpp:233
int32_t StereoPlayout(bool *enabled) const override
Definition: audio_device.cpp:206
int32_t SetSpeakerVolume(uint32_t volume) override
Definition: audio_device.cpp:154
int32_t RecordingDeviceName(uint16_t index, char name[webrtc::kAdmMaxDeviceNameSize], char guid[webrtc::kAdmMaxGuidSize]) override
Definition: audio_device.cpp:84
int32_t SpeakerMute(bool *enabled) const override
Definition: audio_device.cpp:187
int32_t StartPlayout() override
Definition: audio_device.cpp:124
int32_t InitSpeaker() override
Definition: audio_device.cpp:144
int32_t PlayoutIsAvailable(bool *available) override
Definition: audio_device.cpp:110
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:29
int32_t MinMicrophoneVolume(uint32_t *minVolume) const override
Definition: audio_device.cpp:177
int32_t SpeakerVolume(uint32_t *volume) const override
Definition: audio_device.cpp:155
bool stereo_recording_enabled_
Definition: audio_device.h:141
int32_t EnableBuiltInAEC(bool enable) override
Definition: audio_device.cpp:238
int32_t StopRecording() override
Definition: audio_device.cpp:137
int32_t Init() override
Definition: audio_device.cpp:63
int32_t Terminate() override
Definition: audio_device.cpp:64
int32_t SpeakerMuteIsAvailable(bool *available) override
Definition: audio_device.cpp:182
int32_t StereoPlayoutIsAvailable(bool *available) const override
Definition: audio_device.cpp:198
int32_t EnableBuiltInNS(bool enable) override
Definition: audio_device.cpp:240
int32_t ActiveAudioLayer(AudioLayer *audioLayer) const override
Definition: audio_device.cpp:51
bool stereo_playout_enabled_
Definition: audio_device.h:140
int32_t SetSpeakerMute(bool enable) override
Definition: audio_device.cpp:186
bool PlayoutIsInitialized() const override
Definition: audio_device.cpp:115
bool MicrophoneIsInitialized() const override
Definition: audio_device.cpp:147
int16_t RecordingDevices() override
Definition: audio_device.cpp:69
int32_t InitMicrophone() override
Definition: audio_device.cpp:146
int32_t InitRecording() override
Definition: audio_device.cpp:120
bool RecordingIsInitialized() const override
Definition: audio_device.cpp:121
int32_t MaxSpeakerVolume(uint32_t *maxVolume) const override
Definition: audio_device.cpp:158
CfAudioDeviceModule()
Definition: audio_device.cpp:27
int32_t StopPlayout() override
Definition: audio_device.cpp:128
bool Recording() const override
Definition: audio_device.cpp:141
int16_t PlayoutDevices() override
Definition: audio_device.cpp:68
int32_t MicrophoneMuteIsAvailable(bool *available) override
Definition: audio_device.cpp:190
int32_t MicrophoneMute(bool *enabled) const override
Definition: audio_device.cpp:195
std::atomic< bool > playing_
Definition: audio_device.h:142
bool BuiltInNSIsAvailable() const override
Definition: audio_device.cpp:235
int32_t StereoRecording(bool *enabled) const override
Definition: audio_device.cpp:218
int32_t MicrophoneVolumeIsAvailable(bool *available) override
Definition: audio_device.cpp:166
int32_t MaxMicrophoneVolume(uint32_t *maxVolume) const override
Definition: audio_device.cpp:174
int32_t InitPlayout() override
Definition: audio_device.cpp:114
webrtc::AudioTransport * audio_callback_
Definition: audio_device.h:139
bool BuiltInAGCIsAvailable() const override
Definition: audio_device.cpp:234
int32_t StereoRecordingIsAvailable(bool *available) const override
Definition: audio_device.cpp:210
int32_t SetRecordingDevice(uint16_t index) override
Definition: audio_device.cpp:104
int32_t GetPlayoutUnderrunCount() const override
Definition: audio_device.cpp:242
int32_t MinSpeakerVolume(uint32_t *minVolume) const override
Definition: audio_device.cpp:161
bool Playing() const override
Definition: audio_device.cpp:132
int32_t SpeakerVolumeIsAvailable(bool *available) override
Definition: audio_device.cpp:150
int32_t RegisterAudioCallback(webrtc::AudioTransport *audio_callback) override
Definition: audio_device.cpp:56
int32_t SetStereoRecording(bool enable) override
Definition: audio_device.cpp:214
int32_t SetMicrophoneVolume(uint32_t volume) override
Definition: audio_device.cpp:170
int32_t PlayoutDeviceName(uint16_t index, char name[webrtc::kAdmMaxDeviceNameSize], char guid[webrtc::kAdmMaxGuidSize]) override
Definition: audio_device.cpp:70
int32_t SetPlayoutDevice(uint16_t index) override
Definition: audio_device.cpp:100
bool SpeakerIsInitialized() const override
Definition: audio_device.cpp:145
std::atomic< bool > recording_
Definition: audio_device.h:143
int32_t StartRecording() override
Definition: audio_device.cpp:133
int32_t MicrophoneVolume(uint32_t *volume) const override
Definition: audio_device.cpp:171
int32_t PlayoutDelay(uint16_t *delayMS) const override
Definition: audio_device.cpp:224
int32_t SetStereoPlayout(bool enable) override
Definition: audio_device.cpp:202
int32_t SetMicrophoneMute(bool enable) override
Definition: audio_device.cpp:194
bool Initialized() const override
Definition: audio_device.cpp:65
int32_t RecordingIsAvailable(bool *available) override
Definition: audio_device.cpp:116
int32_t EnableBuiltInAGC(bool enable) override
Definition: audio_device.cpp:239
#define data
Definition: dict.c:56
char * name
Definition: libf2fs.c:1403
Definition: alloc_driver.h:20