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

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

Issue 1829563002: Handle early destruction of CanvasCaptureHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/canvas_capture_handler.h" 5 #include "content/renderer/media/canvas_capture_handler.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/rand_util.h" 12 #include "base/rand_util.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "content/public/renderer/render_thread.h" 14 #include "content/public/renderer/render_thread.h"
15 #include "content/renderer/media/media_stream_video_capturer_source.h" 15 #include "content/renderer/media/media_stream_video_capturer_source.h"
16 #include "content/renderer/media/media_stream_video_source.h" 16 #include "content/renderer/media/media_stream_video_source.h"
17 #include "content/renderer/media/media_stream_video_track.h" 17 #include "content/renderer/media/media_stream_video_track.h"
18 #include "content/renderer/media/webrtc_uma_histograms.h" 18 #include "content/renderer/media/webrtc_uma_histograms.h"
19 #include "content/renderer/render_thread_impl.h" 19 #include "content/renderer/render_thread_impl.h"
20 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 20 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
21 #include "third_party/WebKit/public/platform/WebString.h" 21 #include "third_party/WebKit/public/platform/WebString.h"
22 #include "third_party/libyuv/include/libyuv.h" 22 #include "third_party/libyuv/include/libyuv.h"
23 23
24 namespace content { 24 namespace content {
25 25
26 class CanvasCaptureHandler::VideoCapturerSource 26 // Implementation VideoCapturerSource that is owned by
27 : public media::VideoCapturerSource { 27 // MediaStreamVideoCapturerSource and delegates the Start/Stop calls to
28 // CanvasCaptureHandler.
29 // This class is single threaded and pinned to main render thread.
30 class VideoCapturerSource : public media::VideoCapturerSource {
28 public: 31 public:
29 explicit VideoCapturerSource(base::WeakPtr<CanvasCaptureHandler> 32 explicit VideoCapturerSource(base::WeakPtr<CanvasCaptureHandler>
30 canvas_handler, 33 canvas_handler,
31 double frame_rate) 34 double frame_rate)
32 : frame_rate_(frame_rate), 35 : frame_rate_(frame_rate),
33 canvas_handler_(canvas_handler) {} 36 canvas_handler_(canvas_handler) {}
34 37
35 protected: 38 protected:
36 void GetCurrentSupportedFormats( 39 void GetCurrentSupportedFormats(
37 int max_requested_width, 40 int max_requested_width,
(...skipping 13 matching lines...) Expand all
51 } 54 }
52 void StartCapture(const media::VideoCaptureParams& params, 55 void StartCapture(const media::VideoCaptureParams& params,
53 const VideoCaptureDeliverFrameCB& frame_callback, 56 const VideoCaptureDeliverFrameCB& frame_callback,
54 const RunningCallback& running_callback) override { 57 const RunningCallback& running_callback) override {
55 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 58 DCHECK(main_render_thread_checker_.CalledOnValidThread());
56 canvas_handler_->StartVideoCapture(params, frame_callback, 59 canvas_handler_->StartVideoCapture(params, frame_callback,
57 running_callback); 60 running_callback);
58 } 61 }
59 void StopCapture() override { 62 void StopCapture() override {
60 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 63 DCHECK(main_render_thread_checker_.CalledOnValidThread());
61 canvas_handler_->StopVideoCapture(); 64 if (canvas_handler_.get())
65 canvas_handler_->StopVideoCapture();
62 } 66 }
63 67
64 private: 68 private:
65 double frame_rate_; 69 const double frame_rate_;
66 // Bound to Main Render thread. 70 // Bound to Main Render thread.
67 base::ThreadChecker main_render_thread_checker_; 71 base::ThreadChecker main_render_thread_checker_;
68 // CanvasCaptureHandler is owned by CanvasDrawListener in blink and 72 // CanvasCaptureHandler is owned by CanvasDrawListener in blink and might be
69 // guaranteed to be alive during the lifetime of this class. 73 // destroyed before StopCapture() call.
70 base::WeakPtr<CanvasCaptureHandler> canvas_handler_; 74 base::WeakPtr<CanvasCaptureHandler> canvas_handler_;
71 }; 75 };
72 76
73 class CanvasCaptureHandler::CanvasCaptureHandlerDelegate { 77 class CanvasCaptureHandler::CanvasCaptureHandlerDelegate {
74 public: 78 public:
75 explicit CanvasCaptureHandlerDelegate( 79 explicit CanvasCaptureHandlerDelegate(
76 media::VideoCapturerSource::VideoCaptureDeliverFrameCB new_frame_callback) 80 media::VideoCapturerSource::VideoCaptureDeliverFrameCB new_frame_callback)
77 : new_frame_callback_(new_frame_callback), 81 : new_frame_callback_(new_frame_callback),
78 weak_ptr_factory_(this) { 82 weak_ptr_factory_(this) {
79 io_thread_checker_.DetachFromThread(); 83 io_thread_checker_.DetachFromThread();
(...skipping 26 matching lines...) Expand all
106 CanvasCaptureHandler::CanvasCaptureHandler( 110 CanvasCaptureHandler::CanvasCaptureHandler(
107 const blink::WebSize& size, 111 const blink::WebSize& size,
108 double frame_rate, 112 double frame_rate,
109 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, 113 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
110 blink::WebMediaStreamTrack* track) 114 blink::WebMediaStreamTrack* track)
111 : ask_for_new_frame_(false), 115 : ask_for_new_frame_(false),
112 size_(size), 116 size_(size),
113 io_task_runner_(io_task_runner), 117 io_task_runner_(io_task_runner),
114 weak_ptr_factory_(this) { 118 weak_ptr_factory_(this) {
115 scoped_ptr<media::VideoCapturerSource> video_source( 119 scoped_ptr<media::VideoCapturerSource> video_source(
116 new CanvasCaptureHandler::VideoCapturerSource( 120 new VideoCapturerSource(weak_ptr_factory_.GetWeakPtr(), frame_rate));
117 weak_ptr_factory_.GetWeakPtr(), frame_rate));
118 AddVideoCapturerSourceToVideoTrack(std::move(video_source), track); 121 AddVideoCapturerSourceToVideoTrack(std::move(video_source), track);
119 } 122 }
120 123
121 CanvasCaptureHandler::~CanvasCaptureHandler() { 124 CanvasCaptureHandler::~CanvasCaptureHandler() {
122 DVLOG(3) << __FUNCTION__; 125 DVLOG(3) << __FUNCTION__;
123 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 126 DCHECK(main_render_thread_checker_.CalledOnValidThread());
124 io_task_runner_->DeleteSoon(FROM_HERE, delegate_.release()); 127 io_task_runner_->DeleteSoon(FROM_HERE, delegate_.release());
125 } 128 }
126 129
127 // static 130 // static
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 241
239 web_track->initialize(webkit_source); 242 web_track->initialize(webkit_source);
240 blink::WebMediaConstraints constraints; 243 blink::WebMediaConstraints constraints;
241 constraints.initialize(); 244 constraints.initialize();
242 web_track->setExtraData(new MediaStreamVideoTrack( 245 web_track->setExtraData(new MediaStreamVideoTrack(
243 media_stream_source.release(), constraints, 246 media_stream_source.release(), constraints,
244 MediaStreamVideoSource::ConstraintsCallback(), true)); 247 MediaStreamVideoSource::ConstraintsCallback(), true));
245 } 248 }
246 249
247 } // namespace content 250 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/canvas_capture_handler.h ('k') | content/renderer/media/canvas_capture_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698