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

Unified Diff: webrtc/modules/audio_processing/rms_level.h

Issue 2535523002: Refactor RMSLevel and give it new functionality (Closed)
Patch Set: Rename to RmsLevel Created 4 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_processing/rms_level.h
diff --git a/webrtc/modules/audio_processing/rms_level.h b/webrtc/modules/audio_processing/rms_level.h
index 12fa2125f08acdd3820971dddbcb370f3d25cdfa..8c3aa78eb71a251eed24b40391dbc79350be9918 100644
--- a/webrtc/modules/audio_processing/rms_level.h
+++ b/webrtc/modules/audio_processing/rms_level.h
@@ -11,8 +11,8 @@
#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_RMS_LEVEL_H_
#define WEBRTC_MODULES_AUDIO_PROCESSING_RMS_LEVEL_H_
-#include <cstddef>
-
+#include "webrtc/base/array_view.h"
+#include "webrtc/base/optional.h"
#include "webrtc/typedefs.h"
namespace webrtc {
@@ -23,34 +23,48 @@ namespace webrtc {
// with the intent that it can provide the RTP audio level indication.
//
// The expected approach is to provide constant-sized chunks of audio to
-// Process(). When enough chunks have been accumulated to form a packet, call
-// RMS() to get the audio level indicator for the RTP header.
-class RMSLevel {
+// Analyze(). When enough chunks have been accumulated to form a packet, call
+// Average() to get the audio level indicator for the RTP header.
+class RmsLevel {
public:
- static const int kMinLevel = 127;
+ struct Levels {
+ int average;
+ int peak;
+ };
- RMSLevel();
- ~RMSLevel();
+ RmsLevel();
+ ~RmsLevel();
// Can be called to reset internal states, but is not required during normal
// operation.
void Reset();
- // Pass each chunk of audio to Process() to accumulate the level.
- void Process(const int16_t* data, size_t length);
+ // Pass each chunk of audio to Analyze() to accumulate the level.
+ void Analyze(rtc::ArrayView<const int16_t> data);
// If all samples with the given |length| have a magnitude of zero, this is
// a shortcut to avoid some computation.
- void ProcessMuted(size_t length);
+ void AnalyzeMuted(size_t length);
+
+ // Computes the RMS level over all data passed to Analyze() since the last
+ // call to Average(). The returned value is positive but should be interpreted
+ // as negative as per the RFC. It is constrained to [0, 127]. Resets the
+ // internal state to start a new measurement period.
+ int Average();
- // Computes the RMS level over all data passed to Process() since the last
- // call to RMS(). The returned value is positive but should be interpreted as
- // negative as per the RFC. It is constrained to [0, 127].
- int RMS();
+ // Like Average() above, but also returns the RMS peak value. Resets the
+ // internal state to start a new measurement period.
+ Levels AverageAndPeak();
private:
+ // Compares |block_size| with |block_size_|. If they are different, calls
+ // Reset() and stores the new size.
+ void CheckBlockSize(size_t block_size);
+
float sum_square_;
size_t sample_count_;
+ float max_sum_square_;
+ rtc::Optional<size_t> block_size_;
};
} // namespace webrtc
« no previous file with comments | « webrtc/modules/audio_processing/level_estimator_impl.cc ('k') | webrtc/modules/audio_processing/rms_level.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698