| Index: webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc
|
| diff --git a/webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc b/webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc
|
| index febea2f869fe7ca94897015ac2d35df7219233b7..6b51bf9b67bf447eaef36ccfabba995542561d59 100644
|
| --- a/webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc
|
| +++ b/webrtc/modules/audio_coding/codecs/opus/opus_unittest.cc
|
| @@ -644,7 +644,7 @@ TEST_P(OpusTest, OpusDurationEstimation) {
|
| }
|
|
|
| TEST_P(OpusTest, OpusDecodeRepacketized) {
|
| - const int kPackets = 6;
|
| + constexpr size_t kPackets = 6;
|
|
|
| PrepareSpeechData(channels_, 20, 20 * kPackets);
|
|
|
| @@ -668,14 +668,26 @@ TEST_P(OpusTest, OpusDecodeRepacketized) {
|
| new int16_t[kPackets * kOpus20msFrameSamples * channels_]);
|
| OpusRepacketizer* rp = opus_repacketizer_create();
|
|
|
| - for (int idx = 0; idx < kPackets; idx++) {
|
| + size_t num_packets = 0;
|
| + constexpr size_t kMaxCycles = 100;
|
| + for (size_t idx = 0; idx < kMaxCycles; ++idx) {
|
| auto speech_block = speech_data_.GetNextBlock();
|
| encoded_bytes_ =
|
| WebRtcOpus_Encode(opus_encoder_, speech_block.data(),
|
| rtc::CheckedDivExact(speech_block.size(), channels_),
|
| kMaxBytes, bitstream_);
|
| - EXPECT_EQ(OPUS_OK, opus_repacketizer_cat(rp, bitstream_, encoded_bytes_));
|
| + if (opus_repacketizer_cat(rp, bitstream_, encoded_bytes_) == OPUS_OK) {
|
| + ++num_packets;
|
| + if (num_packets == kPackets) {
|
| + break;
|
| + }
|
| + } else {
|
| + // Opus repacketizer cannot guarantee a success. We try again if it fails.
|
| + opus_repacketizer_init(rp);
|
| + num_packets = 0;
|
| + }
|
| }
|
| + EXPECT_EQ(kPackets, num_packets);
|
|
|
| encoded_bytes_ = opus_repacketizer_out(rp, bitstream_, kMaxBytes);
|
|
|
|
|