Index: webrtc/modules/rtp_rtcp/source/rtp_sender.h |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender.h b/webrtc/modules/rtp_rtcp/source/rtp_sender.h |
index df75f112c28e23ed9101a4e63c3827c7b37c2ee9..044559496890575caa950f056147dc959735f626 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender.h |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender.h |
@@ -13,16 +13,21 @@ |
#include <list> |
#include <map> |
+#include <string> |
#include <utility> |
#include <vector> |
#include "webrtc/base/criticalsection.h" |
#include "webrtc/base/random.h" |
#include "webrtc/base/thread_annotations.h" |
+#include "webrtc/base/thread_checker.h" |
#include "webrtc/common_types.h" |
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
#include "webrtc/modules/rtp_rtcp/source/bitrate.h" |
#include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" |
+#include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" |
+#include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions_manager.h" |
+#include "webrtc/modules/rtp_rtcp/source/rtp_packet.h" |
#include "webrtc/modules/rtp_rtcp/source/rtp_packet_history.h" |
#include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_config.h" |
#include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
@@ -69,9 +74,8 @@ class RTPSenderInterface { |
virtual size_t MaxDataPayloadLength() const = 0; |
virtual uint16_t ActualSendBitrateKbit() const = 0; |
- virtual int32_t SendToNetwork(uint8_t* data_buffer, |
+ virtual int32_t SendToNetwork(std::unique_ptr<RtpPacketToSend> packet, |
size_t payload_length, |
- size_t rtp_header_length, |
int64_t capture_time_ms, |
StorageType storage, |
RtpPacketSender::Priority priority) = 0; |
@@ -166,7 +170,19 @@ class RTPSender : public RTPSenderInterface { |
bool IsRtpHeaderExtensionRegistered(RTPExtensionType type) override; |
int32_t DeregisterRtpHeaderExtension(RTPExtensionType type); |
+ template <typename Extension> |
+ bool RegisterRtpHeaderExtension(uint8_t id) { |
+ return rtp_manager_.Register<Extension>(id); |
+ } |
+ bool RegisterRtpHeaderExtension(const std::string& name, |
+ MediaType media, |
+ uint8_t id) { |
+ return rtp_manager_.RegisterByName(name, media, id); |
+ } |
+ |
size_t RtpHeaderExtensionTotalLength() const; |
+ std::unique_ptr<RtpPacketToSend> CreatePacket() const; |
+ void ReserveExtensions(RtpPacketToSend* packet) const; |
uint16_t BuildRTPHeaderExtension(uint8_t* data_buffer, bool marker_bit) const; |
@@ -217,9 +233,7 @@ class RTPSender : public RTPSenderInterface { |
void OnReceivedNACK(const std::list<uint16_t>& nack_sequence_numbers, |
int64_t avg_rtt); |
- void SetStorePacketsStatus(bool enable, uint16_t number_to_store); |
- |
- bool StorePackets() const; |
+ void SetStorePacketsSize(uint16_t number_to_store); |
int32_t ReSendPacket(uint16_t packet_id, int64_t min_resend_time = 0); |
@@ -242,6 +256,9 @@ class RTPSender : public RTPSenderInterface { |
int64_t capture_time_ms, |
const bool timestamp_provided = true, |
const bool inc_sequence_number = true) override; |
+ void BuildRtpHeader(RtpPacketToSend* packet, |
+ uint32_t capture_timestamp, |
+ bool reserve_extensions); |
size_t RTPHeaderLength() const override; |
uint16_t AllocateSequenceNumber(uint16_t packets_to_send) override; |
@@ -251,9 +268,8 @@ class RTPSender : public RTPSenderInterface { |
uint32_t Timestamp() const override; |
uint32_t SSRC() const override; |
- int32_t SendToNetwork(uint8_t* data_buffer, |
+ int32_t SendToNetwork(std::unique_ptr<RtpPacketToSend> packet, |
size_t payload_length, |
- size_t rtp_header_length, |
int64_t capture_time_ms, |
StorageType storage, |
RtpPacketSender::Priority priority) override; |
@@ -329,9 +345,7 @@ class RTPSender : public RTPSenderInterface { |
void UpdateNACKBitRate(uint32_t bytes, int64_t now); |
- bool PrepareAndSendPacket(uint8_t* buffer, |
- size_t length, |
- int64_t capture_time_ms, |
+ bool PrepareAndSendPacket(RtpPacketToSend* packet, |
bool send_over_rtx, |
bool is_retransmit); |
@@ -343,12 +357,10 @@ class RTPSender : public RTPSenderInterface { |
size_t header_length, |
size_t padding_length); |
- void BuildRtxPacket(uint8_t* buffer, size_t* length, |
- uint8_t* buffer_rtx); |
+ std::unique_ptr<RtpPacketToSend> BuildRtxPacket( |
+ const RtpPacketToSend& packet); |
- bool SendPacketToNetwork(const uint8_t* packet, |
- size_t size, |
- const PacketOptions& options); |
+ bool SendPacketToNetwork(RtpPacketToSend* packet); |
void UpdateDelayStatistics(int64_t capture_time_ms, int64_t now_ms); |
@@ -364,23 +376,15 @@ class RTPSender : public RTPSenderInterface { |
size_t rtp_packet_length, |
const RTPHeader& rtp_header, |
int64_t time_diff_ms) const; |
- void UpdateAbsoluteSendTime(uint8_t* rtp_packet, |
- size_t rtp_packet_length, |
- const RTPHeader& rtp_header, |
- int64_t now_ms) const; |
// Update the transport sequence number of the packet using a new sequence |
// number allocated by SequenceNumberAllocator. Returns the assigned sequence |
// number, or 0 if extension could not be updated. |
- uint16_t UpdateTransportSequenceNumber(uint8_t* rtp_packet, |
- size_t rtp_packet_length, |
- const RTPHeader& rtp_header) const; |
+ uint16_t UpdateTransportSequenceNumber(RtpPacketToSend* rtp_packet) const; |
- void UpdateRtpStats(const uint8_t* buffer, |
- size_t packet_length, |
- const RTPHeader& header, |
+ void UpdateRtpStats(const RtpPacketToSend& packet, |
bool is_rtx, |
bool is_retransmit); |
- bool IsFecPacket(const uint8_t* buffer, const RTPHeader& header) const; |
+ bool IsFecPacket(const RtpPacketToSend& packet) const; |
class BitrateAggregator { |
public: |
@@ -415,7 +419,6 @@ class RTPSender : public RTPSenderInterface { |
}; |
Clock* const clock_; |
- const int64_t clock_delta_ms_; |
Random random_ GUARDED_BY(send_critsect_); |
BitrateAggregator bitrates_; |
@@ -431,7 +434,7 @@ class RTPSender : public RTPSenderInterface { |
int64_t last_capture_time_ms_sent_; |
rtc::CriticalSection send_critsect_; |
- Transport *transport_; |
+ Transport* transport_; |
bool sending_media_ GUARDED_BY(send_critsect_); |
size_t max_payload_length_; |
@@ -439,7 +442,14 @@ class RTPSender : public RTPSenderInterface { |
int8_t payload_type_ GUARDED_BY(send_critsect_); |
std::map<int8_t, RtpUtility::Payload*> payload_type_map_; |
+ // TODO(danilchap): rtp_header_extension_map_ and rtp_manager_ do same thing |
+ // Remove older rtp_header_extension_map_ when all RtpPacket code switch to |
+ // use rtp_manager_ |
RtpHeaderExtensionMap rtp_header_extension_map_; |
+ RtpHeaderExtensionsManager rtp_manager_; |
+ rtc::ThreadChecker configuration_thread_; |
+ rtc::ThreadChecker encoder_thread_; |
+ rtc::ThreadChecker network_thread_; |
int32_t transmission_time_offset_; |
uint32_t absolute_send_time_; |
VideoRotation rotation_; |