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

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

Issue 1435093002: Remove include dirs from modules/{media_file,pacing} (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase fix Created 5 years, 1 month 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) 2012 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_PACING_INCLUDE_PACED_SENDER_H_
12 #define WEBRTC_MODULES_PACING_INCLUDE_PACED_SENDER_H_
13
14 #include <list>
15 #include <set>
16
17 #include "webrtc/base/scoped_ptr.h"
18 #include "webrtc/base/thread_annotations.h"
19 #include "webrtc/modules/include/module.h"
20 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
21 #include "webrtc/typedefs.h"
22
23 namespace webrtc {
24 class BitrateProber;
25 class Clock;
26 class CriticalSectionWrapper;
27
28 namespace paced_sender {
29 class IntervalBudget;
30 struct Packet;
31 class PacketQueue;
32 } // namespace paced_sender
33
34 class PacedSender : public Module, public RtpPacketSender {
35 public:
36 class Callback {
37 public:
38 // Note: packets sent as a result of a callback should not pass by this
39 // module again.
40 // Called when it's time to send a queued packet.
41 // Returns false if packet cannot be sent.
42 virtual bool TimeToSendPacket(uint32_t ssrc,
43 uint16_t sequence_number,
44 int64_t capture_time_ms,
45 bool retransmission) = 0;
46 // Called when it's a good time to send a padding data.
47 // Returns the number of bytes sent.
48 virtual size_t TimeToSendPadding(size_t bytes) = 0;
49
50 protected:
51 virtual ~Callback() {}
52 };
53
54 static const int64_t kDefaultMaxQueueLengthMs = 2000;
55 // Pace in kbits/s until we receive first estimate.
56 static const int kDefaultInitialPaceKbps = 2000;
57 // Pacing-rate relative to our target send rate.
58 // Multiplicative factor that is applied to the target bitrate to calculate
59 // the number of bytes that can be transmitted per interval.
60 // Increasing this factor will result in lower delays in cases of bitrate
61 // overshoots from the encoder.
62 static const float kDefaultPaceMultiplier;
63
64 static const size_t kMinProbePacketSize = 200;
65
66 PacedSender(Clock* clock,
67 Callback* callback,
68 int bitrate_kbps,
69 int max_bitrate_kbps,
70 int min_bitrate_kbps);
71
72 virtual ~PacedSender();
73
74 // Temporarily pause all sending.
75 void Pause();
76
77 // Resume sending packets.
78 void Resume();
79
80 // Enable bitrate probing. Enabled by default, mostly here to simplify
81 // testing. Must be called before any packets are being sent to have an
82 // effect.
83 void SetProbingEnabled(bool enabled);
84
85 // Set target bitrates for the pacer.
86 // We will pace out bursts of packets at a bitrate of |max_bitrate_kbps|.
87 // |bitrate_kbps| is our estimate of what we are allowed to send on average.
88 // Padding packets will be utilized to reach |min_bitrate| unless enough media
89 // packets are available.
90 void UpdateBitrate(int bitrate_kbps,
91 int max_bitrate_kbps,
92 int min_bitrate_kbps);
93
94 // Returns true if we send the packet now, else it will add the packet
95 // information to the queue and call TimeToSendPacket when it's time to send.
96 void InsertPacket(RtpPacketSender::Priority priority,
97 uint32_t ssrc,
98 uint16_t sequence_number,
99 int64_t capture_time_ms,
100 size_t bytes,
101 bool retransmission) override;
102
103 // Returns the time since the oldest queued packet was enqueued.
104 virtual int64_t QueueInMs() const;
105
106 virtual size_t QueueSizePackets() const;
107
108 // Returns the number of milliseconds it will take to send the current
109 // packets in the queue, given the current size and bitrate, ignoring prio.
110 virtual int64_t ExpectedQueueTimeMs() const;
111
112 // Returns the number of milliseconds until the module want a worker thread
113 // to call Process.
114 int64_t TimeUntilNextProcess() override;
115
116 // Process any pending packets in the queue(s).
117 int32_t Process() override;
118
119 private:
120 // Updates the number of bytes that can be sent for the next time interval.
121 void UpdateBytesPerInterval(int64_t delta_time_in_ms)
122 EXCLUSIVE_LOCKS_REQUIRED(critsect_);
123
124 bool SendPacket(const paced_sender::Packet& packet)
125 EXCLUSIVE_LOCKS_REQUIRED(critsect_);
126 void SendPadding(size_t padding_needed) EXCLUSIVE_LOCKS_REQUIRED(critsect_);
127
128 Clock* const clock_;
129 Callback* const callback_;
130
131 rtc::scoped_ptr<CriticalSectionWrapper> critsect_;
132 bool paused_ GUARDED_BY(critsect_);
133 bool probing_enabled_;
134 // This is the media budget, keeping track of how many bits of media
135 // we can pace out during the current interval.
136 rtc::scoped_ptr<paced_sender::IntervalBudget> media_budget_
137 GUARDED_BY(critsect_);
138 // This is the padding budget, keeping track of how many bits of padding we're
139 // allowed to send out during the current interval. This budget will be
140 // utilized when there's no media to send.
141 rtc::scoped_ptr<paced_sender::IntervalBudget> padding_budget_
142 GUARDED_BY(critsect_);
143
144 rtc::scoped_ptr<BitrateProber> prober_ GUARDED_BY(critsect_);
145 int bitrate_bps_ GUARDED_BY(critsect_);
146
147 int64_t time_last_update_us_ GUARDED_BY(critsect_);
148
149 rtc::scoped_ptr<paced_sender::PacketQueue> packets_ GUARDED_BY(critsect_);
150 uint64_t packet_counter_;
151 };
152 } // namespace webrtc
153 #endif // WEBRTC_MODULES_PACING_INCLUDE_PACED_SENDER_H_
OLDNEW
« no previous file with comments | « webrtc/modules/pacing/include/mock/mock_paced_sender.h ('k') | webrtc/modules/pacing/include/packet_router.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698