Index: webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc |
diff --git a/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc b/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc |
index 1850807783a9852e0b4b0aa538e95b7441b26ca4..3761c5f714c85bec00e68a6a01e58522330dc448 100644 |
--- a/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc |
+++ b/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc |
@@ -485,6 +485,19 @@ TEST_F(AudioDecoderPcmUTest, EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+namespace { |
+void TestPcmSetTargetBitrates(AudioEncoder* audio_encoder, int fixed_rate) { |
+ EXPECT_EQ(fixed_rate, audio_encoder->SetTargetBitrate(32000)); |
+ EXPECT_EQ(fixed_rate, audio_encoder->SetTargetBitrate(fixed_rate - 1)); |
+ EXPECT_EQ(fixed_rate, audio_encoder->SetTargetBitrate(fixed_rate)); |
+ EXPECT_EQ(fixed_rate, audio_encoder->SetTargetBitrate(fixed_rate + 1)); |
+} |
+} // namespace |
+ |
+TEST_F(AudioDecoderPcmUTest, SetTargetBitrate) { |
+ TestPcmSetTargetBitrates(audio_encoder_.get(), 64000); |
+} |
+ |
TEST_F(AudioDecoderPcmATest, EncodeDecode) { |
int tolerance = 308; |
double mse = 1931.0; |
@@ -494,6 +507,10 @@ TEST_F(AudioDecoderPcmATest, EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+TEST_F(AudioDecoderPcmATest, SetTargetBitrate) { |
+ TestPcmSetTargetBitrates(audio_encoder_.get(), 64000); |
+} |
+ |
TEST_F(AudioDecoderPcm16BTest, EncodeDecode) { |
int tolerance = 0; |
double mse = 0.0; |
@@ -506,6 +523,10 @@ TEST_F(AudioDecoderPcm16BTest, EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+TEST_F(AudioDecoderPcm16BTest, SetTargetBitrate) { |
+ TestPcmSetTargetBitrates(audio_encoder_.get(), codec_input_rate_hz_ * 16); |
+} |
+ |
TEST_F(AudioDecoderIlbcTest, EncodeDecode) { |
int tolerance = 6808; |
double mse = 2.13e6; |
@@ -517,6 +538,12 @@ TEST_F(AudioDecoderIlbcTest, EncodeDecode) { |
DecodePlcTest(); |
} |
+TEST_F(AudioDecoderIlbcTest, SetTargetBitrate) { |
+ EXPECT_EQ(13333, audio_encoder_->SetTargetBitrate(10000)); |
+ EXPECT_EQ(13333, audio_encoder_->SetTargetBitrate(13333)); |
+ EXPECT_EQ(13333, audio_encoder_->SetTargetBitrate(20000)); |
+} |
+ |
TEST_F(AudioDecoderIsacFloatTest, EncodeDecode) { |
int tolerance = 3399; |
double mse = 434951.0; |
@@ -527,6 +554,25 @@ TEST_F(AudioDecoderIsacFloatTest, EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+namespace { |
+void TestIsacSetTargetBitrates(AudioEncoder* audio_encoder, bool swb) { |
+ const int max_rate_bps = (swb ? 56000 : 32000); |
+ EXPECT_EQ(10000, audio_encoder->SetTargetBitrate(9000)); |
+ EXPECT_EQ(10000, audio_encoder->SetTargetBitrate(10000)); |
+ EXPECT_EQ(32000, audio_encoder->SetTargetBitrate(32000)); |
+ EXPECT_EQ(std::min(max_rate_bps, 33000), |
+ audio_encoder->SetTargetBitrate(33000)); |
+ EXPECT_EQ(std::min(max_rate_bps, 56000), |
+ audio_encoder->SetTargetBitrate(56000)); |
+ EXPECT_EQ(std::min(max_rate_bps, 56000), |
+ audio_encoder->SetTargetBitrate(57000)); |
+} |
+} // namespace |
+ |
+TEST_F(AudioDecoderIsacFloatTest, SetTargetBitrate) { |
+ TestIsacSetTargetBitrates(audio_encoder_.get(), false /* swb */); |
+} |
+ |
TEST_F(AudioDecoderIsacSwbTest, EncodeDecode) { |
int tolerance = 19757; |
double mse = 8.18e6; |
@@ -537,6 +583,10 @@ TEST_F(AudioDecoderIsacSwbTest, EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+TEST_F(AudioDecoderIsacSwbTest, SetTargetBitrate) { |
+ TestIsacSetTargetBitrates(audio_encoder_.get(), true /* swb */); |
+} |
+ |
// Fails Android ARM64. https://code.google.com/p/webrtc/issues/detail?id=4198 |
#if defined(WEBRTC_ANDROID) && defined(WEBRTC_ARCH_ARM64) |
#define MAYBE_EncodeDecode DISABLED_EncodeDecode |
@@ -558,6 +608,10 @@ TEST_F(AudioDecoderIsacFixTest, MAYBE_EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+TEST_F(AudioDecoderIsacFixTest, SetTargetBitrate) { |
+ TestIsacSetTargetBitrates(audio_encoder_.get(), false /* swb */); |
+} |
+ |
TEST_F(AudioDecoderG722Test, EncodeDecode) { |
int tolerance = 6176; |
double mse = 238630.0; |
@@ -568,6 +622,21 @@ TEST_F(AudioDecoderG722Test, EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+namespace { |
+void TestG722SetTargetBitrates(AudioEncoder* audio_encoder, bool stereo) { |
+ const int fixed_rate_bps = (stereo ? 128000 : 64000); |
+ EXPECT_EQ(fixed_rate_bps, audio_encoder->SetTargetBitrate(32000)); |
+ EXPECT_EQ(fixed_rate_bps, audio_encoder->SetTargetBitrate(64000)); |
+ EXPECT_EQ(fixed_rate_bps, audio_encoder->SetTargetBitrate(65000)); |
+ EXPECT_EQ(fixed_rate_bps, audio_encoder->SetTargetBitrate(128000)); |
+ EXPECT_EQ(fixed_rate_bps, audio_encoder->SetTargetBitrate(129000)); |
+} |
+} // namespace |
+ |
+TEST_F(AudioDecoderG722Test, SetTargetBitrate) { |
+ TestG722SetTargetBitrates(audio_encoder_.get(), false /* stereo */); |
+} |
+ |
TEST_F(AudioDecoderG722StereoTest, CreateAndDestroy) { |
EXPECT_TRUE(CodecSupported(kDecoderG722_2ch)); |
} |
@@ -583,6 +652,10 @@ TEST_F(AudioDecoderG722StereoTest, EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+TEST_F(AudioDecoderG722StereoTest, SetTargetBitrate) { |
+ TestG722SetTargetBitrates(audio_encoder_.get(), true /* stereo */); |
+} |
+ |
TEST_F(AudioDecoderOpusTest, EncodeDecode) { |
int tolerance = 6176; |
double mse = 238630.0; |
@@ -593,6 +666,20 @@ TEST_F(AudioDecoderOpusTest, EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+namespace { |
+void TestOpusSetTargetBitrates(AudioEncoder* audio_encoder) { |
+ EXPECT_EQ(500, audio_encoder->SetTargetBitrate(499)); |
+ EXPECT_EQ(500, audio_encoder->SetTargetBitrate(500)); |
+ EXPECT_EQ(32000, audio_encoder->SetTargetBitrate(32000)); |
+ EXPECT_EQ(512000, audio_encoder->SetTargetBitrate(512000)); |
+ EXPECT_EQ(512000, audio_encoder->SetTargetBitrate(513000)); |
+} |
+} // namespace |
+ |
+TEST_F(AudioDecoderOpusTest, SetTargetBitrate) { |
+ TestOpusSetTargetBitrates(audio_encoder_.get()); |
+} |
+ |
TEST_F(AudioDecoderOpusStereoTest, EncodeDecode) { |
int tolerance = 6176; |
int channel_diff_tolerance = 0; |
@@ -604,6 +691,10 @@ TEST_F(AudioDecoderOpusStereoTest, EncodeDecode) { |
EXPECT_FALSE(decoder_->HasDecodePlc()); |
} |
+TEST_F(AudioDecoderOpusStereoTest, SetTargetBitrate) { |
+ TestOpusSetTargetBitrates(audio_encoder_.get()); |
+} |
+ |
TEST(AudioDecoder, CodecSampleRateHz) { |
EXPECT_EQ(8000, CodecSampleRateHz(kDecoderPCMu)); |
EXPECT_EQ(8000, CodecSampleRateHz(kDecoderPCMa)); |