tor-browser

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

test_utils.cc (5181B)


      1 /*
      2 *  Copyright (c) 2015 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/test/test_utils.h"
     12 
     13 #include <algorithm>
     14 #include <cstddef>
     15 #include <cstdint>
     16 #include <cstdio>
     17 #include <cstdlib>
     18 #include <cstring>
     19 #include <memory>
     20 #include <string>
     21 #include <utility>
     22 #include <vector>
     23 
     24 #include "absl/strings/string_view.h"
     25 #include "api/audio/audio_view.h"
     26 #include "common_audio/channel_buffer.h"
     27 #include "common_audio/include/audio_util.h"
     28 #include "common_audio/wav_file.h"
     29 #include "rtc_base/checks.h"
     30 
     31 namespace webrtc {
     32 
     33 void Int16FrameData::CopyFrom(const Int16FrameData& src) {
     34  sample_rate_hz = src.sample_rate_hz;
     35  view_ = InterleavedView<int16_t>(data.data(), src.samples_per_channel(),
     36                                   src.num_channels());
     37  RTC_CHECK_LE(view_.size(), kMaxDataSizeSamples);
     38  CopySamples(view_, src.view());
     39 }
     40 
     41 bool Int16FrameData::IsEqual(const Int16FrameData& frame) const {
     42  return samples_per_channel() == frame.samples_per_channel() &&
     43         num_channels() == num_channels() &&
     44         memcmp(data.data(), frame.data.data(),
     45                samples_per_channel() * num_channels() * sizeof(int16_t)) == 0;
     46 }
     47 
     48 void Int16FrameData::Scale(float f) {
     49  std::for_each(data.begin(), data.end(),
     50                [f](int16_t& sample) { sample = FloatS16ToS16(sample * f); });
     51 }
     52 
     53 void Int16FrameData::SetProperties(size_t samples_per_channel,
     54                                   size_t num_channels) {
     55  sample_rate_hz = samples_per_channel * 100;
     56  view_ =
     57      InterleavedView<int16_t>(data.data(), samples_per_channel, num_channels);
     58  RTC_CHECK_LE(view_.size(), kMaxDataSizeSamples);
     59 }
     60 
     61 void Int16FrameData::set_num_channels(size_t num_channels) {
     62  view_ = InterleavedView<int16_t>(data.data(), samples_per_channel(),
     63                                   num_channels);
     64  RTC_CHECK_LE(view_.size(), kMaxDataSizeSamples);
     65 }
     66 
     67 void Int16FrameData::FillData(int16_t value) {
     68  std::fill(&data[0], &data[size()], value);
     69 }
     70 
     71 void Int16FrameData::FillStereoData(int16_t left, int16_t right) {
     72  RTC_DCHECK_EQ(num_channels(), 2u);
     73  for (size_t i = 0; i < samples_per_channel() * 2u; i += 2u) {
     74    data[i] = left;
     75    data[i + 1] = right;
     76  }
     77 }
     78 
     79 ChannelBufferWavReader::ChannelBufferWavReader(std::unique_ptr<WavReader> file)
     80    : file_(std::move(file)) {}
     81 
     82 ChannelBufferWavReader::~ChannelBufferWavReader() = default;
     83 
     84 bool ChannelBufferWavReader::Read(ChannelBuffer<float>* buffer) {
     85  RTC_CHECK_EQ(file_->num_channels(), buffer->num_channels());
     86  interleaved_.resize(buffer->size());
     87  if (file_->ReadSamples(interleaved_.size(), &interleaved_[0]) !=
     88      interleaved_.size()) {
     89    return false;
     90  }
     91 
     92  FloatS16ToFloat(&interleaved_[0], interleaved_.size(), &interleaved_[0]);
     93  Deinterleave(&interleaved_[0], buffer->num_frames(), buffer->num_channels(),
     94               buffer->channels());
     95  return true;
     96 }
     97 
     98 ChannelBufferWavWriter::ChannelBufferWavWriter(std::unique_ptr<WavWriter> file)
     99    : file_(std::move(file)) {}
    100 
    101 ChannelBufferWavWriter::~ChannelBufferWavWriter() = default;
    102 
    103 void ChannelBufferWavWriter::Write(const ChannelBuffer<float>& buffer) {
    104  RTC_CHECK_EQ(file_->num_channels(), buffer.num_channels());
    105  interleaved_.resize(buffer.size());
    106  InterleavedView<float> view(&interleaved_[0], buffer.num_frames(),
    107                              buffer.num_channels());
    108  const float* samples = buffer.channels()[0];
    109  DeinterleavedView<const float> source(samples, buffer.num_frames(),
    110                                        buffer.num_channels());
    111  Interleave(source, view);
    112  FloatToFloatS16(&interleaved_[0], interleaved_.size(), &interleaved_[0]);
    113  file_->WriteSamples(&interleaved_[0], interleaved_.size());
    114 }
    115 
    116 ChannelBufferVectorWriter::ChannelBufferVectorWriter(std::vector<float>* output)
    117    : output_(output) {
    118  RTC_DCHECK(output_);
    119 }
    120 
    121 ChannelBufferVectorWriter::~ChannelBufferVectorWriter() = default;
    122 
    123 void ChannelBufferVectorWriter::Write(const ChannelBuffer<float>& buffer) {
    124  // Account for sample rate changes throughout a simulation.
    125  interleaved_buffer_.resize(buffer.size());
    126  InterleavedView<float> view(&interleaved_buffer_[0], buffer.num_frames(),
    127                              buffer.num_channels());
    128  Interleave(buffer.channels(), buffer.num_frames(), buffer.num_channels(),
    129             view);
    130  size_t old_size = output_->size();
    131  output_->resize(old_size + interleaved_buffer_.size());
    132  FloatToFloatS16(interleaved_buffer_.data(), interleaved_buffer_.size(),
    133                  output_->data() + old_size);
    134 }
    135 
    136 FILE* OpenFile(absl::string_view filename, absl::string_view mode) {
    137  std::string filename_str(filename);
    138  FILE* file = fopen(filename_str.c_str(), std::string(mode).c_str());
    139  if (!file) {
    140    printf("Unable to open file %s\n", filename_str.c_str());
    141    exit(1);
    142  }
    143  return file;
    144 }
    145 
    146 }  // namespace webrtc