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 |