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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_sender.h

Issue 1309833002: Send RTCP packets via RtcpPacket callback (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Send RTCP messags directly via callback, refactoring, rebase Created 5 years, 2 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
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
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 void SendRtcpXrReceiverReferenceTime(bool enable); 142 void SendRtcpXrReceiverReferenceTime(bool enable);
143 143
144 bool RtcpXrReceiverReferenceTime() const; 144 bool RtcpXrReceiverReferenceTime() const;
145 145
146 void SetCsrcs(const std::vector<uint32_t>& csrcs); 146 void SetCsrcs(const std::vector<uint32_t>& csrcs);
147 147
148 void SetTargetBitrate(unsigned int target_bitrate); 148 void SetTargetBitrate(unsigned int target_bitrate);
149 bool SendFeedbackPacket(const rtcp::TransportFeedback& packet); 149 bool SendFeedbackPacket(const rtcp::TransportFeedback& packet);
150 150
151 private: 151 private:
152 struct RtcpContext; 152 class RtcpContext;
153 153
åsapersson 2015/11/16 14:54:39 remove comment
sprang_webrtc 2015/12/01 10:23:06 Done.
154 // The BuildResult indicates the outcome of a call to a builder method, 154 // The BuildResult indicates the outcome of a call to a builder method,
155 // constructing a part of an RTCP packet: 155 // constructing a part of an RTCP packet:
156 // 156 //
157 // kError 157 // kError
158 // Building RTCP packet failed, propagate error out to caller. 158 // Building RTCP packet failed, propagate error out to caller.
159 // kAbort 159 // kAbort
160 // The (partial) block being build should not be included. Reset current 160 // The (partial) block being build should not be included. Reset current
161 // buffer position to the state before the method call and proceed to the 161 // buffer position to the state before the method call and proceed to the
162 // next packet type. 162 // next packet type.
163 // kTruncated 163 // kTruncated
164 // There is not enough room in the buffer to fit the data being constructed. 164 // There is not enough room in the buffer to fit the data being constructed.
165 // (IP packet is full). Proceed to the next packet type, and call this 165 // (IP packet is full). Proceed to the next packet type, and call this
166 // method again when a new buffer has been allocated. 166 // method again when a new buffer has been allocated.
167 // TODO(sprang): Actually allocate multiple packets if needed. 167 // TODO(sprang): Actually allocate multiple packets if needed.
168 // kSuccess 168 // kSuccess
169 // Data has been successfully placed in the buffer. 169 // Data has been successfully placed in the buffer.
170 170
171 enum class BuildResult { kError, kAborted, kTruncated, kSuccess }; 171 // Determine which RTCP messages should be sent and setup flags.
172 172 void PrepareReport(const std::set<RTCPPacketType>& packetTypes,
173 int32_t SendToNetwork(const uint8_t* dataBuffer, size_t length); 173 const FeedbackState& feedback_state)
174 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
174 175
175 int32_t AddReportBlock(const RTCPReportBlock& report_block) 176 int32_t AddReportBlock(const RTCPReportBlock& report_block)
176 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 177 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
177 178
178 bool PrepareReport(const FeedbackState& feedback_state, 179 bool PrepareReportBlock(const FeedbackState& feedback_state,
179 uint32_t ssrc, 180 uint32_t ssrc,
180 StreamStatistician* statistician, 181 StreamStatistician* statistician,
181 RTCPReportBlock* report_block); 182 RTCPReportBlock* report_block)
183 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
åsapersson 2015/11/16 14:54:39 lock needed?
sprang_webrtc 2015/12/01 10:23:06 To read/update the flags. Problem?
åsapersson 2015/12/01 13:49:20 But not needed for this function, right?
sprang_webrtc 2015/12/02 10:33:26 Done.
182 184
183 int PrepareRTCP(const FeedbackState& feedback_state, 185 bool BuildSR(RtcpContext* context)
184 const std::set<RTCPPacketType>& packetTypes,
185 int32_t nackSize,
186 const uint16_t* nackList,
187 bool repeat,
188 uint64_t pictureID,
189 uint8_t* rtcp_buffer,
190 int buffer_size);
191
192 BuildResult BuildSR(RtcpContext* context)
193 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 186 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
194 BuildResult BuildRR(RtcpContext* context) 187 bool BuildRR(RtcpContext* context)
195 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 188 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
196 BuildResult BuildSDES(RtcpContext* context) 189 bool BuildSDES(RtcpContext* context)
197 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 190 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
198 BuildResult BuildPLI(RtcpContext* context) 191 bool BuildPLI(RtcpContext* context)
199 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 192 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
200 BuildResult BuildREMB(RtcpContext* context) 193 bool BuildREMB(RtcpContext* context)
201 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 194 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
202 BuildResult BuildTMMBR(RtcpContext* context) 195 bool BuildTMMBR(RtcpContext* context)
203 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 196 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
204 BuildResult BuildTMMBN(RtcpContext* context) 197 bool BuildTMMBN(RtcpContext* context)
205 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 198 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
206 BuildResult BuildAPP(RtcpContext* context) 199 bool BuildAPP(RtcpContext* context)
207 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 200 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
208 BuildResult BuildVoIPMetric(RtcpContext* context) 201 bool BuildVoIPMetric(RtcpContext* context)
209 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 202 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
210 BuildResult BuildBYE(RtcpContext* context) 203 bool BuildBYE(RtcpContext* context)
211 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 204 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
212 BuildResult BuildFIR(RtcpContext* context) 205 bool BuildFIR(RtcpContext* context)
213 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 206 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
214 BuildResult BuildSLI(RtcpContext* context) 207 bool BuildSLI(RtcpContext* context)
215 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 208 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
216 BuildResult BuildRPSI(RtcpContext* context) 209 bool BuildRPSI(RtcpContext* context)
217 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 210 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
218 BuildResult BuildNACK(RtcpContext* context) 211 bool BuildNACK(RtcpContext* context)
219 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 212 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
220 BuildResult BuildReceiverReferenceTime(RtcpContext* context) 213 bool BuildReceiverReferenceTime(RtcpContext* context)
221 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 214 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
222 BuildResult BuildDlrr(RtcpContext* context) 215 bool BuildDlrr(RtcpContext* context)
223 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_); 216 EXCLUSIVE_LOCKS_REQUIRED(critical_section_rtcp_sender_);
224 217
225 private: 218 private:
226 const bool audio_; 219 const bool audio_;
227 Clock* const clock_; 220 Clock* const clock_;
228 RTCPMethod method_ GUARDED_BY(critical_section_rtcp_sender_); 221 RTCPMethod method_ GUARDED_BY(critical_section_rtcp_sender_);
229 222
230 Transport* const transport_; 223 Transport* const transport_;
231 224
232 rtc::scoped_ptr<CriticalSectionWrapper> critical_section_rtcp_sender_; 225 rtc::scoped_ptr<CriticalSectionWrapper> critical_section_rtcp_sender_;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 ReportFlag(RTCPPacketType type, bool is_volatile) 302 ReportFlag(RTCPPacketType type, bool is_volatile)
310 : type(type), is_volatile(is_volatile) {} 303 : type(type), is_volatile(is_volatile) {}
311 bool operator<(const ReportFlag& flag) const { return type < flag.type; } 304 bool operator<(const ReportFlag& flag) const { return type < flag.type; }
312 bool operator==(const ReportFlag& flag) const { return type == flag.type; } 305 bool operator==(const ReportFlag& flag) const { return type == flag.type; }
313 const RTCPPacketType type; 306 const RTCPPacketType type;
314 const bool is_volatile; 307 const bool is_volatile;
315 }; 308 };
316 309
317 std::set<ReportFlag> report_flags_ GUARDED_BY(critical_section_rtcp_sender_); 310 std::set<ReportFlag> report_flags_ GUARDED_BY(critical_section_rtcp_sender_);
318 311
319 typedef BuildResult (RTCPSender::*Builder)(RtcpContext*); 312 typedef bool (RTCPSender::*Builder)(RtcpContext*);
320 std::map<RTCPPacketType, Builder> builders_; 313 std::map<RTCPPacketType, Builder> builders_;
321
322 class PacketBuiltCallback;
323 }; 314 };
324 } // namespace webrtc 315 } // namespace webrtc
325 316
326 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_SENDER_H_ 317 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_SENDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698