15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "remoting/protocol/monitored_video_stub.h" 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/bind.h" 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/logging.h" 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "remoting/codec/video_decoder.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "remoting/codec/video_decoder_verbatim.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "remoting/codec/video_decoder_vpx.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace remoting { 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace protocol { 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuMonitoredVideoStub::MonitoredVideoStub(VideoStub* video_stub, 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::TimeDelta connectivity_check_delay, 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const ChannelStateCallback& callback) 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : video_stub_(video_stub), 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu callback_(callback), 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu is_connected_(false), 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu connectivity_check_timer_( 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FROM_HERE, 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu connectivity_check_delay, 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this, 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu &MonitoredVideoStub::OnConnectivityCheckTimeout) { 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuMonitoredVideoStub::~MonitoredVideoStub() { 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid MonitoredVideoStub::ProcessVideoPacket(scoped_ptr<VideoPacket> packet, 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::Closure& done) { 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DCHECK(thread_checker_.CalledOnValidThread()); 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu connectivity_check_timer_.Reset(); 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NotifyChannelState(true); 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu video_stub_->ProcessVideoPacket(packet.Pass(), done); 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid MonitoredVideoStub::OnConnectivityCheckTimeout() { 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DCHECK(thread_checker_.CalledOnValidThread()); 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NotifyChannelState(false); 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid MonitoredVideoStub::NotifyChannelState(bool connected) { 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (is_connected_ != connected) { 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu is_connected_ = connected; 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu callback_.Run(is_connected_); 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace protocol 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace remoting 57