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

Side by Side Diff: webrtc/modules/pacing/include/paced_sender.h

Issue 1350163005: Avoid circular dependency rtp_rtcp <-> paced_sender (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 5 years, 3 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/modules/pacing/bitrate_prober.cc ('k') | webrtc/modules/pacing/include/packet_router.h » ('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) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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
11 #ifndef WEBRTC_MODULES_PACING_INCLUDE_PACED_SENDER_H_ 11 #ifndef WEBRTC_MODULES_PACING_INCLUDE_PACED_SENDER_H_
12 #define WEBRTC_MODULES_PACING_INCLUDE_PACED_SENDER_H_ 12 #define WEBRTC_MODULES_PACING_INCLUDE_PACED_SENDER_H_
13 13
14 #include <list> 14 #include <list>
15 #include <set> 15 #include <set>
16 16
17 #include "webrtc/base/scoped_ptr.h" 17 #include "webrtc/base/scoped_ptr.h"
18 #include "webrtc/base/thread_annotations.h" 18 #include "webrtc/base/thread_annotations.h"
19 #include "webrtc/modules/interface/module.h" 19 #include "webrtc/modules/interface/module.h"
20 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
20 #include "webrtc/typedefs.h" 21 #include "webrtc/typedefs.h"
21 22
22 namespace webrtc { 23 namespace webrtc {
23 class BitrateProber; 24 class BitrateProber;
24 class Clock; 25 class Clock;
25 class CriticalSectionWrapper; 26 class CriticalSectionWrapper;
26 27
27 namespace paced_sender { 28 namespace paced_sender {
28 class IntervalBudget; 29 class IntervalBudget;
29 struct Packet; 30 struct Packet;
30 class PacketQueue; 31 class PacketQueue;
31 } // namespace paced_sender 32 } // namespace paced_sender
32 33
33 class PacedSender : public Module { 34 class PacedSender : public Module, public RtpPacketSender {
34 public: 35 public:
35 enum Priority {
36 kHighPriority = 0, // Pass through; will be sent immediately.
37 kNormalPriority = 2, // Put in back of the line.
38 kLowPriority = 3, // Put in back of the low priority line.
39 };
40 // Low priority packets are mixed with the normal priority packets
41 // while we are paused.
42
43 class Callback { 36 class Callback {
44 public: 37 public:
45 // Note: packets sent as a result of a callback should not pass by this 38 // Note: packets sent as a result of a callback should not pass by this
46 // module again. 39 // module again.
47 // Called when it's time to send a queued packet. 40 // Called when it's time to send a queued packet.
48 // Returns false if packet cannot be sent. 41 // Returns false if packet cannot be sent.
49 virtual bool TimeToSendPacket(uint32_t ssrc, 42 virtual bool TimeToSendPacket(uint32_t ssrc,
50 uint16_t sequence_number, 43 uint16_t sequence_number,
51 int64_t capture_time_ms, 44 int64_t capture_time_ms,
52 bool retransmission) = 0; 45 bool retransmission) = 0;
53 // Called when it's a good time to send a padding data. 46 // Called when it's a good time to send a padding data.
54 // Returns the number of bytes sent. 47 // Returns the number of bytes sent.
55 virtual size_t TimeToSendPadding(size_t bytes) = 0; 48 virtual size_t TimeToSendPadding(size_t bytes) = 0;
56 49
57 protected: 50 protected:
58 virtual ~Callback() {} 51 virtual ~Callback() {}
59 }; 52 };
60 53
61 static const int64_t kDefaultMaxQueueLengthMs = 2000; 54 static const int64_t kDefaultMaxQueueLengthMs = 2000;
62 // Pace in kbits/s until we receive first estimate. 55 // Pace in kbits/s until we receive first estimate.
63 static const int kDefaultInitialPaceKbps = 2000; 56 static const int kDefaultInitialPaceKbps = 2000;
64 // Pacing-rate relative to our target send rate. 57 // Pacing-rate relative to our target send rate.
65 // Multiplicative factor that is applied to the target bitrate to calculate 58 // Multiplicative factor that is applied to the target bitrate to calculate
66 // the number of bytes that can be transmitted per interval. 59 // the number of bytes that can be transmitted per interval.
67 // Increasing this factor will result in lower delays in cases of bitrate 60 // Increasing this factor will result in lower delays in cases of bitrate
68 // overshoots from the encoder. 61 // overshoots from the encoder.
69 static const float kDefaultPaceMultiplier; 62 static const float kDefaultPaceMultiplier;
70 63
64 static const size_t kMinProbePacketSize = 200;
65
71 PacedSender(Clock* clock, 66 PacedSender(Clock* clock,
72 Callback* callback, 67 Callback* callback,
73 int bitrate_kbps, 68 int bitrate_kbps,
74 int max_bitrate_kbps, 69 int max_bitrate_kbps,
75 int min_bitrate_kbps); 70 int min_bitrate_kbps);
76 71
77 virtual ~PacedSender(); 72 virtual ~PacedSender();
78 73
79 // Enable/disable pacing. 74 // Enable/disable pacing.
80 void SetStatus(bool enable); 75 void SetStatus(bool enable);
(...skipping 15 matching lines...) Expand all
96 // We will pace out bursts of packets at a bitrate of |max_bitrate_kbps|. 91 // We will pace out bursts of packets at a bitrate of |max_bitrate_kbps|.
97 // |bitrate_kbps| is our estimate of what we are allowed to send on average. 92 // |bitrate_kbps| is our estimate of what we are allowed to send on average.
98 // Padding packets will be utilized to reach |min_bitrate| unless enough media 93 // Padding packets will be utilized to reach |min_bitrate| unless enough media
99 // packets are available. 94 // packets are available.
100 void UpdateBitrate(int bitrate_kbps, 95 void UpdateBitrate(int bitrate_kbps,
101 int max_bitrate_kbps, 96 int max_bitrate_kbps,
102 int min_bitrate_kbps); 97 int min_bitrate_kbps);
103 98
104 // Returns true if we send the packet now, else it will add the packet 99 // Returns true if we send the packet now, else it will add the packet
105 // information to the queue and call TimeToSendPacket when it's time to send. 100 // information to the queue and call TimeToSendPacket when it's time to send.
106 virtual bool SendPacket(Priority priority, 101 bool SendPacket(RtpPacketSender::Priority priority,
107 uint32_t ssrc, 102 uint32_t ssrc,
108 uint16_t sequence_number, 103 uint16_t sequence_number,
109 int64_t capture_time_ms, 104 int64_t capture_time_ms,
110 size_t bytes, 105 size_t bytes,
111 bool retransmission); 106 bool retransmission) override;
112 107
113 // Returns the time since the oldest queued packet was enqueued. 108 // Returns the time since the oldest queued packet was enqueued.
114 virtual int64_t QueueInMs() const; 109 virtual int64_t QueueInMs() const;
115 110
116 virtual size_t QueueSizePackets() const; 111 virtual size_t QueueSizePackets() const;
117 112
118 // Returns the number of milliseconds it will take to send the current 113 // Returns the number of milliseconds it will take to send the current
119 // packets in the queue, given the current size and bitrate, ignoring prio. 114 // packets in the queue, given the current size and bitrate, ignoring prio.
120 virtual int64_t ExpectedQueueTimeMs() const; 115 virtual int64_t ExpectedQueueTimeMs() const;
121 116
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 rtc::scoped_ptr<BitrateProber> prober_ GUARDED_BY(critsect_); 150 rtc::scoped_ptr<BitrateProber> prober_ GUARDED_BY(critsect_);
156 int bitrate_bps_ GUARDED_BY(critsect_); 151 int bitrate_bps_ GUARDED_BY(critsect_);
157 152
158 int64_t time_last_update_us_ GUARDED_BY(critsect_); 153 int64_t time_last_update_us_ GUARDED_BY(critsect_);
159 154
160 rtc::scoped_ptr<paced_sender::PacketQueue> packets_ GUARDED_BY(critsect_); 155 rtc::scoped_ptr<paced_sender::PacketQueue> packets_ GUARDED_BY(critsect_);
161 uint64_t packet_counter_; 156 uint64_t packet_counter_;
162 }; 157 };
163 } // namespace webrtc 158 } // namespace webrtc
164 #endif // WEBRTC_MODULES_PACING_INCLUDE_PACED_SENDER_H_ 159 #endif // WEBRTC_MODULES_PACING_INCLUDE_PACED_SENDER_H_
OLDNEW
« no previous file with comments | « webrtc/modules/pacing/bitrate_prober.cc ('k') | webrtc/modules/pacing/include/packet_router.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698