| Index: remoting/host/cast_video_capturer_adapter.cc
|
| diff --git a/remoting/host/cast_video_capturer_adapter.cc b/remoting/host/cast_video_capturer_adapter.cc
|
| deleted file mode 100644
|
| index 2c29663005691fc11f383f7929db52e12973cbc6..0000000000000000000000000000000000000000
|
| --- a/remoting/host/cast_video_capturer_adapter.cc
|
| +++ /dev/null
|
| @@ -1,195 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "remoting/host/cast_video_capturer_adapter.h"
|
| -
|
| -#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
|
| -
|
| -namespace remoting {
|
| -
|
| -// Number of frames to be captured per second.
|
| -const int kFramesPerSec = 10;
|
| -
|
| -CastVideoCapturerAdapter::CastVideoCapturerAdapter(
|
| - scoped_ptr<webrtc::DesktopCapturer> capturer)
|
| - : desktop_capturer_(capturer.Pass()) {
|
| - DCHECK(desktop_capturer_);
|
| -
|
| - thread_checker_.DetachFromThread();
|
| -
|
| - // Disable video adaptation since we don't intend to use it.
|
| - set_enable_video_adapter(false);
|
| -}
|
| -
|
| -CastVideoCapturerAdapter::~CastVideoCapturerAdapter() {
|
| - DCHECK(!capture_timer_);
|
| -}
|
| -
|
| -webrtc::SharedMemory* CastVideoCapturerAdapter::CreateSharedMemory(
|
| - size_t size) {
|
| - return nullptr;
|
| -}
|
| -
|
| -void CastVideoCapturerAdapter::OnCaptureCompleted(webrtc::DesktopFrame* frame) {
|
| - scoped_ptr<webrtc::DesktopFrame> owned_frame(frame);
|
| -
|
| - // Drop the owned_frame if there were no changes.
|
| - if (!owned_frame || owned_frame->updated_region().is_empty()) {
|
| - owned_frame.reset();
|
| - return;
|
| - }
|
| -
|
| - // Convert the webrtc::DesktopFrame to a cricket::CapturedFrame.
|
| - cricket::CapturedFrame captured_frame;
|
| - captured_frame.width = owned_frame->size().width();
|
| - captured_frame.height = owned_frame->size().height();
|
| - base::TimeTicks current_time = base::TimeTicks::Now();
|
| - captured_frame.time_stamp =
|
| - current_time.ToInternalValue() * base::Time::kNanosecondsPerMicrosecond;
|
| - captured_frame.data = owned_frame->data();
|
| -
|
| - // The data_size attribute must be set. If multiple formats are supported,
|
| - // this should be set appropriately for each one.
|
| - captured_frame.data_size =
|
| - (captured_frame.width * webrtc::DesktopFrame::kBytesPerPixel * 8 + 7) /
|
| - 8 * captured_frame.height;
|
| - captured_frame.fourcc = cricket::FOURCC_ARGB;
|
| -
|
| - SignalFrameCaptured(this, &captured_frame);
|
| -}
|
| -
|
| -bool CastVideoCapturerAdapter::GetBestCaptureFormat(
|
| - const cricket::VideoFormat& desired,
|
| - cricket::VideoFormat* best_format) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - // For now, just used the desired width and height.
|
| - best_format->width = desired.width;
|
| - best_format->height = desired.height;
|
| - best_format->fourcc = cricket::FOURCC_ARGB;
|
| - best_format->interval = FPS_TO_INTERVAL(kFramesPerSec);
|
| - return true;
|
| -}
|
| -
|
| -cricket::CaptureState CastVideoCapturerAdapter::Start(
|
| - const cricket::VideoFormat& capture_format) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(!capture_timer_);
|
| - DCHECK_EQ(capture_format.fourcc, (static_cast<uint32>(cricket::FOURCC_ARGB)));
|
| -
|
| - if (!desktop_capturer_) {
|
| - VLOG(1) << "CastVideoCapturerAdapter failed to start.";
|
| - return cricket::CS_FAILED;
|
| - }
|
| -
|
| - // This is required to tell the cricket::VideoCapturer base class what the
|
| - // capture format will be.
|
| - SetCaptureFormat(&capture_format);
|
| -
|
| - desktop_capturer_->Start(this);
|
| -
|
| - capture_timer_.reset(new base::RepeatingTimer());
|
| - capture_timer_->Start(FROM_HERE,
|
| - base::TimeDelta::FromMicroseconds(
|
| - GetCaptureFormat()->interval /
|
| - (base::Time::kNanosecondsPerMicrosecond)),
|
| - this,
|
| - &CastVideoCapturerAdapter::CaptureNextFrame);
|
| -
|
| - return cricket::CS_RUNNING;
|
| -}
|
| -
|
| -// Similar to the base class implementation with some important differences:
|
| -// 1. Does not call either Stop() or Start(), as those would affect the state of
|
| -// |desktop_capturer_|.
|
| -// 2. Does not support unpausing after stopping the capturer. It is unclear
|
| -// if that flow needs to be supported.
|
| -bool CastVideoCapturerAdapter::Pause(bool pause) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - if (pause) {
|
| - if (capture_state() == cricket::CS_PAUSED)
|
| - return true;
|
| -
|
| - bool running = capture_state() == cricket::CS_STARTING ||
|
| - capture_state() == cricket::CS_RUNNING;
|
| -
|
| - DCHECK_EQ(running, IsRunning());
|
| -
|
| - if (!running) {
|
| - LOG(ERROR)
|
| - << "Cannot pause CastVideoCapturerAdapter.";
|
| - return false;
|
| - }
|
| -
|
| - // Stop |capture_timer_| and set capture state to cricket::CS_PAUSED.
|
| - capture_timer_->Stop();
|
| - SetCaptureState(cricket::CS_PAUSED);
|
| -
|
| - VLOG(1) << "CastVideoCapturerAdapter paused.";
|
| -
|
| - return true;
|
| - } else { // Unpausing.
|
| - if (capture_state() != cricket::CS_PAUSED || !GetCaptureFormat() ||
|
| - !capture_timer_) {
|
| - LOG(ERROR) << "Cannot unpause CastVideoCapturerAdapter.";
|
| - return false;
|
| - }
|
| -
|
| - // Restart |capture_timer_| and set capture state to cricket::CS_RUNNING;
|
| - capture_timer_->Start(FROM_HERE,
|
| - base::TimeDelta::FromMicroseconds(
|
| - GetCaptureFormat()->interval /
|
| - (base::Time::kNanosecondsPerMicrosecond)),
|
| - this,
|
| - &CastVideoCapturerAdapter::CaptureNextFrame);
|
| - SetCaptureState(cricket::CS_RUNNING);
|
| -
|
| - VLOG(1) << "CastVideoCapturerAdapter unpaused.";
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -void CastVideoCapturerAdapter::Stop() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK_NE(capture_state(), cricket::CS_STOPPED);
|
| -
|
| - capture_timer_.reset();
|
| -
|
| - SetCaptureFormat(nullptr);
|
| - SetCaptureState(cricket::CS_STOPPED);
|
| -
|
| - VLOG(1) << "CastVideoCapturerAdapter stopped.";
|
| -}
|
| -
|
| -
|
| -bool CastVideoCapturerAdapter::IsRunning() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - return capture_timer_->IsRunning();
|
| -}
|
| -
|
| -bool CastVideoCapturerAdapter::IsScreencast() const {
|
| - return true;
|
| -}
|
| -
|
| -bool CastVideoCapturerAdapter::GetPreferredFourccs(
|
| - std::vector<uint32>* fourccs) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - if (!fourccs)
|
| - return false;
|
| - fourccs->push_back(cricket::FOURCC_ARGB);
|
| - return true;
|
| -}
|
| -
|
| -void CastVideoCapturerAdapter::CaptureNextFrame() {
|
| - // If we are paused, then don't capture.
|
| - if (!IsRunning())
|
| - return;
|
| -
|
| - desktop_capturer_->Capture(webrtc::DesktopRegion());
|
| -}
|
| -
|
| -} // namespace remoting
|
| -
|
|
|