| 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); | 
|  | 
|  |