/* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef MODULES_VIDEO_CODING_FEC_CONTROLLER_DEFAULT_H_ #define MODULES_VIDEO_CODING_FEC_CONTROLLER_DEFAULT_H_ #include #include #include #include #include "api/fec_controller.h" #include "modules/video_coding/media_opt_util.h" #include "rtc_base/constructor_magic.h" #include "rtc_base/synchronization/mutex.h" #include "rtc_base/thread_annotations.h" #include "system_wrappers/include/clock.h" namespace webrtc { class FecControllerDefault : public FecController { public: FecControllerDefault(Clock* clock, VCMProtectionCallback* protection_callback); explicit FecControllerDefault(Clock* clock); ~FecControllerDefault() override; void SetProtectionCallback( VCMProtectionCallback* protection_callback) override; void SetProtectionMethod(bool enable_fec, bool enable_nack) override; void SetEncodingData(size_t width, size_t height, size_t num_temporal_layers, size_t max_payload_size) override; uint32_t UpdateFecRates(uint32_t estimated_bitrate_bps, int actual_framerate_fps, uint8_t fraction_lost, std::vector loss_mask_vector, int64_t round_trip_time_ms) override; void UpdateWithEncodedData( const size_t encoded_image_length, const VideoFrameType encoded_image_frametype) override; bool UseLossVectorMask() override; float GetProtectionOverheadRateThreshold(); private: enum { kBitrateAverageWinMs = 1000 }; Clock* const clock_; VCMProtectionCallback* protection_callback_; Mutex mutex_; std::unique_ptr loss_prot_logic_ RTC_GUARDED_BY(mutex_); size_t max_payload_size_ RTC_GUARDED_BY(mutex_); RTC_DISALLOW_COPY_AND_ASSIGN(FecControllerDefault); const float overhead_threshold_; }; } // namespace webrtc #endif // MODULES_VIDEO_CODING_FEC_CONTROLLER_DEFAULT_H_