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

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

Issue 1570043002: Implement MediaSession on top of the WebMediaPlayerDelegate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@media_session
Patch Set: Merge. Cleanup. Fix RequestPlay. Created 4 years, 11 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>
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 blink::WebMediaPlayerClient* client, 43 blink::WebMediaPlayerClient* client,
44 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, 44 base::WeakPtr<media::WebMediaPlayerDelegate> delegate,
45 media::MediaLog* media_log, 45 media::MediaLog* media_log,
46 scoped_ptr<MediaStreamRendererFactory> factory, 46 scoped_ptr<MediaStreamRendererFactory> factory,
47 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, 47 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner,
48 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, 48 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
49 const scoped_refptr<base::TaskRunner>& worker_task_runner, 49 const scoped_refptr<base::TaskRunner>& worker_task_runner,
50 media::GpuVideoAcceleratorFactories* gpu_factories, 50 media::GpuVideoAcceleratorFactories* gpu_factories,
51 const blink::WebString& sink_id, 51 const blink::WebString& sink_id,
52 const blink::WebSecurityOrigin& security_origin) 52 const blink::WebSecurityOrigin& security_origin)
53 : RenderFrameObserver(RenderFrame::FromWebFrame(frame)), 53 : frame_(frame),
54 frame_(frame),
55 network_state_(WebMediaPlayer::NetworkStateEmpty), 54 network_state_(WebMediaPlayer::NetworkStateEmpty),
56 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), 55 ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
57 buffered_(static_cast<size_t>(0)), 56 buffered_(static_cast<size_t>(0)),
58 client_(client), 57 client_(client),
59 delegate_(delegate), 58 delegate_(delegate),
60 paused_(true), 59 paused_(true),
61 render_frame_suspended_(false), 60 render_frame_suspended_(false),
62 received_first_frame_(false), 61 received_first_frame_(false),
63 media_log_(media_log), 62 media_log_(media_log),
64 renderer_factory_(std::move(factory)), 63 renderer_factory_(std::move(factory)),
65 media_task_runner_(media_task_runner), 64 media_task_runner_(media_task_runner),
66 worker_task_runner_(worker_task_runner), 65 worker_task_runner_(worker_task_runner),
67 gpu_factories_(gpu_factories), 66 gpu_factories_(gpu_factories),
68 compositor_task_runner_(compositor_task_runner), 67 compositor_task_runner_(compositor_task_runner),
69 initial_audio_output_device_id_(sink_id.utf8()), 68 initial_audio_output_device_id_(sink_id.utf8()),
70 initial_security_origin_(security_origin.isNull() 69 initial_security_origin_(security_origin.isNull()
71 ? url::Origin() 70 ? url::Origin()
72 : url::Origin(security_origin)) { 71 : url::Origin(security_origin)) {
73 DVLOG(1) << __FUNCTION__; 72 DVLOG(1) << __FUNCTION__;
74 DCHECK(client); 73 DCHECK(client);
74 if (delegate)
75 delegate->AddObserver(this);
76
75 media_log_->AddEvent( 77 media_log_->AddEvent(
76 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); 78 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
77 } 79 }
78 80
79 WebMediaPlayerMS::~WebMediaPlayerMS() { 81 WebMediaPlayerMS::~WebMediaPlayerMS() {
80 DVLOG(1) << __FUNCTION__; 82 DVLOG(1) << __FUNCTION__;
81 DCHECK(thread_checker_.CalledOnValidThread()); 83 DCHECK(thread_checker_.CalledOnValidThread());
82 84
83 if (compositor_ && !compositor_task_runner_->BelongsToCurrentThread()) 85 if (compositor_ && !compositor_task_runner_->BelongsToCurrentThread())
84 compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_.release()); 86 compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_.release());
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 DCHECK(thread_checker_.CalledOnValidThread()); 156 DCHECK(thread_checker_.CalledOnValidThread());
155 if (paused_) { 157 if (paused_) {
156 if (video_frame_provider_.get()) 158 if (video_frame_provider_.get())
157 video_frame_provider_->Play(); 159 video_frame_provider_->Play();
158 160
159 compositor_->StartRendering(); 161 compositor_->StartRendering();
160 162
161 if (audio_renderer_.get()) 163 if (audio_renderer_.get())
162 audio_renderer_->Play(); 164 audio_renderer_->Play();
163 165
164 if (delegate_.get()) 166 if (delegate_.get()) {
165 delegate_->DidPlay(this); 167 delegate_->DidPlay(this, hasVideo(), hasAudio(), false,
168 media::kInfiniteDuration());
169 }
166 } 170 }
167 171
168 paused_ = false; 172 paused_ = false;
169 173
170 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); 174 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY));
171 } 175 }
172 176
173 void WebMediaPlayerMS::pause() { 177 void WebMediaPlayerMS::pause() {
174 DVLOG(1) << __FUNCTION__; 178 DVLOG(1) << __FUNCTION__;
175 DCHECK(thread_checker_.CalledOnValidThread()); 179 DCHECK(thread_checker_.CalledOnValidThread());
176 180
177 if (video_frame_provider_.get()) 181 if (video_frame_provider_.get())
178 video_frame_provider_->Pause(); 182 video_frame_provider_->Pause();
179 183
180 compositor_->StopRendering(); 184 compositor_->StopRendering();
181 compositor_->ReplaceCurrentFrameWithACopy(); 185 compositor_->ReplaceCurrentFrameWithACopy();
182 186
183 if (!paused_) { 187 if (!paused_) {
184 if (audio_renderer_.get()) 188 if (audio_renderer_.get())
185 audio_renderer_->Pause(); 189 audio_renderer_->Pause();
186 190
187 if (delegate_.get()) 191 if (delegate_.get())
188 delegate_->DidPause(this); 192 delegate_->DidPause(this, false);
189 } 193 }
190 194
191 paused_ = true; 195 paused_ = true;
192 196
193 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); 197 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE));
194 } 198 }
195 199
196 bool WebMediaPlayerMS::supportsSave() const { 200 bool WebMediaPlayerMS::supportsSave() const {
197 DCHECK(thread_checker_.CalledOnValidThread()); 201 DCHECK(thread_checker_.CalledOnValidThread());
198 return false; 202 return false;
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 NOTIMPLEMENTED(); 357 NOTIMPLEMENTED();
354 return 0; 358 return 0;
355 } 359 }
356 360
357 unsigned WebMediaPlayerMS::videoDecodedByteCount() const { 361 unsigned WebMediaPlayerMS::videoDecodedByteCount() const {
358 DCHECK(thread_checker_.CalledOnValidThread()); 362 DCHECK(thread_checker_.CalledOnValidThread());
359 NOTIMPLEMENTED(); 363 NOTIMPLEMENTED();
360 return 0; 364 return 0;
361 } 365 }
362 366
363 void WebMediaPlayerMS::WasHidden() { 367 void WebMediaPlayerMS::OnHidden() {
364 #if defined(OS_ANDROID) 368 #if defined(OS_ANDROID)
365 DCHECK(thread_checker_.CalledOnValidThread()); 369 DCHECK(thread_checker_.CalledOnValidThread());
366 DCHECK(!render_frame_suspended_); 370 DCHECK(!render_frame_suspended_);
367 371
368 // Method called when the RenderFrame is sent to background and suspended 372 // Method called when the RenderFrame is sent to background and suspended
369 // (android). Substitute the displayed VideoFrame with a copy to avoid 373 // (android). Substitute the displayed VideoFrame with a copy to avoid
370 // holding on to it unnecessarily. 374 // holding on to it unnecessarily.
371 render_frame_suspended_=true; 375 render_frame_suspended_=true;
372 if (!paused_) 376 if (!paused_)
373 compositor_->ReplaceCurrentFrameWithACopy(); 377 compositor_->ReplaceCurrentFrameWithACopy();
374 #endif // defined(OS_ANDROID) 378 #endif // defined(OS_ANDROID)
375 } 379 }
376 380
377 void WebMediaPlayerMS::WasShown() { 381 void WebMediaPlayerMS::OnShown() {
378 #if defined(OS_ANDROID) 382 #if defined(OS_ANDROID)
379 DCHECK(thread_checker_.CalledOnValidThread()); 383 DCHECK(thread_checker_.CalledOnValidThread());
380 384
381 render_frame_suspended_ = false; 385 render_frame_suspended_ = false;
382 #endif // defined(OS_ANDROID) 386 #endif // defined(OS_ANDROID)
383 } 387 }
384 388
389 void WebMediaPlayerMS::OnPlay() {
390 play();
391 client_->playbackStateChanged();
392 }
393
394 void WebMediaPlayerMS::OnPause() {
395 pause();
396 client_->playbackStateChanged();
397 }
398
385 bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture( 399 bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture(
386 blink::WebGraphicsContext3D* web_graphics_context, 400 blink::WebGraphicsContext3D* web_graphics_context,
387 unsigned int texture, 401 unsigned int texture,
388 unsigned int internal_format, 402 unsigned int internal_format,
389 unsigned int type, 403 unsigned int type,
390 bool premultiply_alpha, 404 bool premultiply_alpha,
391 bool flip_y) { 405 bool flip_y) {
392 TRACE_EVENT0("media", "WebMediaPlayerMS:copyVideoTextureToPlatformTexture"); 406 TRACE_EVENT0("media", "WebMediaPlayerMS:copyVideoTextureToPlatformTexture");
393 DCHECK(thread_checker_.CalledOnValidThread()); 407 DCHECK(thread_checker_.CalledOnValidThread());
394 408
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 media::SkCanvasVideoRenderer* WebMediaPlayerMS::GetSkCanvasVideoRenderer() { 496 media::SkCanvasVideoRenderer* WebMediaPlayerMS::GetSkCanvasVideoRenderer() {
483 return &video_renderer_; 497 return &video_renderer_;
484 } 498 }
485 499
486 void WebMediaPlayerMS::ResetCanvasCache() { 500 void WebMediaPlayerMS::ResetCanvasCache() {
487 DCHECK(thread_checker_.CalledOnValidThread()); 501 DCHECK(thread_checker_.CalledOnValidThread());
488 video_renderer_.ResetCache(); 502 video_renderer_.ResetCache();
489 } 503 }
490 504
491 } // namespace content 505 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698