Chromium Code Reviews| Index: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc | 
| diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc | 
| index 1d4fc2e7813c9c3b2eee1bc6596be2ace20e47f6..50df9152901c0d632aa4e2af9fe3fc087378af84 100644 | 
| --- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc | 
| +++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc | 
| @@ -546,4 +546,55 @@ TEST(AudioEncoderOpusTest, EncodeAtMinBitrate) { | 
| } | 
| } | 
| +TEST(AudioEncoderOpusTest, EncodeCbr) { | 
| 
 
minyue-webrtc
2017/03/29 20:45:26
I am not sure that we have to test Cbr is Cbr in A
 
squashingskak
2017/03/30 08:25:54
Main reason to do the test is to check that enable
 
 | 
| + auto states = CreateCodec(1); | 
| + constexpr int kNumRuns = 4; | 
| + constexpr int kNumPacketsPerRun = 20; | 
| + constexpr int kNumPacketsToEncode = kNumPacketsPerRun * kNumRuns; | 
| + auto audio_frames = | 
| + Create10msAudioBlocks(states.encoder, kNumPacketsToEncode * 20); | 
| 
 
minyue-webrtc
2017/03/29 20:45:26
needs indent. you can do
git cl format
 
 | 
| + ASSERT_TRUE(audio_frames) << "Create10msAudioBlocks failed"; | 
| + rtc::Buffer encoded; | 
| + uint32_t rtp_timestamp = 12345; // Just a number not important to this test. | 
| + | 
| + for(int run = 0; run < kNumRuns; run++){ | 
| + int32_t max_pkt_size_diff = 0; | 
| + int32_t prev_pkt_size = 0; | 
| + bool use_cbr = (run & 1) ? true : false; | 
| 
 
minyue-webrtc
2017/03/29 20:45:26
are you trying combinations of {use_cbr, bitrate}?
 
kwiberg-webrtc
2017/03/29 21:54:17
Nowadays, it should be legal to do simply
  for (
 
 | 
| + int bitrate = (run & 2) ? 100000 : 0; | 
| + | 
| + states.encoder->SetCbr(use_cbr); | 
| + states.encoder->OnReceivedUplinkBandwidth(bitrate, | 
| + rtc::Optional<int64_t>()); | 
| + for (int packet_index = 0; packet_index < kNumPacketsPerRun; | 
| + packet_index++) { | 
| + // Make sure we are not encoding before we have enough data for | 
| + // a 20ms packet. | 
| + for (int index = 0; index < 1; index++) { | 
| + states.encoder->Encode(rtp_timestamp, audio_frames->GetNextBlock(), | 
| + &encoded); | 
| + EXPECT_EQ(0u, encoded.size()); | 
| + } | 
| + | 
| + // Should encode now. | 
| + states.encoder->Encode(rtp_timestamp, audio_frames->GetNextBlock(), | 
| + &encoded); | 
| + EXPECT_GT(encoded.size(), 0u); | 
| + | 
| + if(prev_pkt_size > 0){ | 
| + int32_t diff = std::abs((int32_t)encoded.size() - prev_pkt_size); | 
| + max_pkt_size_diff = std::max(max_pkt_size_diff, diff); | 
| + } | 
| + prev_pkt_size = encoded.size(); | 
| + | 
| + encoded.Clear(); | 
| + } | 
| + if(use_cbr){ | 
| + EXPECT_EQ(max_pkt_size_diff, 0); | 
| + } else { | 
| + EXPECT_GT(max_pkt_size_diff, 0); | 
| + } | 
| + } | 
| +} | 
| + | 
| } // namespace webrtc |