| 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 89bddeccf8eb99f65e961efd591c24263816acdb..e119d9439cfbb617f38dfe27c1a9773792f8664c 100644
|
| --- a/webrtc/modules/audio_coding/neteq/neteq_impl.cc
|
| +++ b/webrtc/modules/audio_coding/neteq/neteq_impl.cc
|
| @@ -364,8 +364,14 @@ int NetEqImpl::SetTargetDelay() {
|
| return kNotImplemented;
|
| }
|
|
|
| -int NetEqImpl::TargetDelay() {
|
| - return kNotImplemented;
|
| +int NetEqImpl::TargetDelayMs() {
|
| + rtc::CritScope lock(&crit_sect_);
|
| + RTC_DCHECK(delay_manager_.get());
|
| + // The value from TargetLevel() is in number of packets, represented in Q8.
|
| + const size_t target_delay_samples =
|
| + (delay_manager_->TargetLevel() * decoder_frame_length_) >> 8;
|
| + return static_cast<int>(target_delay_samples) /
|
| + rtc::CheckedDivExact(fs_hz_, 1000);
|
| }
|
|
|
| int NetEqImpl::CurrentDelayMs() const {
|
| @@ -569,6 +575,17 @@ std::vector<uint16_t> NetEqImpl::GetNackList(int64_t round_trip_time_ms) const {
|
| return nack_->GetNackList(round_trip_time_ms);
|
| }
|
|
|
| +std::vector<uint32_t> NetEqImpl::LastDecodedTimestamps() const {
|
| + rtc::CritScope lock(&crit_sect_);
|
| + return last_decoded_timestamps_;
|
| +}
|
| +
|
| +int NetEqImpl::SyncBufferSizeMs() const {
|
| + rtc::CritScope lock(&crit_sect_);
|
| + return rtc::dchecked_cast<int>(sync_buffer_->FutureLength() /
|
| + rtc::CheckedDivExact(fs_hz_, 1000));
|
| +}
|
| +
|
| const SyncBuffer* NetEqImpl::sync_buffer_for_test() const {
|
| rtc::CritScope lock(&crit_sect_);
|
| return sync_buffer_.get();
|
| @@ -873,6 +890,7 @@ int NetEqImpl::GetAudioInternal(AudioFrame* audio_frame, bool* muted) {
|
| Operations operation;
|
| bool play_dtmf;
|
| *muted = false;
|
| + last_decoded_timestamps_.clear();
|
| tick_timer_->Increment();
|
| stats_.IncreaseCounter(output_size_samples_, fs_hz_);
|
|
|
| @@ -1498,6 +1516,8 @@ int NetEqImpl::DecodeCng(AudioDecoder* decoder, int* decoded_length,
|
| int NetEqImpl::DecodeLoop(PacketList* packet_list, const Operations& operation,
|
| AudioDecoder* decoder, int* decoded_length,
|
| AudioDecoder::SpeechType* speech_type) {
|
| + RTC_DCHECK(last_decoded_timestamps_.empty());
|
| +
|
| // Do decoding.
|
| while (
|
| !packet_list->empty() &&
|
| @@ -1514,6 +1534,7 @@ int NetEqImpl::DecodeLoop(PacketList* packet_list, const Operations& operation,
|
| auto opt_result = packet_list->front().frame->Decode(
|
| rtc::ArrayView<int16_t>(&decoded_buffer_[*decoded_length],
|
| decoded_buffer_length_ - *decoded_length));
|
| + last_decoded_timestamps_.push_back(packet_list->front().timestamp);
|
| packet_list->pop_front();
|
| if (opt_result) {
|
| const auto& result = *opt_result;
|
|
|