| 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;
|
|
|