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

Side by Side Diff: webrtc/modules/audio_processing/test/audio_file_processor.h

Issue 1907223003: Extension and refactoring of the audioproc_f tool to be a fully fledged tool for audio processing m… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Changes in response to reviewer comments Created 4 years, 7 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
(Empty)
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 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_TEST_AUDIO_FILE_PROCESSOR_H_
12 #define WEBRTC_MODULES_AUDIO_PROCESSING_TEST_AUDIO_FILE_PROCESSOR_H_
13
14 #include <algorithm>
15 #include <limits>
16 #include <memory>
17 #include <vector>
18
19 #include "webrtc/common_audio/channel_buffer.h"
20 #include "webrtc/common_audio/wav_file.h"
21 #include "webrtc/modules/audio_processing/include/audio_processing.h"
22 #include "webrtc/modules/audio_processing/test/test_utils.h"
23 #include "webrtc/system_wrappers/include/tick_util.h"
24
25 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD
26 #include "external/webrtc/webrtc/modules/audio_processing/debug.pb.h"
27 #else
28 #include "webrtc/modules/audio_processing/debug.pb.h"
29 #endif
30
31 namespace webrtc {
32
33 // Holds a few statistics about a series of TickIntervals.
34 struct TickIntervalStats {
35 TickIntervalStats() : min(std::numeric_limits<int64_t>::max()) {}
36 TickInterval sum;
37 TickInterval max;
38 TickInterval min;
39 };
40
41 // Interface for processing an input file with an AudioProcessing instance and
42 // dumping the results to an output file.
43 class AudioFileProcessor {
44 public:
45 static const int kChunksPerSecond = 1000 / AudioProcessing::kChunkSizeMs;
46
47 virtual ~AudioFileProcessor() {}
48
49 // Processes one AudioProcessing::kChunkSizeMs of data from the input file and
50 // writes to the output file.
51 virtual bool ProcessChunk() = 0;
52
53 // Returns the execution time of all AudioProcessing calls.
54 const TickIntervalStats& proc_time() const { return proc_time_; }
55
56 protected:
57 // RAII class for execution time measurement. Updates the provided
58 // TickIntervalStats based on the time between ScopedTimer creation and
59 // leaving the enclosing scope.
60 class ScopedTimer {
61 public:
62 explicit ScopedTimer(TickIntervalStats* proc_time)
63 : proc_time_(proc_time), start_time_(TickTime::Now()) {}
64
65 ~ScopedTimer() {
66 TickInterval interval = TickTime::Now() - start_time_;
67 proc_time_->sum += interval;
68 proc_time_->max = std::max(proc_time_->max, interval);
69 proc_time_->min = std::min(proc_time_->min, interval);
70 }
71
72 private:
73 TickIntervalStats* const proc_time_;
74 TickTime start_time_;
75 };
76
77 TickIntervalStats* mutable_proc_time() { return &proc_time_; }
78
79 private:
80 TickIntervalStats proc_time_;
81 };
82
83 // Used to read from and write to WavFile objects.
84 class WavFileProcessor final : public AudioFileProcessor {
85 public:
86 // Takes ownership of all parameters.
87 WavFileProcessor(std::unique_ptr<AudioProcessing> ap,
88 std::unique_ptr<WavReader> in_file,
89 std::unique_ptr<WavWriter> out_file,
90 std::unique_ptr<WavReader> reverse_in_file,
91 std::unique_ptr<WavWriter> reverse_out_file);
92 virtual ~WavFileProcessor() {}
93
94 // Processes one chunk from the WAV input and writes to the WAV output.
95 bool ProcessChunk() override;
96
97 private:
98 std::unique_ptr<AudioProcessing> ap_;
99
100 ChannelBuffer<float> in_buf_;
101 ChannelBuffer<float> out_buf_;
102 const StreamConfig input_config_;
103 const StreamConfig output_config_;
104 ChannelBufferWavReader buffer_reader_;
105 ChannelBufferWavWriter buffer_writer_;
106 std::unique_ptr<ChannelBuffer<float>> reverse_in_buf_;
107 std::unique_ptr<ChannelBuffer<float>> reverse_out_buf_;
108 std::unique_ptr<StreamConfig> reverse_input_config_;
109 std::unique_ptr<StreamConfig> reverse_output_config_;
110 std::unique_ptr<ChannelBufferWavReader> reverse_buffer_reader_;
111 std::unique_ptr<ChannelBufferWavWriter> reverse_buffer_writer_;
112 };
113
114 // Used to read from an aecdump file and write to a WavWriter.
115 class AecDumpFileProcessor final : public AudioFileProcessor {
116 public:
117 // Takes ownership of all parameters.
118 AecDumpFileProcessor(std::unique_ptr<AudioProcessing> ap,
119 FILE* dump_file,
120 std::unique_ptr<WavWriter> out_file);
121
122 virtual ~AecDumpFileProcessor();
123
124 // Processes messages from the aecdump file until the first Stream message is
125 // completed. Passes other data from the aecdump messages as appropriate.
126 bool ProcessChunk() override;
127
128 private:
129 void HandleMessage(const webrtc::audioproc::Init& msg);
130 void HandleMessage(const webrtc::audioproc::Stream& msg);
131 void HandleMessage(const webrtc::audioproc::ReverseStream& msg);
132
133 std::unique_ptr<AudioProcessing> ap_;
134 FILE* dump_file_;
135
136 std::unique_ptr<ChannelBuffer<float>> in_buf_;
137 std::unique_ptr<ChannelBuffer<float>> reverse_buf_;
138 ChannelBuffer<float> out_buf_;
139 StreamConfig input_config_;
140 StreamConfig reverse_config_;
141 const StreamConfig output_config_;
142 ChannelBufferWavWriter buffer_writer_;
143 };
144
145 } // namespace webrtc
146
147 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_TEST_AUDIO_FILE_PROCESSOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698