From 9c01725e3742a2ccfdb525a2e0af80199b2ada55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Bostr=C3=B6m?= Date: Fri, 26 Feb 2016 16:26:20 +0100 Subject: [PATCH] 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} --- webrtc/modules/rtp_rtcp/include/rtp_rtcp.h | 3 ++ .../modules/rtp_rtcp/source/rtp_rtcp_impl.cc | 17 ++++++++ webrtc/video/video_receive_stream.cc | 12 +----- webrtc/video/video_send_stream.cc | 15 +++---- webrtc/video/vie_channel.cc | 41 ------------------ webrtc/video/vie_channel.h | 4 -- webrtc/video/vie_receiver.cc | 42 +++---------------- webrtc/video/vie_receiver.h | 9 +--- 8 files changed, 34 insertions(+), 109 deletions(-) diff --git a/webrtc/modules/rtp_rtcp/include/rtp_rtcp.h b/webrtc/modules/rtp_rtcp/include/rtp_rtcp.h index e0ace4c775..a47d3fefae 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 +#include #include #include @@ -26,6 +27,8 @@ class RtpReceiver; 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 7f33bc2ee5..cbb085b5df 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 #include +#include #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 a0775bb0c0..983e28f244 100644 --- a/webrtc/video/video_receive_stream.cc +++ b/webrtc/video/video_receive_stream.cc @@ -229,17 +229,7 @@ VideoReceiveStream::VideoReceiveStream( // 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 93ff1f1f95..66a6a321a1 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 @@ VideoSendStream::VideoSendStream( // 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 82460d884a..d91f20b7a6 100644 --- a/webrtc/video/vie_channel.cc +++ b/webrtc/video/vie_channel.cc @@ -377,47 +377,6 @@ int ViEChannel::GetRequiredNackListSize(int target_delay_ms) { 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 e3182cbf25..a17207bcab 100644 --- a/webrtc/video/vie_channel.h +++ b/webrtc/video/vie_channel.h @@ -88,10 +88,6 @@ class ViEChannel : public VCMFrameTypeCallback, 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 4048ad70f6..2f0cf7a8eb 100644 --- a/webrtc/video/vie_receiver.cc +++ b/webrtc/video/vie_receiver.cc @@ -13,6 +13,7 @@ #include #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 @@ ViEReceiver::ViEReceiver(VideoCodingModule* module_vcm, 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 @@ void ViEReceiver::RegisterRtpRtcpModules( std::vector(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 3667a5c42e..ccfbd459b6 100644 --- a/webrtc/video/vie_receiver.h +++ b/webrtc/video/vie_receiver.h @@ -12,6 +12,7 @@ #define WEBRTC_VIDEO_VIE_RECEIVER_H_ #include +#include #include #include "webrtc/base/scoped_ptr.h" @@ -64,10 +65,7 @@ class ViEReceiver : public RtpData { void RegisterRtpRtcpModules(const std::vector& 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 @@ class ViEReceiver : public RtpData { 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_; };