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

Side by Side Diff: media/remoting/remote_renderer_impl.cc

Issue 2566223005: Media Remoting: Update remoting interstitial when status changes. (Closed)
Patch Set: Rebased only. Created 4 years 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
« no previous file with comments | « media/remoting/remote_renderer_impl.h ('k') | media/remoting/remoting_interstitial_ui.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "media/remoting/remote_renderer_impl.h" 5 #include "media/remoting/remote_renderer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 17 matching lines...) Expand all
28 VideoRendererSink* video_renderer_sink) 28 VideoRendererSink* video_renderer_sink)
29 : state_(STATE_UNINITIALIZED), 29 : state_(STATE_UNINITIALIZED),
30 main_task_runner_(base::ThreadTaskRunnerHandle::Get()), 30 main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
31 media_task_runner_(std::move(media_task_runner)), 31 media_task_runner_(std::move(media_task_runner)),
32 demuxer_stream_provider_(nullptr), 32 demuxer_stream_provider_(nullptr),
33 client_(nullptr), 33 client_(nullptr),
34 remoting_renderer_controller_(remoting_renderer_controller), 34 remoting_renderer_controller_(remoting_renderer_controller),
35 rpc_broker_(remoting_renderer_controller_->GetRpcBroker()), 35 rpc_broker_(remoting_renderer_controller_->GetRpcBroker()),
36 rpc_handle_(rpc_broker_->GetUniqueHandle()), 36 rpc_handle_(rpc_broker_->GetUniqueHandle()),
37 remote_renderer_handle_(remoting::kInvalidHandle), 37 remote_renderer_handle_(remoting::kInvalidHandle),
38 interstitial_ui_(video_renderer_sink, 38 video_renderer_sink_(video_renderer_sink),
39 remoting_renderer_controller->pipeline_metadata()),
40 weak_factory_(this) { 39 weak_factory_(this) {
41 VLOG(2) << __func__; 40 VLOG(2) << __func__;
42 // The constructor is running on the main thread. 41 // The constructor is running on the main thread.
43 DCHECK(remoting_renderer_controller); 42 DCHECK(remoting_renderer_controller_);
44 43 remoting_renderer_controller_->SetShowInterstitialCallback(
45 UpdateInterstitial(); 44 base::Bind(&RemoteRendererImpl::RequestUpdateInterstitialOnMainThread,
45 media_task_runner_, weak_factory_.GetWeakPtr()));
46 46
47 const remoting::RpcBroker::ReceiveMessageCallback receive_callback = 47 const remoting::RpcBroker::ReceiveMessageCallback receive_callback =
48 base::Bind(&RemoteRendererImpl::OnMessageReceivedOnMainThread, 48 base::Bind(&RemoteRendererImpl::OnMessageReceivedOnMainThread,
49 media_task_runner_, weak_factory_.GetWeakPtr()); 49 media_task_runner_, weak_factory_.GetWeakPtr());
50 rpc_broker_->RegisterMessageReceiverCallback(rpc_handle_, receive_callback); 50 rpc_broker_->RegisterMessageReceiverCallback(rpc_handle_, receive_callback);
51 } 51 }
52 52
53 RemoteRendererImpl::~RemoteRendererImpl() { 53 RemoteRendererImpl::~RemoteRendererImpl() {
54 VLOG(2) << __func__; 54 VLOG(2) << __func__;
55 DCHECK(media_task_runner_->BelongsToCurrentThread()); 55 DCHECK(media_task_runner_->BelongsToCurrentThread());
56
57 UpdateInterstitial(interstitial_background_, canvas_size_,
58 RemotingInterstitialType::BETWEEN_SESSIONS);
59
60 // Post task on main thread to unset the interstial callback.
61 main_task_runner_->PostTask(
62 FROM_HERE,
63 base::Bind(&RemotingRendererController::SetShowInterstitialCallback,
64 remoting_renderer_controller_,
65 RemotingRendererController::ShowInterstitialCallback()));
66
56 // Post task on main thread to unregister message receiver. 67 // Post task on main thread to unregister message receiver.
57 main_task_runner_->PostTask( 68 main_task_runner_->PostTask(
58 FROM_HERE, 69 FROM_HERE,
59 base::Bind(&remoting::RpcBroker::UnregisterMessageReceiverCallback, 70 base::Bind(&remoting::RpcBroker::UnregisterMessageReceiverCallback,
60 rpc_broker_, rpc_handle_)); 71 rpc_broker_, rpc_handle_));
61 } 72 }
62 73
63 void RemoteRendererImpl::Initialize( 74 void RemoteRendererImpl::Initialize(
64 DemuxerStreamProvider* demuxer_stream_provider, 75 DemuxerStreamProvider* demuxer_stream_provider,
65 media::RendererClient* client, 76 media::RendererClient* client,
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 void RemoteRendererImpl::OnFatalError(PipelineStatus error) { 601 void RemoteRendererImpl::OnFatalError(PipelineStatus error) {
591 DCHECK(media_task_runner_->BelongsToCurrentThread()); 602 DCHECK(media_task_runner_->BelongsToCurrentThread());
592 DCHECK_NE(PIPELINE_OK, error) << "PIPELINE_OK isn't an error!"; 603 DCHECK_NE(PIPELINE_OK, error) << "PIPELINE_OK isn't an error!";
593 604
594 // An error has already been delivered. 605 // An error has already been delivered.
595 if (state_ == STATE_ERROR) 606 if (state_ == STATE_ERROR)
596 return; 607 return;
597 608
598 VLOG(2) << __func__ << " with PipelineStatus error=" << error; 609 VLOG(2) << __func__ << " with PipelineStatus error=" << error;
599 610
600 main_task_runner_->PostTask(
601 FROM_HERE, base::Bind(&RemoteRendererImpl::UpdateInterstitial,
602 weak_factory_.GetWeakPtr()));
603
604 const State old_state = state_; 611 const State old_state = state_;
605 state_ = STATE_ERROR; 612 state_ = STATE_ERROR;
606 613
607 if (!init_workflow_done_callback_.is_null()) { 614 if (!init_workflow_done_callback_.is_null()) {
608 DCHECK(old_state == STATE_CREATE_PIPE || old_state == STATE_ACQUIRING || 615 DCHECK(old_state == STATE_CREATE_PIPE || old_state == STATE_ACQUIRING ||
609 old_state == STATE_INITIALIZING); 616 old_state == STATE_INITIALIZING);
610 base::ResetAndReturn(&init_workflow_done_callback_).Run(error); 617 base::ResetAndReturn(&init_workflow_done_callback_).Run(error);
611 return; 618 return;
612 } 619 }
613 620
614 if (!flush_cb_.is_null()) 621 if (!flush_cb_.is_null())
615 base::ResetAndReturn(&flush_cb_).Run(); 622 base::ResetAndReturn(&flush_cb_).Run();
616 623
617 // After OnError() returns, the pipeline may destroy |this|. 624 // After OnError() returns, the pipeline may destroy |this|.
618 client_->OnError(error); 625 client_->OnError(error);
619 } 626 }
620 627
621 void RemoteRendererImpl::UpdateInterstitial() { 628 // static
622 DCHECK(main_task_runner_->BelongsToCurrentThread()); 629 void RemoteRendererImpl::RequestUpdateInterstitialOnMainThread(
630 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
631 base::WeakPtr<RemoteRendererImpl> remote_renderer_impl,
632 const SkBitmap& background_image,
633 const gfx::Size& canvas_size,
634 RemotingInterstitialType interstitial_type) {
635 media_task_runner->PostTask(
636 FROM_HERE,
637 base::Bind(&RemoteRendererImpl::UpdateInterstitial, remote_renderer_impl,
638 background_image, canvas_size, interstitial_type));
639 }
623 640
624 interstitial_ui_.ShowInterstitial( 641 void RemoteRendererImpl::UpdateInterstitial(
625 remoting_renderer_controller_->remoting_source()->state() == 642 const SkBitmap& background_image,
626 RemotingSessionState::SESSION_STARTED); 643 const gfx::Size& canvas_size,
644 RemotingInterstitialType interstitial_type) {
645 DCHECK(media_task_runner_->BelongsToCurrentThread());
646 if (!background_image.drawsNothing())
647 interstitial_background_ = background_image;
648 canvas_size_ = canvas_size;
649 PaintRemotingInterstitial(interstitial_background_, canvas_size_,
650 interstitial_type, video_renderer_sink_);
627 } 651 }
628 652
629 } // namespace media 653 } // namespace media
OLDNEW
« no previous file with comments | « media/remoting/remote_renderer_impl.h ('k') | media/remoting/remoting_interstitial_ui.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698