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}
This commit is contained in:
Peter Boström 2016-02-26 16:26:20 +01:00
parent ff474da11b
commit 9c01725e37
8 changed files with 34 additions and 109 deletions

View File

@ -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 RtpReceiver;
class Transport;
class RtcEventLog;
RTPExtensionType StringToRtpExtensionType(const std::string& extension);
namespace rtcp {
class TransportFeedback;
}

View File

@ -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),

View File

@ -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) {

View File

@ -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));
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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 @@ 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<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,

View File

@ -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 @@ class ViEReceiver : public RtpData {
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 @@ 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_;
};