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() { |