OLD | NEW |
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/renderer_controller.h" | 5 #include "media/remoting/renderer_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/threading/thread_checker.h" | 9 #include "base/threading/thread_checker.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 // in OnEnteredFullscreen() and OnExitedFullscreen(), and changes to it here | 111 // in OnEnteredFullscreen() and OnExitedFullscreen(), and changes to it here |
112 // are ignored while in fullscreen. | 112 // are ignored while in fullscreen. |
113 if (is_fullscreen_) | 113 if (is_fullscreen_) |
114 return; | 114 return; |
115 | 115 |
116 is_dominant_content_ = is_dominant; | 116 is_dominant_content_ = is_dominant; |
117 UpdateAndMaybeSwitch(BECAME_DOMINANT_CONTENT, BECAME_AUXILIARY_CONTENT); | 117 UpdateAndMaybeSwitch(BECAME_DOMINANT_CONTENT, BECAME_AUXILIARY_CONTENT); |
118 } | 118 } |
119 | 119 |
120 void RendererController::OnSetCdm(CdmContext* cdm_context) { | 120 void RendererController::OnSetCdm(CdmContext* cdm_context) { |
| 121 VLOG(2) << __func__; |
121 DCHECK(thread_checker_.CalledOnValidThread()); | 122 DCHECK(thread_checker_.CalledOnValidThread()); |
122 | 123 |
123 auto* remoting_cdm_context = RemotingCdmContext::From(cdm_context); | 124 auto* remoting_cdm_context = RemotingCdmContext::From(cdm_context); |
124 if (!remoting_cdm_context) | 125 if (!remoting_cdm_context) |
125 return; | 126 return; |
126 | 127 |
127 session_->RemoveClient(this); | 128 session_->RemoveClient(this); |
128 session_ = remoting_cdm_context->GetSharedSession(); | 129 session_ = remoting_cdm_context->GetSharedSession(); |
129 session_->AddClient(this); | 130 session_->AddClient(this); |
130 UpdateFromSessionState(CDM_READY, DECRYPTION_ERROR); | 131 UpdateFromSessionState(CDM_READY, DECRYPTION_ERROR); |
131 } | 132 } |
132 | 133 |
133 void RendererController::OnRemotePlaybackDisabled(bool disabled) { | 134 void RendererController::OnRemotePlaybackDisabled(bool disabled) { |
| 135 VLOG(2) << __func__ << ": disabled = " << disabled; |
134 DCHECK(thread_checker_.CalledOnValidThread()); | 136 DCHECK(thread_checker_.CalledOnValidThread()); |
135 | 137 |
136 is_remote_playback_disabled_ = disabled; | 138 is_remote_playback_disabled_ = disabled; |
137 metrics_recorder_.OnRemotePlaybackDisabled(disabled); | 139 metrics_recorder_.OnRemotePlaybackDisabled(disabled); |
138 UpdateAndMaybeSwitch(ENABLED_BY_PAGE, DISABLED_BY_PAGE); | 140 UpdateAndMaybeSwitch(ENABLED_BY_PAGE, DISABLED_BY_PAGE); |
139 } | 141 } |
140 | 142 |
141 base::WeakPtr<RpcBroker> RendererController::GetRpcBroker() const { | 143 base::WeakPtr<RpcBroker> RendererController::GetRpcBroker() const { |
142 DCHECK(thread_checker_.CalledOnValidThread()); | 144 DCHECK(thread_checker_.CalledOnValidThread()); |
143 | 145 |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 case SharedSession::SESSION_PERMANENTLY_STOPPED: | 285 case SharedSession::SESSION_PERMANENTLY_STOPPED: |
284 return false; // Use local rendering after stopping remoting. | 286 return false; // Use local rendering after stopping remoting. |
285 } | 287 } |
286 | 288 |
287 switch (session_->sink_capabilities()) { | 289 switch (session_->sink_capabilities()) { |
288 case mojom::RemotingSinkCapabilities::NONE: | 290 case mojom::RemotingSinkCapabilities::NONE: |
289 return false; | 291 return false; |
290 case mojom::RemotingSinkCapabilities::RENDERING_ONLY: | 292 case mojom::RemotingSinkCapabilities::RENDERING_ONLY: |
291 case mojom::RemotingSinkCapabilities::CONTENT_DECRYPTION_AND_RENDERING: | 293 case mojom::RemotingSinkCapabilities::CONTENT_DECRYPTION_AND_RENDERING: |
292 break; // The sink is capable of remote rendering. | 294 break; // The sink is capable of remote rendering. |
| 295 default: |
| 296 // TODO(xjz): Will be changed in a coming CL that passes the receiver's |
| 297 // capabilities. |
| 298 NOTREACHED(); |
293 } | 299 } |
294 | 300 |
295 if ((!has_audio() && !has_video()) || | 301 if ((!has_audio() && !has_video()) || |
296 (has_video() && !IsVideoCodecSupported()) || | 302 (has_video() && !IsVideoCodecSupported()) || |
297 (has_audio() && !IsAudioCodecSupported())) { | 303 (has_audio() && !IsAudioCodecSupported())) { |
298 return false; | 304 return false; |
299 } | 305 } |
300 | 306 |
301 if (is_remote_playback_disabled_) | 307 if (is_remote_playback_disabled_) |
302 return false; | 308 return false; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 // StopRemoting() from here. | 351 // StopRemoting() from here. |
346 DCHECK(!is_encrypted_); | 352 DCHECK(!is_encrypted_); |
347 DCHECK_NE(stop_trigger, UNKNOWN_STOP_TRIGGER); | 353 DCHECK_NE(stop_trigger, UNKNOWN_STOP_TRIGGER); |
348 metrics_recorder_.WillStopSession(stop_trigger); | 354 metrics_recorder_.WillStopSession(stop_trigger); |
349 client_->SwitchRenderer(false); | 355 client_->SwitchRenderer(false); |
350 session_->StopRemoting(this); | 356 session_->StopRemoting(this); |
351 } | 357 } |
352 } | 358 } |
353 | 359 |
354 void RendererController::OnRendererFatalError(StopTrigger stop_trigger) { | 360 void RendererController::OnRendererFatalError(StopTrigger stop_trigger) { |
| 361 VLOG(2) << __func__ << ": stop_trigger= " << stop_trigger; |
355 DCHECK(thread_checker_.CalledOnValidThread()); | 362 DCHECK(thread_checker_.CalledOnValidThread()); |
356 | 363 |
357 // Do not act on errors caused by things like Mojo pipes being closed during | 364 // Do not act on errors caused by things like Mojo pipes being closed during |
358 // shutdown. | 365 // shutdown. |
359 if (!remote_rendering_started_) | 366 if (!remote_rendering_started_) |
360 return; | 367 return; |
361 | 368 |
362 encountered_renderer_fatal_error_ = true; | 369 encountered_renderer_fatal_error_ = true; |
363 UpdateAndMaybeSwitch(UNKNOWN_START_TRIGGER, stop_trigger); | 370 UpdateAndMaybeSwitch(UNKNOWN_START_TRIGGER, stop_trigger); |
364 } | 371 } |
365 | 372 |
366 void RendererController::SetClient(MediaObserverClient* client) { | 373 void RendererController::SetClient(MediaObserverClient* client) { |
367 DCHECK(thread_checker_.CalledOnValidThread()); | 374 DCHECK(thread_checker_.CalledOnValidThread()); |
368 DCHECK(client); | 375 DCHECK(client); |
369 DCHECK(!client_); | 376 DCHECK(!client_); |
370 | 377 |
371 client_ = client; | 378 client_ = client; |
372 client_->ActivateViewportIntersectionMonitoring(IsRemoteSinkAvailable()); | 379 client_->ActivateViewportIntersectionMonitoring(IsRemoteSinkAvailable()); |
373 } | 380 } |
374 | 381 |
375 } // namespace remoting | 382 } // namespace remoting |
376 } // namespace media | 383 } // namespace media |
OLD | NEW |