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

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

Issue 1829193003: Request frame for new sinks from MediaStreamVideoTrack (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: miu@ nit. 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"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 frame_rate_, media::PIXEL_FORMAT_YV12A)); 78 frame_rate_, media::PIXEL_FORMAT_YV12A));
79 callback.Run(formats); 79 callback.Run(formats);
80 } 80 }
81 void StartCapture(const media::VideoCaptureParams& params, 81 void StartCapture(const media::VideoCaptureParams& params,
82 const VideoCaptureDeliverFrameCB& frame_callback, 82 const VideoCaptureDeliverFrameCB& frame_callback,
83 const RunningCallback& running_callback) override { 83 const RunningCallback& running_callback) override {
84 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 84 DCHECK(main_render_thread_checker_.CalledOnValidThread());
85 canvas_handler_->StartVideoCapture(params, frame_callback, 85 canvas_handler_->StartVideoCapture(params, frame_callback,
86 running_callback); 86 running_callback);
87 } 87 }
88 void RequestRefreshFrame() override {
89 DCHECK(main_render_thread_checker_.CalledOnValidThread());
90 canvas_handler_->RequestRefreshFrame();
91 }
88 void StopCapture() override { 92 void StopCapture() override {
89 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 93 DCHECK(main_render_thread_checker_.CalledOnValidThread());
90 if (canvas_handler_.get()) 94 if (canvas_handler_.get())
91 canvas_handler_->StopVideoCapture(); 95 canvas_handler_->StopVideoCapture();
92 } 96 }
93 97
94 private: 98 private:
95 const double frame_rate_; 99 const double frame_rate_;
96 // Bound to Main Render thread. 100 // Bound to Main Render thread.
97 base::ThreadChecker main_render_thread_checker_; 101 base::ThreadChecker main_render_thread_checker_;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 DCHECK(params.requested_format.IsValid()); 191 DCHECK(params.requested_format.IsValid());
188 192
189 // TODO(emircan): Accomodate to the given frame rate constraints here. 193 // TODO(emircan): Accomodate to the given frame rate constraints here.
190 capture_format_ = params.requested_format; 194 capture_format_ = params.requested_format;
191 delegate_.reset(new CanvasCaptureHandlerDelegate(new_frame_callback)); 195 delegate_.reset(new CanvasCaptureHandlerDelegate(new_frame_callback));
192 DCHECK(delegate_); 196 DCHECK(delegate_);
193 ask_for_new_frame_ = true; 197 ask_for_new_frame_ = true;
194 running_callback.Run(true); 198 running_callback.Run(true);
195 } 199 }
196 200
201 void CanvasCaptureHandler::RequestRefreshFrame() {
202 DVLOG(3) << __FUNCTION__;
203 DCHECK(main_render_thread_checker_.CalledOnValidThread());
204 if (last_frame_ && delegate_) {
205 io_task_runner_->PostTask(
206 FROM_HERE,
207 base::Bind(&CanvasCaptureHandler::CanvasCaptureHandlerDelegate::
208 SendNewFrameOnIOThread,
209 delegate_->GetWeakPtrForIOThread(), last_frame_,
210 base::TimeTicks::Now()));
211 }
212 }
213
197 void CanvasCaptureHandler::StopVideoCapture() { 214 void CanvasCaptureHandler::StopVideoCapture() {
198 DVLOG(3) << __FUNCTION__; 215 DVLOG(3) << __FUNCTION__;
199 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 216 DCHECK(main_render_thread_checker_.CalledOnValidThread());
200 ask_for_new_frame_ = false; 217 ask_for_new_frame_ = false;
201 io_task_runner_->DeleteSoon(FROM_HERE, delegate_.release()); 218 io_task_runner_->DeleteSoon(FROM_HERE, delegate_.release());
202 } 219 }
203 220
204 void CanvasCaptureHandler::CreateNewFrame(const SkImage* image) { 221 void CanvasCaptureHandler::CreateNewFrame(const SkImage* image) {
222 DVLOG(4) << __FUNCTION__;
205 DCHECK(main_render_thread_checker_.CalledOnValidThread()); 223 DCHECK(main_render_thread_checker_.CalledOnValidThread());
206 DCHECK(image); 224 DCHECK(image);
207 225
208 const gfx::Size size(image->width(), image->height()); 226 const gfx::Size size(image->width(), image->height());
209 if (size != last_size) { 227 if (size != last_size) {
210 temp_data_.resize( 228 temp_data_.resize(
211 media::VideoFrame::AllocationSize(media::PIXEL_FORMAT_ARGB, size)); 229 media::VideoFrame::AllocationSize(media::PIXEL_FORMAT_ARGB, size));
212 row_bytes_ = 230 row_bytes_ =
213 media::VideoFrame::RowBytes(0, media::PIXEL_FORMAT_ARGB, size.width()); 231 media::VideoFrame::RowBytes(0, media::PIXEL_FORMAT_ARGB, size.width());
214 image_info_ = 232 image_info_ =
(...skipping 21 matching lines...) Expand all
236 video_frame->stride(media::VideoFrame::kUPlane), 254 video_frame->stride(media::VideoFrame::kUPlane),
237 video_frame->data(media::VideoFrame::kVPlane), 255 video_frame->data(media::VideoFrame::kVPlane),
238 video_frame->stride(media::VideoFrame::kVPlane), 256 video_frame->stride(media::VideoFrame::kVPlane),
239 size.width(), size.height()); 257 size.width(), size.height());
240 if (!isOpaque) { 258 if (!isOpaque) {
241 // TODO(emircan): Use https://code.google.com/p/libyuv/issues/detail?id=572 259 // TODO(emircan): Use https://code.google.com/p/libyuv/issues/detail?id=572
242 // when it becomes available. 260 // when it becomes available.
243 CopyAlphaChannelIntoVideoFrame(temp_data_.data(), video_frame); 261 CopyAlphaChannelIntoVideoFrame(temp_data_.data(), video_frame);
244 } 262 }
245 263
264 last_frame_ = video_frame;
246 io_task_runner_->PostTask( 265 io_task_runner_->PostTask(
247 FROM_HERE, 266 FROM_HERE,
248 base::Bind(&CanvasCaptureHandler::CanvasCaptureHandlerDelegate:: 267 base::Bind(&CanvasCaptureHandler::CanvasCaptureHandlerDelegate::
249 SendNewFrameOnIOThread, 268 SendNewFrameOnIOThread,
250 delegate_->GetWeakPtrForIOThread(), video_frame, timestamp)); 269 delegate_->GetWeakPtrForIOThread(), video_frame, timestamp));
251 } 270 }
252 271
253 void CanvasCaptureHandler::AddVideoCapturerSourceToVideoTrack( 272 void CanvasCaptureHandler::AddVideoCapturerSourceToVideoTrack(
254 scoped_ptr<media::VideoCapturerSource> source, 273 scoped_ptr<media::VideoCapturerSource> source,
255 blink::WebMediaStreamTrack* web_track) { 274 blink::WebMediaStreamTrack* web_track) {
(...skipping 10 matching lines...) Expand all
266 285
267 web_track->initialize(webkit_source); 286 web_track->initialize(webkit_source);
268 blink::WebMediaConstraints constraints; 287 blink::WebMediaConstraints constraints;
269 constraints.initialize(); 288 constraints.initialize();
270 web_track->setExtraData(new MediaStreamVideoTrack( 289 web_track->setExtraData(new MediaStreamVideoTrack(
271 media_stream_source.release(), constraints, 290 media_stream_source.release(), constraints,
272 MediaStreamVideoSource::ConstraintsCallback(), true)); 291 MediaStreamVideoSource::ConstraintsCallback(), true));
273 } 292 }
274 293
275 } // namespace content 294 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/canvas_capture_handler.h ('k') | content/renderer/media/media_stream_video_capturer_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698