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

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

Issue 901573004: Use the supplied memory for YUV decoding. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added optimized copy for well aligned planes Created 5 years, 10 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 | no next file » | 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/filters/skcanvas_video_renderer.h" 5 #include "media/filters/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 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 int y_shift = (frame_->format() == media::VideoFrame::YV16) ? 0 : 1; 383 int y_shift = (frame_->format() == media::VideoFrame::YV16) ? 0 : 1;
384 if (plane == media::VideoFrame::kYPlane) { 384 if (plane == media::VideoFrame::kYPlane) {
385 offset = (frame_->stride(media::VideoFrame::kYPlane) * 385 offset = (frame_->stride(media::VideoFrame::kYPlane) *
386 frame_->visible_rect().y()) + 386 frame_->visible_rect().y()) +
387 frame_->visible_rect().x(); 387 frame_->visible_rect().x();
388 } else { 388 } else {
389 offset = (frame_->stride(media::VideoFrame::kUPlane) * 389 offset = (frame_->stride(media::VideoFrame::kUPlane) *
390 (frame_->visible_rect().y() >> y_shift)) + 390 (frame_->visible_rect().y() >> y_shift)) +
391 (frame_->visible_rect().x() >> 1); 391 (frame_->visible_rect().x() >> 1);
392 } 392 }
393 row_bytes[plane] = static_cast<size_t>(frame_->stride(plane)); 393
394 planes[plane] = frame_->data(plane) + offset; 394 // Copy the frame to the supplied memory.
395 // TODO: Find a way (API change?) to avoid this copy.
396 char* out_line = static_cast<char*>(planes[plane]);
397 int out_line_stride = row_bytes[plane];
398 uint8* in_line = frame_->data(plane) + offset;
399 int in_line_stride = frame_->stride(plane);
400 int plane_height = sizes[plane].height();
401 if (in_line_stride == out_line_stride) {
402 memcpy(out_line, in_line, plane_height * in_line_stride);
403 } else {
404 // Different line padding so need to copy one line at a time.
405 int bytes_to_copy_per_line = out_line_stride < in_line_stride
406 ? out_line_stride
407 : in_line_stride;
408 for (int line_no = 0; line_no < plane_height; line_no++) {
409 memcpy(out_line, in_line, bytes_to_copy_per_line);
410 in_line += in_line_stride;
411 out_line += out_line_stride;
412 }
413 }
395 } 414 }
396 } 415 }
397 return true; 416 return true;
398 } 417 }
399 418
400 private: 419 private:
401 scoped_refptr<VideoFrame> frame_; 420 scoped_refptr<VideoFrame> frame_;
402 421
403 DISALLOW_IMPLICIT_CONSTRUCTORS(VideoImageGenerator); 422 DISALLOW_IMPLICIT_CONSTRUCTORS(VideoImageGenerator);
404 }; 423 };
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 last_frame_timestamp_ = media::kNoTimestamp(); 635 last_frame_timestamp_ = media::kNoTimestamp();
617 } 636 }
618 637
619 void SkCanvasVideoRenderer::ResetAcceleratedLastFrame() { 638 void SkCanvasVideoRenderer::ResetAcceleratedLastFrame() {
620 accelerated_last_frame_.reset(); 639 accelerated_last_frame_.reset();
621 accelerated_generator_ = nullptr; 640 accelerated_generator_ = nullptr;
622 accelerated_last_frame_timestamp_ = media::kNoTimestamp(); 641 accelerated_last_frame_timestamp_ = media::kNoTimestamp();
623 } 642 }
624 643
625 } // namespace media 644 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698