1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
content / public / browser / audio_stream_broker.h [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_PUBLIC_BROWSER_AUDIO_STREAM_BROKER_H_
#define CONTENT_PUBLIC_BROWSER_AUDIO_STREAM_BROKER_H_
#include <cstdint>
#include <memory>
#include <string>
#include "base/functional/callback.h"
#include "content/common/content_export.h"
#include "media/mojo/mojom/audio_output_stream.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "third_party/blink/public/mojom/media/renderer_audio_input_stream_factory.mojom.h"
namespace base {
class UnguessableToken;
}
namespace media {
class AudioParameters;
class UserInputMonitorBase;
namespace mojom {
class AudioStreamFactory;
}
} // namespace media
namespace content {
// An AudioStreamBroker is used to broker a connection between a client
// (typically renderer) and the audio service. It also sets up all objects
// used for monitoring the stream. All AudioStreamBrokers are used on the IO
// thread.
class CONTENT_EXPORT AudioStreamBroker {
public:
class CONTENT_EXPORT LoopbackSink {
public:
LoopbackSink();
LoopbackSink(const LoopbackSink&) = delete;
LoopbackSink& operator=(const LoopbackSink&) = delete;
virtual ~LoopbackSink();
virtual void OnSourceGone() = 0;
};
class CONTENT_EXPORT LoopbackSource {
public:
LoopbackSource();
LoopbackSource(const LoopbackSource&) = delete;
LoopbackSource& operator=(const LoopbackSource&) = delete;
virtual ~LoopbackSource();
virtual void AddLoopbackSink(LoopbackSink* sink) = 0;
virtual void RemoveLoopbackSink(LoopbackSink* sink) = 0;
virtual const base::UnguessableToken& GetGroupID() = 0;
};
using DeleterCallback = base::OnceCallback<void(AudioStreamBroker*)>;
AudioStreamBroker(int render_process_id, int render_frame_id);
AudioStreamBroker(const AudioStreamBroker&) = delete;
AudioStreamBroker& operator=(const AudioStreamBroker&) = delete;
virtual ~AudioStreamBroker();
virtual void CreateStream(media::mojom::AudioStreamFactory* factory) = 0;
int render_process_id() const { return render_process_id_; }
int render_frame_id() const { return render_frame_id_; }
protected:
const int render_process_id_;
const int render_frame_id_;
};
// Used for dependency injection into ForwardingAudioStreamFactory. Used on the
// IO thread.
class CONTENT_EXPORT AudioStreamBrokerFactory {
public:
static std::unique_ptr<AudioStreamBrokerFactory> CreateImpl();
AudioStreamBrokerFactory();
AudioStreamBrokerFactory(const AudioStreamBrokerFactory&) = delete;
AudioStreamBrokerFactory& operator=(const AudioStreamBrokerFactory&) = delete;
virtual ~AudioStreamBrokerFactory();
virtual std::unique_ptr<AudioStreamBroker> CreateAudioInputStreamBroker(
int render_process_id,
int render_frame_id,
const std::string& device_id,
const media::AudioParameters& params,
uint32_t shared_memory_count,
media::UserInputMonitorBase* user_input_monitor,
bool enable_agc,
media::mojom::AudioProcessingConfigPtr processing_config,
AudioStreamBroker::DeleterCallback deleter,
mojo::PendingRemote<blink::mojom::RendererAudioInputStreamFactoryClient>
renderer_factory_client) = 0;
virtual std::unique_ptr<AudioStreamBroker> CreateAudioLoopbackStreamBroker(
int render_process_id,
int render_frame_id,
AudioStreamBroker::LoopbackSource* source,
const media::AudioParameters& params,
uint32_t shared_memory_count,
bool mute_source,
AudioStreamBroker::DeleterCallback deleter,
mojo::PendingRemote<blink::mojom::RendererAudioInputStreamFactoryClient>
renderer_factory_client) = 0;
virtual std::unique_ptr<AudioStreamBroker> CreateAudioOutputStreamBroker(
int render_process_id,
int render_frame_id,
int stream_id,
const std::string& output_device_id,
const media::AudioParameters& params,
const base::UnguessableToken& group_id,
AudioStreamBroker::DeleterCallback deleter,
mojo::PendingRemote<media::mojom::AudioOutputStreamProviderClient>
client) = 0;
};
} // namespace content
#endif // CONTENT_PUBLIC_BROWSER_AUDIO_STREAM_BROKER_H_