#include "webrtc/modules/rtp_rtcp/interface/rtp_payload_registry.h"
-#include "webrtc/system_wrappers/interface/trace.h"
+#include "webrtc/system_wrappers/interface/logging.h"
namespace webrtc {
RTPPayloadRegistry::RTPPayloadRegistry(
- const int32_t id,
RTPPayloadStrategy* rtp_payload_strategy)
: crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
- id_(id),
rtp_payload_strategy_(rtp_payload_strategy),
red_payload_type_(-1),
ulpfec_payload_type_(-1),
RTPPayloadRegistry::~RTPPayloadRegistry() {
while (!payload_type_map_.empty()) {
- ModuleRTPUtility::PayloadTypeMap::iterator it = payload_type_map_.begin();
+ RtpUtility::PayloadTypeMap::iterator it = payload_type_map_.begin();
delete it->second;
payload_type_map_.erase(it);
}
case 77: // 205 Transport layer FB message.
case 78: // 206 Payload-specific FB message.
case 79: // 207 Extended report.
- WEBRTC_TRACE(kTraceError, kTraceRtpRtcp, id_,
- "%s invalid payloadtype:%d",
- __FUNCTION__, payload_type);
+ LOG(LS_ERROR) << "Can't register invalid receiver payload type: "
+ << payload_type;
return -1;
default:
break;
CriticalSectionScoped cs(crit_sect_.get());
- ModuleRTPUtility::PayloadTypeMap::iterator it =
- payload_type_map_.find(payload_type);
+ RtpUtility::PayloadTypeMap::iterator it =
+ payload_type_map_.find(payload_type);
if (it != payload_type_map_.end()) {
// We already use this payload type.
- ModuleRTPUtility::Payload* payload = it->second;
+ RtpUtility::Payload* payload = it->second;
assert(payload);
// Check if it's the same as we already have.
// If same, ignore sending an error.
if (payload_name_length == name_length &&
- ModuleRTPUtility::StringCompare(
+ RtpUtility::StringCompare(
payload->name, payload_name, payload_name_length)) {
if (rtp_payload_strategy_->PayloadIsCompatible(*payload, frequency,
channels, rate)) {
return 0;
}
}
- WEBRTC_TRACE(kTraceError, kTraceRtpRtcp, id_,
- "%s invalid argument payload_type:%d already registered",
- __FUNCTION__, payload_type);
+ LOG(LS_ERROR) << "Payload type already registered: " << payload_type;
return -1;
}
payload_name, payload_name_length, frequency, channels, rate);
}
- ModuleRTPUtility::Payload* payload = NULL;
+ RtpUtility::Payload* payload = NULL;
// Save the RED payload type. Used in both audio and video.
- if (ModuleRTPUtility::StringCompare(payload_name, "red", 3)) {
+ if (RtpUtility::StringCompare(payload_name, "red", 3)) {
red_payload_type_ = payload_type;
- payload = new ModuleRTPUtility::Payload;
+ payload = new RtpUtility::Payload;
memset(payload, 0, sizeof(*payload));
payload->audio = false;
strncpy(payload->name, payload_name, RTP_PAYLOAD_NAME_SIZE - 1);
- } else if (ModuleRTPUtility::StringCompare(payload_name, "ulpfec", 3)) {
+ } else if (RtpUtility::StringCompare(payload_name, "ulpfec", 3)) {
ulpfec_payload_type_ = payload_type;
- payload = new ModuleRTPUtility::Payload;
+ payload = new RtpUtility::Payload;
memset(payload, 0, sizeof(*payload));
payload->audio = false;
strncpy(payload->name, payload_name, RTP_PAYLOAD_NAME_SIZE - 1);
int32_t RTPPayloadRegistry::DeRegisterReceivePayload(
const int8_t payload_type) {
CriticalSectionScoped cs(crit_sect_.get());
- ModuleRTPUtility::PayloadTypeMap::iterator it =
- payload_type_map_.find(payload_type);
-
- if (it == payload_type_map_.end()) {
- WEBRTC_TRACE(kTraceError, kTraceRtpRtcp, id_,
- "%s failed to find payload_type:%d",
- __FUNCTION__, payload_type);
- return -1;
- }
+ RtpUtility::PayloadTypeMap::iterator it =
+ payload_type_map_.find(payload_type);
+ assert(it != payload_type_map_.end());
delete it->second;
payload_type_map_.erase(it);
return 0;
const uint32_t frequency,
const uint8_t channels,
const uint32_t rate) {
- ModuleRTPUtility::PayloadTypeMap::iterator iterator =
- payload_type_map_.begin();
+ RtpUtility::PayloadTypeMap::iterator iterator = payload_type_map_.begin();
for (; iterator != payload_type_map_.end(); ++iterator) {
- ModuleRTPUtility::Payload* payload = iterator->second;
+ RtpUtility::Payload* payload = iterator->second;
size_t name_length = strlen(payload->name);
- if (payload_name_length == name_length
- && ModuleRTPUtility::StringCompare(payload->name, payload_name,
- payload_name_length)) {
+ if (payload_name_length == name_length &&
+ RtpUtility::StringCompare(
+ payload->name, payload_name, payload_name_length)) {
// We found the payload name in the list.
// If audio, check frequency and rate.
if (payload->audio) {
payload_type_map_.erase(iterator);
break;
}
- } else if (ModuleRTPUtility::StringCompare(payload_name, "red", 3)) {
+ } else if (RtpUtility::StringCompare(payload_name, "red", 3)) {
delete payload;
payload_type_map_.erase(iterator);
break;
const uint8_t channels,
const uint32_t rate,
int8_t* payload_type) const {
- if (payload_type == NULL) {
- WEBRTC_TRACE(kTraceError, kTraceRtpRtcp, id_,
- "%s invalid argument", __FUNCTION__);
- return -1;
- }
+ assert(payload_type);
size_t payload_name_length = strlen(payload_name);
CriticalSectionScoped cs(crit_sect_.get());
- ModuleRTPUtility::PayloadTypeMap::const_iterator it =
- payload_type_map_.begin();
+ RtpUtility::PayloadTypeMap::const_iterator it = payload_type_map_.begin();
for (; it != payload_type_map_.end(); ++it) {
- ModuleRTPUtility::Payload* payload = it->second;
+ RtpUtility::Payload* payload = it->second;
assert(payload);
size_t name_length = strlen(payload->name);
if (payload_name_length == name_length &&
- ModuleRTPUtility::StringCompare(
+ RtpUtility::StringCompare(
payload->name, payload_name, payload_name_length)) {
// Name matches.
if (payload->audio) {
return -1;
}
-void RTPPayloadRegistry::SetRtxStatus(bool enable, uint32_t ssrc) {
- CriticalSectionScoped cs(crit_sect_.get());
- rtx_ = enable;
- ssrc_rtx_ = ssrc;
-}
-
bool RTPPayloadRegistry::RtxEnabled() const {
CriticalSectionScoped cs(crit_sect_.get());
return rtx_;
*packet_length -= kRtxHeaderSize;
// Replace the SSRC and the sequence number with the originals.
- ModuleRTPUtility::AssignUWord16ToBuffer(*restored_packet + 2,
- original_sequence_number);
- ModuleRTPUtility::AssignUWord32ToBuffer(*restored_packet + 8, original_ssrc);
+ RtpUtility::AssignUWord16ToBuffer(*restored_packet + 2,
+ original_sequence_number);
+ RtpUtility::AssignUWord32ToBuffer(*restored_packet + 8, original_ssrc);
CriticalSectionScoped cs(crit_sect_.get());
(*restored_packet)[1] |= kRtpMarkerBitMask; // Marker bit is set.
}
} else {
- WEBRTC_TRACE(kTraceWarning, kTraceRtpRtcp, id_,
- "Incorrect RTX configuration, dropping packet.");
+ LOG(LS_WARNING) << "Incorrect RTX configuration, dropping packet.";
return false;
}
}
return true;
}
+void RTPPayloadRegistry::SetRtxSsrc(uint32_t ssrc) {
+ CriticalSectionScoped cs(crit_sect_.get());
+ ssrc_rtx_ = ssrc;
+ rtx_ = true;
+}
+
void RTPPayloadRegistry::SetRtxPayloadType(int payload_type) {
CriticalSectionScoped cs(crit_sect_.get());
+ assert(payload_type >= 0);
payload_type_rtx_ = payload_type;
+ rtx_ = true;
}
bool RTPPayloadRegistry::IsRed(const RTPHeader& header) const {
bool RTPPayloadRegistry::GetPayloadSpecifics(uint8_t payload_type,
PayloadUnion* payload) const {
CriticalSectionScoped cs(crit_sect_.get());
- ModuleRTPUtility::PayloadTypeMap::const_iterator it =
- payload_type_map_.find(payload_type);
+ RtpUtility::PayloadTypeMap::const_iterator it =
+ payload_type_map_.find(payload_type);
// Check that this is a registered payload type.
if (it == payload_type_map_.end()) {
int RTPPayloadRegistry::GetPayloadTypeFrequency(
uint8_t payload_type) const {
- ModuleRTPUtility::Payload* payload;
+ RtpUtility::Payload* payload;
if (!PayloadTypeToPayload(payload_type, payload)) {
return -1;
}
}
bool RTPPayloadRegistry::PayloadTypeToPayload(
- const uint8_t payload_type,
- ModuleRTPUtility::Payload*& payload) const {
+ const uint8_t payload_type,
+ RtpUtility::Payload*& payload) const {
CriticalSectionScoped cs(crit_sect_.get());
- ModuleRTPUtility::PayloadTypeMap::const_iterator it =
- payload_type_map_.find(payload_type);
+ RtpUtility::PayloadTypeMap::const_iterator it =
+ payload_type_map_.find(payload_type);
// Check that this is a registered payload type.
if (it == payload_type_map_.end()) {
public:
virtual bool CodecsMustBeUnique() const OVERRIDE { return true; }
- virtual bool PayloadIsCompatible(
- const ModuleRTPUtility::Payload& payload,
- const uint32_t frequency,
- const uint8_t channels,
- const uint32_t rate) const OVERRIDE {
+ virtual bool PayloadIsCompatible(const RtpUtility::Payload& payload,
+ const uint32_t frequency,
+ const uint8_t channels,
+ const uint32_t rate) const OVERRIDE {
return
payload.audio &&
payload.typeSpecific.Audio.frequency == frequency &&
payload.typeSpecific.Audio.rate == 0 || rate == 0);
}
- virtual void UpdatePayloadRate(
- ModuleRTPUtility::Payload* payload,
- const uint32_t rate) const OVERRIDE {
+ virtual void UpdatePayloadRate(RtpUtility::Payload* payload,
+ const uint32_t rate) const OVERRIDE {
payload->typeSpecific.Audio.rate = rate;
}
- virtual ModuleRTPUtility::Payload* CreatePayloadType(
+ virtual RtpUtility::Payload* CreatePayloadType(
const char payloadName[RTP_PAYLOAD_NAME_SIZE],
const int8_t payloadType,
const uint32_t frequency,
const uint8_t channels,
const uint32_t rate) const OVERRIDE {
- ModuleRTPUtility::Payload* payload = new ModuleRTPUtility::Payload;
+ RtpUtility::Payload* payload = new RtpUtility::Payload;
payload->name[RTP_PAYLOAD_NAME_SIZE - 1] = 0;
strncpy(payload->name, payloadName, RTP_PAYLOAD_NAME_SIZE - 1);
assert(frequency >= 1000);
return payload;
}
- int GetPayloadTypeFrequency(
- const ModuleRTPUtility::Payload& payload) const {
+ int GetPayloadTypeFrequency(const RtpUtility::Payload& payload) const {
return payload.typeSpecific.Audio.frequency;
}
};
public:
virtual bool CodecsMustBeUnique() const OVERRIDE { return false; }
- virtual bool PayloadIsCompatible(
- const ModuleRTPUtility::Payload& payload,
- const uint32_t frequency,
- const uint8_t channels,
- const uint32_t rate) const OVERRIDE {
+ virtual bool PayloadIsCompatible(const RtpUtility::Payload& payload,
+ const uint32_t frequency,
+ const uint8_t channels,
+ const uint32_t rate) const OVERRIDE {
return !payload.audio;
}
- virtual void UpdatePayloadRate(
- ModuleRTPUtility::Payload* payload,
- const uint32_t rate) const OVERRIDE {
+ virtual void UpdatePayloadRate(RtpUtility::Payload* payload,
+ const uint32_t rate) const OVERRIDE {
payload->typeSpecific.Video.maxRate = rate;
}
- virtual ModuleRTPUtility::Payload* CreatePayloadType(
+ virtual RtpUtility::Payload* CreatePayloadType(
const char payloadName[RTP_PAYLOAD_NAME_SIZE],
const int8_t payloadType,
const uint32_t frequency,
const uint8_t channels,
const uint32_t rate) const OVERRIDE {
RtpVideoCodecTypes videoType = kRtpVideoGeneric;
- if (ModuleRTPUtility::StringCompare(payloadName, "VP8", 3)) {
+ if (RtpUtility::StringCompare(payloadName, "VP8", 3)) {
videoType = kRtpVideoVp8;
- } else if (ModuleRTPUtility::StringCompare(payloadName, "I420", 4)) {
+ } else if (RtpUtility::StringCompare(payloadName, "H264", 4)) {
+ videoType = kRtpVideoH264;
+ } else if (RtpUtility::StringCompare(payloadName, "I420", 4)) {
videoType = kRtpVideoGeneric;
- } else if (ModuleRTPUtility::StringCompare(payloadName, "ULPFEC", 6)) {
+ } else if (RtpUtility::StringCompare(payloadName, "ULPFEC", 6)) {
videoType = kRtpVideoNone;
} else {
videoType = kRtpVideoGeneric;
}
- ModuleRTPUtility::Payload* payload = new ModuleRTPUtility::Payload;
+ RtpUtility::Payload* payload = new RtpUtility::Payload;
payload->name[RTP_PAYLOAD_NAME_SIZE - 1] = 0;
strncpy(payload->name, payloadName, RTP_PAYLOAD_NAME_SIZE - 1);
return payload;
}
- int GetPayloadTypeFrequency(
- const ModuleRTPUtility::Payload& payload) const {
+ int GetPayloadTypeFrequency(const RtpUtility::Payload& payload) const {
return kVideoPayloadTypeFrequency;
}
};