1 /* 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef MODULES_VIDEO_CODING_FEC_CONTROLLER_DEFAULT_H_ 12 #define MODULES_VIDEO_CODING_FEC_CONTROLLER_DEFAULT_H_ 13 14 #include <stddef.h> 15 #include <stdint.h> 16 17 #include <memory> 18 #include <vector> 19 20 #include "api/fec_controller.h" 21 #include "modules/video_coding/media_opt_util.h" 22 #include "rtc_base/synchronization/mutex.h" 23 #include "rtc_base/thread_annotations.h" 24 #include "system_wrappers/include/clock.h" 25 26 namespace webrtc { 27 28 class FecControllerDefault : public FecController { 29 public: 30 FecControllerDefault(Clock* clock, 31 VCMProtectionCallback* protection_callback); 32 explicit FecControllerDefault(Clock* clock); 33 ~FecControllerDefault() override; 34 35 FecControllerDefault(const FecControllerDefault&) = delete; 36 FecControllerDefault& operator=(const FecControllerDefault&) = delete; 37 38 void SetProtectionCallback( 39 VCMProtectionCallback* protection_callback) override; 40 void SetProtectionMethod(bool enable_fec, bool enable_nack) override; 41 void SetEncodingData(size_t width, 42 size_t height, 43 size_t num_temporal_layers, 44 size_t max_payload_size) override; 45 uint32_t UpdateFecRates(uint32_t estimated_bitrate_bps, 46 int actual_framerate_fps, 47 uint8_t fraction_lost, 48 std::vector<bool> loss_mask_vector, 49 int64_t round_trip_time_ms) override; 50 void UpdateWithEncodedData(size_t encoded_image_length, 51 VideoFrameType encoded_image_frametype) override; 52 bool UseLossVectorMask() override; 53 float GetProtectionOverheadRateThreshold(); 54 55 private: 56 enum { kBitrateAverageWinMs = 1000 }; 57 Clock* const clock_; 58 VCMProtectionCallback* protection_callback_; 59 Mutex mutex_; 60 std::unique_ptr<media_optimization::VCMLossProtectionLogic> loss_prot_logic_ 61 RTC_GUARDED_BY(mutex_); 62 size_t max_payload_size_ RTC_GUARDED_BY(mutex_); 63 64 const float overhead_threshold_; 65 }; 66 67 } // namespace webrtc 68 #endif // MODULES_VIDEO_CODING_FEC_CONTROLLER_DEFAULT_H_ 69