| Index: remoting/protocol/ice_connection_to_client.cc
|
| diff --git a/remoting/protocol/ice_connection_to_client.cc b/remoting/protocol/ice_connection_to_client.cc
|
| index 4a7dcf3720a328fd38133f508b525f8c231c48c7..4742f19a38ad2972628016fefe021c8e2a6c873b 100644
|
| --- a/remoting/protocol/ice_connection_to_client.cc
|
| +++ b/remoting/protocol/ice_connection_to_client.cc
|
| @@ -10,7 +10,11 @@
|
| #include "base/location.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "net/base/io_buffer.h"
|
| +#include "remoting/codec/audio_encoder.h"
|
| +#include "remoting/codec/audio_encoder_opus.h"
|
| #include "remoting/codec/video_encoder.h"
|
| +#include "remoting/protocol/audio_pump.h"
|
| +#include "remoting/protocol/audio_source.h"
|
| #include "remoting/protocol/audio_writer.h"
|
| #include "remoting/protocol/clipboard_stub.h"
|
| #include "remoting/protocol/host_control_dispatcher.h"
|
| @@ -24,13 +28,31 @@
|
| namespace remoting {
|
| namespace protocol {
|
|
|
| +namespace {
|
| +
|
| +std::unique_ptr<AudioEncoder> CreateAudioEncoder(
|
| + const protocol::SessionConfig& config) {
|
| + const protocol::ChannelConfig& audio_config = config.audio_config();
|
| +
|
| + if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) {
|
| + return base::WrapUnique(new AudioEncoderOpus());
|
| + }
|
| +
|
| + NOTREACHED();
|
| + return nullptr;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| IceConnectionToClient::IceConnectionToClient(
|
| std::unique_ptr<protocol::Session> session,
|
| scoped_refptr<TransportContext> transport_context,
|
| - scoped_refptr<base::SingleThreadTaskRunner> video_encode_task_runner)
|
| + scoped_refptr<base::SingleThreadTaskRunner> video_encode_task_runner,
|
| + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner)
|
| : event_handler_(nullptr),
|
| session_(std::move(session)),
|
| video_encode_task_runner_(video_encode_task_runner),
|
| + audio_task_runner_(audio_task_runner),
|
| transport_(transport_context, this),
|
| control_dispatcher_(new HostControlDispatcher()),
|
| event_dispatcher_(new HostEventDispatcher()),
|
| @@ -79,9 +101,20 @@ std::unique_ptr<VideoStream> IceConnectionToClient::StartVideoStream(
|
| return std::move(pump);
|
| }
|
|
|
| -AudioStub* IceConnectionToClient::audio_stub() {
|
| +std::unique_ptr<AudioStream> IceConnectionToClient::StartAudioStream(
|
| + std::unique_ptr<AudioSource> audio_source) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - return audio_writer_.get();
|
| +
|
| + // Audio channel is disabled.
|
| + if (!audio_writer_)
|
| + return nullptr;
|
| +
|
| + std::unique_ptr<AudioEncoder> audio_encoder =
|
| + CreateAudioEncoder(session_->config());
|
| +
|
| + return base::WrapUnique(
|
| + new AudioPump(audio_task_runner_, std::move(audio_source),
|
| + std::move(audio_encoder), audio_writer_.get()));
|
| }
|
|
|
| // Return pointer to ClientStub.
|
| @@ -190,7 +223,7 @@ void IceConnectionToClient::NotifyIfChannelsReady() {
|
| return;
|
| }
|
| event_handler_->OnConnectionChannelsConnected(this);
|
| - event_handler_->CreateVideoStreams(this);
|
| + event_handler_->CreateMediaStreams(this);
|
| }
|
|
|
| void IceConnectionToClient::CloseChannels() {
|
|
|