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/context_provider_web_context.h" | 15 #include "cc/blink/context_provider_web_context.h" |
16 #include "cc/blink/web_layer_impl.h" | 16 #include "cc/blink/web_layer_impl.h" |
17 #include "cc/layers/video_frame_provider_client_impl.h" | 17 #include "cc/layers/video_frame_provider_client_impl.h" |
18 #include "cc/layers/video_layer.h" | 18 #include "cc/layers/video_layer.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/video_frame_provider.h" | 21 #include "content/public/renderer/video_frame_provider.h" |
| 22 #include "content/renderer/media/web_media_element_source_utils.h" |
22 #include "content/renderer/media/webmediaplayer_ms_compositor.h" | 23 #include "content/renderer/media/webmediaplayer_ms_compositor.h" |
23 #include "content/renderer/render_frame_impl.h" | 24 #include "content/renderer/render_frame_impl.h" |
24 #include "content/renderer/render_thread_impl.h" | 25 #include "content/renderer/render_thread_impl.h" |
25 #include "media/base/media_log.h" | 26 #include "media/base/media_log.h" |
26 #include "media/base/video_frame.h" | 27 #include "media/base/video_frame.h" |
27 #include "media/blink/webmediaplayer_util.h" | 28 #include "media/blink/webmediaplayer_util.h" |
28 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" | 29 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" |
| 30 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" |
29 #include "third_party/WebKit/public/platform/WebRect.h" | 31 #include "third_party/WebKit/public/platform/WebRect.h" |
30 #include "third_party/WebKit/public/platform/WebSize.h" | 32 #include "third_party/WebKit/public/platform/WebSize.h" |
31 #include "third_party/WebKit/public/platform/WebURL.h" | |
32 | 33 |
33 namespace content { | 34 namespace content { |
34 | 35 |
35 WebMediaPlayerMS::WebMediaPlayerMS( | 36 WebMediaPlayerMS::WebMediaPlayerMS( |
36 blink::WebFrame* frame, | 37 blink::WebFrame* frame, |
37 blink::WebMediaPlayerClient* client, | 38 blink::WebMediaPlayerClient* client, |
38 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, | 39 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, |
39 media::MediaLog* media_log, | 40 media::MediaLog* media_log, |
40 scoped_ptr<MediaStreamRendererFactory> factory, | 41 scoped_ptr<MediaStreamRendererFactory> factory, |
41 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, | 42 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 media_log_->AddEvent( | 95 media_log_->AddEvent( |
95 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); | 96 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); |
96 | 97 |
97 if (delegate_) { | 98 if (delegate_) { |
98 delegate_->PlayerGone(delegate_id_); | 99 delegate_->PlayerGone(delegate_id_); |
99 delegate_->RemoveObserver(delegate_id_); | 100 delegate_->RemoveObserver(delegate_id_); |
100 } | 101 } |
101 } | 102 } |
102 | 103 |
103 void WebMediaPlayerMS::load(LoadType load_type, | 104 void WebMediaPlayerMS::load(LoadType load_type, |
104 const blink::WebURL& url, | 105 const blink::WebMediaPlayerSource& source, |
105 CORSMode /*cors_mode*/) { | 106 CORSMode /*cors_mode*/) { |
106 DVLOG(1) << __FUNCTION__; | 107 DVLOG(1) << __FUNCTION__; |
107 DCHECK(thread_checker_.CalledOnValidThread()); | 108 DCHECK(thread_checker_.CalledOnValidThread()); |
108 | 109 |
109 // TODO(acolwell): Change this to DCHECK_EQ(load_type, LoadTypeMediaStream) | 110 // TODO(acolwell): Change this to DCHECK_EQ(load_type, LoadTypeMediaStream) |
110 // once Blink-side changes land. | 111 // once Blink-side changes land. |
111 DCHECK_NE(load_type, LoadTypeMediaSource); | 112 DCHECK_NE(load_type, LoadTypeMediaSource); |
| 113 blink::WebMediaStream web_stream = |
| 114 GetWebMediaStreamFromWebMediaPlayerSource(source); |
112 | 115 |
113 compositor_.reset(new WebMediaPlayerMSCompositor(compositor_task_runner_, url, | 116 compositor_.reset(new WebMediaPlayerMSCompositor(compositor_task_runner_, |
114 AsWeakPtr())); | 117 web_stream, AsWeakPtr())); |
115 | 118 |
116 SetNetworkState(WebMediaPlayer::NetworkStateLoading); | 119 SetNetworkState(WebMediaPlayer::NetworkStateLoading); |
117 SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); | 120 SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); |
118 media_log_->AddEvent(media_log_->CreateLoadEvent(url.string().utf8())); | 121 std::string stream_id = |
| 122 web_stream.isNull() ? std::string() : web_stream.id().utf8(); |
| 123 media_log_->AddEvent(media_log_->CreateLoadEvent(stream_id)); |
119 | 124 |
120 video_frame_provider_ = renderer_factory_->GetVideoFrameProvider( | 125 video_frame_provider_ = renderer_factory_->GetVideoFrameProvider( |
121 url, | 126 web_stream, base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), |
122 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), | |
123 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr()), | 127 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr()), |
124 media_task_runner_, | 128 media_task_runner_, worker_task_runner_, gpu_factories_); |
125 worker_task_runner_, | |
126 gpu_factories_); | |
127 | 129 |
128 RenderFrame* const frame = RenderFrame::FromWebFrame(frame_); | 130 RenderFrame* const frame = RenderFrame::FromWebFrame(frame_); |
129 | 131 |
130 if (frame) { | 132 if (frame) { |
131 // Report UMA and RAPPOR metrics. | 133 // Report UMA and RAPPOR metrics. |
132 media::ReportMetrics(load_type, GURL(url), frame_->getSecurityOrigin()); | 134 GURL url = source.isURL() ? GURL(source.getAsURL()) : GURL(); |
| 135 media::ReportMetrics(load_type, url, frame_->getSecurityOrigin()); |
133 | 136 |
134 audio_renderer_ = renderer_factory_->GetAudioRenderer( | 137 audio_renderer_ = renderer_factory_->GetAudioRenderer( |
135 url, frame->GetRoutingID(), initial_audio_output_device_id_, | 138 web_stream, frame->GetRoutingID(), initial_audio_output_device_id_, |
136 initial_security_origin_); | 139 initial_security_origin_); |
137 } | 140 } |
138 | 141 |
139 if (!video_frame_provider_ && !audio_renderer_) { | 142 if (!video_frame_provider_ && !audio_renderer_) { |
140 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); | 143 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); |
141 return; | 144 return; |
142 } | 145 } |
143 | 146 |
144 if (audio_renderer_) { | 147 if (audio_renderer_) { |
145 audio_renderer_->SetVolume(volume_); | 148 audio_renderer_->SetVolume(volume_); |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 media::SkCanvasVideoRenderer* WebMediaPlayerMS::GetSkCanvasVideoRenderer() { | 532 media::SkCanvasVideoRenderer* WebMediaPlayerMS::GetSkCanvasVideoRenderer() { |
530 return &video_renderer_; | 533 return &video_renderer_; |
531 } | 534 } |
532 | 535 |
533 void WebMediaPlayerMS::ResetCanvasCache() { | 536 void WebMediaPlayerMS::ResetCanvasCache() { |
534 DCHECK(thread_checker_.CalledOnValidThread()); | 537 DCHECK(thread_checker_.CalledOnValidThread()); |
535 video_renderer_.ResetCache(); | 538 video_renderer_.ResetCache(); |
536 } | 539 } |
537 | 540 |
538 } // namespace content | 541 } // namespace content |
OLD | NEW |