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

Side by Side Diff: remoting/host/client_session.cc

Issue 372943002: Add video frame recording capability to Chromoting hosts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Working implementation. Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/host/client_session.h" 5 #include "remoting/host/client_session.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/message_loop/message_loop_proxy.h" 9 #include "base/message_loop/message_loop_proxy.h"
10 #include "remoting/base/capabilities.h" 10 #include "remoting/base/capabilities.h"
11 #include "remoting/base/logging.h" 11 #include "remoting/base/logging.h"
12 #include "remoting/codec/audio_encoder.h" 12 #include "remoting/codec/audio_encoder.h"
13 #include "remoting/codec/audio_encoder_opus.h" 13 #include "remoting/codec/audio_encoder_opus.h"
14 #include "remoting/codec/audio_encoder_verbatim.h" 14 #include "remoting/codec/audio_encoder_verbatim.h"
15 #include "remoting/codec/video_encoder.h" 15 #include "remoting/codec/video_encoder.h"
16 #include "remoting/codec/video_encoder_verbatim.h" 16 #include "remoting/codec/video_encoder_verbatim.h"
17 #include "remoting/codec/video_encoder_vpx.h" 17 #include "remoting/codec/video_encoder_vpx.h"
18 #include "remoting/host/audio_capturer.h" 18 #include "remoting/host/audio_capturer.h"
19 #include "remoting/host/audio_scheduler.h" 19 #include "remoting/host/audio_scheduler.h"
20 #include "remoting/host/desktop_environment.h" 20 #include "remoting/host/desktop_environment.h"
21 #include "remoting/host/host_extension_session.h" 21 #include "remoting/host/host_extension_session.h"
22 #include "remoting/host/input_injector.h" 22 #include "remoting/host/input_injector.h"
23 #include "remoting/host/screen_controls.h" 23 #include "remoting/host/screen_controls.h"
24 #include "remoting/host/screen_resolution.h" 24 #include "remoting/host/screen_resolution.h"
25 #include "remoting/host/video_frame_recorder.h"
25 #include "remoting/host/video_scheduler.h" 26 #include "remoting/host/video_scheduler.h"
26 #include "remoting/proto/control.pb.h" 27 #include "remoting/proto/control.pb.h"
27 #include "remoting/proto/event.pb.h" 28 #include "remoting/proto/event.pb.h"
28 #include "remoting/protocol/client_stub.h" 29 #include "remoting/protocol/client_stub.h"
29 #include "remoting/protocol/clipboard_thread_proxy.h" 30 #include "remoting/protocol/clipboard_thread_proxy.h"
30 #include "remoting/protocol/pairing_registry.h" 31 #include "remoting/protocol/pairing_registry.h"
31 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" 32 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
32 33
33 // Default DPI to assume for old clients that use notifyClientDimensions. 34 // Default DPI to assume for old clients that use notifyClientDimensions.
34 const int kDefaultDPI = 96; 35 const int kDefaultDPI = 96;
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 input_injector_ = desktop_environment_->CreateInputInjector(); 312 input_injector_ = desktop_environment_->CreateInputInjector();
312 313
313 // Connect the host clipboard and input stubs. 314 // Connect the host clipboard and input stubs.
314 host_input_filter_.set_input_stub(input_injector_.get()); 315 host_input_filter_.set_input_stub(input_injector_.get());
315 clipboard_echo_filter_.set_host_stub(input_injector_.get()); 316 clipboard_echo_filter_.set_host_stub(input_injector_.get());
316 317
317 // Create a VideoEncoder based on the session's video channel configuration. 318 // Create a VideoEncoder based on the session's video channel configuration.
318 scoped_ptr<VideoEncoder> video_encoder = 319 scoped_ptr<VideoEncoder> video_encoder =
319 CreateVideoEncoder(connection_->session()->config()); 320 CreateVideoEncoder(connection_->session()->config());
320 321
322 // If video recording is enabled, wrap the encoder with the recorder.
323 if (video_frame_recorder_) {
324 video_encoder = video_frame_recorder_->WrapVideoEncoder(
325 video_encoder.Pass());
326 }
327
321 // Create a VideoScheduler to pump frames from the capturer to the client. 328 // Create a VideoScheduler to pump frames from the capturer to the client.
322 video_scheduler_ = new VideoScheduler( 329 video_scheduler_ = new VideoScheduler(
323 video_capture_task_runner_, 330 video_capture_task_runner_,
324 video_encode_task_runner_, 331 video_encode_task_runner_,
325 network_task_runner_, 332 network_task_runner_,
326 desktop_environment_->CreateVideoCapturer(), 333 desktop_environment_->CreateVideoCapturer(),
327 video_encoder.Pass(), 334 video_encoder.Pass(),
328 connection_->client_stub(), 335 connection_->client_stub(),
329 &mouse_clamping_filter_); 336 &mouse_clamping_filter_);
330 337
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 469
463 if (disable_inputs) 470 if (disable_inputs)
464 input_tracker_.ReleaseAll(); 471 input_tracker_.ReleaseAll();
465 472
466 disable_input_filter_.set_enabled(!disable_inputs); 473 disable_input_filter_.set_enabled(!disable_inputs);
467 disable_clipboard_filter_.set_enabled(!disable_inputs); 474 disable_clipboard_filter_.set_enabled(!disable_inputs);
468 } 475 }
469 476
470 void ClientSession::SetGnubbyAuthHandlerForTesting( 477 void ClientSession::SetGnubbyAuthHandlerForTesting(
471 GnubbyAuthHandler* gnubby_auth_handler) { 478 GnubbyAuthHandler* gnubby_auth_handler) {
479 DCHECK(CalledOnValidThread());
472 gnubby_auth_handler_.reset(gnubby_auth_handler); 480 gnubby_auth_handler_.reset(gnubby_auth_handler);
473 } 481 }
474 482
483 void ClientSession::set_video_frame_recorder(
484 scoped_ptr<VideoFrameRecorder> recorder) {
485 DCHECK(CalledOnValidThread());
486 video_frame_recorder_ = recorder.Pass();
487 }
488
489 VideoFrameRecorder* ClientSession::video_frame_recorder() const {
490 return video_frame_recorder_.get();
491 }
492
475 scoped_ptr<protocol::ClipboardStub> ClientSession::CreateClipboardProxy() { 493 scoped_ptr<protocol::ClipboardStub> ClientSession::CreateClipboardProxy() {
476 DCHECK(CalledOnValidThread()); 494 DCHECK(CalledOnValidThread());
477 495
478 return scoped_ptr<protocol::ClipboardStub>( 496 return scoped_ptr<protocol::ClipboardStub>(
479 new protocol::ClipboardThreadProxy( 497 new protocol::ClipboardThreadProxy(
480 client_clipboard_factory_.GetWeakPtr(), 498 client_clipboard_factory_.GetWeakPtr(),
481 base::MessageLoopProxy::current())); 499 base::MessageLoopProxy::current()));
482 } 500 }
483 501
484 // TODO(sergeyu): Move this to SessionManager? 502 // TODO(sergeyu): Move this to SessionManager?
(...skipping 21 matching lines...) Expand all
506 return scoped_ptr<AudioEncoder>(new AudioEncoderVerbatim()); 524 return scoped_ptr<AudioEncoder>(new AudioEncoderVerbatim());
507 } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) { 525 } else if (audio_config.codec == protocol::ChannelConfig::CODEC_OPUS) {
508 return scoped_ptr<AudioEncoder>(new AudioEncoderOpus()); 526 return scoped_ptr<AudioEncoder>(new AudioEncoderOpus());
509 } 527 }
510 528
511 NOTREACHED(); 529 NOTREACHED();
512 return scoped_ptr<AudioEncoder>(); 530 return scoped_ptr<AudioEncoder>();
513 } 531 }
514 532
515 } // namespace remoting 533 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698