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

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

Issue 2566223005: Media Remoting: Update remoting interstitial when status changes. (Closed)
Patch Set: Show unprocessed background image when exiting remoting. 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
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 18 matching lines...) Expand all
29 VideoRendererSink* video_renderer_sink) 29 VideoRendererSink* video_renderer_sink)
30 : state_(STATE_UNINITIALIZED), 30 : state_(STATE_UNINITIALIZED),
31 main_task_runner_(base::ThreadTaskRunnerHandle::Get()), 31 main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
32 media_task_runner_(std::move(media_task_runner)), 32 media_task_runner_(std::move(media_task_runner)),
33 demuxer_stream_provider_(nullptr), 33 demuxer_stream_provider_(nullptr),
34 client_(nullptr), 34 client_(nullptr),
35 remoting_renderer_controller_(remoting_renderer_controller), 35 remoting_renderer_controller_(remoting_renderer_controller),
36 rpc_broker_(remoting_renderer_controller_->GetRpcBroker()), 36 rpc_broker_(remoting_renderer_controller_->GetRpcBroker()),
37 rpc_handle_(remoting::RpcBroker::GetUniqueHandle()), 37 rpc_handle_(remoting::RpcBroker::GetUniqueHandle()),
38 remote_renderer_handle_(remoting::kInvalidHandle), 38 remote_renderer_handle_(remoting::kInvalidHandle),
39 interstitial_ui_(video_renderer_sink,
40 remoting_renderer_controller->pipeline_metadata()),
41 weak_factory_(this) { 39 weak_factory_(this) {
42 VLOG(2) << __FUNCTION__; 40 VLOG(2) << __FUNCTION__;
43 // The constructor is running on the main thread. 41 // The constructor is running on the main thread.
44 DCHECK(remoting_renderer_controller); 42 DCHECK(remoting_renderer_controller_);
45 43 remoting_renderer_controller_->SetShowInterstitialCallback(base::Bind(
46 UpdateInterstitial(); 44 &RemoteRendererImpl::RequestUpdateInterstitialOnMainThread,
45 media_task_runner_, weak_factory_.GetWeakPtr(), video_renderer_sink));
47 46
48 const remoting::RpcBroker::ReceiveMessageCallback receive_callback = 47 const remoting::RpcBroker::ReceiveMessageCallback receive_callback =
49 base::Bind(&RemoteRendererImpl::OnMessageReceivedOnMainThread, 48 base::Bind(&RemoteRendererImpl::OnMessageReceivedOnMainThread,
50 media_task_runner_, weak_factory_.GetWeakPtr()); 49 media_task_runner_, weak_factory_.GetWeakPtr());
51 rpc_broker_->RegisterMessageReceiverCallback(rpc_handle_, receive_callback); 50 rpc_broker_->RegisterMessageReceiverCallback(rpc_handle_, receive_callback);
52 } 51 }
53 52
54 RemoteRendererImpl::~RemoteRendererImpl() { 53 RemoteRendererImpl::~RemoteRendererImpl() {
55 VLOG(2) << __FUNCTION__; 54 VLOG(2) << __FUNCTION__;
56 DCHECK(media_task_runner_->BelongsToCurrentThread()); 55 DCHECK(media_task_runner_->BelongsToCurrentThread());
57 // Post task on main thread to unregister message receiver. 56 // Post task on main thread to unregister message receiver.
miu 2016/12/20 00:16:16 Above, this, you should add a main thread task to
xjz 2016/12/20 19:32:28 Done.
58 main_task_runner_->PostTask( 57 main_task_runner_->PostTask(
59 FROM_HERE, 58 FROM_HERE,
60 base::Bind(&remoting::RpcBroker::UnregisterMessageReceiverCallback, 59 base::Bind(&remoting::RpcBroker::UnregisterMessageReceiverCallback,
61 rpc_broker_, rpc_handle_)); 60 rpc_broker_, rpc_handle_));
62 } 61 }
63 62
64 void RemoteRendererImpl::Initialize( 63 void RemoteRendererImpl::Initialize(
65 DemuxerStreamProvider* demuxer_stream_provider, 64 DemuxerStreamProvider* demuxer_stream_provider,
66 media::RendererClient* client, 65 media::RendererClient* client,
67 const PipelineStatusCB& init_cb) { 66 const PipelineStatusCB& init_cb) {
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 } 547 }
549 548
550 void RemoteRendererImpl::OnFatalError(PipelineStatus error) { 549 void RemoteRendererImpl::OnFatalError(PipelineStatus error) {
551 DCHECK(media_task_runner_->BelongsToCurrentThread()); 550 DCHECK(media_task_runner_->BelongsToCurrentThread());
552 DCHECK_NE(PIPELINE_OK, error) << "PIPELINE_OK isn't an error!"; 551 DCHECK_NE(PIPELINE_OK, error) << "PIPELINE_OK isn't an error!";
553 552
554 // An error has already been delivered. 553 // An error has already been delivered.
555 if (state_ == STATE_ERROR) 554 if (state_ == STATE_ERROR)
556 return; 555 return;
557 556
558 main_task_runner_->PostTask(
559 FROM_HERE, base::Bind(&RemoteRendererImpl::UpdateInterstitial,
560 weak_factory_.GetWeakPtr()));
561
562 const State old_state = state_; 557 const State old_state = state_;
563 state_ = STATE_ERROR; 558 state_ = STATE_ERROR;
564 559
565 if (!init_workflow_done_callback_.is_null()) { 560 if (!init_workflow_done_callback_.is_null()) {
566 DCHECK(old_state == STATE_CREATE_PIPE || old_state == STATE_ACQUIRING || 561 DCHECK(old_state == STATE_CREATE_PIPE || old_state == STATE_ACQUIRING ||
567 old_state == STATE_INITIALIZING); 562 old_state == STATE_INITIALIZING);
568 base::ResetAndReturn(&init_workflow_done_callback_).Run(error); 563 base::ResetAndReturn(&init_workflow_done_callback_).Run(error);
569 return; 564 return;
570 } 565 }
571 566
572 if (!flush_cb_.is_null()) 567 if (!flush_cb_.is_null())
573 base::ResetAndReturn(&flush_cb_).Run(); 568 base::ResetAndReturn(&flush_cb_).Run();
574 569
575 // After OnError() returns, the pipeline may destroy |this|. 570 // After OnError() returns, the pipeline may destroy |this|.
576 client_->OnError(error); 571 client_->OnError(error);
577 } 572 }
578 573
579 void RemoteRendererImpl::UpdateInterstitial() { 574 // static
580 DCHECK(main_task_runner_->BelongsToCurrentThread()); 575 void RemoteRendererImpl::RequestUpdateInterstitialOnMainThread(
576 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
577 base::WeakPtr<RemoteRendererImpl> remote_renderer_impl,
578 VideoRendererSink* video_renderer_sink,
579 const SkBitmap& background_image,
580 const gfx::Size& canvas_size,
581 RemotingInterstitialType interstitial_type) {
582 media_task_runner->PostTask(
583 FROM_HERE, base::Bind(&RemoteRendererImpl::UpdateInterstitial,
584 remote_renderer_impl, video_renderer_sink,
585 background_image, canvas_size, interstitial_type));
586 }
581 587
582 interstitial_ui_.ShowInterstitial( 588 void RemoteRendererImpl::UpdateInterstitial(
583 remoting_renderer_controller_->remoting_source()->state() == 589 VideoRendererSink* video_renderer_sink,
584 RemotingSessionState::SESSION_STARTED); 590 const SkBitmap& background_image,
591 const gfx::Size& canvas_size,
592 RemotingInterstitialType interstitial_type) {
593 DCHECK(media_task_runner_->BelongsToCurrentThread());
594 ShowRemotingInterstitial(video_renderer_sink, background_image, canvas_size,
595 interstitial_type);
585 } 596 }
586 597
587 } // namespace media 598 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698