
Currently, if the last packet was reordered (e.g. due to retransmission) then the next packet's inter-arrival time will be estimated incorrectly due to the jump in sequence numbers. This change prevents that by not resetting the stopwatch on reordered packets. This will also better estimate inter-arrival times when we have multiple reordered packets in a burst. Currently we would only measure the iat of the first reordered packet correctly and not the ones coming after it. There is a slight risk introducing this: If we would receive an out of order packet far into the future (in sequence numbers) and then continue getting packets in the normal order, then we would not update the current sequence number for these and incorrectly estimate their inter-arrival times since they would all be considered reordered. Change-Id: Ic938a37cbddf1cb9c30b610218f56794568d3d01 Bug: webrtc:10178 Reviewed-on: https://webrtc-review.googlesource.com/c/119949 Reviewed-by: Minyue Li <minyue@webrtc.org> Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org> Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26572}
59 lines
2.3 KiB
C++
59 lines
2.3 KiB
C++
/*
|
|
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef MODULES_AUDIO_CODING_NETEQ_MOCK_MOCK_DELAY_MANAGER_H_
|
|
#define MODULES_AUDIO_CODING_NETEQ_MOCK_MOCK_DELAY_MANAGER_H_
|
|
|
|
#include "modules/audio_coding/neteq/delay_manager.h"
|
|
|
|
#include "test/gmock.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class MockDelayManager : public DelayManager {
|
|
public:
|
|
MockDelayManager(size_t max_packets_in_buffer,
|
|
int base_min_target_delay_ms,
|
|
bool enable_rtx_handling,
|
|
DelayPeakDetector* peak_detector,
|
|
const TickTimer* tick_timer)
|
|
: DelayManager(max_packets_in_buffer,
|
|
base_min_target_delay_ms,
|
|
enable_rtx_handling,
|
|
peak_detector,
|
|
tick_timer) {}
|
|
virtual ~MockDelayManager() { Die(); }
|
|
MOCK_METHOD0(Die, void());
|
|
MOCK_CONST_METHOD0(iat_vector, const IATVector&());
|
|
MOCK_METHOD3(Update,
|
|
int(uint16_t sequence_number,
|
|
uint32_t timestamp,
|
|
int sample_rate_hz));
|
|
MOCK_METHOD2(CalculateTargetLevel, int(int iat_packets, bool reordered));
|
|
MOCK_METHOD1(SetPacketAudioLength, int(int length_ms));
|
|
MOCK_METHOD0(Reset, void());
|
|
MOCK_CONST_METHOD0(PeakFound, bool());
|
|
MOCK_METHOD1(UpdateCounters, void(int elapsed_time_ms));
|
|
MOCK_METHOD0(ResetPacketIatCount, void());
|
|
MOCK_CONST_METHOD2(BufferLimits, void(int* lower_limit, int* higher_limit));
|
|
MOCK_METHOD1(SetBaseMinimumDelay, bool(int delay_ms));
|
|
MOCK_CONST_METHOD0(GetBaseMinimumDelay, int());
|
|
MOCK_CONST_METHOD0(TargetLevel, int());
|
|
MOCK_METHOD0(RegisterEmptyPacket, void());
|
|
MOCK_METHOD1(set_extra_delay_ms, void(int16_t delay));
|
|
MOCK_CONST_METHOD0(base_target_level, int());
|
|
MOCK_METHOD1(set_streaming_mode, void(bool value));
|
|
MOCK_CONST_METHOD0(last_pack_cng_or_dtmf, int());
|
|
MOCK_METHOD1(set_last_pack_cng_or_dtmf, void(int value));
|
|
};
|
|
|
|
} // namespace webrtc
|
|
#endif // MODULES_AUDIO_CODING_NETEQ_MOCK_MOCK_DELAY_MANAGER_H_
|