Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Unified Diff: remoting/host/client_session.cc

Issue 866863004: Replace AudioScheduler with AudioPump. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mouse_cursor_pipe
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/host/client_session.cc
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc
index cf6f129ea3eb5e16ddf951b5089d14db053228a7..aa3b43b878444ac98994fd288e5c049f2c9268af 100644
--- a/remoting/host/client_session.cc
+++ b/remoting/host/client_session.cc
@@ -16,7 +16,7 @@
#include "remoting/codec/video_encoder_verbatim.h"
#include "remoting/codec/video_encoder_vpx.h"
#include "remoting/host/audio_capturer.h"
-#include "remoting/host/audio_scheduler.h"
+#include "remoting/host/audio_pump.h"
#include "remoting/host/desktop_capturer_proxy.h"
#include "remoting/host/desktop_environment.h"
#include "remoting/host/host_extension_session.h"
@@ -38,6 +38,40 @@ const int kDefaultDPI = 96;
namespace remoting {
+namespace {
+
+scoped_ptr<VideoEncoder> CreateVideoEncoder(
+ const protocol::SessionConfig& config) {
+ const protocol::ChannelConfig& video_config = config.video_config();
+
+ if (video_config.codec == protocol::ChannelConfig::CODEC_VP8) {
+ return VideoEncoderVpx::CreateForVP8().Pass();
+ } else if (video_config.codec == protocol::ChannelConfig::CODEC_VP9) {
+ return VideoEncoderVpx::CreateForVP9().Pass();
+ } else if (video_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) {
+ return make_scoped_ptr(new VideoEncoderVerbatim());
+ }
+
+ NOTREACHED();
+ return nullptr;
+}
+
+scoped_ptr<AudioEncoder> CreateAudioEncoder(
+ const protocol::SessionConfig& config) {
+ const protocol::ChannelConfig& audio_config = config.audio_config();
+
+ if (audio_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) {
+ return make_scoped_ptr(new AudioEncoderVerbatim());
+ } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) {
+ return make_scoped_ptr(new AudioEncoderOpus());
+ }
+
+ NOTREACHED();
+ return nullptr;
+}
+
+} // namespace
+
ClientSession::ClientSession(
EventHandler* event_handler,
scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
@@ -100,11 +134,11 @@ ClientSession::ClientSession(
ClientSession::~ClientSession() {
DCHECK(CalledOnValidThread());
- DCHECK(!audio_scheduler_.get());
+ DCHECK(!audio_pump_);
DCHECK(!desktop_environment_);
DCHECK(!input_injector_);
DCHECK(!screen_controls_);
- DCHECK(!video_frame_pump_.get());
+ DCHECK(!video_frame_pump_);
connection_.reset();
}
@@ -170,8 +204,8 @@ void ClientSession::ControlAudio(const protocol::AudioControl& audio_control) {
if (audio_control.has_enable()) {
VLOG(1) << "Received AudioControl (enable="
<< audio_control.enable() << ")";
- if (audio_scheduler_.get())
- audio_scheduler_->Pause(!audio_control.enable());
+ if (audio_pump_)
+ audio_pump_->Pause(!audio_control.enable());
}
}
@@ -249,11 +283,11 @@ void ClientSession::OnConnectionAuthenticated(
protocol::ConnectionToClient* connection) {
DCHECK(CalledOnValidThread());
DCHECK_EQ(connection_.get(), connection);
- DCHECK(!audio_scheduler_.get());
+ DCHECK(!audio_pump_);
DCHECK(!desktop_environment_);
DCHECK(!input_injector_);
DCHECK(!screen_controls_);
- DCHECK(!video_frame_pump_.get());
+ DCHECK(!video_frame_pump_);
auth_input_filter_.set_enabled(true);
auth_clipboard_filter_.set_enabled(true);
@@ -299,18 +333,6 @@ void ClientSession::OnConnectionAuthenticated(
host_input_filter_.set_input_stub(input_injector_.get());
clipboard_echo_filter_.set_host_stub(input_injector_.get());
- // Create an AudioScheduler if audio is enabled, to pump audio samples.
- if (connection_->session()->config().is_audio_enabled()) {
- scoped_ptr<AudioEncoder> audio_encoder =
- CreateAudioEncoder(connection_->session()->config());
- audio_scheduler_ = new AudioScheduler(
- audio_task_runner_,
- network_task_runner_,
- desktop_environment_->CreateAudioCapturer(),
- audio_encoder.Pass(),
- connection_->audio_stub());
- }
-
// Create a GnubbyAuthHandler to proxy gnubbyd messages.
gnubby_auth_handler_ = desktop_environment_->CreateGnubbyAuthHandler(
connection_->client_stub());
@@ -335,9 +357,14 @@ void ClientSession::OnConnectionChannelsConnected(
// Start recording video.
ResetVideoPipeline();
- // Start recording audio.
- if (connection_->session()->config().is_audio_enabled())
- audio_scheduler_->Start();
+ // Create an AudioPump if audio is enabled, to pump audio samples.
+ if (connection_->session()->config().is_audio_enabled()) {
+ scoped_ptr<AudioEncoder> audio_encoder =
+ CreateAudioEncoder(connection_->session()->config());
+ audio_pump_.reset(new AudioPump(
+ audio_task_runner_, desktop_environment_->CreateAudioCapturer(),
+ audio_encoder.Pass(), connection_->audio_stub()));
+ }
// Notify the event handler that all our channels are now connected.
event_handler_->OnSessionChannelsConnected(this);
@@ -367,14 +394,9 @@ void ClientSession::OnConnectionClosed(
// Stop components access the client, audio or video stubs, which are no
// longer valid once ConnectionToClient calls OnConnectionClosed().
- if (audio_scheduler_.get()) {
- audio_scheduler_->Stop();
- audio_scheduler_ = nullptr;
- }
-
+ audio_pump_.reset();
video_frame_pump_.reset();
mouse_shape_pump_.reset();
-
client_clipboard_factory_.InvalidateWeakPtrs();
input_injector_.reset();
screen_controls_.reset();
@@ -490,37 +512,4 @@ scoped_ptr<protocol::ClipboardStub> ClientSession::CreateClipboardProxy() {
base::MessageLoopProxy::current()));
}
-// TODO(sergeyu): Move this to SessionManager?
-// static
-scoped_ptr<VideoEncoder> ClientSession::CreateVideoEncoder(
- const protocol::SessionConfig& config) {
- const protocol::ChannelConfig& video_config = config.video_config();
-
- if (video_config.codec == protocol::ChannelConfig::CODEC_VP8) {
- return remoting::VideoEncoderVpx::CreateForVP8().Pass();
- } else if (video_config.codec == protocol::ChannelConfig::CODEC_VP9) {
- return remoting::VideoEncoderVpx::CreateForVP9().Pass();
- } else if (video_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) {
- return make_scoped_ptr(new remoting::VideoEncoderVerbatim());
- }
-
- NOTREACHED();
- return nullptr;
-}
-
-// static
-scoped_ptr<AudioEncoder> ClientSession::CreateAudioEncoder(
- const protocol::SessionConfig& config) {
- const protocol::ChannelConfig& audio_config = config.audio_config();
-
- if (audio_config.codec == protocol::ChannelConfig::CODEC_VERBATIM) {
- return make_scoped_ptr(new AudioEncoderVerbatim());
- } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) {
- return make_scoped_ptr(new AudioEncoderOpus());
- }
-
- NOTREACHED();
- return nullptr;
-}
-
} // namespace remoting

Powered by Google App Engine
This is Rietveld 408576698