| OLD | NEW |
| 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 "base/base64.h" |
| 7 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 8 #include "content/public/renderer/media_stream_api.h" | 9 #include "base/rand_util.h" |
| 10 #include "base/strings/utf_string_conversions.h" |
| 9 #include "content/public/renderer/render_thread.h" | 11 #include "content/public/renderer/render_thread.h" |
| 12 #include "content/renderer/media/media_stream_video_capturer_source.h" |
| 13 #include "content/renderer/media/media_stream_video_source.h" |
| 14 #include "content/renderer/media/media_stream_video_track.h" |
| 10 #include "content/renderer/render_thread_impl.h" | 15 #include "content/renderer/render_thread_impl.h" |
| 16 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
| 17 #include "third_party/WebKit/public/platform/WebString.h" |
| 11 #include "third_party/libyuv/include/libyuv.h" | 18 #include "third_party/libyuv/include/libyuv.h" |
| 12 | 19 |
| 13 namespace content { | 20 namespace content { |
| 14 | 21 |
| 15 class CanvasCaptureHandler::VideoCapturerSource | 22 class CanvasCaptureHandler::VideoCapturerSource |
| 16 : public media::VideoCapturerSource { | 23 : public media::VideoCapturerSource { |
| 17 public: | 24 public: |
| 18 explicit VideoCapturerSource(base::WeakPtr<CanvasCaptureHandler> | 25 explicit VideoCapturerSource(base::WeakPtr<CanvasCaptureHandler> |
| 19 canvas_handler, | 26 canvas_handler, |
| 20 double frame_rate) | 27 double frame_rate) |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 const media::VideoCapturerSource::VideoCaptureDeliverFrameCB | 86 const media::VideoCapturerSource::VideoCaptureDeliverFrameCB |
| 80 new_frame_callback_; | 87 new_frame_callback_; |
| 81 base::ThreadChecker thread_checker_; | 88 base::ThreadChecker thread_checker_; |
| 82 base::WeakPtrFactory<CanvasCaptureHandlerDelegate> weak_ptr_factory_; | 89 base::WeakPtrFactory<CanvasCaptureHandlerDelegate> weak_ptr_factory_; |
| 83 | 90 |
| 84 DISALLOW_COPY_AND_ASSIGN(CanvasCaptureHandlerDelegate); | 91 DISALLOW_COPY_AND_ASSIGN(CanvasCaptureHandlerDelegate); |
| 85 }; | 92 }; |
| 86 | 93 |
| 87 CanvasCaptureHandler::CanvasCaptureHandler(const blink::WebSize& size, | 94 CanvasCaptureHandler::CanvasCaptureHandler(const blink::WebSize& size, |
| 88 double frame_rate, | 95 double frame_rate, |
| 89 blink::WebMediaStream* stream) | 96 blink::WebMediaStreamTrack* track) |
| 90 : ask_for_new_frame_(false), | 97 : ask_for_new_frame_(false), |
| 91 size_(size), | 98 size_(size), |
| 92 io_task_runner_(content::RenderThread::Get()->GetIOMessageLoopProxy()), | 99 io_task_runner_(content::RenderThread::Get()->GetIOMessageLoopProxy()), |
| 93 weak_ptr_factory_(this) { | 100 weak_ptr_factory_(this) { |
| 94 scoped_ptr<media::VideoCapturerSource> video_source( | 101 scoped_ptr<media::VideoCapturerSource> video_source( |
| 95 new CanvasCaptureHandler::VideoCapturerSource( | 102 new CanvasCaptureHandler::VideoCapturerSource( |
| 96 weak_ptr_factory_.GetWeakPtr(), frame_rate)); | 103 weak_ptr_factory_.GetWeakPtr(), frame_rate)); |
| 97 content::AddVideoTrackToMediaStream(video_source.Pass(), false, true, stream); | 104 AddVideoCapturerSourceToVideoTrack(video_source.Pass(), track); |
| 98 } | 105 } |
| 99 | 106 |
| 100 CanvasCaptureHandler::~CanvasCaptureHandler() { | 107 CanvasCaptureHandler::~CanvasCaptureHandler() { |
| 101 DVLOG(3) << __FUNCTION__; | 108 DVLOG(3) << __FUNCTION__; |
| 102 DCHECK(thread_checker_.CalledOnValidThread()); | 109 DCHECK(thread_checker_.CalledOnValidThread()); |
| 103 io_task_runner_->DeleteSoon(FROM_HERE, delegate_.release()); | 110 io_task_runner_->DeleteSoon(FROM_HERE, delegate_.release()); |
| 104 } | 111 } |
| 105 | 112 |
| 106 void CanvasCaptureHandler::sendNewFrame(const blink::WebSkImage& image) { | 113 void CanvasCaptureHandler::sendNewFrame(const blink::WebSkImage& image) { |
| 107 DCHECK(thread_checker_.CalledOnValidThread()); | 114 DCHECK(thread_checker_.CalledOnValidThread()); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 size.width(), size.height()); | 175 size.width(), size.height()); |
| 169 | 176 |
| 170 io_task_runner_->PostTask( | 177 io_task_runner_->PostTask( |
| 171 FROM_HERE, | 178 FROM_HERE, |
| 172 base::Bind(&CanvasCaptureHandler::CanvasCaptureHandlerDelegate:: | 179 base::Bind(&CanvasCaptureHandler::CanvasCaptureHandlerDelegate:: |
| 173 SendNewFrameOnIOThread, | 180 SendNewFrameOnIOThread, |
| 174 delegate_->GetWeakPtrForIOThread(), video_frame, | 181 delegate_->GetWeakPtrForIOThread(), video_frame, |
| 175 base::TimeTicks())); | 182 base::TimeTicks())); |
| 176 } | 183 } |
| 177 | 184 |
| 185 void CanvasCaptureHandler::AddVideoCapturerSourceToVideoTrack( |
| 186 scoped_ptr<media::VideoCapturerSource> source, |
| 187 blink::WebMediaStreamTrack* web_track) { |
| 188 std::string str_track_id; |
| 189 base::Base64Encode(base::RandBytesAsString(64), &str_track_id); |
| 190 const blink::WebString track_id = base::UTF8ToUTF16(str_track_id); |
| 191 blink::WebMediaStreamSource webkit_source; |
| 192 scoped_ptr<MediaStreamVideoSource> media_stream_source( |
| 193 new MediaStreamVideoCapturerSource( |
| 194 MediaStreamSource::SourceStoppedCallback(), source.Pass())); |
| 195 webkit_source.initialize(track_id, blink::WebMediaStreamSource::TypeVideo, |
| 196 track_id, false, true); |
| 197 webkit_source.setExtraData(media_stream_source.get()); |
| 198 |
| 199 web_track->initialize(webkit_source); |
| 200 blink::WebMediaConstraints constraints; |
| 201 constraints.initialize(); |
| 202 web_track->setExtraData(new MediaStreamVideoTrack( |
| 203 media_stream_source.release(), constraints, |
| 204 MediaStreamVideoSource::ConstraintsCallback(), true)); |
| 205 } |
| 206 |
| 178 } // namespace content | 207 } // namespace content |
| OLD | NEW |