Chromium Code Reviews| 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..9f65a603f9c30d418bd220e18ca45b29d3bd3ac1 100644 |
| --- a/remoting/protocol/ice_connection_to_client.cc |
| +++ b/remoting/protocol/ice_connection_to_client.cc |
| @@ -10,7 +10,12 @@ |
| #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/audio_encoder_verbatim.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 +29,33 @@ |
| 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_VERBATIM) { |
|
Jamie
2016/08/17 18:17:30
Do we still need to support VERBATIM outside of te
Sergey Ulanov
2016/08/18 00:32:56
Removed verbatim audio codec in this CL. (verbatim
|
| + return base::WrapUnique(new AudioEncoderVerbatim()); |
| + } else 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,11 +104,23 @@ std::unique_ptr<VideoStream> IceConnectionToClient::StartVideoStream( |
| return std::move(pump); |
| } |
| -AudioStub* IceConnectionToClient::audio_stub() { |
| +std::unique_ptr<AudioSendStream> 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. |
| ClientStub* IceConnectionToClient::client_stub() { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| @@ -190,7 +227,7 @@ void IceConnectionToClient::NotifyIfChannelsReady() { |
| return; |
| } |
| event_handler_->OnConnectionChannelsConnected(this); |
| - event_handler_->CreateVideoStreams(this); |
| + event_handler_->CreateMediaStreams(this); |
| } |
| void IceConnectionToClient::CloseChannels() { |