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

Side by Side Diff: media/blink/skcanvas_video_renderer.cc

Issue 1325173005: Video to canvas: don't draw if a SkImage can't be created. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add test. Created 5 years, 3 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 | « no previous file | media/blink/skcanvas_video_renderer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "media/blink/skcanvas_video_renderer.h" 5 #include "media/blink/skcanvas_video_renderer.h"
6 6
7 #include "gpu/GLES2/gl2extchromium.h" 7 #include "gpu/GLES2/gl2extchromium.h"
8 #include "gpu/command_buffer/client/gles2_interface.h" 8 #include "gpu/command_buffer/client/gles2_interface.h"
9 #include "gpu/command_buffer/common/mailbox_holder.h" 9 #include "gpu/command_buffer/common/mailbox_holder.h"
10 #include "media/base/video_frame.h" 10 #include "media/base/video_frame.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 118
119 SkYUVColorSpace color_space = kRec601_SkYUVColorSpace; 119 SkYUVColorSpace color_space = kRec601_SkYUVColorSpace;
120 if (CheckColorSpace(video_frame, media::COLOR_SPACE_JPEG)) 120 if (CheckColorSpace(video_frame, media::COLOR_SPACE_JPEG))
121 color_space = kJPEG_SkYUVColorSpace; 121 color_space = kJPEG_SkYUVColorSpace;
122 else if (CheckColorSpace(video_frame, media::COLOR_SPACE_HD_REC709)) 122 else if (CheckColorSpace(video_frame, media::COLOR_SPACE_HD_REC709))
123 color_space = kRec709_SkYUVColorSpace; 123 color_space = kRec709_SkYUVColorSpace;
124 124
125 SkImage* img = SkImage::NewFromYUVTexturesCopy(context_3d.gr_context, 125 SkImage* img = SkImage::NewFromYUVTexturesCopy(context_3d.gr_context,
126 color_space, handles, yuvSizes, 126 color_space, handles, yuvSizes,
127 kTopLeft_GrSurfaceOrigin); 127 kTopLeft_GrSurfaceOrigin);
128 DCHECK(img);
129 gl->DeleteTextures(3, source_textures); 128 gl->DeleteTextures(3, source_textures);
130 return skia::AdoptRef(img); 129 return skia::AdoptRef(img);
131 } 130 }
132 131
133 // Creates a SkImage from a |video_frame| backed by native resources. 132 // Creates a SkImage from a |video_frame| backed by native resources.
134 // The SkImage will take ownership of the underlying resource. 133 // The SkImage will take ownership of the underlying resource.
135 skia::RefPtr<SkImage> NewSkImageFromVideoFrameNative( 134 skia::RefPtr<SkImage> NewSkImageFromVideoFrameNative(
136 VideoFrame* video_frame, 135 VideoFrame* video_frame,
137 const Context3D& context_3d) { 136 const Context3D& context_3d) {
138 DCHECK(PIXEL_FORMAT_ARGB == video_frame->format() || 137 DCHECK(PIXEL_FORMAT_ARGB == video_frame->format() ||
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 last_image_ = 326 last_image_ =
328 NewSkImageFromVideoFrameNative(video_frame.get(), context_3d); 327 NewSkImageFromVideoFrameNative(video_frame.get(), context_3d);
329 } else { 328 } else {
330 last_image_ = 329 last_image_ =
331 NewSkImageFromVideoFrameYUVTextures(video_frame.get(), context_3d); 330 NewSkImageFromVideoFrameYUVTextures(video_frame.get(), context_3d);
332 } 331 }
333 } else { 332 } else {
334 auto video_generator = new VideoImageGenerator(video_frame); 333 auto video_generator = new VideoImageGenerator(video_frame);
335 last_image_ = skia::AdoptRef(SkImage::NewFromGenerator(video_generator)); 334 last_image_ = skia::AdoptRef(SkImage::NewFromGenerator(video_generator));
336 } 335 }
337 last_timestamp_ = video_frame->timestamp(); 336 if (last_image_) {
DaleCurtis 2015/09/04 21:27:09 if (!last_image_) return;
Daniele Castagna 2015/09/04 21:31:32 Done.
337 last_timestamp_ = video_frame->timestamp();
338 } else { // Couldn't create the SkImage.
339 return;
340 }
338 } 341 }
339 last_image_deleting_timer_.Reset(); 342 last_image_deleting_timer_.Reset();
340 343
341 paint.setXfermodeMode(mode); 344 paint.setXfermodeMode(mode);
342 paint.setFilterQuality(kLow_SkFilterQuality); 345 paint.setFilterQuality(kLow_SkFilterQuality);
343 346
344 const bool need_transform = 347 const bool need_transform =
345 video_rotation != VIDEO_ROTATION_0 || 348 video_rotation != VIDEO_ROTATION_0 ||
346 dest_rect.size() != video_frame->visible_rect().size() || 349 dest_rect.size() != video_frame->visible_rect().size() ||
347 !dest_rect.origin().IsOrigin(); 350 !dest_rect.origin().IsOrigin();
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 video_frame->UpdateReleaseSyncPoint(&client); 572 video_frame->UpdateReleaseSyncPoint(&client);
570 } 573 }
571 574
572 void SkCanvasVideoRenderer::ResetCache() { 575 void SkCanvasVideoRenderer::ResetCache() {
573 // Clear cached values. 576 // Clear cached values.
574 last_image_ = nullptr; 577 last_image_ = nullptr;
575 last_timestamp_ = kNoTimestamp(); 578 last_timestamp_ = kNoTimestamp();
576 } 579 }
577 580
578 } // namespace media 581 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | media/blink/skcanvas_video_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698