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

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2.h

Issue 2304363002: Let ViEEncoder express resolution requests as Sinkwants (Closed)
Patch Set: Rebased and fixed. Created 4 years, 2 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 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 void DeleteReceiveStream(WebRtcVideoReceiveStream* stream) 235 void DeleteReceiveStream(WebRtcVideoReceiveStream* stream)
236 EXCLUSIVE_LOCKS_REQUIRED(stream_crit_); 236 EXCLUSIVE_LOCKS_REQUIRED(stream_crit_);
237 237
238 static std::string CodecSettingsVectorToString( 238 static std::string CodecSettingsVectorToString(
239 const std::vector<VideoCodecSettings>& codecs); 239 const std::vector<VideoCodecSettings>& codecs);
240 240
241 // Wrapper for the sender part, this is where the source is connected and 241 // Wrapper for the sender part, this is where the source is connected and
242 // frames are then converted from cricket frames to webrtc frames. 242 // frames are then converted from cricket frames to webrtc frames.
243 class WebRtcVideoSendStream 243 class WebRtcVideoSendStream
244 : public rtc::VideoSinkInterface<cricket::VideoFrame>, 244 : public rtc::VideoSinkInterface<cricket::VideoFrame>,
245 public rtc::VideoSourceInterface<webrtc::VideoFrame>, 245 public rtc::VideoSourceInterface<webrtc::VideoFrame> {
246 public webrtc::LoadObserver {
247 public: 246 public:
248 WebRtcVideoSendStream( 247 WebRtcVideoSendStream(
249 webrtc::Call* call, 248 webrtc::Call* call,
250 const StreamParams& sp, 249 const StreamParams& sp,
251 webrtc::VideoSendStream::Config config, 250 webrtc::VideoSendStream::Config config,
252 const VideoOptions& options, 251 const VideoOptions& options,
253 WebRtcVideoEncoderFactory* external_encoder_factory, 252 WebRtcVideoEncoderFactory* external_encoder_factory,
254 bool enable_cpu_overuse_detection, 253 bool enable_cpu_overuse_detection,
255 int max_bitrate_bps, 254 int max_bitrate_bps,
256 const rtc::Optional<VideoCodecSettings>& codec_settings, 255 const rtc::Optional<VideoCodecSettings>& codec_settings,
(...skipping 12 matching lines...) Expand all
269 // TODO(perkj, nisse): Refactor WebRtcVideoSendStream to directly connect 268 // TODO(perkj, nisse): Refactor WebRtcVideoSendStream to directly connect
270 // the camera input |source_| 269 // the camera input |source_|
271 void AddOrUpdateSink(VideoSinkInterface<webrtc::VideoFrame>* sink, 270 void AddOrUpdateSink(VideoSinkInterface<webrtc::VideoFrame>* sink,
272 const rtc::VideoSinkWants& wants) override; 271 const rtc::VideoSinkWants& wants) override;
273 void RemoveSink(VideoSinkInterface<webrtc::VideoFrame>* sink) override; 272 void RemoveSink(VideoSinkInterface<webrtc::VideoFrame>* sink) override;
274 273
275 void OnFrame(const cricket::VideoFrame& frame) override; 274 void OnFrame(const cricket::VideoFrame& frame) override;
276 bool SetVideoSend(bool mute, 275 bool SetVideoSend(bool mute,
277 const VideoOptions* options, 276 const VideoOptions* options,
278 rtc::VideoSourceInterface<cricket::VideoFrame>* source); 277 rtc::VideoSourceInterface<cricket::VideoFrame>* source);
279 void DisconnectSource();
280 278
281 void SetSend(bool send); 279 void SetSend(bool send);
282 280
283 // Implements webrtc::LoadObserver.
284 void OnLoadUpdate(Load load) override;
285
286 const std::vector<uint32_t>& GetSsrcs() const; 281 const std::vector<uint32_t>& GetSsrcs() const;
287 VideoSenderInfo GetVideoSenderInfo(bool log_stats); 282 VideoSenderInfo GetVideoSenderInfo(bool log_stats);
288 void FillBandwidthEstimationInfo(BandwidthEstimationInfo* bwe_info); 283 void FillBandwidthEstimationInfo(BandwidthEstimationInfo* bwe_info);
289 284
290 private: 285 private:
291 // Parameters needed to reconstruct the underlying stream. 286 // Parameters needed to reconstruct the underlying stream.
292 // webrtc::VideoSendStream doesn't support setting a lot of options on the 287 // webrtc::VideoSendStream doesn't support setting a lot of options on the
293 // fly, so when those need to be changed we tear down and reconstruct with 288 // fly, so when those need to be changed we tear down and reconstruct with
294 // similar parameters depending on which options changed etc. 289 // similar parameters depending on which options changed etc.
295 struct VideoSendStreamParameters { 290 struct VideoSendStreamParameters {
(...skipping 16 matching lines...) Expand all
312 struct AllocatedEncoder { 307 struct AllocatedEncoder {
313 AllocatedEncoder(webrtc::VideoEncoder* encoder, 308 AllocatedEncoder(webrtc::VideoEncoder* encoder,
314 webrtc::VideoCodecType type, 309 webrtc::VideoCodecType type,
315 bool external); 310 bool external);
316 webrtc::VideoEncoder* encoder; 311 webrtc::VideoEncoder* encoder;
317 webrtc::VideoEncoder* external_encoder; 312 webrtc::VideoEncoder* external_encoder;
318 webrtc::VideoCodecType type; 313 webrtc::VideoCodecType type;
319 bool external; 314 bool external;
320 }; 315 };
321 316
322 // TODO(perkj): VideoFrameInfo is currently used for CPU adaptation since 317 // TODO(perkj): VideoFrameInfo is currently used for sending a black frame
323 // we currently do not express CPU overuse using SinkWants in lower 318 // when the video source is removed. Consider moving that logic to
324 // layers. This will be fixed in an upcoming cl. 319 // VieEncoder or remove it.
325 struct VideoFrameInfo { 320 struct VideoFrameInfo {
326 VideoFrameInfo() 321 VideoFrameInfo()
327 : width(0), 322 : width(0),
328 height(0), 323 height(0),
329 rotation(webrtc::kVideoRotation_0), 324 rotation(webrtc::kVideoRotation_0),
330 is_texture(false) {} 325 is_texture(false) {}
331 int width; 326 int width;
332 int height; 327 int height;
333 webrtc::VideoRotation rotation; 328 webrtc::VideoRotation rotation;
334 bool is_texture; 329 bool is_texture;
(...skipping 15 matching lines...) Expand all
350 void UpdateSendState(); 345 void UpdateSendState();
351 346
352 void UpdateHistograms() const EXCLUSIVE_LOCKS_REQUIRED(lock_); 347 void UpdateHistograms() const EXCLUSIVE_LOCKS_REQUIRED(lock_);
353 348
354 rtc::ThreadChecker thread_checker_; 349 rtc::ThreadChecker thread_checker_;
355 rtc::AsyncInvoker invoker_; 350 rtc::AsyncInvoker invoker_;
356 rtc::Thread* worker_thread_; 351 rtc::Thread* worker_thread_;
357 const std::vector<uint32_t> ssrcs_ ACCESS_ON(&thread_checker_); 352 const std::vector<uint32_t> ssrcs_ ACCESS_ON(&thread_checker_);
358 const std::vector<SsrcGroup> ssrc_groups_ ACCESS_ON(&thread_checker_); 353 const std::vector<SsrcGroup> ssrc_groups_ ACCESS_ON(&thread_checker_);
359 webrtc::Call* const call_; 354 webrtc::Call* const call_;
360 rtc::VideoSinkWants sink_wants_ ACCESS_ON(&thread_checker_); 355 const bool enable_cpu_overuse_detection_;
361 // Counter used for deciding if the video resolution is currently
362 // restricted by CPU usage. It is reset if |source_| is changed.
363 int cpu_restricted_counter_;
364 // Total number of times resolution as been requested to be changed due to
365 // CPU adaptation.
366 int number_of_cpu_adapt_changes_ ACCESS_ON(&thread_checker_);
367 // Total number of frames sent to |stream_|.
368 int frame_count_ GUARDED_BY(lock_);
369 // Total number of cpu restricted frames sent to |stream_|.
370 int cpu_restricted_frame_count_ GUARDED_BY(lock_);
371 rtc::VideoSourceInterface<cricket::VideoFrame>* source_ 356 rtc::VideoSourceInterface<cricket::VideoFrame>* source_
372 ACCESS_ON(&thread_checker_); 357 ACCESS_ON(&thread_checker_);
373 WebRtcVideoEncoderFactory* const external_encoder_factory_ 358 WebRtcVideoEncoderFactory* const external_encoder_factory_
374 ACCESS_ON(&thread_checker_); 359 ACCESS_ON(&thread_checker_);
375 360
376 rtc::CriticalSection lock_; 361 rtc::CriticalSection lock_;
377 webrtc::VideoSendStream* stream_ ACCESS_ON(&thread_checker_); 362 webrtc::VideoSendStream* stream_ ACCESS_ON(&thread_checker_);
378 rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_ 363 rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_
379 GUARDED_BY(lock_); 364 GUARDED_BY(lock_);
380 // Contains settings that are the same for all streams in the MediaChannel, 365 // Contains settings that are the same for all streams in the MediaChannel,
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 VideoSendParameters send_params_; 523 VideoSendParameters send_params_;
539 VideoOptions default_send_options_; 524 VideoOptions default_send_options_;
540 VideoRecvParameters recv_params_; 525 VideoRecvParameters recv_params_;
541 bool red_disabled_by_remote_side_; 526 bool red_disabled_by_remote_side_;
542 int64_t last_stats_log_ms_; 527 int64_t last_stats_log_ms_;
543 }; 528 };
544 529
545 } // namespace cricket 530 } // namespace cricket
546 531
547 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE2_H_ 532 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE2_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698