Simplify registration of RTP-header extensions.
Removes per-extension functions in ViEChannel/ViEReceiver and instead
register extensions directly on the RTP module by mapping extension
string to RTP-header-extension type.
BUG=webrtc:5494
R=danilchap@webrtc.org, stefan@webrtc.org
Review URL: https://codereview.webrtc.org/1740133002 .
Cr-Commit-Position: refs/heads/master@{#11786}
diff --git a/webrtc/modules/rtp_rtcp/include/rtp_rtcp.h b/webrtc/modules/rtp_rtcp/include/rtp_rtcp.h
index e0ace4c..a47d3fe 100644
--- a/webrtc/modules/rtp_rtcp/include/rtp_rtcp.h
+++ b/webrtc/modules/rtp_rtcp/include/rtp_rtcp.h
@@ -12,6 +12,7 @@
#define WEBRTC_MODULES_RTP_RTCP_INCLUDE_RTP_RTCP_H_
#include <set>
+#include <string>
#include <utility>
#include <vector>
@@ -26,6 +27,8 @@
class Transport;
class RtcEventLog;
+RTPExtensionType StringToRtpExtensionType(const std::string& extension);
+
namespace rtcp {
class TransportFeedback;
}
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index 7f33bc2..cbb085b 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -13,10 +13,12 @@
#include <string.h>
#include <set>
+#include <string>
#include "webrtc/base/checks.h"
#include "webrtc/base/logging.h"
#include "webrtc/common_types.h"
+#include "webrtc/config.h"
#include "webrtc/system_wrappers/include/trace.h"
#ifdef _WIN32
@@ -26,6 +28,21 @@
namespace webrtc {
+RTPExtensionType StringToRtpExtensionType(const std::string& extension) {
+ if (extension == RtpExtension::kTOffset)
+ return kRtpExtensionTransmissionTimeOffset;
+ if (extension == RtpExtension::kAudioLevel)
+ return kRtpExtensionAudioLevel;
+ if (extension == RtpExtension::kAbsSendTime)
+ return kRtpExtensionAbsoluteSendTime;
+ if (extension == RtpExtension::kVideoRotation)
+ return kRtpExtensionVideoRotation;
+ if (extension == RtpExtension::kTransportSequenceNumber)
+ return kRtpExtensionTransportSequenceNumber;
+ RTC_NOTREACHED() << "Looking up unsupported RTP extension.";
+ return kRtpExtensionNone;
+}
+
RtpRtcp::Configuration::Configuration()
: audio(false),
receiver_only(false),
diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc
index a0775bb..983e28f 100644
--- a/webrtc/video/video_receive_stream.cc
+++ b/webrtc/video/video_receive_stream.cc
@@ -229,17 +229,7 @@
// One-byte-extension local identifiers are in the range 1-14 inclusive.
RTC_DCHECK_GE(id, 1);
RTC_DCHECK_LE(id, 14);
- if (extension == RtpExtension::kTOffset) {
- RTC_CHECK(vie_receiver_->EnableReceiveTimestampOffset(id));
- } else if (extension == RtpExtension::kAbsSendTime) {
- RTC_CHECK(vie_receiver_->EnableReceiveAbsoluteSendTime(id));
- } else if (extension == RtpExtension::kVideoRotation) {
- RTC_CHECK(vie_receiver_->EnableReceiveVideoRotation(id));
- } else if (extension == RtpExtension::kTransportSequenceNumber) {
- RTC_CHECK(vie_receiver_->EnableReceiveTransportSequenceNumber(id));
- } else {
- RTC_NOTREACHED() << "Unsupported RTP extension.";
- }
+ vie_receiver_->EnableReceiveRtpHeaderExtension(extension, id);
}
if (config_.rtp.fec.ulpfec_payload_type != -1) {
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
index 93ff1f1..66a6a32 100644
--- a/webrtc/video/video_send_stream.cc
+++ b/webrtc/video/video_send_stream.cc
@@ -22,6 +22,7 @@
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
#include "webrtc/modules/congestion_controller/include/congestion_controller.h"
#include "webrtc/modules/pacing/packet_router.h"
+#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
#include "webrtc/modules/utility/include/process_thread.h"
#include "webrtc/video/call_stats.h"
#include "webrtc/video/video_capture_input.h"
@@ -228,16 +229,10 @@
// One-byte-extension local identifiers are in the range 1-14 inclusive.
RTC_DCHECK_GE(id, 1);
RTC_DCHECK_LE(id, 14);
- if (extension == RtpExtension::kTOffset) {
- RTC_CHECK_EQ(0, vie_channel_.EnableSendTimestampOffset(id));
- } else if (extension == RtpExtension::kAbsSendTime) {
- RTC_CHECK_EQ(0, vie_channel_.EnableSendAbsoluteSendTime(id));
- } else if (extension == RtpExtension::kVideoRotation) {
- RTC_CHECK_EQ(0, vie_channel_.EnableSendVideoRotation(id));
- } else if (extension == RtpExtension::kTransportSequenceNumber) {
- RTC_CHECK_EQ(0, vie_channel_.EnableSendTransportSequenceNumber(id));
- } else {
- RTC_NOTREACHED() << "Registering unsupported RTP extension.";
+ RTC_DCHECK(RtpExtension::IsSupportedForVideo(extension));
+ for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
+ RTC_CHECK_EQ(0, rtp_rtcp->RegisterSendRtpHeaderExtension(
+ StringToRtpExtensionType(extension), id));
}
}
diff --git a/webrtc/video/vie_channel.cc b/webrtc/video/vie_channel.cc
index 82460d8..d91f20b 100644
--- a/webrtc/video/vie_channel.cc
+++ b/webrtc/video/vie_channel.cc
@@ -377,47 +377,6 @@
return target_delay_ms * 40 * 30 / 1000;
}
-int ViEChannel::EnableSendTimestampOffset(int id) {
- // Enable the extension.
- int error = 0;
- for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
- error |= rtp_rtcp->RegisterSendRtpHeaderExtension(
- kRtpExtensionTransmissionTimeOffset, id);
- }
- return error;
-}
-
-int ViEChannel::EnableSendAbsoluteSendTime(int id) {
- // Enable the extension.
- int error = 0;
- for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
- error |= rtp_rtcp->RegisterSendRtpHeaderExtension(
- kRtpExtensionAbsoluteSendTime, id);
- }
- return error;
-}
-
-int ViEChannel::EnableSendVideoRotation(int id) {
- // Enable the extension.
- int error = 0;
- for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
- error |= rtp_rtcp->RegisterSendRtpHeaderExtension(
- kRtpExtensionVideoRotation, id);
- }
- return error;
-}
-
-int ViEChannel::EnableSendTransportSequenceNumber(int id) {
- RTC_DCHECK(sender_);
- // Enable the extension.
- int error = 0;
- for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) {
- error |= rtp_rtcp->RegisterSendRtpHeaderExtension(
- kRtpExtensionTransportSequenceNumber, id);
- }
- return error;
-}
-
RtpState ViEChannel::GetRtpStateForSsrc(uint32_t ssrc) const {
RTC_DCHECK(!rtp_rtcp_modules_[0]->Sending());
RtpState rtp_state;
diff --git a/webrtc/video/vie_channel.h b/webrtc/video/vie_channel.h
index e3182cb..a17207b 100644
--- a/webrtc/video/vie_channel.h
+++ b/webrtc/video/vie_channel.h
@@ -88,10 +88,6 @@
bool enable_fec,
int payload_type_red,
int payload_type_fec);
- int EnableSendTimestampOffset(int id);
- int EnableSendAbsoluteSendTime(int id);
- int EnableSendVideoRotation(int id);
- int EnableSendTransportSequenceNumber(int id);
RtpState GetRtpStateForSsrc(uint32_t ssrc) const;
diff --git a/webrtc/video/vie_receiver.cc b/webrtc/video/vie_receiver.cc
index 4048ad7..2f0cf7a 100644
--- a/webrtc/video/vie_receiver.cc
+++ b/webrtc/video/vie_receiver.cc
@@ -13,6 +13,7 @@
#include <vector>
#include "webrtc/base/logging.h"
+#include "webrtc/config.h"
#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
#include "webrtc/modules/rtp_rtcp/include/fec_receiver.h"
#include "webrtc/modules/rtp_rtcp/include/receive_statistics.h"
@@ -52,9 +53,6 @@
ntp_estimator_(new RemoteNtpTimeEstimator(clock_)),
receiving_(false),
restored_packet_in_use_(false),
- receiving_ast_enabled_(false),
- receiving_cvo_enabled_(false),
- receiving_tsn_enabled_(false),
last_packet_log_ms_(-1) {}
ViEReceiver::~ViEReceiver() {
@@ -156,39 +154,11 @@
std::vector<RtpRtcp*>(rtp_modules.begin() + 1, rtp_modules.end());
}
-bool ViEReceiver::EnableReceiveTimestampOffset(int id) {
- return rtp_header_parser_->RegisterRtpHeaderExtension(
- kRtpExtensionTransmissionTimeOffset, id);
-}
-
-bool ViEReceiver::EnableReceiveAbsoluteSendTime(int id) {
- if (rtp_header_parser_->RegisterRtpHeaderExtension(
- kRtpExtensionAbsoluteSendTime, id)) {
- receiving_ast_enabled_ = true;
- return true;
- } else {
- return false;
- }
-}
-
-bool ViEReceiver::EnableReceiveVideoRotation(int id) {
- if (rtp_header_parser_->RegisterRtpHeaderExtension(
- kRtpExtensionVideoRotation, id)) {
- receiving_cvo_enabled_ = true;
- return true;
- } else {
- return false;
- }
-}
-
-bool ViEReceiver::EnableReceiveTransportSequenceNumber(int id) {
- if (rtp_header_parser_->RegisterRtpHeaderExtension(
- kRtpExtensionTransportSequenceNumber, id)) {
- receiving_tsn_enabled_ = true;
- return true;
- } else {
- return false;
- }
+void ViEReceiver::EnableReceiveRtpHeaderExtension(const std::string& extension,
+ int id) {
+ RTC_DCHECK(RtpExtension::IsSupportedForVideo(extension));
+ RTC_CHECK(rtp_header_parser_->RegisterRtpHeaderExtension(
+ StringToRtpExtensionType(extension), id));
}
int32_t ViEReceiver::OnReceivedPayloadData(const uint8_t* payload_data,
diff --git a/webrtc/video/vie_receiver.h b/webrtc/video/vie_receiver.h
index 3667a5c..ccfbd45 100644
--- a/webrtc/video/vie_receiver.h
+++ b/webrtc/video/vie_receiver.h
@@ -12,6 +12,7 @@
#define WEBRTC_VIDEO_VIE_RECEIVER_H_
#include <list>
+#include <string>
#include <vector>
#include "webrtc/base/scoped_ptr.h"
@@ -64,10 +65,7 @@
void RegisterRtpRtcpModules(const std::vector<RtpRtcp*>& rtp_modules);
- bool EnableReceiveTimestampOffset(int id);
- bool EnableReceiveAbsoluteSendTime(int id);
- bool EnableReceiveVideoRotation(int id);
- bool EnableReceiveTransportSequenceNumber(int id);
+ void EnableReceiveRtpHeaderExtension(const std::string& extension, int id);
void StartReceive();
void StopReceive();
@@ -117,9 +115,6 @@
bool receiving_;
uint8_t restored_packet_[IP_PACKET_SIZE];
bool restored_packet_in_use_;
- bool receiving_ast_enabled_;
- bool receiving_cvo_enabled_;
- bool receiving_tsn_enabled_;
int64_t last_packet_log_ms_;
};