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

Unified Diff: webrtc/voice_engine/audio_level.cc

Issue 2731993002: Update formatting of AudioLevel class (Closed)
Patch Set: Review comments Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/voice_engine/audio_level.h ('k') | webrtc/voice_engine/channel.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/voice_engine/audio_level.cc
diff --git a/webrtc/voice_engine/audio_level.cc b/webrtc/voice_engine/audio_level.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b2f4df4da83d0a7a14729b582cf400210f37c124
--- /dev/null
+++ b/webrtc/voice_engine/audio_level.cc
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "webrtc/voice_engine/audio_level.h"
+
+#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h"
+#include "webrtc/modules/include/module_common_types.h"
+
+namespace webrtc {
+namespace voe {
+
+// Number of bars on the indicator.
+// Note that the number of elements is specified because we are indexing it
+// in the range of 0-32
+constexpr int8_t kPermutation[33] = {0, 1, 2, 3, 4, 4, 5, 5, 5, 5, 6,
+ 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9};
+
+AudioLevel::AudioLevel()
+ : abs_max_(0), count_(0), current_level_(0), current_level_full_range_(0) {
+ WebRtcSpl_Init();
+}
+
+AudioLevel::~AudioLevel() {}
+
+int8_t AudioLevel::Level() const {
+ rtc::CritScope cs(&crit_sect_);
+ return current_level_;
+}
+
+int16_t AudioLevel::LevelFullRange() const {
+ rtc::CritScope cs(&crit_sect_);
+ return current_level_full_range_;
+}
+
+void AudioLevel::Clear() {
+ rtc::CritScope cs(&crit_sect_);
+ abs_max_ = 0;
+ count_ = 0;
+ current_level_ = 0;
+ current_level_full_range_ = 0;
+}
+
+void AudioLevel::ComputeLevel(const AudioFrame& audioFrame) {
+ // Check speech level (works for 2 channels as well)
+ int16_t abs_value = WebRtcSpl_MaxAbsValueW16(
+ audioFrame.data_,
+ audioFrame.samples_per_channel_ * audioFrame.num_channels_);
+
+ // Protect member access using a lock since this method is called on a
+ // dedicated audio thread in the RecordedDataIsAvailable() callback.
+ rtc::CritScope cs(&crit_sect_);
+
+ if (abs_value > abs_max_)
+ abs_max_ = abs_value;
+
+ // Update level approximately 10 times per second
+ if (count_++ == kUpdateFrequency) {
+ current_level_full_range_ = abs_max_;
+
+ count_ = 0;
+
+ // Highest value for a int16_t is 0x7fff = 32767
+ // Divide with 1000 to get in the range of 0-32 which is the range of the
+ // permutation vector
+ int32_t position = abs_max_ / 1000;
+
+ // Make it less likely that the bar stays at position 0. I.e. only if it's
+ // in the range 0-250 (instead of 0-1000)
+ if ((position == 0) && (abs_max_ > 250)) {
+ position = 1;
+ }
+ current_level_ = kPermutation[position];
+
+ // Decay the absolute maximum (divide by 4)
+ abs_max_ >>= 2;
+ }
+}
+
+} // namespace voe
+} // namespace webrtc
« no previous file with comments | « webrtc/voice_engine/audio_level.h ('k') | webrtc/voice_engine/channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698