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

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

Issue 1409943002: Add aecdump support to audioproc_f. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase. Created 5 years, 1 month 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 <vector>
17
18 #include "webrtc/base/scoped_ptr.h"
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/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(rtc::scoped_ptr<AudioProcessing> ap,
88 rtc::scoped_ptr<WavReader> in_file,
89 rtc::scoped_ptr<WavWriter> out_file);
90 virtual ~WavFileProcessor() {}
91
92 // Processes one chunk from the WAV input and writes to the WAV output.
93 bool ProcessChunk() override;
94
95 private:
96 rtc::scoped_ptr<AudioProcessing> ap_;
97
98 ChannelBuffer<float> in_buf_;
99 ChannelBuffer<float> out_buf_;
100 const StreamConfig input_config_;
101 const StreamConfig output_config_;
102 ChannelBufferWavReader buffer_reader_;
103 ChannelBufferWavWriter buffer_writer_;
104 };
105
106 // Used to read from an aecdump file and write to a WavWriter.
107 class AecDumpFileProcessor final : public AudioFileProcessor {
108 public:
109 // Takes ownership of all parameters.
110 AecDumpFileProcessor(rtc::scoped_ptr<AudioProcessing> ap,
111 FILE* dump_file,
112 rtc::scoped_ptr<WavWriter> out_file);
113
114 virtual ~AecDumpFileProcessor();
115
116 // Processes messages from the aecdump file until the first Stream message is
117 // completed. Passes other data from the aecdump messages as appropriate.
118 bool ProcessChunk() override;
119
120 private:
121 void HandleMessage(const webrtc::audioproc::Init& msg);
122 void HandleMessage(const webrtc::audioproc::Stream& msg);
123 void HandleMessage(const webrtc::audioproc::ReverseStream& msg);
124
125 rtc::scoped_ptr<AudioProcessing> ap_;
126 FILE* dump_file_;
127
128 rtc::scoped_ptr<ChannelBuffer<float>> in_buf_;
129 rtc::scoped_ptr<ChannelBuffer<float>> reverse_buf_;
130 ChannelBuffer<float> out_buf_;
131 StreamConfig input_config_;
132 StreamConfig reverse_config_;
133 const StreamConfig output_config_;
134 ChannelBufferWavWriter buffer_writer_;
135 };
136
137 } // namespace webrtc
138
139 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_TEST_AUDIO_FILE_PROCESSOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698