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

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

Issue 2217383002: Use RtpPacketToSend in RtpSenderVideo (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 4 years, 4 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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 int8_t payload_type, 107 int8_t payload_type,
108 uint32_t timestamp, 108 uint32_t timestamp,
109 int64_t capture_time_ms, 109 int64_t capture_time_ms,
110 const uint8_t* payload_data, 110 const uint8_t* payload_data,
111 size_t payload_size, 111 size_t payload_size,
112 const RTPFragmentationHeader* fragmentation, 112 const RTPFragmentationHeader* fragmentation,
113 const RTPVideoHeader* rtp_header, 113 const RTPVideoHeader* rtp_header,
114 uint32_t* transport_frame_id_out); 114 uint32_t* transport_frame_id_out);
115 115
116 // RTP header extension 116 // RTP header extension
117 int32_t SetTransmissionTimeOffset(int32_t transmission_time_offset);
118 int32_t SetAbsoluteSendTime(uint32_t absolute_send_time);
119 void SetVideoRotation(VideoRotation rotation);
120 int32_t SetTransportSequenceNumber(uint16_t sequence_number);
121
122 int32_t RegisterRtpHeaderExtension(RTPExtensionType type, uint8_t id); 117 int32_t RegisterRtpHeaderExtension(RTPExtensionType type, uint8_t id);
123 bool IsRtpHeaderExtensionRegistered(RTPExtensionType type); 118 bool IsRtpHeaderExtensionRegistered(RTPExtensionType type);
124 int32_t DeregisterRtpHeaderExtension(RTPExtensionType type); 119 int32_t DeregisterRtpHeaderExtension(RTPExtensionType type);
125 120
126 size_t RtpHeaderExtensionLength() const; 121 size_t RtpHeaderExtensionLength() const;
127 122
128 uint16_t BuildRtpHeaderExtension(uint8_t* data_buffer, bool marker_bit) const
129 EXCLUSIVE_LOCKS_REQUIRED(send_critsect_);
130
131 uint8_t BuildTransmissionTimeOffsetExtension(uint8_t* data_buffer) const
132 EXCLUSIVE_LOCKS_REQUIRED(send_critsect_);
133 uint8_t BuildAudioLevelExtension(uint8_t* data_buffer) const
134 EXCLUSIVE_LOCKS_REQUIRED(send_critsect_);
135 uint8_t BuildAbsoluteSendTimeExtension(uint8_t* data_buffer) const
136 EXCLUSIVE_LOCKS_REQUIRED(send_critsect_);
137 uint8_t BuildVideoRotationExtension(uint8_t* data_buffer) const
138 EXCLUSIVE_LOCKS_REQUIRED(send_critsect_);
139 uint8_t BuildTransportSequenceNumberExtension(uint8_t* data_buffer,
140 uint16_t sequence_number) const
141 EXCLUSIVE_LOCKS_REQUIRED(send_critsect_);
142 uint8_t BuildPlayoutDelayExtension(uint8_t* data_buffer,
143 uint16_t min_playout_delay_ms,
144 uint16_t max_playout_delay_ms) const
145 EXCLUSIVE_LOCKS_REQUIRED(send_critsect_);
146
147 // Verifies that the specified extension is registered, and that it is
148 // present in rtp packet. If extension is not registered kNotRegistered is
149 // returned. If extension cannot be found in the rtp header, or if it is
150 // malformed, kError is returned. Otherwise *extension_offset is set to the
151 // offset of the extension from the beginning of the rtp packet and kOk is
152 // returned.
153 enum class ExtensionStatus {
154 kNotRegistered,
155 kOk,
156 kError,
157 };
158 ExtensionStatus VerifyExtension(RTPExtensionType extension_type,
159 uint8_t* rtp_packet,
160 size_t rtp_packet_length,
161 const RTPHeader& rtp_header,
162 size_t extension_length_bytes,
163 size_t* extension_offset) const
164 EXCLUSIVE_LOCKS_REQUIRED(send_critsect_);
165
166 bool UpdateAudioLevel(uint8_t* rtp_packet,
167 size_t rtp_packet_length,
168 const RTPHeader& rtp_header,
169 bool is_voiced,
170 uint8_t dBov) const;
171
172 bool UpdateVideoRotation(uint8_t* rtp_packet,
173 size_t rtp_packet_length,
174 const RTPHeader& rtp_header,
175 VideoRotation rotation) const;
176
177 bool TimeToSendPacket(uint16_t sequence_number, 123 bool TimeToSendPacket(uint16_t sequence_number,
178 int64_t capture_time_ms, 124 int64_t capture_time_ms,
179 bool retransmission, 125 bool retransmission,
180 int probe_cluster_id); 126 int probe_cluster_id);
181 size_t TimeToSendPadding(size_t bytes, int probe_cluster_id); 127 size_t TimeToSendPadding(size_t bytes, int probe_cluster_id);
182 128
183 // NACK. 129 // NACK.
184 int SelectiveRetransmissions() const; 130 int SelectiveRetransmissions() const;
185 int SetSelectiveRetransmissions(uint8_t settings); 131 int SetSelectiveRetransmissions(uint8_t settings);
186 void OnReceivedNACK(const std::list<uint16_t>& nack_sequence_numbers, 132 void OnReceivedNACK(const std::list<uint16_t>& nack_sequence_numbers,
(...skipping 10 matching lines...) Expand all
197 143
198 // RTX. 144 // RTX.
199 void SetRtxStatus(int mode); 145 void SetRtxStatus(int mode);
200 int RtxStatus() const; 146 int RtxStatus() const;
201 147
202 uint32_t RtxSsrc() const; 148 uint32_t RtxSsrc() const;
203 void SetRtxSsrc(uint32_t ssrc); 149 void SetRtxSsrc(uint32_t ssrc);
204 150
205 void SetRtxPayloadType(int payload_type, int associated_payload_type); 151 void SetRtxPayloadType(int payload_type, int associated_payload_type);
206 152
207 // Functions wrapping RTPSenderInterface. 153 // Create empty packet, fills ssrc. Unless |minimalistic| flag is set
208 int32_t BuildRTPheader(uint8_t* data_buffer, 154 // also set csrcs and reserve place for registered header extensions
209 int8_t payload_type, 155 // RtpSender updates before sending.
210 bool marker_bit, 156 std::unique_ptr<RtpPacketToSend> AllocatePacket(bool minimalistic) const;
211 uint32_t capture_timestamp, 157 // Allocates sequence_number, update packet->Timstamp() with start_timestamp_
212 int64_t capture_time_ms, 158 // offset, updates RtpSender last_send fields with values from |packet|.
213 bool timestamp_provided = true, 159 // Return false of RtpSender not ready to send any more (i.e. destructing).
214 bool inc_sequence_number = true); 160 bool PrepareToSend(RtpPacketToSend* packet);
215 int32_t BuildRtpHeader(uint8_t* data_buffer, 161
216 int8_t payload_type, 162 uint32_t TimestampOffset(uint32_t capture_rtp_timestamp) const;
217 bool marker_bit,
218 uint32_t capture_timestamp,
219 int64_t capture_time_ms);
220 163
221 size_t RtpHeaderLength() const; 164 size_t RtpHeaderLength() const;
222 uint16_t AllocateSequenceNumber(uint16_t packets_to_send); 165 uint16_t AllocateSequenceNumber(uint16_t packets_to_send);
223 size_t MaxPayloadLength() const; 166 size_t MaxPayloadLength() const;
224 167
225 // Current timestamp. 168 // Current timestamp.
226 uint32_t Timestamp() const; 169 uint32_t Timestamp() const;
227 uint32_t SSRC() const; 170 uint32_t SSRC() const;
228 171
229 // Deprecated. Create RtpPacketToSend instead and use next function.
230 bool SendToNetwork(uint8_t* data_buffer,
231 size_t payload_length,
232 size_t rtp_header_length,
233 int64_t capture_time_ms,
234 StorageType storage,
235 RtpPacketSender::Priority priority);
236 bool SendToNetwork(std::unique_ptr<RtpPacketToSend> packet, 172 bool SendToNetwork(std::unique_ptr<RtpPacketToSend> packet,
237 StorageType storage, 173 StorageType storage,
238 RtpPacketSender::Priority priority); 174 RtpPacketSender::Priority priority);
239 175
240 // Audio. 176 // Audio.
241 177
242 // Send a DTMF tone using RFC 2833 (4733). 178 // Send a DTMF tone using RFC 2833 (4733).
243 int32_t SendTelephoneEvent(uint8_t key, uint16_t time_ms, uint8_t level); 179 int32_t SendTelephoneEvent(uint8_t key, uint16_t time_ms, uint8_t level);
244 180
245 // Set audio packet size, used to determine when it's time to send a DTMF 181 // Set audio packet size, used to determine when it's time to send a DTMF
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 // Called on update of RTP statistics. 221 // Called on update of RTP statistics.
286 void RegisterRtpStatisticsCallback(StreamDataCountersCallback* callback); 222 void RegisterRtpStatisticsCallback(StreamDataCountersCallback* callback);
287 StreamDataCountersCallback* GetRtpStatisticsCallback() const; 223 StreamDataCountersCallback* GetRtpStatisticsCallback() const;
288 224
289 uint32_t BitrateSent() const; 225 uint32_t BitrateSent() const;
290 226
291 void SetRtpState(const RtpState& rtp_state); 227 void SetRtpState(const RtpState& rtp_state);
292 RtpState GetRtpState() const; 228 RtpState GetRtpState() const;
293 void SetRtxRtpState(const RtpState& rtp_state); 229 void SetRtxRtpState(const RtpState& rtp_state);
294 RtpState GetRtxRtpState() const; 230 RtpState GetRtxRtpState() const;
295 bool ActivateCVORtpHeaderExtension();
296 231
297 protected: 232 protected:
298 int32_t CheckPayloadType(int8_t payload_type, RtpVideoCodecTypes* video_type); 233 int32_t CheckPayloadType(int8_t payload_type, RtpVideoCodecTypes* video_type);
299 234
300 private: 235 private:
301 // Maps capture time in milliseconds to send-side delay in milliseconds. 236 // Maps capture time in milliseconds to send-side delay in milliseconds.
302 // Send-side delay is the difference between transmission time and capture 237 // Send-side delay is the difference between transmission time and capture
303 // time. 238 // time.
304 typedef std::map<int64_t, int> SendDelayMap; 239 typedef std::map<int64_t, int> SendDelayMap;
305 240
(...skipping 21 matching lines...) Expand all
327 bool SendPacketToNetwork(const RtpPacketToSend& packet, 262 bool SendPacketToNetwork(const RtpPacketToSend& packet,
328 const PacketOptions& options); 263 const PacketOptions& options);
329 264
330 void UpdateDelayStatistics(int64_t capture_time_ms, int64_t now_ms); 265 void UpdateDelayStatistics(int64_t capture_time_ms, int64_t now_ms);
331 void UpdateOnSendPacket(int packet_id, 266 void UpdateOnSendPacket(int packet_id,
332 int64_t capture_time_ms, 267 int64_t capture_time_ms,
333 uint32_t ssrc); 268 uint32_t ssrc);
334 269
335 // Find the byte position of the RTP extension as indicated by |type| in 270 // Find the byte position of the RTP extension as indicated by |type| in
336 // |rtp_packet|. Return false if such extension doesn't exist. 271 // |rtp_packet|. Return false if such extension doesn't exist.
337 bool FindHeaderExtensionPosition(RTPExtensionType type,
338 const uint8_t* rtp_packet,
339 size_t rtp_packet_length,
340 const RTPHeader& rtp_header,
341 size_t* position) const
342 EXCLUSIVE_LOCKS_REQUIRED(send_critsect_);
343
344 bool UpdateTransportSequenceNumber(RtpPacketToSend* packet, 272 bool UpdateTransportSequenceNumber(RtpPacketToSend* packet,
345 int* packet_id) const; 273 int* packet_id) const;
346 274
347 void UpdatePlayoutDelayLimits(uint8_t* rtp_packet, 275 void UpdatePlayoutDelayLimits(uint8_t* rtp_packet,
348 size_t rtp_packet_length, 276 size_t rtp_packet_length,
349 const RTPHeader& rtp_header, 277 const RTPHeader& rtp_header,
350 uint16_t min_playout_delay, 278 uint16_t min_playout_delay,
351 uint16_t max_playout_delay) const; 279 uint16_t max_playout_delay) const;
352 280
353 void UpdateRtpStats(const RtpPacketToSend& packet, 281 void UpdateRtpStats(const RtpPacketToSend& packet,
(...skipping 17 matching lines...) Expand all
371 299
372 Transport *transport_; 300 Transport *transport_;
373 bool sending_media_ GUARDED_BY(send_critsect_); 301 bool sending_media_ GUARDED_BY(send_critsect_);
374 302
375 size_t max_payload_length_; 303 size_t max_payload_length_;
376 304
377 int8_t payload_type_ GUARDED_BY(send_critsect_); 305 int8_t payload_type_ GUARDED_BY(send_critsect_);
378 std::map<int8_t, RtpUtility::Payload*> payload_type_map_; 306 std::map<int8_t, RtpUtility::Payload*> payload_type_map_;
379 307
380 RtpHeaderExtensionMap rtp_header_extension_map_ GUARDED_BY(send_critsect_); 308 RtpHeaderExtensionMap rtp_header_extension_map_ GUARDED_BY(send_critsect_);
381 int32_t transmission_time_offset_;
382 uint32_t absolute_send_time_;
383 VideoRotation rotation_;
384 bool video_rotation_active_;
385 uint16_t transport_sequence_number_;
386 309
387 // Tracks the current request for playout delay limits from application 310 // Tracks the current request for playout delay limits from application
388 // and decides whether the current RTP frame should include the playout 311 // and decides whether the current RTP frame should include the playout
389 // delay extension on header. 312 // delay extension on header.
390 PlayoutDelayOracle playout_delay_oracle_; 313 PlayoutDelayOracle playout_delay_oracle_;
391 bool playout_delay_active_ GUARDED_BY(send_critsect_); 314 bool playout_delay_active_ GUARDED_BY(send_critsect_);
392 315
393 RtpPacketHistory packet_history_; 316 RtpPacketHistory packet_history_;
394 317
395 // Statistics 318 // Statistics
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 std::map<int8_t, int8_t> rtx_payload_type_map_ GUARDED_BY(send_critsect_); 352 std::map<int8_t, int8_t> rtx_payload_type_map_ GUARDED_BY(send_critsect_);
430 353
431 RateLimiter* const retransmission_rate_limiter_; 354 RateLimiter* const retransmission_rate_limiter_;
432 355
433 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(RTPSender); 356 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(RTPSender);
434 }; 357 };
435 358
436 } // namespace webrtc 359 } // namespace webrtc
437 360
438 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_SENDER_H_ 361 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_SENDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698