Index: content/renderer/media/rtc_video_renderer.cc |
diff --git a/content/renderer/media/rtc_video_renderer.cc b/content/renderer/media/rtc_video_renderer.cc |
index 26cff0d820011676dfdbb72aee74360c9dc65a72..ba380b9c84cf796e50d7d16598c12db580aa2252 100644 |
--- a/content/renderer/media/rtc_video_renderer.cc |
+++ b/content/renderer/media/rtc_video_renderer.cc |
@@ -6,6 +6,7 @@ |
#include "base/debug/trace_event.h" |
#include "base/message_loop/message_loop_proxy.h" |
+#include "media/base/bind_to_current_loop.h" |
#include "media/base/video_frame.h" |
#include "media/base/video_util.h" |
@@ -22,7 +23,8 @@ RTCVideoRenderer::RTCVideoRenderer( |
message_loop_proxy_(base::MessageLoopProxy::current()), |
state_(STOPPED), |
frame_size_(kMinFrameSize, kMinFrameSize), |
- video_track_(video_track) { |
+ video_track_(video_track), |
+ weak_factory_(this) { |
} |
RTCVideoRenderer::~RTCVideoRenderer() { |
@@ -32,7 +34,13 @@ void RTCVideoRenderer::Start() { |
DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
DCHECK_EQ(state_, STOPPED); |
- AddToVideoTrack(this, video_track_); |
+ AddToVideoTrack( |
+ this, |
+ media::BindToCurrentLoop( |
+ base::Bind( |
+ &RTCVideoRenderer::OnVideoFrame, |
+ weak_factory_.GetWeakPtr())), |
+ video_track_); |
state_ = STARTED; |
if (video_track_.source().readyState() == |
@@ -46,6 +54,7 @@ void RTCVideoRenderer::Stop() { |
DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
DCHECK(state_ == STARTED || state_ == PAUSED); |
RemoveFromVideoTrack(this, video_track_); |
+ weak_factory_.InvalidateWeakPtrs(); |
state_ = STOPPED; |
frame_size_.set_width(kMinFrameSize); |
frame_size_.set_height(kMinFrameSize); |
@@ -79,7 +88,8 @@ void RTCVideoRenderer::OnEnabledChanged(bool enabled) { |
} |
void RTCVideoRenderer::OnVideoFrame( |
- const scoped_refptr<media::VideoFrame>& frame) { |
+ const scoped_refptr<media::VideoFrame>& frame, |
+ const media::VideoCaptureFormat& format) { |
DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
if (state_ != STARTED) { |
return; |
@@ -104,7 +114,7 @@ void RTCVideoRenderer::RenderSignalingFrame() { |
// originates from a video camera. |
scoped_refptr<media::VideoFrame> video_frame = |
media::VideoFrame::CreateBlackFrame(frame_size_); |
- OnVideoFrame(video_frame); |
+ OnVideoFrame(video_frame, media::VideoCaptureFormat()); |
} |
} // namespace content |