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

Side by Side Diff: content/renderer/media/webmediaplayer_ms.cc

Issue 1815033003: Add srcObject attribute of type MediaStream to HTMLMediaElement. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: philipj's comments Created 4 years, 8 months 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 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698