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

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

Issue 2351633002: Let ViEEncoder handle resolution changes. (Closed)
Patch Set: rebased 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
« no previous file with comments | « webrtc/media/engine/fakewebrtccall.cc ('k') | webrtc/media/engine/webrtcvideoengine2.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 struct AllocatedEncoder { 312 struct AllocatedEncoder {
313 AllocatedEncoder(webrtc::VideoEncoder* encoder, 313 AllocatedEncoder(webrtc::VideoEncoder* encoder,
314 webrtc::VideoCodecType type, 314 webrtc::VideoCodecType type,
315 bool external); 315 bool external);
316 webrtc::VideoEncoder* encoder; 316 webrtc::VideoEncoder* encoder;
317 webrtc::VideoEncoder* external_encoder; 317 webrtc::VideoEncoder* external_encoder;
318 webrtc::VideoCodecType type; 318 webrtc::VideoCodecType type;
319 bool external; 319 bool external;
320 }; 320 };
321 321
322 // TODO(perkj): VideoFrameInfo is currently used for CPU adaptation since
323 // we currently do not express CPU overuse using SinkWants in lower
324 // layers. This will be fixed in an upcoming cl.
322 struct VideoFrameInfo { 325 struct VideoFrameInfo {
323 // Initial encoder configuration (QCIF, 176x144) frame (to ensure that
324 // hardware encoders can be initialized). This gives us low memory usage
325 // but also makes it so configuration errors are discovered at the time we
326 // apply the settings rather than when we get the first frame (waiting for
327 // the first frame to know that you gave a bad codec parameter could make
328 // debugging hard).
329 // TODO(pbos): Consider setting up encoders lazily.
330 VideoFrameInfo() 326 VideoFrameInfo()
331 : width(176), 327 : width(0),
332 height(144), 328 height(0),
333 rotation(webrtc::kVideoRotation_0), 329 rotation(webrtc::kVideoRotation_0),
334 is_texture(false) {} 330 is_texture(false) {}
335 int width; 331 int width;
336 int height; 332 int height;
337 webrtc::VideoRotation rotation; 333 webrtc::VideoRotation rotation;
338 bool is_texture; 334 bool is_texture;
339 }; 335 };
340 336
341 static std::vector<webrtc::VideoStream> CreateVideoStreams(
342 const VideoCodec& codec,
343 const VideoOptions& options,
344 int max_bitrate_bps,
345 size_t num_streams);
346 static std::vector<webrtc::VideoStream> CreateSimulcastVideoStreams(
347 const VideoCodec& codec,
348 const VideoOptions& options,
349 int max_bitrate_bps,
350 size_t num_streams);
351
352 rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings> 337 rtc::scoped_refptr<webrtc::VideoEncoderConfig::EncoderSpecificSettings>
353 ConfigureVideoEncoderSettings(const VideoCodec& codec) 338 ConfigureVideoEncoderSettings(const VideoCodec& codec);
354 EXCLUSIVE_LOCKS_REQUIRED(lock_); 339 AllocatedEncoder CreateVideoEncoder(const VideoCodec& codec);
355 340 void DestroyVideoEncoder(AllocatedEncoder* encoder);
356 AllocatedEncoder CreateVideoEncoder(const VideoCodec& codec) 341 void SetCodec(const VideoCodecSettings& codec);
357 EXCLUSIVE_LOCKS_REQUIRED(lock_); 342 void RecreateWebRtcStream();
358 void DestroyVideoEncoder(AllocatedEncoder* encoder)
359 EXCLUSIVE_LOCKS_REQUIRED(lock_);
360 void SetCodec(const VideoCodecSettings& codec)
361 EXCLUSIVE_LOCKS_REQUIRED(lock_);
362 void RecreateWebRtcStream() EXCLUSIVE_LOCKS_REQUIRED(lock_);
363 webrtc::VideoEncoderConfig CreateVideoEncoderConfig( 343 webrtc::VideoEncoderConfig CreateVideoEncoderConfig(
364 const VideoCodec& codec) const EXCLUSIVE_LOCKS_REQUIRED(lock_); 344 const VideoCodec& codec) const;
365 void ReconfigureEncoder() EXCLUSIVE_LOCKS_REQUIRED(lock_); 345 void ReconfigureEncoder();
366 bool ValidateRtpParameters(const webrtc::RtpParameters& parameters); 346 bool ValidateRtpParameters(const webrtc::RtpParameters& parameters);
367 347
368 // Calls Start or Stop according to whether or not |sending_| is true, 348 // Calls Start or Stop according to whether or not |sending_| is true,
369 // and whether or not the encoding in |rtp_parameters_| is active. 349 // and whether or not the encoding in |rtp_parameters_| is active.
370 void UpdateSendState() EXCLUSIVE_LOCKS_REQUIRED(lock_); 350 void UpdateSendState();
371 351
372 void UpdateHistograms() const EXCLUSIVE_LOCKS_REQUIRED(lock_); 352 void UpdateHistograms() const EXCLUSIVE_LOCKS_REQUIRED(lock_);
373 353
374 rtc::ThreadChecker thread_checker_; 354 rtc::ThreadChecker thread_checker_;
375 rtc::AsyncInvoker invoker_; 355 rtc::AsyncInvoker invoker_;
376 rtc::Thread* worker_thread_; 356 rtc::Thread* worker_thread_;
377 const std::vector<uint32_t> ssrcs_; 357 const std::vector<uint32_t> ssrcs_ ACCESS_ON(&thread_checker_);
378 const std::vector<SsrcGroup> ssrc_groups_; 358 const std::vector<SsrcGroup> ssrc_groups_ ACCESS_ON(&thread_checker_);
379 webrtc::Call* const call_; 359 webrtc::Call* const call_;
380 rtc::VideoSinkWants sink_wants_; 360 rtc::VideoSinkWants sink_wants_ ACCESS_ON(&thread_checker_);
381 // Counter used for deciding if the video resolution is currently 361 // Counter used for deciding if the video resolution is currently
382 // restricted by CPU usage. It is reset if |source_| is changed. 362 // restricted by CPU usage. It is reset if |source_| is changed.
383 int cpu_restricted_counter_; 363 int cpu_restricted_counter_;
384 // Total number of times resolution as been requested to be changed due to 364 // Total number of times resolution as been requested to be changed due to
385 // CPU adaptation. 365 // CPU adaptation.
386 int number_of_cpu_adapt_changes_; 366 int number_of_cpu_adapt_changes_ ACCESS_ON(&thread_checker_);
387 // Total number of frames sent to |stream_|. 367 // Total number of frames sent to |stream_|.
388 int frame_count_ GUARDED_BY(lock_); 368 int frame_count_ GUARDED_BY(lock_);
389 // Total number of cpu restricted frames sent to |stream_|. 369 // Total number of cpu restricted frames sent to |stream_|.
390 int cpu_restricted_frame_count_ GUARDED_BY(lock_); 370 int cpu_restricted_frame_count_ GUARDED_BY(lock_);
391 rtc::VideoSourceInterface<cricket::VideoFrame>* source_; 371 rtc::VideoSourceInterface<cricket::VideoFrame>* source_
372 ACCESS_ON(&thread_checker_);
392 WebRtcVideoEncoderFactory* const external_encoder_factory_ 373 WebRtcVideoEncoderFactory* const external_encoder_factory_
393 GUARDED_BY(lock_); 374 ACCESS_ON(&thread_checker_);
394 375
395 rtc::CriticalSection lock_; 376 rtc::CriticalSection lock_;
396 webrtc::VideoSendStream* stream_ GUARDED_BY(lock_); 377 webrtc::VideoSendStream* stream_ ACCESS_ON(&thread_checker_);
397 rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_ 378 rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_
398 GUARDED_BY(lock_); 379 GUARDED_BY(lock_);
399 // Contains settings that are the same for all streams in the MediaChannel, 380 // Contains settings that are the same for all streams in the MediaChannel,
400 // such as codecs, header extensions, and the global bitrate limit for the 381 // such as codecs, header extensions, and the global bitrate limit for the
401 // entire channel. 382 // entire channel.
402 VideoSendStreamParameters parameters_ GUARDED_BY(lock_); 383 VideoSendStreamParameters parameters_ ACCESS_ON(&thread_checker_);
403 // Contains settings that are unique for each stream, such as max_bitrate. 384 // Contains settings that are unique for each stream, such as max_bitrate.
404 // Does *not* contain codecs, however. 385 // Does *not* contain codecs, however.
405 // TODO(skvlad): Move ssrcs_ and ssrc_groups_ into rtp_parameters_. 386 // TODO(skvlad): Move ssrcs_ and ssrc_groups_ into rtp_parameters_.
406 // TODO(skvlad): Combine parameters_ and rtp_parameters_ once we have only 387 // TODO(skvlad): Combine parameters_ and rtp_parameters_ once we have only
407 // one stream per MediaChannel. 388 // one stream per MediaChannel.
408 webrtc::RtpParameters rtp_parameters_ GUARDED_BY(lock_); 389 webrtc::RtpParameters rtp_parameters_ ACCESS_ON(&thread_checker_);
409 bool pending_encoder_reconfiguration_ GUARDED_BY(lock_); 390 AllocatedEncoder allocated_encoder_ ACCESS_ON(&thread_checker_);
410 AllocatedEncoder allocated_encoder_ GUARDED_BY(lock_);
411 VideoFrameInfo last_frame_info_ GUARDED_BY(lock_); 391 VideoFrameInfo last_frame_info_ GUARDED_BY(lock_);
412 392
413 bool sending_ GUARDED_BY(lock_); 393 bool sending_ ACCESS_ON(&thread_checker_);
414 394
415 // The timestamp of the last frame received 395 // The timestamp of the last frame received
416 // Used to generate timestamp for the black frame when source is removed 396 // Used to generate timestamp for the black frame when source is removed
417 int64_t last_frame_timestamp_us_ GUARDED_BY(lock_); 397 int64_t last_frame_timestamp_us_ GUARDED_BY(lock_);
418 }; 398 };
419 399
420 // Wrapper for the receiver part, contains configs etc. that are needed to 400 // Wrapper for the receiver part, contains configs etc. that are needed to
421 // reconstruct the underlying VideoReceiveStream. Also serves as a wrapper 401 // reconstruct the underlying VideoReceiveStream. Also serves as a wrapper
422 // between rtc::VideoSinkInterface<webrtc::VideoFrame> and 402 // between rtc::VideoSinkInterface<webrtc::VideoFrame> and
423 // rtc::VideoSinkInterface<cricket::VideoFrame>. 403 // rtc::VideoSinkInterface<cricket::VideoFrame>.
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 VideoSendParameters send_params_; 538 VideoSendParameters send_params_;
559 VideoOptions default_send_options_; 539 VideoOptions default_send_options_;
560 VideoRecvParameters recv_params_; 540 VideoRecvParameters recv_params_;
561 bool red_disabled_by_remote_side_; 541 bool red_disabled_by_remote_side_;
562 int64_t last_stats_log_ms_; 542 int64_t last_stats_log_ms_;
563 }; 543 };
564 544
565 } // namespace cricket 545 } // namespace cricket
566 546
567 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE2_H_ 547 #endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOENGINE2_H_
OLDNEW
« no previous file with comments | « webrtc/media/engine/fakewebrtccall.cc ('k') | webrtc/media/engine/webrtcvideoengine2.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698