Convert PayloadUnion from a union to a class, step 2
Stop using PayloadUnion's public member variables, since a future CL will make them private. BUG=webrtc:8159 Change-Id: Ia3dada56be7ef00ed80f3733209b18c178a36561 Reviewed-on: https://webrtc-review.googlesource.com/4380 Commit-Queue: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20027}
This commit is contained in:
@ -24,23 +24,24 @@ namespace {
|
|||||||
|
|
||||||
bool PayloadIsCompatible(const RtpUtility::Payload& payload,
|
bool PayloadIsCompatible(const RtpUtility::Payload& payload,
|
||||||
const CodecInst& audio_codec) {
|
const CodecInst& audio_codec) {
|
||||||
if (!payload.audio)
|
if (!payload.typeSpecific.is_audio())
|
||||||
return false;
|
return false;
|
||||||
if (_stricmp(payload.name, audio_codec.plname) != 0)
|
if (_stricmp(payload.name, audio_codec.plname) != 0)
|
||||||
return false;
|
return false;
|
||||||
const AudioPayload& audio_payload = payload.typeSpecific.Audio;
|
const AudioPayload& audio_payload = payload.typeSpecific.audio_payload();
|
||||||
return audio_payload.frequency == static_cast<uint32_t>(audio_codec.plfreq) &&
|
return audio_payload.frequency == static_cast<uint32_t>(audio_codec.plfreq) &&
|
||||||
audio_payload.channels == audio_codec.channels;
|
audio_payload.channels == audio_codec.channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PayloadIsCompatible(const RtpUtility::Payload& payload,
|
bool PayloadIsCompatible(const RtpUtility::Payload& payload,
|
||||||
const VideoCodec& video_codec) {
|
const VideoCodec& video_codec) {
|
||||||
if (payload.audio || _stricmp(payload.name, video_codec.plName) != 0)
|
if (!payload.typeSpecific.is_video() ||
|
||||||
|
_stricmp(payload.name, video_codec.plName) != 0)
|
||||||
return false;
|
return false;
|
||||||
// For H264, profiles must match as well.
|
// For H264, profiles must match as well.
|
||||||
if (video_codec.codecType == kVideoCodecH264) {
|
if (video_codec.codecType == kVideoCodecH264) {
|
||||||
return video_codec.H264().profile ==
|
return video_codec.H264().profile ==
|
||||||
payload.typeSpecific.Video.h264_profile;
|
payload.typeSpecific.video_payload().h264_profile;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -154,7 +155,7 @@ int32_t RTPPayloadRegistry::RegisterReceivePayload(const CodecInst& audio_codec,
|
|||||||
// We already use this payload type. Check if it's the same as we already
|
// We already use this payload type. Check if it's the same as we already
|
||||||
// have. If same, ignore sending an error.
|
// have. If same, ignore sending an error.
|
||||||
if (PayloadIsCompatible(it->second, audio_codec)) {
|
if (PayloadIsCompatible(it->second, audio_codec)) {
|
||||||
it->second.typeSpecific.Audio.rate = 0;
|
it->second.typeSpecific.audio_payload().rate = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
LOG(LS_ERROR) << "Payload type already registered: " << audio_codec.pltype;
|
LOG(LS_ERROR) << "Payload type already registered: " << audio_codec.pltype;
|
||||||
@ -306,8 +307,9 @@ int RTPPayloadRegistry::GetPayloadTypeFrequency(
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
rtc::CritScope cs(&crit_sect_);
|
rtc::CritScope cs(&crit_sect_);
|
||||||
return payload->audio ? payload->typeSpecific.Audio.frequency
|
return payload->typeSpecific.is_audio()
|
||||||
: kVideoPayloadTypeFrequency;
|
? payload->typeSpecific.audio_payload().frequency
|
||||||
|
: kVideoPayloadTypeFrequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
rtc::Optional<RtpUtility::Payload> RTPPayloadRegistry::PayloadTypeToPayload(
|
rtc::Optional<RtpUtility::Payload> RTPPayloadRegistry::PayloadTypeToPayload(
|
||||||
|
|||||||
@ -48,8 +48,9 @@ TEST(RtpPayloadRegistryTest,
|
|||||||
|
|
||||||
// We should get back the corresponding payload that we registered.
|
// We should get back the corresponding payload that we registered.
|
||||||
EXPECT_STREQ("VP8", retrieved_payload->name);
|
EXPECT_STREQ("VP8", retrieved_payload->name);
|
||||||
EXPECT_FALSE(retrieved_payload->audio);
|
EXPECT_TRUE(retrieved_payload->typeSpecific.is_video());
|
||||||
EXPECT_EQ(kRtpVideoVp8, retrieved_payload->typeSpecific.Video.videoCodecType);
|
EXPECT_EQ(kRtpVideoVp8,
|
||||||
|
retrieved_payload->typeSpecific.video_payload().videoCodecType);
|
||||||
|
|
||||||
// Now forget about it and verify it's gone.
|
// Now forget about it and verify it's gone.
|
||||||
EXPECT_EQ(0, rtp_payload_registry.DeRegisterReceivePayload(payload_type));
|
EXPECT_EQ(0, rtp_payload_registry.DeRegisterReceivePayload(payload_type));
|
||||||
@ -74,9 +75,11 @@ TEST(RtpPayloadRegistryTest,
|
|||||||
|
|
||||||
// We should get back the corresponding payload that we registered.
|
// We should get back the corresponding payload that we registered.
|
||||||
EXPECT_STREQ(kTypicalPayloadName, retrieved_payload->name);
|
EXPECT_STREQ(kTypicalPayloadName, retrieved_payload->name);
|
||||||
EXPECT_TRUE(retrieved_payload->audio);
|
EXPECT_TRUE(retrieved_payload->typeSpecific.is_audio());
|
||||||
EXPECT_EQ(kTypicalFrequency, retrieved_payload->typeSpecific.Audio.frequency);
|
EXPECT_EQ(kTypicalFrequency,
|
||||||
EXPECT_EQ(kTypicalChannels, retrieved_payload->typeSpecific.Audio.channels);
|
retrieved_payload->typeSpecific.audio_payload().frequency);
|
||||||
|
EXPECT_EQ(kTypicalChannels,
|
||||||
|
retrieved_payload->typeSpecific.audio_payload().channels);
|
||||||
|
|
||||||
// Now forget about it and verify it's gone.
|
// Now forget about it and verify it's gone.
|
||||||
EXPECT_EQ(0, rtp_payload_registry.DeRegisterReceivePayload(payload_type));
|
EXPECT_EQ(0, rtp_payload_registry.DeRegisterReceivePayload(payload_type));
|
||||||
@ -105,7 +108,7 @@ TEST(RtpPayloadRegistryTest, AudioRedWorkProperly) {
|
|||||||
const auto retrieved_payload =
|
const auto retrieved_payload =
|
||||||
rtp_payload_registry.PayloadTypeToPayload(kRedPayloadType);
|
rtp_payload_registry.PayloadTypeToPayload(kRedPayloadType);
|
||||||
EXPECT_TRUE(retrieved_payload);
|
EXPECT_TRUE(retrieved_payload);
|
||||||
EXPECT_TRUE(retrieved_payload->audio);
|
EXPECT_TRUE(retrieved_payload->typeSpecific.is_audio());
|
||||||
EXPECT_STRCASEEQ("red", retrieved_payload->name);
|
EXPECT_STRCASEEQ("red", retrieved_payload->name);
|
||||||
|
|
||||||
// Sample rate is correctly registered.
|
// Sample rate is correctly registered.
|
||||||
@ -144,19 +147,21 @@ TEST(RtpPayloadRegistryTest,
|
|||||||
rtp_payload_registry.PayloadTypeToPayload(payload_type);
|
rtp_payload_registry.PayloadTypeToPayload(payload_type);
|
||||||
EXPECT_TRUE(retrieved_payload1);
|
EXPECT_TRUE(retrieved_payload1);
|
||||||
EXPECT_STREQ(kTypicalPayloadName, retrieved_payload1->name);
|
EXPECT_STREQ(kTypicalPayloadName, retrieved_payload1->name);
|
||||||
EXPECT_TRUE(retrieved_payload1->audio);
|
EXPECT_TRUE(retrieved_payload1->typeSpecific.is_audio());
|
||||||
EXPECT_EQ(kTypicalFrequency,
|
EXPECT_EQ(kTypicalFrequency,
|
||||||
retrieved_payload1->typeSpecific.Audio.frequency);
|
retrieved_payload1->typeSpecific.audio_payload().frequency);
|
||||||
EXPECT_EQ(kTypicalChannels, retrieved_payload1->typeSpecific.Audio.channels);
|
EXPECT_EQ(kTypicalChannels,
|
||||||
|
retrieved_payload1->typeSpecific.audio_payload().channels);
|
||||||
|
|
||||||
const auto retrieved_payload2 =
|
const auto retrieved_payload2 =
|
||||||
rtp_payload_registry.PayloadTypeToPayload(payload_type - 1);
|
rtp_payload_registry.PayloadTypeToPayload(payload_type - 1);
|
||||||
EXPECT_TRUE(retrieved_payload2);
|
EXPECT_TRUE(retrieved_payload2);
|
||||||
EXPECT_STREQ(kTypicalPayloadName, retrieved_payload2->name);
|
EXPECT_STREQ(kTypicalPayloadName, retrieved_payload2->name);
|
||||||
EXPECT_TRUE(retrieved_payload2->audio);
|
EXPECT_TRUE(retrieved_payload2->typeSpecific.is_audio());
|
||||||
EXPECT_EQ(kTypicalFrequency + 1,
|
EXPECT_EQ(kTypicalFrequency + 1,
|
||||||
retrieved_payload2->typeSpecific.Audio.frequency);
|
retrieved_payload2->typeSpecific.audio_payload().frequency);
|
||||||
EXPECT_EQ(kTypicalChannels, retrieved_payload2->typeSpecific.Audio.channels);
|
EXPECT_EQ(kTypicalChannels,
|
||||||
|
retrieved_payload2->typeSpecific.audio_payload().channels);
|
||||||
|
|
||||||
// Ok, update the rate for one of the codecs. If either the incoming rate or
|
// Ok, update the rate for one of the codecs. If either the incoming rate or
|
||||||
// the stored rate is zero it's not really an error to register the same
|
// the stored rate is zero it's not really an error to register the same
|
||||||
|
|||||||
@ -150,11 +150,8 @@ int32_t RTPReceiverAudio::ParseRtpPacket(WebRtcRTPHeader* rtp_header,
|
|||||||
LOG(LS_INFO) << "Received first audio RTP packet";
|
LOG(LS_INFO) << "Received first audio RTP packet";
|
||||||
}
|
}
|
||||||
|
|
||||||
return ParseAudioCodecSpecific(rtp_header,
|
return ParseAudioCodecSpecific(rtp_header, payload, payload_length,
|
||||||
payload,
|
specific_payload.audio_payload(), is_red);
|
||||||
payload_length,
|
|
||||||
specific_payload.Audio,
|
|
||||||
is_red);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RTPAliveType RTPReceiverAudio::ProcessDeadOrAlive(
|
RTPAliveType RTPReceiverAudio::ProcessDeadOrAlive(
|
||||||
@ -193,10 +190,9 @@ int32_t RTPReceiverAudio::InvokeOnInitializeDecoder(
|
|||||||
int8_t payload_type,
|
int8_t payload_type,
|
||||||
const char payload_name[RTP_PAYLOAD_NAME_SIZE],
|
const char payload_name[RTP_PAYLOAD_NAME_SIZE],
|
||||||
const PayloadUnion& specific_payload) const {
|
const PayloadUnion& specific_payload) const {
|
||||||
if (-1 ==
|
const auto& ap = specific_payload.audio_payload();
|
||||||
callback->OnInitializeDecoder(
|
if (callback->OnInitializeDecoder(payload_type, payload_name, ap.frequency,
|
||||||
payload_type, payload_name, specific_payload.Audio.frequency,
|
ap.channels, ap.rate) == -1) {
|
||||||
specific_payload.Audio.channels, specific_payload.Audio.rate)) {
|
|
||||||
LOG(LS_ERROR) << "Failed to create decoder for payload type: "
|
LOG(LS_ERROR) << "Failed to create decoder for payload type: "
|
||||||
<< payload_name << "/" << static_cast<int>(payload_type);
|
<< payload_name << "/" << static_cast<int>(payload_type);
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
@ -279,9 +279,9 @@ void RtpReceiverImpl::CheckSSRCChanged(const RTPHeader& rtp_header) {
|
|||||||
}
|
}
|
||||||
payload_name[RTP_PAYLOAD_NAME_SIZE - 1] = 0;
|
payload_name[RTP_PAYLOAD_NAME_SIZE - 1] = 0;
|
||||||
strncpy(payload_name, payload->name, RTP_PAYLOAD_NAME_SIZE - 1);
|
strncpy(payload_name, payload->name, RTP_PAYLOAD_NAME_SIZE - 1);
|
||||||
if (payload->audio) {
|
if (payload->typeSpecific.is_audio()) {
|
||||||
channels = payload->typeSpecific.Audio.channels;
|
channels = payload->typeSpecific.audio_payload().channels;
|
||||||
rate = payload->typeSpecific.Audio.rate;
|
rate = payload->typeSpecific.audio_payload().rate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -376,7 +376,7 @@ int32_t RtpReceiverImpl::CheckPayloadChanged(const RTPHeader& rtp_header,
|
|||||||
rtp_media_receiver_->SetLastMediaSpecificPayload(payload->typeSpecific);
|
rtp_media_receiver_->SetLastMediaSpecificPayload(payload->typeSpecific);
|
||||||
rtp_media_receiver_->GetLastMediaSpecificPayload(specific_payload);
|
rtp_media_receiver_->GetLastMediaSpecificPayload(specific_payload);
|
||||||
|
|
||||||
if (!payload->audio) {
|
if (!payload->typeSpecific.is_audio()) {
|
||||||
bool media_type_unchanged =
|
bool media_type_unchanged =
|
||||||
rtp_payload_registry_->ReportMediaPayloadType(payload_type);
|
rtp_payload_registry_->ReportMediaPayloadType(payload_type);
|
||||||
if (media_type_unchanged) {
|
if (media_type_unchanged) {
|
||||||
|
|||||||
@ -58,7 +58,8 @@ int32_t RTPReceiverVideo::ParseRtpPacket(WebRtcRTPHeader* rtp_header,
|
|||||||
TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "Video::ParseRtp",
|
TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "Video::ParseRtp",
|
||||||
"seqnum", rtp_header->header.sequenceNumber, "timestamp",
|
"seqnum", rtp_header->header.sequenceNumber, "timestamp",
|
||||||
rtp_header->header.timestamp);
|
rtp_header->header.timestamp);
|
||||||
rtp_header->type.Video.codec = specific_payload.Video.videoCodecType;
|
rtp_header->type.Video.codec =
|
||||||
|
specific_payload.video_payload().videoCodecType;
|
||||||
|
|
||||||
RTC_DCHECK_GE(payload_length, rtp_header->header.paddingLength);
|
RTC_DCHECK_GE(payload_length, rtp_header->header.paddingLength);
|
||||||
const size_t payload_data_length =
|
const size_t payload_data_length =
|
||||||
|
|||||||
@ -237,15 +237,16 @@ int32_t RTPSender::RegisterPayload(
|
|||||||
// Check if it's the same as we already have.
|
// Check if it's the same as we already have.
|
||||||
if (RtpUtility::StringCompare(
|
if (RtpUtility::StringCompare(
|
||||||
payload->name, payload_name, RTP_PAYLOAD_NAME_SIZE - 1)) {
|
payload->name, payload_name, RTP_PAYLOAD_NAME_SIZE - 1)) {
|
||||||
if (audio_configured_ && payload->audio &&
|
if (audio_configured_ && payload->typeSpecific.is_audio()) {
|
||||||
payload->typeSpecific.Audio.frequency == frequency &&
|
auto& p = payload->typeSpecific.audio_payload();
|
||||||
(payload->typeSpecific.Audio.rate == rate ||
|
if (p.frequency == frequency &&
|
||||||
payload->typeSpecific.Audio.rate == 0 || rate == 0)) {
|
(p.rate == rate || p.rate == 0 || rate == 0)) {
|
||||||
payload->typeSpecific.Audio.rate = rate;
|
p.rate = rate;
|
||||||
// Ensure that we update the rate if new or old is zero.
|
// Ensure that we update the rate if new or old is zero.
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!audio_configured_ && !payload->audio) {
|
if (!audio_configured_ && !payload->typeSpecific.is_audio()) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -356,9 +357,10 @@ int32_t RTPSender::CheckPayloadType(int8_t payload_type,
|
|||||||
SetSendPayloadType(payload_type);
|
SetSendPayloadType(payload_type);
|
||||||
RtpUtility::Payload* payload = it->second;
|
RtpUtility::Payload* payload = it->second;
|
||||||
RTC_DCHECK(payload);
|
RTC_DCHECK(payload);
|
||||||
if (!payload->audio && !audio_configured_) {
|
if (payload->typeSpecific.is_video() && !audio_configured_) {
|
||||||
video_->SetVideoCodecType(payload->typeSpecific.Video.videoCodecType);
|
video_->SetVideoCodecType(
|
||||||
*video_type = payload->typeSpecific.Video.videoCodecType;
|
payload->typeSpecific.video_payload().videoCodecType);
|
||||||
|
*video_type = payload->typeSpecific.video_payload().videoCodecType;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -500,7 +500,7 @@ void RtpVideoStreamReceiver::NotifyReceiverOfFecPacket(
|
|||||||
LOG(LS_WARNING) << "Failed to get payload specifics.";
|
LOG(LS_WARNING) << "Failed to get payload specifics.";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rtp_header.type.Video.codec = pl->typeSpecific.Video.videoCodecType;
|
rtp_header.type.Video.codec = pl->typeSpecific.video_payload().videoCodecType;
|
||||||
rtp_header.type.Video.rotation = kVideoRotation_0;
|
rtp_header.type.Video.rotation = kVideoRotation_0;
|
||||||
if (header.extension.hasVideoRotation) {
|
if (header.extension.hasVideoRotation) {
|
||||||
rtp_header.type.Video.rotation = header.extension.videoRotation;
|
rtp_header.type.Video.rotation = header.extension.videoRotation;
|
||||||
|
|||||||
Reference in New Issue
Block a user