Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/webrtc/webrtc_video_capturer_adapter.h" | 5 #include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/aligned_memory.h" | 8 #include "base/memory/aligned_memory.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/synchronization/waitable_event.h" | 10 #include "base/synchronization/waitable_event.h" |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 136 (*new_frame)->visible_rect().width(), | 136 (*new_frame)->visible_rect().width(), |
| 137 (*new_frame)->visible_rect().height(), libyuv::kRotate0, | 137 (*new_frame)->visible_rect().height(), libyuv::kRotate0, |
| 138 source_pixel_format); | 138 source_pixel_format); |
| 139 } | 139 } |
| 140 | 140 |
| 141 const scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; | 141 const scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; |
| 142 scoped_refptr<ContextProviderCommandBuffer> provider_; | 142 scoped_refptr<ContextProviderCommandBuffer> provider_; |
| 143 std::unique_ptr<media::SkCanvasVideoRenderer> canvas_video_renderer_; | 143 std::unique_ptr<media::SkCanvasVideoRenderer> canvas_video_renderer_; |
| 144 }; | 144 }; |
| 145 | 145 |
| 146 WebRtcVideoCapturerAdapter::WebRtcVideoCapturerAdapter(bool is_screencast) | 146 WebRtcVideoCapturerAdapter::WebRtcVideoCapturerAdapter( |
| 147 bool is_screencast, | |
| 148 blink::WebMediaStreamTrack::ContentHintType content_hint) | |
| 147 : texture_copier_(new WebRtcVideoCapturerAdapter::TextureFrameCopier()), | 149 : texture_copier_(new WebRtcVideoCapturerAdapter::TextureFrameCopier()), |
| 148 is_screencast_(is_screencast), | 150 is_screencast_(is_screencast), |
| 151 content_hint_(content_hint), | |
| 149 running_(false) { | 152 running_(false) { |
| 150 thread_checker_.DetachFromThread(); | 153 thread_checker_.DetachFromThread(); |
| 151 } | 154 } |
| 152 | 155 |
| 153 WebRtcVideoCapturerAdapter::~WebRtcVideoCapturerAdapter() { | 156 WebRtcVideoCapturerAdapter::~WebRtcVideoCapturerAdapter() { |
| 154 DVLOG(3) << __func__; | 157 DVLOG(3) << __func__; |
| 155 } | 158 } |
| 156 | 159 |
| 157 void WebRtcVideoCapturerAdapter::OnFrameCaptured( | 160 void WebRtcVideoCapturerAdapter::OnFrameCaptured( |
| 158 const scoped_refptr<media::VideoFrame>& input_frame) { | 161 const scoped_refptr<media::VideoFrame>& input_frame) { |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 293 bool WebRtcVideoCapturerAdapter::GetPreferredFourccs( | 296 bool WebRtcVideoCapturerAdapter::GetPreferredFourccs( |
| 294 std::vector<uint32_t>* fourccs) { | 297 std::vector<uint32_t>* fourccs) { |
| 295 DCHECK(thread_checker_.CalledOnValidThread()); | 298 DCHECK(thread_checker_.CalledOnValidThread()); |
| 296 if (!fourccs) | 299 if (!fourccs) |
| 297 return false; | 300 return false; |
| 298 DCHECK(fourccs->empty()); | 301 DCHECK(fourccs->empty()); |
| 299 fourccs->push_back(cricket::FOURCC_I420); | 302 fourccs->push_back(cricket::FOURCC_I420); |
| 300 return true; | 303 return true; |
| 301 } | 304 } |
| 302 | 305 |
| 306 void WebRtcVideoCapturerAdapter::SetContentHint( | |
| 307 blink::WebMediaStreamTrack::ContentHintType content_hint) { | |
| 308 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 309 content_hint_ = content_hint; | |
| 310 } | |
| 311 | |
| 303 bool WebRtcVideoCapturerAdapter::IsScreencast() const { | 312 bool WebRtcVideoCapturerAdapter::IsScreencast() const { |
| 304 return is_screencast_; | 313 return !ShouldAdaptResolution(); |
| 314 } | |
| 315 | |
| 316 bool WebRtcVideoCapturerAdapter::ShouldAdaptResolution() const { | |
| 317 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 318 if (content_hint_ == | |
| 319 blink::WebMediaStreamTrack::ContentHintType::VideoFluid) { | |
| 320 return true; | |
| 321 } else if (content_hint_ == | |
|
mcasas
2016/12/19 19:32:05
nit: no need for else{} after if(){ return }
pbos
2016/12/19 19:42:09
Done.
| |
| 322 blink::WebMediaStreamTrack::ContentHintType::VideoDetailed) { | |
| 323 return false; | |
| 324 } | |
| 325 // Screencast does not adapt by default. | |
| 326 return !is_screencast_; | |
| 305 } | 327 } |
| 306 | 328 |
| 307 bool WebRtcVideoCapturerAdapter::GetBestCaptureFormat( | 329 bool WebRtcVideoCapturerAdapter::GetBestCaptureFormat( |
| 308 const cricket::VideoFormat& desired, | 330 const cricket::VideoFormat& desired, |
| 309 cricket::VideoFormat* best_format) { | 331 cricket::VideoFormat* best_format) { |
| 310 DCHECK(thread_checker_.CalledOnValidThread()); | 332 DCHECK(thread_checker_.CalledOnValidThread()); |
| 311 DVLOG(3) << __func__ << " desired: " << desired.ToString(); | 333 DVLOG(3) << __func__ << " desired: " << desired.ToString(); |
| 312 | 334 |
| 313 // Capability enumeration is done in MediaStreamVideoSource. The adapter can | 335 // Capability enumeration is done in MediaStreamVideoSource. The adapter can |
| 314 // just use what is provided. | 336 // just use what is provided. |
| 315 // Use the desired format as the best format. | 337 // Use the desired format as the best format. |
| 316 best_format->width = desired.width; | 338 best_format->width = desired.width; |
| 317 best_format->height = desired.height; | 339 best_format->height = desired.height; |
| 318 best_format->fourcc = cricket::FOURCC_I420; | 340 best_format->fourcc = cricket::FOURCC_I420; |
| 319 best_format->interval = desired.interval; | 341 best_format->interval = desired.interval; |
| 320 return true; | 342 return true; |
| 321 } | 343 } |
| 322 | 344 |
| 323 } // namespace content | 345 } // namespace content |
| OLD | NEW |