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/modules/video_coding/protection_bitrate_calculator.h

Issue 1972083002: Move logic for calculating needed bitrate overhead used by NACK and FEC to VideoSender. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Removed video_sender_unittest for now. Created 4 years, 7 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
(Empty)
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 WEBRTC_MODULES_VIDEO_CODING_PROTECTION_BITRATE_CALCULATOR_H_
12 #define WEBRTC_MODULES_VIDEO_CODING_PROTECTION_BITRATE_CALCULATOR_H_
13
14 #include <list>
15 #include <memory>
16
17 #include "webrtc/base/criticalsection.h"
18 #include "webrtc/modules/include/module_common_types.h"
19 #include "webrtc/modules/video_coding/include/video_coding.h"
20 #include "webrtc/modules/video_coding/media_opt_util.h"
21 #include "webrtc/system_wrappers/include/clock.h"
22
23 namespace webrtc {
24
25 // ProtectionBitrateCalculator calculates the calculates how much of the
stefan-webrtc 2016/05/19 12:52:40 -"calculates the"
perkj_webrtc 2016/06/01 20:55:23 Done.
26 // allocated network capacity that can be used by an encoder and how much that
27 // is needed for protection packets such as FEC and NACK. It uses an
stefan-webrtc 2016/05/19 12:52:40 Maybe call it redundant packets instead?
perkj_webrtc 2016/06/01 20:55:23 Done.
28 // implementation of |VCMProtectionCallback| to set new FEC parameters and get
29 // the bitrate currently used for FEC and NACK.
30 // Usage:
31 // Setup by calling SetProtectionMethod and SetEncodingData.
32 // For each encoded image, call UpdateWithEncodedData.
33 // Each time the bandwidth estimate change, call SetTargetRates. SetTargetRates
34 // will return the bitrate that can be used by an encoder.
35 class ProtectionBitrateCalculator {
36 public:
37 explicit ProtectionBitrateCalculator(
stefan-webrtc 2016/05/19 12:52:40 Remove explicit
perkj_webrtc 2016/06/01 20:55:23 Done.
38 Clock* clock,
39 VCMProtectionCallback* protection_callback);
40 ~ProtectionBitrateCalculator();
41
42 void SetProtectionMethod(bool enable_fec, bool enable_nack);
stefan-webrtc 2016/05/19 12:52:40 Would it make sense to somehow document the thread
perkj_webrtc 2016/06/01 20:55:23 Added a short note about thread safety.
43
44 // Informs media optimization of initial encoding state.
45 void SetEncodingData(uint32_t estimated_bitrate_bps,
46 uint16_t width,
47 uint16_t height,
48 uint32_t frame_rate,
49 size_t num_temporal_layers,
50 size_t mtu);
51
52 // Returns target rate for the encoder given the channel parameters.
53 // Inputs: estimated_bitrate_bps - the estimated network bitrate in bits/s.
54 // fraction_lost - packet loss rate in % in the network.
55 // round_trip_time_ms - round trip time in milliseconds.
56 uint32_t SetTargetRates(uint32_t estimated_bitrate_bps,
57 uint8_t fraction_lost,
58 int64_t round_trip_time_ms);
59
60 // Informs of encoded output.
61 void UpdateWithEncodedData(const EncodedImage& encoded_image);
62
63 uint32_t SentFrameRate();
64 uint32_t SentBitRate();
stefan-webrtc 2016/05/19 12:52:40 It's a bit weird that this class is named somethin
perkj_webrtc 2016/06/01 20:55:23 Removed. Now relies on fps as an input parameter f
65
66 private:
67 enum { kBitrateAverageWinMs = 1000 };
68
69 void PurgeOldFrameSamples(int64_t now_ms)
70 EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
71 void UpdateSentBitrate(int64_t now_ms) EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
72 void UpdateSentFramerate() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
73
74 uint32_t SentFrameRateInternal() EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
75
76 // Protect all members.
77 rtc::CriticalSection crit_sect_;
78 Clock* const clock_;
79 VCMProtectionCallback* const protection_callback_;
80
81 std::unique_ptr<media_optimization::VCMLossProtectionLogic> loss_prot_logic_
82 GUARDED_BY(crit_sect_);
83 size_t max_payload_size_ GUARDED_BY(crit_sect_);
84 struct EncodedFrameSample;
stefan-webrtc 2016/05/19 12:52:40 Move this to before all members instead to not mix
perkj_webrtc 2016/06/01 20:55:23 Done.
85 std::list<EncodedFrameSample> encoded_frame_samples_ GUARDED_BY(crit_sect_);
86 uint32_t avg_sent_bit_rate_bps_ GUARDED_BY(crit_sect_);
87 uint32_t avg_sent_framerate_ GUARDED_BY(crit_sect_);
88
89 RTC_DISALLOW_COPY_AND_ASSIGN(ProtectionBitrateCalculator);
90 };
91
92 } // namespace webrtc
93 #endif // WEBRTC_MODULES_VIDEO_CODING_PROTECTION_BITRATE_CALCULATOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698