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

Side by Side Diff: content/renderer/media/image_capture_frame_grabber.cc

Issue 2686173003: Remove uses of skia::GetWritablePixels(PaintCanvas) (Closed)
Patch Set: Add more deps Created 3 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "content/renderer/media/image_capture_frame_grabber.h" 5 #include "content/renderer/media/image_capture_frame_grabber.h"
6 6
7 #include "cc/paint/paint_canvas.h"
8 #include "cc/paint/paint_surface.h"
7 #include "media/base/bind_to_current_loop.h" 9 #include "media/base/bind_to_current_loop.h"
8 #include "media/base/video_frame.h" 10 #include "media/base/video_frame.h"
9 #include "media/base/video_util.h" 11 #include "media/base/video_util.h"
10 #include "skia/ext/platform_canvas.h" 12 #include "skia/ext/platform_canvas.h"
11 #include "third_party/WebKit/public/platform/WebCallbacks.h" 13 #include "third_party/WebKit/public/platform/WebCallbacks.h"
12 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 14 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
13 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 15 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
14 #include "third_party/libyuv/include/libyuv.h" 16 #include "third_party/libyuv/include/libyuv.h"
15 #include "third_party/skia/include/core/SkImage.h" 17 #include "third_party/skia/include/core/SkImage.h"
16 #include "third_party/skia/include/core/SkSurface.h"
17 18
18 namespace content { 19 namespace content {
19 20
20 using blink::WebImageCaptureGrabFrameCallbacks; 21 using blink::WebImageCaptureGrabFrameCallbacks;
21 22
22 namespace { 23 namespace {
23 24
24 void OnError(std::unique_ptr<WebImageCaptureGrabFrameCallbacks> callbacks) { 25 void OnError(std::unique_ptr<WebImageCaptureGrabFrameCallbacks> callbacks) {
25 callbacks->onError(); 26 callbacks->onError();
26 } 27 }
27 28
28 } // anonymous namespace 29 } // anonymous namespace
29 30
30 // Ref-counted class to receive a single VideoFrame on IO thread, convert it and 31 // Ref-counted class to receive a single VideoFrame on IO thread, convert it and
31 // send it to |main_task_runner_|, where this class is created and destroyed. 32 // send it to |main_task_runner_|, where this class is created and destroyed.
32 class ImageCaptureFrameGrabber::SingleShotFrameHandler 33 class ImageCaptureFrameGrabber::SingleShotFrameHandler
33 : public base::RefCountedThreadSafe<SingleShotFrameHandler> { 34 : public base::RefCountedThreadSafe<SingleShotFrameHandler> {
34 public: 35 public:
35 SingleShotFrameHandler() : first_frame_received_(false) {} 36 SingleShotFrameHandler() : first_frame_received_(false) {}
36 37
37 // Receives a |frame| and converts its pixels into a SkImage via an internal 38 // Receives a |frame| and converts its pixels into a SkImage via an internal
38 // SkSurface and SkPixmap. Alpha channel, if any, is copied. 39 // PaintSurface and SkPixmap. Alpha channel, if any, is copied.
39 void OnVideoFrameOnIOThread(SkImageDeliverCB callback, 40 void OnVideoFrameOnIOThread(SkImageDeliverCB callback,
40 const scoped_refptr<media::VideoFrame>& frame, 41 const scoped_refptr<media::VideoFrame>& frame,
41 base::TimeTicks current_time); 42 base::TimeTicks current_time);
42 43
43 private: 44 private:
44 friend class base::RefCountedThreadSafe<SingleShotFrameHandler>; 45 friend class base::RefCountedThreadSafe<SingleShotFrameHandler>;
45 virtual ~SingleShotFrameHandler() {} 46 virtual ~SingleShotFrameHandler() {}
46 47
47 // Flag to indicate that the first frames has been processed, and subsequent 48 // Flag to indicate that the first frames has been processed, and subsequent
48 // ones can be safely discarded. 49 // ones can be safely discarded.
(...skipping 13 matching lines...) Expand all
62 if (first_frame_received_) 63 if (first_frame_received_)
63 return; 64 return;
64 first_frame_received_ = true; 65 first_frame_received_ = true;
65 66
66 const SkAlphaType alpha = media::IsOpaque(frame->format()) 67 const SkAlphaType alpha = media::IsOpaque(frame->format())
67 ? kOpaque_SkAlphaType 68 ? kOpaque_SkAlphaType
68 : kPremul_SkAlphaType; 69 : kPremul_SkAlphaType;
69 const SkImageInfo info = SkImageInfo::MakeN32( 70 const SkImageInfo info = SkImageInfo::MakeN32(
70 frame->visible_rect().width(), frame->visible_rect().height(), alpha); 71 frame->visible_rect().width(), frame->visible_rect().height(), alpha);
71 72
72 sk_sp<SkSurface> surface = SkSurface::MakeRaster(info); 73 sk_sp<cc::PaintSurface> surface = cc::PaintSurface::MakeRaster(info);
73 DCHECK(surface); 74 DCHECK(surface);
74 75
75 SkPixmap pixmap; 76 SkPixmap pixmap;
76 if (!skia::GetWritablePixels(surface->getCanvas(), &pixmap)) { 77 if (!cc::ToPixmap(surface->getCanvas(), &pixmap)) {
77 DLOG(ERROR) << "Error trying to map SkSurface's pixels"; 78 DLOG(ERROR) << "Error trying to map PaintSurface's pixels";
78 callback.Run(sk_sp<SkImage>()); 79 callback.Run(sk_sp<SkImage>());
79 return; 80 return;
80 } 81 }
81 82
82 const uint32 destination_pixel_format = 83 const uint32 destination_pixel_format =
83 (kN32_SkColorType == kRGBA_8888_SkColorType) ? libyuv::FOURCC_ABGR 84 (kN32_SkColorType == kRGBA_8888_SkColorType) ? libyuv::FOURCC_ABGR
84 : libyuv::FOURCC_ARGB; 85 : libyuv::FOURCC_ARGB;
85 86
86 libyuv::ConvertFromI420(frame->visible_data(media::VideoFrame::kYPlane), 87 libyuv::ConvertFromI420(frame->visible_data(media::VideoFrame::kYPlane),
87 frame->stride(media::VideoFrame::kYPlane), 88 frame->stride(media::VideoFrame::kYPlane),
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 155
155 MediaStreamVideoSink::DisconnectFromTrack(); 156 MediaStreamVideoSink::DisconnectFromTrack();
156 frame_grab_in_progress_ = false; 157 frame_grab_in_progress_ = false;
157 if (image) 158 if (image)
158 callbacks.PassCallbacks()->onSuccess(image); 159 callbacks.PassCallbacks()->onSuccess(image);
159 else 160 else
160 callbacks.PassCallbacks()->onError(); 161 callbacks.PassCallbacks()->onError();
161 } 162 }
162 163
163 } // namespace content 164 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698