Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1375)

Side by Side Diff: webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus_unittest.cc

Issue 2695243005: Injectable audio encoders: BuiltinAudioEncoderFactory (Closed)
Patch Set: Removed stub versions of AudioEncoderFactory from peerconnectioninterface.h Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 27 matching lines...) Expand all
38 config.frame_size_ms = rtc::CheckedDivExact(codec_inst.pacsize, 48); 38 config.frame_size_ms = rtc::CheckedDivExact(codec_inst.pacsize, 48);
39 config.num_channels = codec_inst.channels; 39 config.num_channels = codec_inst.channels;
40 config.bitrate_bps = rtc::Optional<int>(codec_inst.rate); 40 config.bitrate_bps = rtc::Optional<int>(codec_inst.rate);
41 config.payload_type = codec_inst.pltype; 41 config.payload_type = codec_inst.pltype;
42 config.application = config.num_channels == 1 ? AudioEncoderOpus::kVoip 42 config.application = config.num_channels == 1 ? AudioEncoderOpus::kVoip
43 : AudioEncoderOpus::kAudio; 43 : AudioEncoderOpus::kAudio;
44 config.supported_frame_lengths_ms.push_back(config.frame_size_ms); 44 config.supported_frame_lengths_ms.push_back(config.frame_size_ms);
45 return config; 45 return config;
46 } 46 }
47 47
48 AudioEncoderOpus::Config CreateConfigWithParameters(
49 const SdpAudioFormat::Parameters& params) {
50 webrtc::SdpAudioFormat format("opus", 48000, 2, params);
51 return AudioEncoderOpus::CreateConfig(0, format);
52 }
53
48 struct AudioEncoderOpusStates { 54 struct AudioEncoderOpusStates {
49 std::shared_ptr<MockAudioNetworkAdaptor*> mock_audio_network_adaptor; 55 std::shared_ptr<MockAudioNetworkAdaptor*> mock_audio_network_adaptor;
50 MockSmoothingFilter* mock_bitrate_smoother; 56 MockSmoothingFilter* mock_bitrate_smoother;
51 std::unique_ptr<AudioEncoderOpus> encoder; 57 std::unique_ptr<AudioEncoderOpus> encoder;
52 std::unique_ptr<SimulatedClock> simulated_clock; 58 std::unique_ptr<SimulatedClock> simulated_clock;
53 AudioEncoderOpus::Config config; 59 AudioEncoderOpus::Config config;
54 }; 60 };
55 61
56 AudioEncoderOpusStates CreateCodec(size_t num_channels) { 62 AudioEncoderOpusStates CreateCodec(size_t num_channels) {
57 AudioEncoderOpusStates states; 63 AudioEncoderOpusStates states;
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 } 544 }
539 545
540 // Should encode now. 546 // Should encode now.
541 states.encoder->Encode(rtp_timestamp, audio_frames->GetNextBlock(), 547 states.encoder->Encode(rtp_timestamp, audio_frames->GetNextBlock(),
542 &encoded); 548 &encoded);
543 EXPECT_GT(encoded.size(), 0u); 549 EXPECT_GT(encoded.size(), 0u);
544 encoded.Clear(); 550 encoded.Clear();
545 } 551 }
546 } 552 }
547 553
554 TEST(AudioEncoderOpusTest, TestConfigDefaults) {
555 const AudioEncoderOpus::Config config =
556 AudioEncoderOpus::CreateConfig(0, {"opus", 48000, 2});
557
558 EXPECT_EQ(48000, config.max_playback_rate_hz);
559 EXPECT_EQ(1U, config.num_channels);
560 EXPECT_FALSE(config.fec_enabled);
561 EXPECT_FALSE(config.dtx_enabled);
562 EXPECT_EQ(20, config.frame_size_ms);
563 }
564
565 TEST(AudioEncoderOpusTest, TestConfigFromParams) {
566 AudioEncoderOpus::Config config;
567
568 config = CreateConfigWithParameters({{"stereo", "0"}});
569 EXPECT_EQ(1U, config.num_channels);
570
571 config = CreateConfigWithParameters({{"stereo", "1"}});
572 EXPECT_EQ(2U, config.num_channels);
573
574 config = CreateConfigWithParameters({{"useinbandfec", "0"}});
575 EXPECT_EQ(false, config.fec_enabled);
576
577 config = CreateConfigWithParameters({{"useinbandfec", "1"}});
578 EXPECT_EQ(true, config.fec_enabled);
579
580 config = CreateConfigWithParameters({{"usedtx", "0"}});
581 EXPECT_EQ(false, config.dtx_enabled);
582
583 config = CreateConfigWithParameters({{"usedtx", "1"}});
584 EXPECT_EQ(true, config.dtx_enabled);
585
586 config = CreateConfigWithParameters({{"maxplaybackrate", "12345"}});
587 EXPECT_EQ(12345, config.max_playback_rate_hz);
588
589 config = CreateConfigWithParameters({{"maxaveragebitrate", "96000"}});
590 EXPECT_EQ(96000, config.bitrate_bps);
591
592 config = CreateConfigWithParameters({{"maxptime", "40"}});
593 for (int frame_length : config.supported_frame_lengths_ms) {
594 EXPECT_LE(frame_length, 40);
595 }
596
597 config = CreateConfigWithParameters({{"minptime", "40"}});
598 for (int frame_length : config.supported_frame_lengths_ms) {
599 EXPECT_GE(frame_length, 40);
600 }
601
602 config = CreateConfigWithParameters({{"ptime", "40"}});
603 EXPECT_EQ(40, config.frame_size_ms);
604 }
605
606 TEST(AudioEncoderOpusTest, TestConfigFromInvalidParams) {
607 const webrtc::SdpAudioFormat format("opus", 48000, 2);
608 const AudioEncoderOpus::Config default_config =
609 AudioEncoderOpus::CreateConfig(0, format);
610 const std::vector<int> default_supported_frame_lengths_ms({20, 60});
611
612 AudioEncoderOpus::Config config;
613 config = CreateConfigWithParameters({{"stereo", "invalid"}});
614 EXPECT_EQ(default_config.num_channels, config.num_channels);
615
616 config = CreateConfigWithParameters({{"useinbandfec", "invalid"}});
617 EXPECT_EQ(default_config.fec_enabled, config.fec_enabled);
618
619 config = CreateConfigWithParameters({{"usedtx", "invalid"}});
620 EXPECT_EQ(default_config.dtx_enabled, config.dtx_enabled);
621
622 config = CreateConfigWithParameters({{"maxplaybackrate", "0"}});
623 EXPECT_EQ(default_config.max_playback_rate_hz, config.max_playback_rate_hz);
624
625 config = CreateConfigWithParameters({{"maxplaybackrate", "-23"}});
626 EXPECT_EQ(default_config.max_playback_rate_hz, config.max_playback_rate_hz);
627
628 config = CreateConfigWithParameters({{"maxplaybackrate", "not a number!"}});
629 EXPECT_EQ(default_config.max_playback_rate_hz, config.max_playback_rate_hz);
630
631 config = CreateConfigWithParameters({{"maxaveragebitrate", "0"}});
632 EXPECT_EQ(default_config.bitrate_bps, config.bitrate_bps);
633
634 config = CreateConfigWithParameters({{"maxaveragebitrate", "-1000"}});
635 EXPECT_EQ(default_config.bitrate_bps, config.bitrate_bps);
636
637 config = CreateConfigWithParameters({{"maxaveragebitrate", "not a number!"}});
638 EXPECT_EQ(default_config.bitrate_bps, config.bitrate_bps);
639
640 config = CreateConfigWithParameters({{"maxptime", "invalid"}});
641 EXPECT_EQ(default_supported_frame_lengths_ms,
642 config.supported_frame_lengths_ms);
643
644 config = CreateConfigWithParameters({{"minptime", "invalid"}});
645 EXPECT_EQ(default_supported_frame_lengths_ms,
646 config.supported_frame_lengths_ms);
647
648 config = CreateConfigWithParameters({{"ptime", "invalid"}});
649 EXPECT_EQ(default_supported_frame_lengths_ms,
650 config.supported_frame_lengths_ms);
651 }
652
653 // Test that bitrate will be overridden by the "maxaveragebitrate" parameter.
654 // Also test that the "maxaveragebitrate" can't be set to values outside the
655 // range of 6000 and 510000
656 TEST(AudioEncoderOpusTest, SetSendCodecOpusMaxAverageBitrate) {
657 // Ignore if less than 6000.
658 const AudioEncoderOpus::Config config1 = AudioEncoderOpus::CreateConfig(
659 0, {"opus", 48000, 2, {{"maxaveragebitrate", "5999"}}});
660 EXPECT_EQ(6000, *config1.bitrate_bps);
661
662 // Ignore if larger than 510000.
663 const AudioEncoderOpus::Config config2 = AudioEncoderOpus::CreateConfig(
664 0, {"opus", 48000, 2, {{"maxaveragebitrate", "510001"}}});
665 EXPECT_EQ(510000, *config2.bitrate_bps);
666
667 const AudioEncoderOpus::Config config3 = AudioEncoderOpus::CreateConfig(
668 0, {"opus", 48000, 2, {{"maxaveragebitrate", "200000"}}});
669 EXPECT_EQ(200000, *config3.bitrate_bps);
670 }
671
672 // Test maxplaybackrate <= 8000 triggers Opus narrow band mode.
673 TEST(AudioEncoderOpusTest, SetMaxPlaybackRateNb) {
674 auto config = CreateConfigWithParameters({{"maxplaybackrate", "8000"}});
675 EXPECT_EQ(8000, config.max_playback_rate_hz);
676 EXPECT_EQ(12000, *config.bitrate_bps);
677
678 config = CreateConfigWithParameters({{"maxplaybackrate", "8000"},
679 {"stereo", "1"}});
680 EXPECT_EQ(8000, config.max_playback_rate_hz);
681 EXPECT_EQ(24000, *config.bitrate_bps);
682 }
683
684 // Test 8000 < maxplaybackrate <= 12000 triggers Opus medium band mode.
685 TEST(AudioEncoderOpusTest, SetMaxPlaybackRateMb) {
686 auto config = CreateConfigWithParameters({{"maxplaybackrate", "8001"}});
687 EXPECT_EQ(8001, config.max_playback_rate_hz);
688 EXPECT_EQ(20000, *config.bitrate_bps);
689
690 config = CreateConfigWithParameters({{"maxplaybackrate", "8001"},
691 {"stereo", "1"}});
692 EXPECT_EQ(8001, config.max_playback_rate_hz);
693 EXPECT_EQ(40000, *config.bitrate_bps);
694 }
695
696 // Test 12000 < maxplaybackrate <= 16000 triggers Opus wide band mode.
697 TEST(AudioEncoderOpusTest, SetMaxPlaybackRateWb) {
698 auto config = CreateConfigWithParameters({{"maxplaybackrate", "12001"}});
699 EXPECT_EQ(12001, config.max_playback_rate_hz);
700 EXPECT_EQ(20000, *config.bitrate_bps);
701
702 config = CreateConfigWithParameters({{"maxplaybackrate", "12001"},
703 {"stereo", "1"}});
704 EXPECT_EQ(12001, config.max_playback_rate_hz);
705 EXPECT_EQ(40000, *config.bitrate_bps);
706 }
707
708 // Test 16000 < maxplaybackrate <= 24000 triggers Opus super wide band mode.
709 TEST(AudioEncoderOpusTest, SetMaxPlaybackRateSwb) {
710 auto config = CreateConfigWithParameters({{"maxplaybackrate", "16001"}});
711 EXPECT_EQ(16001, config.max_playback_rate_hz);
712 EXPECT_EQ(32000, *config.bitrate_bps);
713
714 config = CreateConfigWithParameters({{"maxplaybackrate", "16001"},
715 {"stereo", "1"}});
716 EXPECT_EQ(16001, config.max_playback_rate_hz);
717 EXPECT_EQ(64000, *config.bitrate_bps);
718 }
719
720 // Test 24000 < maxplaybackrate triggers Opus full band mode.
721 TEST(AudioEncoderOpusTest, SetMaxPlaybackRateFb) {
722 auto config = CreateConfigWithParameters({{"maxplaybackrate", "24001"}});
723 EXPECT_EQ(24001, config.max_playback_rate_hz);
724 EXPECT_EQ(32000, *config.bitrate_bps);
725
726 config = CreateConfigWithParameters({{"maxplaybackrate", "24001"},
727 {"stereo", "1"}});
728 EXPECT_EQ(24001, config.max_playback_rate_hz);
729 EXPECT_EQ(64000, *config.bitrate_bps);
730 }
731
548 } // namespace webrtc 732 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698