tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

config_selector_unittest.cc (4444B)


      1 /*
      2 *  Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
      3 *
      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
      6 *  tree. An additional intellectual property rights grant can be found
      7 *  in the file PATENTS.  All contributing project authors may
      8 *  be found in the AUTHORS file in the root of the source tree.
      9 */
     10 
     11 #include "modules/audio_processing/aec3/config_selector.h"
     12 
     13 #include <cstddef>
     14 #include <optional>
     15 #include <tuple>
     16 
     17 #include "api/audio/echo_canceller3_config.h"
     18 #include "test/gtest.h"
     19 
     20 namespace webrtc {
     21 
     22 class ConfigSelectorChannelsAndContentDetection
     23    : public ::testing::Test,
     24      public ::testing::WithParamInterface<std::tuple<int, bool>> {};
     25 
     26 INSTANTIATE_TEST_SUITE_P(ConfigSelectorMultiParameters,
     27                         ConfigSelectorChannelsAndContentDetection,
     28                         ::testing::Combine(::testing::Values(1, 2, 8),
     29                                            ::testing::Values(false, true)));
     30 
     31 class ConfigSelectorChannels : public ::testing::Test,
     32                               public ::testing::WithParamInterface<int> {};
     33 
     34 INSTANTIATE_TEST_SUITE_P(ConfigSelectorMultiParameters,
     35                         ConfigSelectorChannels,
     36                         ::testing::Values(1, 2, 8));
     37 
     38 TEST_P(ConfigSelectorChannelsAndContentDetection,
     39       MonoConfigIsSelectedWhenNoMultiChannelConfigPresent) {
     40  const auto [num_channels, detect_stereo_content] = GetParam();
     41  EchoCanceller3Config config;
     42  config.multi_channel.detect_stereo_content = detect_stereo_content;
     43  std::optional<EchoCanceller3Config> multichannel_config;
     44 
     45  config.delay.default_delay = config.delay.default_delay + 1;
     46  const size_t custom_delay_value_in_config = config.delay.default_delay;
     47 
     48  ConfigSelector cs(config, multichannel_config,
     49                    /*num_render_input_channels=*/num_channels);
     50  EXPECT_EQ(cs.active_config().delay.default_delay,
     51            custom_delay_value_in_config);
     52 
     53  cs.Update(/*multichannel_content=*/false);
     54  EXPECT_EQ(cs.active_config().delay.default_delay,
     55            custom_delay_value_in_config);
     56 
     57  cs.Update(/*multichannel_content=*/true);
     58  EXPECT_EQ(cs.active_config().delay.default_delay,
     59            custom_delay_value_in_config);
     60 }
     61 
     62 TEST_P(ConfigSelectorChannelsAndContentDetection,
     63       CorrectInitialConfigIsSelected) {
     64  const auto [num_channels, detect_stereo_content] = GetParam();
     65  EchoCanceller3Config config;
     66  config.multi_channel.detect_stereo_content = detect_stereo_content;
     67  std::optional<EchoCanceller3Config> multichannel_config = config;
     68 
     69  config.delay.default_delay += 1;
     70  const size_t custom_delay_value_in_config = config.delay.default_delay;
     71  multichannel_config->delay.default_delay += 2;
     72  const size_t custom_delay_value_in_multichannel_config =
     73      multichannel_config->delay.default_delay;
     74 
     75  ConfigSelector cs(config, multichannel_config,
     76                    /*num_render_input_channels=*/num_channels);
     77 
     78  if (num_channels == 1 || detect_stereo_content) {
     79    EXPECT_EQ(cs.active_config().delay.default_delay,
     80              custom_delay_value_in_config);
     81  } else {
     82    EXPECT_EQ(cs.active_config().delay.default_delay,
     83              custom_delay_value_in_multichannel_config);
     84  }
     85 }
     86 
     87 TEST_P(ConfigSelectorChannels, CorrectConfigUpdateBehavior) {
     88  const int num_channels = GetParam();
     89  EchoCanceller3Config config;
     90  config.multi_channel.detect_stereo_content = true;
     91  std::optional<EchoCanceller3Config> multichannel_config = config;
     92 
     93  config.delay.default_delay += 1;
     94  const size_t custom_delay_value_in_config = config.delay.default_delay;
     95  multichannel_config->delay.default_delay += 2;
     96  const size_t custom_delay_value_in_multichannel_config =
     97      multichannel_config->delay.default_delay;
     98 
     99  ConfigSelector cs(config, multichannel_config,
    100                    /*num_render_input_channels=*/num_channels);
    101 
    102  cs.Update(/*multichannel_content=*/false);
    103  EXPECT_EQ(cs.active_config().delay.default_delay,
    104            custom_delay_value_in_config);
    105 
    106  if (num_channels == 1) {
    107    cs.Update(/*multichannel_content=*/false);
    108    EXPECT_EQ(cs.active_config().delay.default_delay,
    109              custom_delay_value_in_config);
    110  } else {
    111    cs.Update(/*multichannel_content=*/true);
    112    EXPECT_EQ(cs.active_config().delay.default_delay,
    113              custom_delay_value_in_multichannel_config);
    114  }
    115 }
    116 
    117 }  // namespace webrtc