Add NetEq config flag that enables RTX handling.
When enabled, the delay manager is updated with reordered packets. It also makes the peak detector ignore the reordered packets. Change-Id: I2bdc99764cc76b15e613ed3dc75f83aaf66eee4e Bug: webrtc:10178 Reviewed-on: https://webrtc-review.googlesource.com/c/116481 Commit-Queue: Jakob Ivarsson <jakobi@webrtc.org> Reviewed-by: Minyue Li <minyue@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26187}
This commit is contained in:
committed by
Commit Bot
parent
d8bd75079b
commit
39b934ba2e
@ -87,7 +87,7 @@ class NetEqImplTest : public ::testing::Test {
|
||||
|
||||
if (use_mock_delay_peak_detector_) {
|
||||
std::unique_ptr<MockDelayPeakDetector> mock(
|
||||
new MockDelayPeakDetector(tick_timer_));
|
||||
new MockDelayPeakDetector(tick_timer_, config_.enable_rtx_handling));
|
||||
mock_delay_peak_detector_ = mock.get();
|
||||
EXPECT_CALL(*mock_delay_peak_detector_, Reset()).Times(1);
|
||||
deps.delay_peak_detector = std::move(mock);
|
||||
@ -1301,6 +1301,43 @@ TEST_F(NetEqImplTest, InsertEmptyPacket) {
|
||||
neteq_->InsertEmptyPacket(rtp_header);
|
||||
}
|
||||
|
||||
TEST_F(NetEqImplTest, EnableRtxHandling) {
|
||||
UseNoMocks();
|
||||
use_mock_delay_manager_ = true;
|
||||
config_.enable_rtx_handling = true;
|
||||
CreateInstance();
|
||||
EXPECT_CALL(*mock_delay_manager_, BufferLimits(_, _))
|
||||
.Times(1)
|
||||
.WillOnce(DoAll(SetArgPointee<0>(0), SetArgPointee<1>(0)));
|
||||
|
||||
const int kPayloadLengthSamples = 80;
|
||||
const size_t kPayloadLengthBytes = 2 * kPayloadLengthSamples; // PCM 16-bit.
|
||||
const uint8_t kPayloadType = 17; // Just an arbitrary number.
|
||||
const uint32_t kReceiveTime = 17;
|
||||
uint8_t payload[kPayloadLengthBytes] = {0};
|
||||
RTPHeader rtp_header;
|
||||
rtp_header.payloadType = kPayloadType;
|
||||
rtp_header.sequenceNumber = 0x1234;
|
||||
rtp_header.timestamp = 0x12345678;
|
||||
rtp_header.ssrc = 0x87654321;
|
||||
|
||||
EXPECT_EQ(NetEq::kOK, neteq_->RegisterPayloadType(
|
||||
NetEqDecoder::kDecoderPCM16B, "", kPayloadType));
|
||||
EXPECT_EQ(NetEq::kOK,
|
||||
neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
|
||||
AudioFrame output;
|
||||
bool muted;
|
||||
EXPECT_EQ(NetEq::kOK, neteq_->GetAudio(&output, &muted));
|
||||
|
||||
// Insert second packet that was sent before the first packet.
|
||||
rtp_header.sequenceNumber -= 1;
|
||||
rtp_header.timestamp -= kPayloadLengthSamples;
|
||||
EXPECT_CALL(*mock_delay_manager_,
|
||||
Update(rtp_header.sequenceNumber, rtp_header.timestamp, _));
|
||||
EXPECT_EQ(NetEq::kOK,
|
||||
neteq_->InsertPacket(rtp_header, payload, kReceiveTime));
|
||||
}
|
||||
|
||||
class Decoder120ms : public AudioDecoder {
|
||||
public:
|
||||
Decoder120ms(int sample_rate_hz, SpeechType speech_type)
|
||||
|
||||
Reference in New Issue
Block a user