tor-browser

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

acm_remixing_unittest.cc (4829B)


      1 /*
      2 *  Copyright (c) 2013 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_coding/acm2/acm_remixing.h"
     12 
     13 #include <cstddef>
     14 #include <cstdint>
     15 #include <vector>
     16 
     17 #include "api/audio/audio_frame.h"
     18 #include "api/audio/audio_view.h"
     19 #include "test/gmock.h"
     20 #include "test/gtest.h"
     21 
     22 using ::testing::AllOf;
     23 using ::testing::Each;
     24 using ::testing::ElementsAreArray;
     25 using ::testing::SizeIs;
     26 
     27 namespace webrtc {
     28 
     29 TEST(AcmRemixing, DownMixFrame) {
     30  std::vector<int16_t> out(480, 0);
     31  AudioFrame in;
     32  InterleavedView<int16_t> const in_data = in.mutable_data(480, 2);
     33  for (size_t k = 0; k < in_data.samples_per_channel(); ++k) {
     34    in_data[2 * k] = 2;
     35    in_data[2 * k + 1] = 0;
     36  }
     37 
     38  DownMixFrame(in, out);
     39 
     40  EXPECT_THAT(out, AllOf(SizeIs(480), Each(1)));
     41 }
     42 
     43 TEST(AcmRemixing, DownMixMutedFrame) {
     44  std::vector<int16_t> out(480, 0);
     45  AudioFrame in;
     46  in.num_channels_ = 2;
     47  in.samples_per_channel_ = 480;
     48 
     49  int16_t* const in_data = in.mutable_data();
     50  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
     51    in_data[2 * k] = 2;
     52    in_data[2 * k + 1] = 0;
     53  }
     54 
     55  in.Mute();
     56 
     57  DownMixFrame(in, out);
     58 
     59  EXPECT_THAT(out, AllOf(SizeIs(480), Each(0)));
     60 }
     61 
     62 TEST(AcmRemixing, RemixMutedStereoFrameTo6Channels) {
     63  std::vector<int16_t> out(480, 0);
     64  AudioFrame in;
     65  in.num_channels_ = 2;
     66  in.samples_per_channel_ = 480;
     67 
     68  int16_t* const in_data = in.mutable_data();
     69  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
     70    in_data[2 * k] = 1;
     71    in_data[2 * k + 1] = 2;
     72  }
     73  in.Mute();
     74 
     75  ReMixFrame(in, 6, &out);
     76  EXPECT_EQ(6 * 480u, out.size());
     77 
     78  EXPECT_THAT(out, AllOf(SizeIs(in.samples_per_channel_ * 6), Each(0)));
     79 }
     80 
     81 TEST(AcmRemixing, RemixStereoFrameTo6Channels) {
     82  std::vector<int16_t> out(480, 0);
     83  AudioFrame in;
     84  in.num_channels_ = 2;
     85  in.samples_per_channel_ = 480;
     86 
     87  int16_t* const in_data = in.mutable_data();
     88  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
     89    in_data[2 * k] = 1;
     90    in_data[2 * k + 1] = 2;
     91  }
     92 
     93  ReMixFrame(in, 6, &out);
     94  EXPECT_EQ(6 * 480u, out.size());
     95 
     96  std::vector<int16_t> expected_output(in.samples_per_channel_ * 6);
     97  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
     98    expected_output[6 * k] = 1;
     99    expected_output[6 * k + 1] = 2;
    100  }
    101 
    102  EXPECT_THAT(out, ElementsAreArray(expected_output));
    103 }
    104 
    105 TEST(AcmRemixing, RemixMonoFrameTo6Channels) {
    106  std::vector<int16_t> out(480, 0);
    107  AudioFrame in;
    108  in.num_channels_ = 1;
    109  in.samples_per_channel_ = 480;
    110 
    111  int16_t* const in_data = in.mutable_data();
    112  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
    113    in_data[k] = 1;
    114  }
    115 
    116  ReMixFrame(in, 6, &out);
    117  EXPECT_EQ(6 * 480u, out.size());
    118 
    119  std::vector<int16_t> expected_output(in.samples_per_channel_ * 6, 0);
    120  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
    121    expected_output[6 * k] = 1;
    122    expected_output[6 * k + 1] = 1;
    123  }
    124 
    125  EXPECT_THAT(out, ElementsAreArray(expected_output));
    126 }
    127 
    128 TEST(AcmRemixing, RemixStereoFrameToMono) {
    129  std::vector<int16_t> out(480, 0);
    130  AudioFrame in;
    131  in.num_channels_ = 2;
    132  in.samples_per_channel_ = 480;
    133 
    134  int16_t* const in_data = in.mutable_data();
    135  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
    136    in_data[2 * k] = 2;
    137    in_data[2 * k + 1] = 0;
    138  }
    139 
    140  ReMixFrame(in, 1, &out);
    141  EXPECT_EQ(480u, out.size());
    142 
    143  EXPECT_THAT(out, AllOf(SizeIs(in.samples_per_channel_), Each(1)));
    144 }
    145 
    146 TEST(AcmRemixing, RemixMonoFrameToStereo) {
    147  std::vector<int16_t> out(480, 0);
    148  AudioFrame in;
    149  in.num_channels_ = 1;
    150  in.samples_per_channel_ = 480;
    151 
    152  int16_t* const in_data = in.mutable_data();
    153  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
    154    in_data[k] = 1;
    155  }
    156 
    157  ReMixFrame(in, 2, &out);
    158  EXPECT_EQ(960u, out.size());
    159 
    160  EXPECT_THAT(out, AllOf(SizeIs(2 * in.samples_per_channel_), Each(1)));
    161 }
    162 
    163 TEST(AcmRemixing, Remix3ChannelFrameToStereo) {
    164  std::vector<int16_t> out(480, 0);
    165  AudioFrame in;
    166  in.num_channels_ = 3;
    167  in.samples_per_channel_ = 480;
    168 
    169  int16_t* const in_data = in.mutable_data();
    170  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
    171    for (size_t j = 0; j < 3; ++j) {
    172      in_data[3 * k + j] = j;
    173    }
    174  }
    175 
    176  ReMixFrame(in, 2, &out);
    177  EXPECT_EQ(2 * 480u, out.size());
    178 
    179  std::vector<int16_t> expected_output(in.samples_per_channel_ * 2);
    180  for (size_t k = 0; k < in.samples_per_channel_; ++k) {
    181    for (size_t j = 0; j < 2; ++j) {
    182      expected_output[2 * k + j] = static_cast<int>(j);
    183    }
    184  }
    185 
    186  EXPECT_THAT(out, ElementsAreArray(expected_output));
    187 }
    188 
    189 }  // namespace webrtc