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

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

Issue 1565893002: Bug Fix: WebMediaPlayerMS Crashes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Disallow Copy 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
« no previous file with comments | « content/renderer/media/webmediaplayer_ms_compositor.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_compositor.h" 5 #include "content/renderer/media/webmediaplayer_ms_compositor.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/hash.h" 10 #include "base/hash.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, 97 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner,
98 const blink::WebURL& url, 98 const blink::WebURL& url,
99 const base::WeakPtr<WebMediaPlayerMS>& player) 99 const base::WeakPtr<WebMediaPlayerMS>& player)
100 : compositor_task_runner_(compositor_task_runner), 100 : compositor_task_runner_(compositor_task_runner),
101 player_(player), 101 player_(player),
102 video_frame_provider_client_(nullptr), 102 video_frame_provider_client_(nullptr),
103 current_frame_used_by_compositor_(false), 103 current_frame_used_by_compositor_(false),
104 last_render_length_(base::TimeDelta::FromSecondsD(1.0 / 60.0)), 104 last_render_length_(base::TimeDelta::FromSecondsD(1.0 / 60.0)),
105 total_frame_count_(0), 105 total_frame_count_(0),
106 dropped_frame_count_(0), 106 dropped_frame_count_(0),
107 stopped_(true) { 107 stopped_(true),
108 weak_ptr_factory_(this) {
108 main_message_loop_ = base::MessageLoop::current(); 109 main_message_loop_ = base::MessageLoop::current();
109 110
110 const blink::WebMediaStream web_stream( 111 const blink::WebMediaStream web_stream(
111 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url)); 112 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url));
112 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; 113 blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
113 if (!web_stream.isNull()) 114 if (!web_stream.isNull())
114 web_stream.videoTracks(video_tracks); 115 web_stream.videoTracks(video_tracks);
115 116
116 const bool remote_video = 117 const bool remote_video =
117 video_tracks.size() && video_tracks[0].source().remote(); 118 video_tracks.size() && video_tracks[0].source().remote();
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 void WebMediaPlayerMSCompositor::PutCurrentFrame() { 266 void WebMediaPlayerMSCompositor::PutCurrentFrame() {
266 DVLOG(3) << __FUNCTION__; 267 DVLOG(3) << __FUNCTION__;
267 base::AutoLock auto_lock(current_frame_lock_); 268 base::AutoLock auto_lock(current_frame_lock_);
268 current_frame_used_by_compositor_ = true; 269 current_frame_used_by_compositor_ = true;
269 } 270 }
270 271
271 void WebMediaPlayerMSCompositor::StartRendering() { 272 void WebMediaPlayerMSCompositor::StartRendering() {
272 DCHECK(thread_checker_.CalledOnValidThread()); 273 DCHECK(thread_checker_.CalledOnValidThread());
273 compositor_task_runner_->PostTask( 274 compositor_task_runner_->PostTask(
274 FROM_HERE, base::Bind(&WebMediaPlayerMSCompositor::StartRenderingInternal, 275 FROM_HERE, base::Bind(&WebMediaPlayerMSCompositor::StartRenderingInternal,
275 base::Unretained(this))); 276 weak_ptr_factory_.GetWeakPtr()));
276 } 277 }
277 278
278 void WebMediaPlayerMSCompositor::StartRenderingInternal() { 279 void WebMediaPlayerMSCompositor::StartRenderingInternal() {
279 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); 280 DCHECK(compositor_task_runner_->BelongsToCurrentThread());
280 stopped_ = false; 281 stopped_ = false;
281 282
282 if (video_frame_provider_client_) 283 if (video_frame_provider_client_)
283 video_frame_provider_client_->StartRendering(); 284 video_frame_provider_client_->StartRendering();
284 } 285 }
285 286
286 void WebMediaPlayerMSCompositor::StopRendering() { 287 void WebMediaPlayerMSCompositor::StopRendering() {
287 DCHECK(thread_checker_.CalledOnValidThread()); 288 DCHECK(thread_checker_.CalledOnValidThread());
288 compositor_task_runner_->PostTask( 289 compositor_task_runner_->PostTask(
289 FROM_HERE, base::Bind(&WebMediaPlayerMSCompositor::StopRenderingInternal, 290 FROM_HERE, base::Bind(&WebMediaPlayerMSCompositor::StopRenderingInternal,
290 base::Unretained(this))); 291 weak_ptr_factory_.GetWeakPtr()));
291 } 292 }
292 293
293 void WebMediaPlayerMSCompositor::StopRenderingInternal() { 294 void WebMediaPlayerMSCompositor::StopRenderingInternal() {
294 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); 295 DCHECK(compositor_task_runner_->BelongsToCurrentThread());
295 stopped_ = true; 296 stopped_ = true;
296 297
297 // It is possible that the video gets paused and then resumed. We need to 298 // It is possible that the video gets paused and then resumed. We need to
298 // reset VideoRendererAlgorithm, otherwise, VideoRendererAlgorithm will think 299 // reset VideoRendererAlgorithm, otherwise, VideoRendererAlgorithm will think
299 // there is a very long frame in the queue and then make totally wrong 300 // there is a very long frame in the queue and then make totally wrong
300 // frame selection. 301 // frame selection.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 } 384 }
384 385
385 if (!rendering_frame_buffer_) { 386 if (!rendering_frame_buffer_) {
386 rendering_frame_buffer_.reset(new media::VideoRendererAlgorithm( 387 rendering_frame_buffer_.reset(new media::VideoRendererAlgorithm(
387 base::Bind(&WebMediaPlayerMSCompositor::MapTimestampsToRenderTimeTicks, 388 base::Bind(&WebMediaPlayerMSCompositor::MapTimestampsToRenderTimeTicks,
388 base::Unretained(this)))); 389 base::Unretained(this))));
389 } 390 }
390 } 391 }
391 392
392 } // namespace content 393 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webmediaplayer_ms_compositor.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698