Index: webkit/media/webmediaplayer_proxy.cc |
diff --git a/webkit/media/webmediaplayer_proxy.cc b/webkit/media/webmediaplayer_proxy.cc |
index 3f604b3bd7f9831b28be318ad843edf470b24891..fd30301141bb1435b19ab64b7c65e6dfd3c06f2f 100644 |
--- a/webkit/media/webmediaplayer_proxy.cc |
+++ b/webkit/media/webmediaplayer_proxy.cc |
@@ -34,8 +34,11 @@ WebMediaPlayerProxy::~WebMediaPlayerProxy() { |
Detach(); |
} |
-void WebMediaPlayerProxy::Repaint() { |
+void WebMediaPlayerProxy::FrameReady( |
+ const scoped_refptr<media::VideoFrame>& frame) { |
base::AutoLock auto_lock(lock_); |
+ current_frame_ = frame; |
+ |
if (outstanding_repaints_ < kMaxOutstandingRepaints) { |
++outstanding_repaints_; |
@@ -48,12 +51,11 @@ void WebMediaPlayerProxy::Paint(SkCanvas* canvas, |
const gfx::Rect& dest_rect, |
uint8_t alpha) { |
DCHECK(render_loop_->BelongsToCurrentThread()); |
- if (frame_provider_) { |
- scoped_refptr<media::VideoFrame> video_frame; |
- frame_provider_->GetCurrentFrame(&video_frame); |
- video_renderer_.Paint(video_frame, canvas, dest_rect, alpha); |
- frame_provider_->PutCurrentFrame(video_frame); |
- } |
+ |
+ // Use GetCurrentFrame() to avoid locking while painting in software. |
+ scoped_refptr<media::VideoFrame> video_frame; |
+ GetCurrentFrame(&video_frame); |
+ video_renderer_.Paint(video_frame, canvas, dest_rect, alpha); |
} |
bool WebMediaPlayerProxy::HasSingleOrigin() { |
@@ -80,7 +82,6 @@ void WebMediaPlayerProxy::Detach() { |
DCHECK(render_loop_->BelongsToCurrentThread()); |
webmediaplayer_ = NULL; |
data_source_ = NULL; |
- frame_provider_ = NULL; |
} |
void WebMediaPlayerProxy::RepaintTask() { |
@@ -97,14 +98,8 @@ void WebMediaPlayerProxy::RepaintTask() { |
void WebMediaPlayerProxy::GetCurrentFrame( |
scoped_refptr<media::VideoFrame>* frame_out) { |
- if (frame_provider_) |
- frame_provider_->GetCurrentFrame(frame_out); |
-} |
- |
-void WebMediaPlayerProxy::PutCurrentFrame( |
- scoped_refptr<media::VideoFrame> frame) { |
- if (frame_provider_) |
- frame_provider_->PutCurrentFrame(frame); |
+ base::AutoLock auto_lock(lock_); |
+ *frame_out = current_frame_; |
} |
} // namespace webkit_media |