| Index: webrtc/modules/audio_coding/neteq/neteq_impl.cc
|
| diff --git a/webrtc/modules/audio_coding/neteq/neteq_impl.cc b/webrtc/modules/audio_coding/neteq/neteq_impl.cc
|
| index 7d200f01e5e1c0004355e9bd5c2c6009538c5857..9c4f5809068f8964ef74882c0414f184ce37eef0 100644
|
| --- a/webrtc/modules/audio_coding/neteq/neteq_impl.cc
|
| +++ b/webrtc/modules/audio_coding/neteq/neteq_impl.cc
|
| @@ -137,21 +137,7 @@ int NetEqImpl::InsertPacket(const WebRtcRTPHeader& rtp_header,
|
| 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 @@ Operations NetEqImpl::last_operation_for_test() const {
|
|
|
| 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 @@ int NetEqImpl::InsertPacketInternal(const WebRtcRTPHeader& rtp_header,
|
| 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 @@ int NetEqImpl::InsertPacketInternal(const WebRtcRTPHeader& rtp_header,
|
| }
|
|
|
| // 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 @@ int NetEqImpl::InsertPacketInternal(const WebRtcRTPHeader& rtp_header,
|
| 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 @@ int NetEqImpl::InsertPacketInternal(const WebRtcRTPHeader& rtp_header,
|
| }
|
|
|
| // 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 @@ int NetEqImpl::InsertPacketInternal(const WebRtcRTPHeader& rtp_header,
|
| }
|
| }
|
|
|
| - // 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 @@ int NetEqImpl::DecodeLoop(PacketList* packet_list, const Operations& operation,
|
| 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 @@ int NetEqImpl::ExtractPackets(size_t required_samples,
|
| 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 "
|
|
|