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

Unified Diff: content/renderer/media/canvas_capture_handler.cc

Issue 1918073003: Fix odd size and visible rect issues in CanvasCaptureHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « no previous file | content/renderer/media/canvas_capture_handler_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/canvas_capture_handler.cc
diff --git a/content/renderer/media/canvas_capture_handler.cc b/content/renderer/media/canvas_capture_handler.cc
index 7990739097cc1b8155eb2afcd848b206a06adf12..99e58a3933e5af8627c0a72916d04c42adacad1c 100644
--- a/content/renderer/media/canvas_capture_handler.cc
+++ b/content/renderer/media/canvas_capture_handler.cc
@@ -23,25 +23,27 @@
namespace {
+using media::VideoFrame;
+
static void CopyAlphaChannelIntoVideoFrame(
- const uint8_t* const source,
- const scoped_refptr<media::VideoFrame>& dest_frame) {
- const gfx::Size& size = dest_frame->coded_size();
- const int stride = dest_frame->stride(media::VideoFrame::kAPlane);
-
- if (stride == size.width()) {
- for (int p = 0; p < size.GetArea(); ++p)
- dest_frame->data(media::VideoFrame::kAPlane)[p] = source[p * 4 + 3];
+ const uint8_t* const source_data,
+ const gfx::Size& source_size,
+ const scoped_refptr<VideoFrame>& dest_frame) {
+ const int dest_stride = dest_frame->stride(VideoFrame::kAPlane);
+ if (dest_stride == source_size.width()) {
+ for (int p = 0; p < source_size.GetArea(); ++p) {
+ dest_frame->visible_data(VideoFrame::kAPlane)[p] = source_data[p * 4 + 3];
+ }
return;
}
- // Copy apha values one-by-one if the destination stride != source width.
- for (int h = 0; h < size.height(); ++h) {
- const uint8_t* const src_ptr = &source[4 * h * size.width()];
+ // Copy alpha values one-by-one if the destination stride != source width.
+ for (int h = 0; h < source_size.height(); ++h) {
+ const uint8_t* const src_ptr = &source_data[4 * h * source_size.width()];
uint8_t* dest_ptr =
- &dest_frame->data(media::VideoFrame::kAPlane)[h * stride];
- for (int pixel_index = 0; pixel_index < 4 * size.width(); pixel_index += 4)
- *(dest_ptr++) = src_ptr[pixel_index + 3];
+ &dest_frame->visible_data(VideoFrame::kAPlane)[h * dest_stride];
+ for (int pixel = 0; pixel < 4 * source_size.width(); pixel += 4)
+ *(dest_ptr++) = src_ptr[pixel + 3];
}
}
@@ -248,17 +250,17 @@ void CanvasCaptureHandler::CreateNewFrame(const SkImage* image) {
DCHECK(video_frame);
libyuv::ARGBToI420(temp_data_.data(), row_bytes_,
- video_frame->data(media::VideoFrame::kYPlane),
+ video_frame->visible_data(media::VideoFrame::kYPlane),
video_frame->stride(media::VideoFrame::kYPlane),
- video_frame->data(media::VideoFrame::kUPlane),
+ video_frame->visible_data(media::VideoFrame::kUPlane),
video_frame->stride(media::VideoFrame::kUPlane),
- video_frame->data(media::VideoFrame::kVPlane),
+ video_frame->visible_data(media::VideoFrame::kVPlane),
video_frame->stride(media::VideoFrame::kVPlane),
size.width(), size.height());
if (!isOpaque) {
// TODO(emircan): Use https://code.google.com/p/libyuv/issues/detail?id=572
// when it becomes available.
- CopyAlphaChannelIntoVideoFrame(temp_data_.data(), video_frame);
+ CopyAlphaChannelIntoVideoFrame(temp_data_.data(), size, video_frame);
}
last_frame_ = video_frame;
« no previous file with comments | « no previous file | content/renderer/media/canvas_capture_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698