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:
parent
ff474da11b
commit
9c01725e37
@ -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;
|
||||
}
|
||||
|
||||
@ -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),
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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_;
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user