Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/renderer/media/webmediaplayer_ms.h" | 5 #include "content/renderer/media/webmediaplayer_ms.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| 11 | 11 |
| 12 #include "base/bind.h" | 12 #include "base/bind.h" |
| 13 #include "base/callback.h" | 13 #include "base/callback.h" |
| 14 #include "build/build_config.h" | 14 #include "build/build_config.h" |
| 15 #include "cc/blink/web_layer_impl.h" | 15 #include "cc/blink/web_layer_impl.h" |
| 16 #include "cc/layers/video_frame_provider_client_impl.h" | 16 #include "cc/layers/video_frame_provider_client_impl.h" |
| 17 #include "cc/layers/video_layer.h" | 17 #include "cc/layers/video_layer.h" |
| 18 #include "content/common/gpu/client/context_provider_command_buffer.h" | 18 #include "content/common/gpu/client/context_provider_command_buffer.h" |
| 19 #include "content/public/renderer/media_stream_audio_renderer.h" | 19 #include "content/public/renderer/media_stream_audio_renderer.h" |
| 20 #include "content/public/renderer/media_stream_renderer_factory.h" | 20 #include "content/public/renderer/media_stream_renderer_factory.h" |
| 21 #include "content/public/renderer/media_stream_video_renderer.h" | 21 #include "content/public/renderer/media_stream_video_renderer.h" |
| 22 #include "content/renderer/media/web_media_element_source_utils.h" | 22 #include "content/renderer/media/web_media_element_source_utils.h" |
| 23 #include "content/renderer/media/webmediaplayer_ms_compositor.h" | 23 #include "content/renderer/media/webmediaplayer_ms_compositor.h" |
| 24 #include "content/renderer/render_frame_impl.h" | 24 #include "content/renderer/render_frame_impl.h" |
| 25 #include "content/renderer/render_thread_impl.h" | 25 #include "content/renderer/render_thread_impl.h" |
| 26 #include "media/base/media_log.h" | 26 #include "media/base/media_log.h" |
| 27 #include "media/base/video_frame.h" | 27 #include "media/base/video_frame.h" |
| 28 #include "media/base/video_rotation.h" | |
| 28 #include "media/blink/webmediaplayer_util.h" | 29 #include "media/blink/webmediaplayer_util.h" |
| 29 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" | 30 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" |
| 30 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" | 31 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" |
| 31 #include "third_party/WebKit/public/platform/WebRect.h" | 32 #include "third_party/WebKit/public/platform/WebRect.h" |
| 32 #include "third_party/WebKit/public/platform/WebSize.h" | 33 #include "third_party/WebKit/public/platform/WebSize.h" |
| 33 | 34 |
| 34 namespace content { | 35 namespace content { |
| 35 | 36 |
| 36 WebMediaPlayerMS::WebMediaPlayerMS( | 37 WebMediaPlayerMS::WebMediaPlayerMS( |
| 37 blink::WebFrame* frame, | 38 blink::WebFrame* frame, |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 48 : frame_(frame), | 49 : frame_(frame), |
| 49 network_state_(WebMediaPlayer::NetworkStateEmpty), | 50 network_state_(WebMediaPlayer::NetworkStateEmpty), |
| 50 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 51 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| 51 buffered_(static_cast<size_t>(0)), | 52 buffered_(static_cast<size_t>(0)), |
| 52 client_(client), | 53 client_(client), |
| 53 delegate_(delegate), | 54 delegate_(delegate), |
| 54 delegate_id_(0), | 55 delegate_id_(0), |
| 55 paused_(true), | 56 paused_(true), |
| 56 render_frame_suspended_(false), | 57 render_frame_suspended_(false), |
| 57 received_first_frame_(false), | 58 received_first_frame_(false), |
| 59 video_rotation_(media::VIDEO_ROTATION_0), | |
| 58 media_log_(media_log), | 60 media_log_(media_log), |
| 59 renderer_factory_(std::move(factory)), | 61 renderer_factory_(std::move(factory)), |
| 60 media_task_runner_(media_task_runner), | 62 media_task_runner_(media_task_runner), |
| 61 worker_task_runner_(worker_task_runner), | 63 worker_task_runner_(worker_task_runner), |
| 62 gpu_factories_(gpu_factories), | 64 gpu_factories_(gpu_factories), |
| 63 compositor_task_runner_(compositor_task_runner), | 65 compositor_task_runner_(compositor_task_runner), |
| 64 initial_audio_output_device_id_(sink_id.utf8()), | 66 initial_audio_output_device_id_(sink_id.utf8()), |
| 65 initial_security_origin_(security_origin.isNull() | 67 initial_security_origin_(security_origin.isNull() |
| 66 ? url::Origin() | 68 ? url::Origin() |
| 67 : url::Origin(security_origin)), | 69 : url::Origin(security_origin)), |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 257 return (video_frame_provider_.get() != nullptr); | 259 return (video_frame_provider_.get() != nullptr); |
| 258 } | 260 } |
| 259 | 261 |
| 260 bool WebMediaPlayerMS::hasAudio() const { | 262 bool WebMediaPlayerMS::hasAudio() const { |
| 261 DCHECK(thread_checker_.CalledOnValidThread()); | 263 DCHECK(thread_checker_.CalledOnValidThread()); |
| 262 return (audio_renderer_.get() != nullptr); | 264 return (audio_renderer_.get() != nullptr); |
| 263 } | 265 } |
| 264 | 266 |
| 265 blink::WebSize WebMediaPlayerMS::naturalSize() const { | 267 blink::WebSize WebMediaPlayerMS::naturalSize() const { |
| 266 DCHECK(thread_checker_.CalledOnValidThread()); | 268 DCHECK(thread_checker_.CalledOnValidThread()); |
| 269 if (video_rotation_ == media::VIDEO_ROTATION_90 || | |
| 270 video_rotation_ == media::VideoRotation::VIDEO_ROTATION_270) { | |
| 271 const gfx::Size& current_size = compositor_->GetCurrentSize(); | |
| 272 return blink::WebSize(current_size.height(), current_size.width()); | |
|
mcasas
2016/07/15 01:57:34
nit: blink::WebSize has a ctor with gfx::Size as p
chcunningham
2016/07/15 18:25:52
I think he means to swap width and height here. II
emircan
2016/07/15 18:43:13
I am swapping height and width here as ccunningham
| |
| 273 } | |
| 267 return blink::WebSize(compositor_->GetCurrentSize()); | 274 return blink::WebSize(compositor_->GetCurrentSize()); |
| 268 } | 275 } |
| 269 | 276 |
| 270 bool WebMediaPlayerMS::paused() const { | 277 bool WebMediaPlayerMS::paused() const { |
| 271 DCHECK(thread_checker_.CalledOnValidThread()); | 278 DCHECK(thread_checker_.CalledOnValidThread()); |
| 272 return paused_; | 279 return paused_; |
| 273 } | 280 } |
| 274 | 281 |
| 275 bool WebMediaPlayerMS::seeking() const { | 282 bool WebMediaPlayerMS::seeking() const { |
| 276 DCHECK(thread_checker_.CalledOnValidThread()); | 283 DCHECK(thread_checker_.CalledOnValidThread()); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 338 auto* provider = | 345 auto* provider = |
| 339 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); | 346 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); |
| 340 // GPU Process crashed. | 347 // GPU Process crashed. |
| 341 if (!provider) | 348 if (!provider) |
| 342 return; | 349 return; |
| 343 context_3d = media::Context3D(provider->ContextGL(), provider->GrContext()); | 350 context_3d = media::Context3D(provider->ContextGL(), provider->GrContext()); |
| 344 DCHECK(context_3d.gl); | 351 DCHECK(context_3d.gl); |
| 345 } | 352 } |
| 346 const gfx::RectF dest_rect(rect.x, rect.y, rect.width, rect.height); | 353 const gfx::RectF dest_rect(rect.x, rect.y, rect.width, rect.height); |
| 347 video_renderer_.Paint(frame, canvas, dest_rect, alpha, mode, | 354 video_renderer_.Paint(frame, canvas, dest_rect, alpha, mode, |
| 348 media::VIDEO_ROTATION_0, context_3d); | 355 video_rotation_, context_3d); |
| 349 } | 356 } |
| 350 | 357 |
| 351 bool WebMediaPlayerMS::hasSingleSecurityOrigin() const { | 358 bool WebMediaPlayerMS::hasSingleSecurityOrigin() const { |
| 352 DCHECK(thread_checker_.CalledOnValidThread()); | 359 DCHECK(thread_checker_.CalledOnValidThread()); |
| 353 return true; | 360 return true; |
| 354 } | 361 } |
| 355 | 362 |
| 356 bool WebMediaPlayerMS::didPassCORSAccessCheck() const { | 363 bool WebMediaPlayerMS::didPassCORSAccessCheck() const { |
| 357 DCHECK(thread_checker_.CalledOnValidThread()); | 364 DCHECK(thread_checker_.CalledOnValidThread()); |
| 358 return true; | 365 return true; |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 487 } | 494 } |
| 488 | 495 |
| 489 if (!received_first_frame_) { | 496 if (!received_first_frame_) { |
| 490 received_first_frame_ = true; | 497 received_first_frame_ = true; |
| 491 if (getReadyState() < WebMediaPlayer::ReadyStateHaveEnoughData) { | 498 if (getReadyState() < WebMediaPlayer::ReadyStateHaveEnoughData) { |
| 492 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | 499 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); |
| 493 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); | 500 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); |
| 494 } | 501 } |
| 495 | 502 |
| 496 if (video_frame_provider_.get()) { | 503 if (video_frame_provider_.get()) { |
| 504 if (frame->metadata()->GetRotation(media::VideoFrameMetadata::ROTATION, | |
| 505 &video_rotation_)) { | |
| 506 DVLOG(3) << "Applying rotation: " << video_rotation_; | |
| 507 } | |
|
mcasas
2016/07/15 01:57:34
All metadata() methods are marked WARN_UNUSED_RESU
chcunningham
2016/07/15 18:25:52
He does care though right? Line 510 where he uses
emircan
2016/07/15 18:43:13
What I ignore here is the return bool of GetRotati
emircan
2016/07/15 18:43:13
Done.
| |
| 508 | |
| 497 video_weblayer_.reset(new cc_blink::WebLayerImpl( | 509 video_weblayer_.reset(new cc_blink::WebLayerImpl( |
| 498 cc::VideoLayer::Create(compositor_.get(), media::VIDEO_ROTATION_0))); | 510 cc::VideoLayer::Create(compositor_.get(), video_rotation_))); |
| 499 video_weblayer_->layer()->SetContentsOpaque(false); | 511 video_weblayer_->layer()->SetContentsOpaque(false); |
| 500 video_weblayer_->SetContentsOpaqueIsFixed(true); | 512 video_weblayer_->SetContentsOpaqueIsFixed(true); |
| 501 get_client()->setWebLayer(video_weblayer_.get()); | 513 get_client()->setWebLayer(video_weblayer_.get()); |
| 502 } | 514 } |
| 503 } | 515 } |
| 504 | 516 |
| 505 compositor_->EnqueueFrame(frame); | 517 compositor_->EnqueueFrame(frame); |
| 506 } | 518 } |
| 507 | 519 |
| 508 void WebMediaPlayerMS::RepaintInternal() { | 520 void WebMediaPlayerMS::RepaintInternal() { |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 538 void WebMediaPlayerMS::ResetCanvasCache() { | 550 void WebMediaPlayerMS::ResetCanvasCache() { |
| 539 DCHECK(thread_checker_.CalledOnValidThread()); | 551 DCHECK(thread_checker_.CalledOnValidThread()); |
| 540 video_renderer_.ResetCache(); | 552 video_renderer_.ResetCache(); |
| 541 } | 553 } |
| 542 | 554 |
| 543 void WebMediaPlayerMS::TriggerResize() { | 555 void WebMediaPlayerMS::TriggerResize() { |
| 544 get_client()->sizeChanged(); | 556 get_client()->sizeChanged(); |
| 545 } | 557 } |
| 546 | 558 |
| 547 } // namespace content | 559 } // namespace content |
| OLD | NEW |