Android-cuttlefish cvd tool
audio_handler.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2020 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 <memory>
20#include <mutex>
21#include <thread>
22#include <vector>
23
27
28namespace cuttlefish {
30 // TODO(jemoreira): This can probably be avoided if playback goes through the
31 // audio device instead.
33 std::vector<uint8_t> buffer;
34 size_t count;
35
36 void Reset(size_t size);
37 size_t Add(const volatile uint8_t* data, size_t max_len);
38 size_t Take(uint8_t* dst, size_t len);
39 bool empty() const;
40 bool full() const;
41 size_t freeCapacity() const;
42 uint8_t* data();
43 uint8_t* end();
44 };
45 struct StreamDesc {
46 std::mutex mtx;
48 int sample_rate = -1;
49 int channels = -1;
50 bool active = false;
52 };
53
54 public:
56 std::unique_ptr<AudioServer> audio_server,
57 std::vector<std::shared_ptr<webrtc_streaming::AudioSink>> audio_sinks,
58 std::shared_ptr<webrtc_streaming::AudioSource> audio_source);
59 ~AudioHandler() override = default;
60
61 void Start();
62
63 // AudioServerExecutor implementation
64 void StreamsInfo(StreamInfoCommand& cmd) override;
66 void PrepareStream(StreamControlCommand& cmd) override;
67 void ReleaseStream(StreamControlCommand& cmd) override;
68 void StartStream(StreamControlCommand& cmd) override;
69 void StopStream(StreamControlCommand& cmd) override;
70 void ChmapsInfo(ChmapInfoCommand& cmd) override;
71 void JacksInfo(JackInfoCommand& cmd) override;
72
73 void OnPlaybackBuffer(TxBuffer buffer) override;
74 void OnCaptureBuffer(RxBuffer buffer) override;
75
76 private:
77 [[noreturn]] void Loop();
78 bool IsCapture(uint32_t stream_id) const;
79
80 std::vector<std::shared_ptr<webrtc_streaming::AudioSink>> audio_sinks_;
81 std::unique_ptr<AudioServer> audio_server_;
82 std::thread server_thread_;
83 std::vector<StreamDesc> stream_descs_ = {};
84 std::shared_ptr<webrtc_streaming::AudioSource> audio_source_;
85 std::vector<virtio_snd_pcm_info> streams_;
86};
87} // namespace cuttlefish
Definition: audio_handler.h:29
void Loop()
Definition: audio_handler.cpp:278
std::shared_ptr< webrtc_streaming::AudioSource > audio_source_
Definition: audio_handler.h:84
void ReleaseStream(StreamControlCommand &cmd) override
Definition: audio_handler.cpp:346
std::thread server_thread_
Definition: audio_handler.h:82
std::vector< StreamDesc > stream_descs_
Definition: audio_handler.h:83
~AudioHandler() override=default
void Start()
Definition: audio_handler.cpp:274
void OnPlaybackBuffer(TxBuffer buffer) override
Definition: audio_handler.cpp:394
void PrepareStream(StreamControlCommand &cmd) override
Definition: audio_handler.cpp:338
std::vector< std::shared_ptr< webrtc_streaming::AudioSink > > audio_sinks_
Definition: audio_handler.h:80
void SetStreamParameters(StreamSetParamsCommand &cmd) override
Definition: audio_handler.cpp:312
std::vector< virtio_snd_pcm_info > streams_
Definition: audio_handler.h:85
void StreamsInfo(StreamInfoCommand &cmd) override
Definition: audio_handler.cpp:301
void OnCaptureBuffer(RxBuffer buffer) override
Definition: audio_handler.cpp:463
void StopStream(StreamControlCommand &cmd) override
Definition: audio_handler.cpp:363
void JacksInfo(JackInfoCommand &cmd) override
Definition: audio_handler.cpp:383
std::unique_ptr< AudioServer > audio_server_
Definition: audio_handler.h:81
void StartStream(StreamControlCommand &cmd) override
Definition: audio_handler.cpp:354
AudioHandler(std::unique_ptr< AudioServer > audio_server, std::vector< std::shared_ptr< webrtc_streaming::AudioSink > > audio_sinks, std::shared_ptr< webrtc_streaming::AudioSource > audio_source)
Definition: audio_handler.cpp:256
bool IsCapture(uint32_t stream_id) const
Definition: audio_handler.cpp:581
void ChmapsInfo(ChmapInfoCommand &cmd) override
Definition: audio_handler.cpp:372
Definition: server.h:31
Definition: commands.h:63
Definition: commands.h:72
Definition: buffers.h:69
Definition: buffers.h:39
Definition: commands.h:81
uint32_t size
Definition: io.h:2
Definition: alloc_utils.cpp:23
Definition: audio_handler.h:32
size_t count
Definition: audio_handler.h:34
uint8_t * data()
Definition: audio_handler.cpp:579
std::vector< uint8_t > buffer
Definition: audio_handler.h:33
void Reset(size_t size)
Definition: audio_handler.cpp:548
bool full() const
Definition: audio_handler.cpp:571
size_t Take(uint8_t *dst, size_t len)
Definition: audio_handler.cpp:561
bool empty() const
Definition: audio_handler.cpp:569
size_t Add(const volatile uint8_t *data, size_t max_len)
Definition: audio_handler.cpp:553
size_t freeCapacity() const
Definition: audio_handler.cpp:575
Definition: audio_handler.h:45
HoldingBuffer buffer
Definition: audio_handler.h:51
int channels
Definition: audio_handler.h:49
std::mutex mtx
Definition: audio_handler.h:46
bool active
Definition: audio_handler.h:50
int bits_per_sample
Definition: audio_handler.h:47
int sample_rate
Definition: audio_handler.h:48
Definition: commands.h:91
Definition: commands.h:103