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

Unified Diff: content/common/gpu/client/gl_helper.cc

Issue 21052007: aura: Clean up compositor initialization/destruction. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanupcompositor: All work maybe? Created 7 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: content/common/gpu/client/gl_helper.cc
diff --git a/content/common/gpu/client/gl_helper.cc b/content/common/gpu/client/gl_helper.cc
index e8afdd1da9a740bd5107a6c658d54a58ba1e3fe6..0a10d4aa7e5229e1b18ac1b369ad52bdf29aeb3d 100644
--- a/content/common/gpu/client/gl_helper.cc
+++ b/content/common/gpu/client/gl_helper.cc
@@ -154,7 +154,7 @@ class GLHelper::CopyTextureToImpl :
const base::Callback<void(bool)>& callback);
void ReadbackPlane(TextureFrameBufferPair* source,
- media::VideoFrame* target,
+ const scoped_refptr<media::VideoFrame>& target,
int plane,
int size_shift,
const gfx::Rect& dst_subrect,
@@ -232,7 +232,7 @@ class GLHelper::CopyTextureToImpl :
virtual void ReadbackYUV(
const gpu::Mailbox& mailbox,
uint32 sync_point,
- media::VideoFrame* target,
+ const scoped_refptr<media::VideoFrame>& target,
const base::Callback<void(bool)>& callback) OVERRIDE;
virtual ScalerInterface* scaler() OVERRIDE {
@@ -270,7 +270,7 @@ class GLHelper::CopyTextureToImpl :
virtual void ReadbackYUV(
const gpu::Mailbox& mailbox,
uint32 sync_point,
- media::VideoFrame* target,
+ const scoped_refptr<media::VideoFrame>& target,
const base::Callback<void(bool)>& callback) OVERRIDE;
virtual ScalerInterface* scaler() OVERRIDE {
@@ -729,7 +729,7 @@ void GLHelper::CopyTextureFullImage(WebKit::WebGLId texture,
void GLHelper::CopyTextureToImpl::ReadbackPlane(
TextureFrameBufferPair* source,
- media::VideoFrame* target,
+ const scoped_refptr<media::VideoFrame>& target,
int plane,
int size_shift,
const gfx::Rect& dst_subrect,
@@ -813,11 +813,17 @@ GLHelper::CopyTextureToImpl::ReadbackYUVImpl::ReadbackYUVImpl(
DCHECK(!(dst_subrect.y() & 1));
}
+static void CallbackKeepingVideoFrameAlive(
+ scoped_refptr<media::VideoFrame> video_frame,
+ const base::Callback<void(bool)>& callback,
+ bool success) {
+ callback.Run(success);
+}
void GLHelper::CopyTextureToImpl::ReadbackYUVImpl::ReadbackYUV(
const gpu::Mailbox& mailbox,
uint32 sync_point,
- media::VideoFrame *target,
+ const scoped_refptr<media::VideoFrame>& target,
const base::Callback<void(bool)>& callback) {
WebGLId mailbox_texture =
copy_impl_->ConsumeMailboxToTexture(mailbox, sync_point);
@@ -838,7 +844,8 @@ void GLHelper::CopyTextureToImpl::ReadbackYUVImpl::ReadbackYUV(
return;
}
- // Read back planes, one at a time.
+ // Read back planes, one at a time. Keep the video frame alive while doing the
+ // readback.
copy_impl_->ReadbackPlane(y_.texture_and_framebuffer(),
target,
media::VideoFrame::kYPlane,
@@ -856,7 +863,9 @@ void GLHelper::CopyTextureToImpl::ReadbackYUVImpl::ReadbackYUV(
media::VideoFrame::kVPlane,
1,
dst_subrect_,
- callback);
+ base::Bind(&CallbackKeepingVideoFrameAlive,
danakj 2013/07/31 20:14:50 This was causing an ASAN failure for the FrameSubs
+ target,
+ callback));
context_->bindFramebuffer(GL_FRAMEBUFFER, 0);
media::LetterboxYUV(target, dst_subrect_);
}
@@ -933,7 +942,7 @@ GLHelper::CopyTextureToImpl::ReadbackYUV_MRT::ReadbackYUV_MRT(
void GLHelper::CopyTextureToImpl::ReadbackYUV_MRT::ReadbackYUV(
const gpu::Mailbox& mailbox,
uint32 sync_point,
- media::VideoFrame *target,
+ const scoped_refptr<media::VideoFrame>& target,
const base::Callback<void(bool)>& callback) {
WebGLId mailbox_texture =
copy_impl_->ConsumeMailboxToTexture(mailbox, sync_point);
@@ -976,7 +985,9 @@ void GLHelper::CopyTextureToImpl::ReadbackYUV_MRT::ReadbackYUV(
media::VideoFrame::kVPlane,
1,
dst_subrect_,
- callback);
+ base::Bind(&CallbackKeepingVideoFrameAlive,
+ target,
+ callback));
context_->bindFramebuffer(GL_FRAMEBUFFER, 0);
media::LetterboxYUV(target, dst_subrect_);
}

Powered by Google App Engine
This is Rietveld 408576698