Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 587 Packet packet; | 587 Packet packet; |
| 588 packet.payload_type = rtp_header.header.payloadType; | 588 packet.payload_type = rtp_header.header.payloadType; |
| 589 packet.sequence_number = rtp_header.header.sequenceNumber; | 589 packet.sequence_number = rtp_header.header.sequenceNumber; |
| 590 packet.timestamp = rtp_header.header.timestamp; | 590 packet.timestamp = rtp_header.header.timestamp; |
| 591 packet.payload.SetData(payload.data(), payload.size()); | 591 packet.payload.SetData(payload.data(), payload.size()); |
| 592 // Waiting time will be set upon inserting the packet in the buffer. | 592 // Waiting time will be set upon inserting the packet in the buffer. |
| 593 RTC_DCHECK(!packet.waiting_time); | 593 RTC_DCHECK(!packet.waiting_time); |
| 594 return packet; | 594 return packet; |
| 595 }()); | 595 }()); |
| 596 | 596 |
| 597 if ((rtp_header.header.ssrc != ssrc_) || first_packet_) { | |
|
ossu
2017/03/13 15:03:17
It seems to me that update_sample_rate_and_channel
| |
| 598 // Reset timestamp scaling. | |
| 599 timestamp_scaler_->Reset(); | |
| 600 } | |
| 601 | |
| 602 // Scale timestamp to internal domain (only for some codecs). | |
| 603 timestamp_scaler_->ToInternal(&packet_list); | |
| 604 | |
| 605 // Store these for later use, since the first packet may very well disappear | |
| 606 // before we need these values. | |
| 607 const uint32_t main_timestamp = packet_list.front().timestamp; | |
| 608 const uint8_t main_payload_type = packet_list.front().payload_type; | |
| 609 const uint16_t main_sequence_number = packet_list.front().sequence_number; | |
| 610 | |
| 597 bool update_sample_rate_and_channels = false; | 611 bool update_sample_rate_and_channels = false; |
| 598 // Reinitialize NetEq if it's needed (changed SSRC or first call). | 612 // Reinitialize NetEq if it's needed (changed SSRC or first call). |
| 599 if ((rtp_header.header.ssrc != ssrc_) || first_packet_) { | 613 if ((rtp_header.header.ssrc != ssrc_) || first_packet_) { |
| 600 // Note: |first_packet_| will be cleared further down in this method, once | 614 // Note: |first_packet_| will be cleared further down in this method, once |
| 601 // the packet has been successfully inserted into the packet buffer. | 615 // the packet has been successfully inserted into the packet buffer. |
| 602 | 616 |
| 603 rtcp_.Init(rtp_header.header.sequenceNumber); | 617 rtcp_.Init(rtp_header.header.sequenceNumber); |
| 604 | 618 |
| 605 // Flush the packet buffer and DTMF buffer. | 619 // Flush the packet buffer and DTMF buffer. |
| 606 packet_buffer_->Flush(); | 620 packet_buffer_->Flush(); |
| 607 dtmf_buffer_->Flush(); | 621 dtmf_buffer_->Flush(); |
| 608 | 622 |
| 609 // Store new SSRC. | 623 // Store new SSRC. |
| 610 ssrc_ = rtp_header.header.ssrc; | 624 ssrc_ = rtp_header.header.ssrc; |
| 611 | 625 |
| 612 // Update audio buffer timestamp. | 626 // Update audio buffer timestamp. |
| 613 sync_buffer_->IncreaseEndTimestamp(rtp_header.header.timestamp - | 627 sync_buffer_->IncreaseEndTimestamp(main_timestamp - timestamp_); |
| 614 timestamp_); | |
| 615 | 628 |
| 616 // Update codecs. | 629 // Update codecs. |
| 617 timestamp_ = rtp_header.header.timestamp; | 630 timestamp_ = main_timestamp; |
| 618 | |
| 619 // Reset timestamp scaling. | |
| 620 timestamp_scaler_->Reset(); | |
| 621 | 631 |
| 622 // Trigger an update of sampling rate and the number of channels. | 632 // Trigger an update of sampling rate and the number of channels. |
| 623 update_sample_rate_and_channels = true; | 633 update_sample_rate_and_channels = true; |
| 624 } | 634 } |
| 625 | 635 |
| 626 // Update RTCP statistics, only for regular packets. | 636 // Update RTCP statistics, only for regular packets. |
| 627 rtcp_.Update(rtp_header.header, receive_timestamp); | 637 rtcp_.Update(rtp_header.header, receive_timestamp); |
| 628 | 638 |
| 629 if (nack_enabled_) { | 639 if (nack_enabled_) { |
| 630 RTC_DCHECK(nack_); | 640 RTC_DCHECK(nack_); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 645 red_payload_splitter_->CheckRedPayloads(&packet_list, *decoder_database_); | 655 red_payload_splitter_->CheckRedPayloads(&packet_list, *decoder_database_); |
| 646 } | 656 } |
| 647 | 657 |
| 648 // Check payload types. | 658 // Check payload types. |
| 649 if (decoder_database_->CheckPayloadTypes(packet_list) == | 659 if (decoder_database_->CheckPayloadTypes(packet_list) == |
| 650 DecoderDatabase::kDecoderNotFound) { | 660 DecoderDatabase::kDecoderNotFound) { |
| 651 return kUnknownRtpPayloadType; | 661 return kUnknownRtpPayloadType; |
| 652 } | 662 } |
| 653 | 663 |
| 654 RTC_DCHECK(!packet_list.empty()); | 664 RTC_DCHECK(!packet_list.empty()); |
| 655 // Store these for later use, since the first packet may very well disappear | |
| 656 // before we need these values. | |
| 657 const uint32_t main_timestamp = packet_list.front().timestamp; | |
| 658 const uint8_t main_payload_type = packet_list.front().payload_type; | |
| 659 const uint16_t main_sequence_number = packet_list.front().sequence_number; | |
| 660 | |
| 661 // Scale timestamp to internal domain (only for some codecs). | |
| 662 timestamp_scaler_->ToInternal(&packet_list); | |
| 663 | 665 |
| 664 // Process DTMF payloads. Cycle through the list of packets, and pick out any | 666 // Process DTMF payloads. Cycle through the list of packets, and pick out any |
| 665 // DTMF payloads found. | 667 // DTMF payloads found. |
| 666 PacketList::iterator it = packet_list.begin(); | 668 PacketList::iterator it = packet_list.begin(); |
| 667 while (it != packet_list.end()) { | 669 while (it != packet_list.end()) { |
| 668 const Packet& current_packet = (*it); | 670 const Packet& current_packet = (*it); |
| 669 RTC_DCHECK(!current_packet.payload.empty()); | 671 RTC_DCHECK(!current_packet.payload.empty()); |
| 670 if (decoder_database_->IsDtmf(current_packet.payload_type)) { | 672 if (decoder_database_->IsDtmf(current_packet.payload_type)) { |
| 671 DtmfEvent event; | 673 DtmfEvent event; |
| 672 int ret = DtmfBuffer::ParseEvent(current_packet.timestamp, | 674 int ret = DtmfBuffer::ParseEvent(current_packet.timestamp, |
| (...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2128 } | 2130 } |
| 2129 } | 2131 } |
| 2130 | 2132 |
| 2131 void NetEqImpl::CreateDecisionLogic() { | 2133 void NetEqImpl::CreateDecisionLogic() { |
| 2132 decision_logic_.reset(DecisionLogic::Create( | 2134 decision_logic_.reset(DecisionLogic::Create( |
| 2133 fs_hz_, output_size_samples_, playout_mode_, decoder_database_.get(), | 2135 fs_hz_, output_size_samples_, playout_mode_, decoder_database_.get(), |
| 2134 *packet_buffer_.get(), delay_manager_.get(), buffer_level_filter_.get(), | 2136 *packet_buffer_.get(), delay_manager_.get(), buffer_level_filter_.get(), |
| 2135 tick_timer_.get())); | 2137 tick_timer_.get())); |
| 2136 } | 2138 } |
| 2137 } // namespace webrtc | 2139 } // namespace webrtc |
| OLD | NEW |