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

Unified Diff: media/audio/pulse/pulse_input.cc

Issue 287873004: Adds volume level measurements to the AudioInputController for low-latency clients (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: refactored Created 6 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 side-by-side diff with in-line comments
Download patch
« media/audio/audio_power_monitor.cc ('K') | « media/audio/pulse/pulse_input.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/pulse/pulse_input.cc
diff --git a/media/audio/pulse/pulse_input.cc b/media/audio/pulse/pulse_input.cc
index 9d31cddd735ff291713ae24c5e6e6f410008df8d..1e3fe0ee61d1b11e4550f1211415497fed610b1a 100644
--- a/media/audio/pulse/pulse_input.cc
+++ b/media/audio/pulse/pulse_input.cc
@@ -7,15 +7,19 @@
#include <pulse/pulseaudio.h>
#include "base/logging.h"
+#include "base/time/time.h"
#include "media/audio/pulse/audio_manager_pulse.h"
#include "media/audio/pulse/pulse_util.h"
#include "media/base/seekable_buffer.h"
namespace media {
+using base::TimeDelta;
using pulse::AutoPulseLock;
using pulse::WaitForOperationCompletion;
+static const int kPowerMeasurementTimeConstantMillis = 100;
+
PulseAudioInputStream::PulseAudioInputStream(AudioManagerPulse* audio_manager,
const std::string& device_name,
const AudioParameters& params,
@@ -31,7 +35,8 @@ PulseAudioInputStream::PulseAudioInputStream(AudioManagerPulse* audio_manager,
pa_mainloop_(mainloop),
pa_context_(context),
handle_(NULL),
- context_state_changed_(false) {
+ context_state_changed_(false),
+ audio_level_monitor_(params) {
DCHECK(mainloop);
DCHECK(context);
}
@@ -272,6 +277,21 @@ void PulseAudioInputStream::ReadData() {
int packet_size = params_.GetBytesPerBuffer();
while (buffer_->forward_bytes() >= packet_size) {
buffer_->Read(audio_data_buffer_.get(), packet_size);
+
+ audio_level_monitor_.Scan(audio_data_buffer_.get(), packet_size);
+ std::pair<float, bool> result = audio_level_monitor_.ReadCurrentPowerAndClip();
+ float level_dbfs = result.first;
+ float level = 0;
+ static const float kSilenceThresholdDBFS = -72.24719896f;
+ if (level_dbfs < kSilenceThresholdDBFS)
+ level = 0.0f;
+ else if (level_dbfs > 0.0f)
+ level = 1.0f;
+ else
+ level = 1.0f - level_dbfs / kSilenceThresholdDBFS;
+ DVLOG(1) << "PA audio_level: " << level;
+ audio_level_monitor_.Reset();
+
callback_->OnData(this, audio_data_buffer_.get(), packet_size,
hardware_delay, normalized_volume);
« media/audio/audio_power_monitor.cc ('K') | « media/audio/pulse/pulse_input.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698