Removed sync packet support from NetEq.
I could not find a single place it was used, outside of the unittests
for the sync packet support itself.
Review-Url: https://codereview.webrtc.org/2309303002
Cr-Commit-Position: refs/heads/master@{#14130}
diff --git a/webrtc/modules/audio_coding/neteq/include/neteq.h b/webrtc/modules/audio_coding/neteq/include/neteq.h
index 9420cdb..cae56b3 100644
--- a/webrtc/modules/audio_coding/neteq/include/neteq.h
+++ b/webrtc/modules/audio_coding/neteq/include/neteq.h
@@ -128,8 +128,7 @@
kDecodedTooMuch,
kFrameSplitError,
kRedundancySplitError,
- kPacketBufferCorruption,
- kSyncPacketNotAccepted
+ kPacketBufferCorruption
};
// Creates a new NetEq object, with parameters set in |config|. The |config|
@@ -149,18 +148,6 @@
rtc::ArrayView<const uint8_t> payload,
uint32_t receive_timestamp) = 0;
- // Inserts a sync-packet into packet queue. Sync-packets are decoded to
- // silence and are intended to keep AV-sync intact in an event of long packet
- // losses when Video NACK is enabled but Audio NACK is not. Clients of NetEq
- // might insert sync-packet when they observe that buffer level of NetEq is
- // decreasing below a certain threshold, defined by the application.
- // Sync-packets should have the same payload type as the last audio payload
- // type, i.e. they cannot have DTMF or CNG payload type, nor a codec change
- // can be implied by inserting a sync-packet.
- // Returns kOk on success, kFail on failure.
- virtual int InsertSyncPacket(const WebRtcRTPHeader& rtp_header,
- uint32_t receive_timestamp) = 0;
-
// Instructs NetEq to deliver 10 ms of audio data. The data is written to
// |audio_frame|. All data in |audio_frame| is wiped; |data_|, |speech_type_|,
// |num_channels_|, |sample_rate_hz_|, |samples_per_channel_|, and
diff --git a/webrtc/modules/audio_coding/neteq/neteq_impl.cc b/webrtc/modules/audio_coding/neteq/neteq_impl.cc
index 7d200f0..9c4f580 100644
--- a/webrtc/modules/audio_coding/neteq/neteq_impl.cc
+++ b/webrtc/modules/audio_coding/neteq/neteq_impl.cc
@@ -137,21 +137,7 @@
TRACE_EVENT0("webrtc", "NetEqImpl::InsertPacket");
rtc::CritScope lock(&crit_sect_);
int error =
- InsertPacketInternal(rtp_header, payload, receive_timestamp, false);
- if (error != 0) {
- error_code_ = error;
- return kFail;
- }
- return kOK;
-}
-
-int NetEqImpl::InsertSyncPacket(const WebRtcRTPHeader& rtp_header,
- uint32_t receive_timestamp) {
- rtc::CritScope lock(&crit_sect_);
- const uint8_t kSyncPayload[] = { 's', 'y', 'n', 'c' };
- int error =
- InsertPacketInternal(rtp_header, kSyncPayload, receive_timestamp, true);
-
+ InsertPacketInternal(rtp_header, payload, receive_timestamp);
if (error != 0) {
error_code_ = error;
return kFail;
@@ -522,31 +508,12 @@
int NetEqImpl::InsertPacketInternal(const WebRtcRTPHeader& rtp_header,
rtc::ArrayView<const uint8_t> payload,
- uint32_t receive_timestamp,
- bool is_sync_packet) {
+ uint32_t receive_timestamp) {
if (payload.empty()) {
LOG_F(LS_ERROR) << "payload is empty";
return kInvalidPointer;
}
- // Sanity checks for sync-packets.
- if (is_sync_packet) {
- if (decoder_database_->IsDtmf(rtp_header.header.payloadType) ||
- decoder_database_->IsRed(rtp_header.header.payloadType) ||
- decoder_database_->IsComfortNoise(rtp_header.header.payloadType)) {
- LOG_F(LS_ERROR) << "Sync-packet with an unacceptable payload type "
- << static_cast<int>(rtp_header.header.payloadType);
- return kSyncPacketNotAccepted;
- }
- if (first_packet_ || !current_rtp_payload_type_ ||
- rtp_header.header.payloadType != *current_rtp_payload_type_ ||
- rtp_header.header.ssrc != ssrc_) {
- // Even if |current_rtp_payload_type_| is empty, sync-packet isn't
- // accepted.
- LOG_F(LS_ERROR)
- << "Changing codec, SSRC or first packet with sync-packet.";
- return kSyncPacketNotAccepted;
- }
- }
+
PacketList packet_list;
RTPHeader main_header;
{
@@ -565,7 +532,6 @@
packet->primary = true;
// Waiting time will be set upon inserting the packet in the buffer.
RTC_DCHECK(!packet->waiting_time);
- packet->sync_packet = is_sync_packet;
// Insert packet in a packet list.
packet_list.push_back(packet);
// Save main payloads header for later.
@@ -601,12 +567,10 @@
}
// Update RTCP statistics, only for regular packets.
- if (!is_sync_packet)
- rtcp_.Update(main_header, receive_timestamp);
+ rtcp_.Update(main_header, receive_timestamp);
// Check for RED payload type, and separate payloads into several packets.
if (decoder_database_->IsRed(main_header.payloadType)) {
- assert(!is_sync_packet); // We had a sanity check for this.
if (payload_splitter_->SplitRed(&packet_list) != PayloadSplitter::kOK) {
PacketBuffer::DeleteAllPackets(&packet_list);
return kRedundancySplitError;
@@ -637,7 +601,6 @@
assert(current_packet);
assert(!current_packet->payload.empty());
if (decoder_database_->IsDtmf(current_packet->header.payloadType)) {
- assert(!current_packet->sync_packet); // We had a sanity check for this.
DtmfEvent event;
int ret = DtmfBuffer::ParseEvent(current_packet->header.timestamp,
current_packet->payload.data(),
@@ -670,8 +633,7 @@
}
// Split payloads into smaller chunks. This also verifies that all payloads
- // are of a known payload type. SplitAudio() method is protected against
- // sync-packets.
+ // are of a known payload type.
ret = payload_splitter_->SplitAudio(&packet_list, *decoder_database_);
if (ret != PayloadSplitter::kOK) {
PacketBuffer::DeleteAllPackets(&packet_list);
@@ -685,9 +647,8 @@
}
}
- // Update bandwidth estimate, if the packet is not sync-packet nor comfort
- // noise.
- if (!packet_list.empty() && !packet_list.front()->sync_packet &&
+ // Update bandwidth estimate, if the packet is not comfort noise.
+ if (!packet_list.empty() &&
!decoder_database_->IsComfortNoise(main_header.payloadType)) {
// The list can be empty here if we got nothing but DTMF payloads.
AudioDecoder* decoder =
@@ -1462,13 +1423,7 @@
packet_list->pop_front();
const size_t payload_length = packet->payload.size();
int decode_length;
- if (packet->sync_packet) {
- // Decode to silence with the same frame size as the last decode.
- memset(&decoded_buffer_[*decoded_length], 0,
- decoder_frame_length_ * decoder->Channels() *
- sizeof(decoded_buffer_[0]));
- decode_length = rtc::checked_cast<int>(decoder_frame_length_);
- } else if (!packet->primary) {
+ if (!packet->primary) {
// This is a redundant payload; call the special decoder method.
decode_length = decoder->DecodeRedundant(
packet->payload.data(), packet->payload.size(), fs_hz_,
@@ -1974,17 +1929,13 @@
AudioDecoder* decoder = decoder_database_->GetDecoder(
packet->header.payloadType);
if (decoder) {
- if (packet->sync_packet) {
- packet_duration = rtc::checked_cast<int>(decoder_frame_length_);
+ if (packet->primary) {
+ packet_duration = decoder->PacketDuration(packet->payload.data(),
+ packet->payload.size());
} else {
- if (packet->primary) {
- packet_duration = decoder->PacketDuration(packet->payload.data(),
- packet->payload.size());
- } else {
- packet_duration = decoder->PacketDurationRedundant(
- packet->payload.data(), packet->payload.size());
- stats_.SecondaryDecodedSamples(packet_duration);
- }
+ packet_duration = decoder->PacketDurationRedundant(
+ packet->payload.data(), packet->payload.size());
+ stats_.SecondaryDecodedSamples(packet_duration);
}
} else if (!decoder_database_->IsComfortNoise(packet->header.payloadType)) {
LOG(LS_WARNING) << "Unknown payload type "
diff --git a/webrtc/modules/audio_coding/neteq/neteq_impl.h b/webrtc/modules/audio_coding/neteq/neteq_impl.h
index f2f6419..e74f090 100644
--- a/webrtc/modules/audio_coding/neteq/neteq_impl.h
+++ b/webrtc/modules/audio_coding/neteq/neteq_impl.h
@@ -108,18 +108,6 @@
rtc::ArrayView<const uint8_t> payload,
uint32_t receive_timestamp) override;
- // Inserts a sync-packet into packet queue. Sync-packets are decoded to
- // silence and are intended to keep AV-sync intact in an event of long packet
- // losses when Video NACK is enabled but Audio NACK is not. Clients of NetEq
- // might insert sync-packet when they observe that buffer level of NetEq is
- // decreasing below a certain threshold, defined by the application.
- // Sync-packets should have the same payload type as the last audio payload
- // type, i.e. they cannot have DTMF or CNG payload type, nor a codec change
- // can be implied by inserting a sync-packet.
- // Returns kOk on success, kFail on failure.
- int InsertSyncPacket(const WebRtcRTPHeader& rtp_header,
- uint32_t receive_timestamp) override;
-
int GetAudio(AudioFrame* audio_frame, bool* muted) override;
int RegisterPayloadType(NetEqDecoder codec,
@@ -223,8 +211,7 @@
// TODO(hlundin): Merge this with InsertPacket above?
int InsertPacketInternal(const WebRtcRTPHeader& rtp_header,
rtc::ArrayView<const uint8_t> payload,
- uint32_t receive_timestamp,
- bool is_sync_packet)
+ uint32_t receive_timestamp)
EXCLUSIVE_LOCKS_REQUIRED(crit_sect_);
// Delivers 10 ms of audio data. The data is written to |audio_frame|.
diff --git a/webrtc/modules/audio_coding/neteq/neteq_unittest.cc b/webrtc/modules/audio_coding/neteq/neteq_unittest.cc
index b63d7c1..14a48af 100644
--- a/webrtc/modules/audio_coding/neteq/neteq_unittest.cc
+++ b/webrtc/modules/audio_coding/neteq/neteq_unittest.cc
@@ -61,20 +61,6 @@
#endif // WEBRTC_WIN
}
-bool IsAllZero(const int16_t* buf, size_t buf_length) {
- bool all_zero = true;
- for (size_t n = 0; n < buf_length && all_zero; ++n)
- all_zero = buf[n] == 0;
- return all_zero;
-}
-
-bool IsAllNonZero(const int16_t* buf, size_t buf_length) {
- bool all_non_zero = true;
- for (size_t n = 0; n < buf_length && all_non_zero; ++n)
- all_non_zero = buf[n] != 0;
- return all_non_zero;
-}
-
#ifdef WEBRTC_NETEQ_UNITTEST_BITEXACT
void Convert(const webrtc::NetEqNetworkStatistics& stats_raw,
webrtc::neteq_unittest::NetEqNetworkStatistics* stats) {
@@ -1079,232 +1065,6 @@
CheckBgn(32000);
}
-#if defined(WEBRTC_CODEC_ISAC) || defined(WEBRTC_CODEC_ISACFX)
-#define MAYBE_SyncPacketInsert SyncPacketInsert
-#else
-#define MAYBE_SyncPacketInsert DISABLED_SyncPacketInsert
-#endif
-TEST_F(NetEqDecodingTest, MAYBE_SyncPacketInsert) {
- WebRtcRTPHeader rtp_info;
- uint32_t receive_timestamp = 0;
- // For the readability use the following payloads instead of the defaults of
- // this test.
- uint8_t kPcm16WbPayloadType = 1;
- uint8_t kCngNbPayloadType = 2;
- uint8_t kCngWbPayloadType = 3;
- uint8_t kCngSwb32PayloadType = 4;
- uint8_t kCngSwb48PayloadType = 5;
- uint8_t kAvtPayloadType = 6;
- uint8_t kRedPayloadType = 7;
- uint8_t kIsacPayloadType = 9; // Payload type 8 is already registered.
-
- // Register decoders.
- ASSERT_EQ(0, neteq_->RegisterPayloadType(NetEqDecoder::kDecoderPCM16Bwb,
- "pcm16-wb", kPcm16WbPayloadType));
- ASSERT_EQ(0, neteq_->RegisterPayloadType(NetEqDecoder::kDecoderCNGnb,
- "cng-nb", kCngNbPayloadType));
- ASSERT_EQ(0, neteq_->RegisterPayloadType(NetEqDecoder::kDecoderCNGwb,
- "cng-wb", kCngWbPayloadType));
- ASSERT_EQ(0, neteq_->RegisterPayloadType(NetEqDecoder::kDecoderCNGswb32kHz,
- "cng-swb32", kCngSwb32PayloadType));
- ASSERT_EQ(0, neteq_->RegisterPayloadType(NetEqDecoder::kDecoderCNGswb48kHz,
- "cng-swb48", kCngSwb48PayloadType));
- ASSERT_EQ(0, neteq_->RegisterPayloadType(NetEqDecoder::kDecoderAVT, "avt",
- kAvtPayloadType));
- ASSERT_EQ(0, neteq_->RegisterPayloadType(NetEqDecoder::kDecoderRED, "red",
- kRedPayloadType));
- ASSERT_EQ(0, neteq_->RegisterPayloadType(NetEqDecoder::kDecoderISAC, "isac",
- kIsacPayloadType));
-
- PopulateRtpInfo(0, 0, &rtp_info);
- rtp_info.header.payloadType = kPcm16WbPayloadType;
-
- // The first packet injected cannot be sync-packet.
- EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-
- // Payload length of 10 ms PCM16 16 kHz.
- const size_t kPayloadBytes = kBlockSize16kHz * sizeof(int16_t);
- uint8_t payload[kPayloadBytes] = {0};
- ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
-
- // Next packet. Last packet contained 10 ms audio.
- rtp_info.header.sequenceNumber++;
- rtp_info.header.timestamp += kBlockSize16kHz;
- receive_timestamp += kBlockSize16kHz;
-
- // Unacceptable payload types CNG, AVT (DTMF), RED.
- rtp_info.header.payloadType = kCngNbPayloadType;
- EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-
- rtp_info.header.payloadType = kCngWbPayloadType;
- EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-
- rtp_info.header.payloadType = kCngSwb32PayloadType;
- EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-
- rtp_info.header.payloadType = kCngSwb48PayloadType;
- EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-
- rtp_info.header.payloadType = kAvtPayloadType;
- EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-
- rtp_info.header.payloadType = kRedPayloadType;
- EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-
- // Change of codec cannot be initiated with a sync packet.
- rtp_info.header.payloadType = kIsacPayloadType;
- EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-
- // Change of SSRC is not allowed with a sync packet.
- rtp_info.header.payloadType = kPcm16WbPayloadType;
- ++rtp_info.header.ssrc;
- EXPECT_EQ(-1, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-
- --rtp_info.header.ssrc;
- EXPECT_EQ(0, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
-}
-
-// First insert several noise like packets, then sync-packets. Decoding all
-// packets should not produce error, statistics should not show any packet loss
-// and sync-packets should decode to zero.
-// TODO(turajs) we will have a better test if we have a referece NetEq, and
-// when Sync packets are inserted in "test" NetEq we insert all-zero payload
-// in reference NetEq and compare the output of those two.
-TEST_F(NetEqDecodingTest, SyncPacketDecode) {
- WebRtcRTPHeader rtp_info;
- PopulateRtpInfo(0, 0, &rtp_info);
- const size_t kPayloadBytes = kBlockSize16kHz * sizeof(int16_t);
- uint8_t payload[kPayloadBytes];
- AudioFrame output;
- int algorithmic_frame_delay = algorithmic_delay_ms_ / 10 + 1;
- for (size_t n = 0; n < kPayloadBytes; ++n) {
- payload[n] = (rand() & 0xF0) + 1; // Non-zero random sequence.
- }
- // Insert some packets which decode to noise. We are not interested in
- // actual decoded values.
- uint32_t receive_timestamp = 0;
- bool muted;
- for (int n = 0; n < 100; ++n) {
- ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
- ASSERT_EQ(0, neteq_->GetAudio(&output, &muted));
- ASSERT_EQ(kBlockSize16kHz, output.samples_per_channel_);
- ASSERT_EQ(1u, output.num_channels_);
-
- rtp_info.header.sequenceNumber++;
- rtp_info.header.timestamp += kBlockSize16kHz;
- receive_timestamp += kBlockSize16kHz;
- }
- const int kNumSyncPackets = 10;
-
- // Make sure sufficient number of sync packets are inserted that we can
- // conduct a test.
- ASSERT_GT(kNumSyncPackets, algorithmic_frame_delay);
- // Insert sync-packets, the decoded sequence should be all-zero.
- for (int n = 0; n < kNumSyncPackets; ++n) {
- ASSERT_EQ(0, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
- ASSERT_EQ(0, neteq_->GetAudio(&output, &muted));
- ASSERT_FALSE(muted);
- ASSERT_EQ(kBlockSize16kHz, output.samples_per_channel_);
- ASSERT_EQ(1u, output.num_channels_);
- if (n > algorithmic_frame_delay) {
- EXPECT_TRUE(IsAllZero(
- output.data_, output.samples_per_channel_ * output.num_channels_));
- }
- rtp_info.header.sequenceNumber++;
- rtp_info.header.timestamp += kBlockSize16kHz;
- receive_timestamp += kBlockSize16kHz;
- }
-
- // We insert regular packets, if sync packet are not correctly buffered then
- // network statistics would show some packet loss.
- for (int n = 0; n <= algorithmic_frame_delay + 10; ++n) {
- ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
- ASSERT_EQ(0, neteq_->GetAudio(&output, &muted));
- ASSERT_FALSE(muted);
- if (n >= algorithmic_frame_delay + 1) {
- // Expect that this frame contain samples from regular RTP.
- EXPECT_TRUE(IsAllNonZero(
- output.data_, output.samples_per_channel_ * output.num_channels_));
- }
- rtp_info.header.sequenceNumber++;
- rtp_info.header.timestamp += kBlockSize16kHz;
- receive_timestamp += kBlockSize16kHz;
- }
- NetEqNetworkStatistics network_stats;
- ASSERT_EQ(0, neteq_->NetworkStatistics(&network_stats));
- // Expecting a "clean" network.
- EXPECT_EQ(0, network_stats.packet_loss_rate);
- EXPECT_EQ(0, network_stats.expand_rate);
- EXPECT_EQ(0, network_stats.accelerate_rate);
- EXPECT_LE(network_stats.preemptive_rate, 150);
-}
-
-// Test if the size of the packet buffer reported correctly when containing
-// sync packets. Also, test if network packets override sync packets. That is to
-// prefer decoding a network packet to a sync packet, if both have same sequence
-// number and timestamp.
-TEST_F(NetEqDecodingTest, SyncPacketBufferSizeAndOverridenByNetworkPackets) {
- WebRtcRTPHeader rtp_info;
- PopulateRtpInfo(0, 0, &rtp_info);
- const size_t kPayloadBytes = kBlockSize16kHz * sizeof(int16_t);
- uint8_t payload[kPayloadBytes];
- AudioFrame output;
- for (size_t n = 0; n < kPayloadBytes; ++n) {
- payload[n] = (rand() & 0xF0) + 1; // Non-zero random sequence.
- }
- // Insert some packets which decode to noise. We are not interested in
- // actual decoded values.
- uint32_t receive_timestamp = 0;
- int algorithmic_frame_delay = algorithmic_delay_ms_ / 10 + 1;
- bool muted;
- for (int n = 0; n < algorithmic_frame_delay; ++n) {
- ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
- ASSERT_EQ(0, neteq_->GetAudio(&output, &muted));
- ASSERT_EQ(kBlockSize16kHz, output.samples_per_channel_);
- ASSERT_EQ(1u, output.num_channels_);
- rtp_info.header.sequenceNumber++;
- rtp_info.header.timestamp += kBlockSize16kHz;
- receive_timestamp += kBlockSize16kHz;
- }
- const int kNumSyncPackets = 10;
-
- WebRtcRTPHeader first_sync_packet_rtp_info;
- memcpy(&first_sync_packet_rtp_info, &rtp_info, sizeof(rtp_info));
-
- // Insert sync-packets, but no decoding.
- for (int n = 0; n < kNumSyncPackets; ++n) {
- ASSERT_EQ(0, neteq_->InsertSyncPacket(rtp_info, receive_timestamp));
- rtp_info.header.sequenceNumber++;
- rtp_info.header.timestamp += kBlockSize16kHz;
- receive_timestamp += kBlockSize16kHz;
- }
- NetEqNetworkStatistics network_stats;
- ASSERT_EQ(0, neteq_->NetworkStatistics(&network_stats));
- EXPECT_EQ(kNumSyncPackets * 10 + algorithmic_delay_ms_,
- network_stats.current_buffer_size_ms);
-
- // Rewind |rtp_info| to that of the first sync packet.
- memcpy(&rtp_info, &first_sync_packet_rtp_info, sizeof(rtp_info));
-
- // Insert.
- for (int n = 0; n < kNumSyncPackets; ++n) {
- ASSERT_EQ(0, neteq_->InsertPacket(rtp_info, payload, receive_timestamp));
- rtp_info.header.sequenceNumber++;
- rtp_info.header.timestamp += kBlockSize16kHz;
- receive_timestamp += kBlockSize16kHz;
- }
-
- // Decode.
- for (int n = 0; n < kNumSyncPackets; ++n) {
- ASSERT_EQ(0, neteq_->GetAudio(&output, &muted));
- ASSERT_FALSE(muted);
- ASSERT_EQ(kBlockSize16kHz, output.samples_per_channel_);
- ASSERT_EQ(1u, output.num_channels_);
- EXPECT_TRUE(IsAllNonZero(
- output.data_, output.samples_per_channel_ * output.num_channels_));
- }
-}
-
void NetEqDecodingTest::WrapTest(uint16_t start_seq_no,
uint32_t start_timestamp,
const std::set<uint16_t>& drop_seq_numbers,
diff --git a/webrtc/modules/audio_coding/neteq/packet.h b/webrtc/modules/audio_coding/neteq/packet.h
index 273c2d2..7119c80 100644
--- a/webrtc/modules/audio_coding/neteq/packet.h
+++ b/webrtc/modules/audio_coding/neteq/packet.h
@@ -27,44 +27,28 @@
// Datagram excluding RTP header and header extension.
rtc::Buffer payload;
bool primary = true; // Primary, i.e., not redundant payload.
- bool sync_packet = false;
std::unique_ptr<TickTimer::Stopwatch> waiting_time;
Packet();
~Packet();
// Comparison operators. Establish a packet ordering based on (1) timestamp,
- // (2) sequence number, (3) regular packet vs sync-packet and (4) redundancy.
+ // (2) sequence number and (3) redundancy.
// Timestamp and sequence numbers are compared taking wrap-around into
- // account. If both timestamp and sequence numbers are identical and one of
- // the packets is sync-packet, the regular packet is considered earlier. For
- // two regular packets with the same sequence number and timestamp a primary
- // payload is considered "smaller" than a secondary.
+ // account. For two packets with the same sequence number and timestamp a
+ // primary payload is considered "smaller" than a secondary.
bool operator==(const Packet& rhs) const {
return (this->header.timestamp == rhs.header.timestamp &&
this->header.sequenceNumber == rhs.header.sequenceNumber &&
- this->primary == rhs.primary &&
- this->sync_packet == rhs.sync_packet);
+ this->primary == rhs.primary);
}
bool operator!=(const Packet& rhs) const { return !operator==(rhs); }
bool operator<(const Packet& rhs) const {
if (this->header.timestamp == rhs.header.timestamp) {
if (this->header.sequenceNumber == rhs.header.sequenceNumber) {
- // Timestamp and sequence numbers are identical. A sync packet should
- // be recognized "larger" (i.e. "later") compared to a "network packet"
- // (regular packet from network not sync-packet). If none of the packets
- // are sync-packets, then deem the left hand side to be "smaller"
- // (i.e., "earlier") if it is primary, and right hand side is not.
- //
- // The condition on sync packets to be larger than "network packets,"
- // given same RTP sequence number and timestamp, guarantees that a
- // "network packet" to be inserted in an earlier position into
- // |packet_buffer_| compared to a sync packet of same timestamp and
- // sequence number.
- if (rhs.sync_packet)
- return true;
- if (this->sync_packet)
- return false;
+ // Timestamp and sequence numbers are identical - deem the left
+ // hand side to be "smaller" (i.e., "earlier") if it is primary, and
+ // right hand side is not.
return (this->primary && !rhs.primary);
}
return (static_cast<uint16_t>(rhs.header.sequenceNumber
diff --git a/webrtc/modules/audio_coding/neteq/packet_buffer.cc b/webrtc/modules/audio_coding/neteq/packet_buffer.cc
index ba469a6..1c8713c 100644
--- a/webrtc/modules/audio_coding/neteq/packet_buffer.cc
+++ b/webrtc/modules/audio_coding/neteq/packet_buffer.cc
@@ -273,7 +273,7 @@
Packet* packet = (*it);
AudioDecoder* decoder =
decoder_database->GetDecoder(packet->header.payloadType);
- if (decoder && !packet->sync_packet) {
+ if (decoder) {
if (!packet->primary) {
continue;
}
diff --git a/webrtc/modules/audio_coding/neteq/payload_splitter.cc b/webrtc/modules/audio_coding/neteq/payload_splitter.cc
index a561440..074d1a2 100644
--- a/webrtc/modules/audio_coding/neteq/payload_splitter.cc
+++ b/webrtc/modules/audio_coding/neteq/payload_splitter.cc
@@ -137,11 +137,6 @@
LOG(LS_WARNING) << "SplitFec unknown payload type";
return kUnknownPayloadType;
}
- // No splitting for a sync-packet.
- if (packet->sync_packet) {
- ++it;
- continue;
- }
// Not an FEC packet.
AudioDecoder* decoder = decoder_database->GetDecoder(payload_type);
@@ -169,7 +164,6 @@
new_packet->header.timestamp -= duration;
new_packet->payload.SetData(packet->payload);
new_packet->primary = false;
- new_packet->sync_packet = packet->sync_packet;
// Waiting time should not be set here.
RTC_DCHECK(!packet->waiting_time);
@@ -231,11 +225,6 @@
LOG(LS_WARNING) << "SplitAudio unknown payload type";
return kUnknownPayloadType;
}
- // No splitting for a sync-packet.
- if (packet->sync_packet) {
- ++it;
- continue;
- }
PacketList new_packets;
switch (info->codec_type) {
case NetEqDecoder::kDecoderPCMu: