| Index: media/audio/audio_power_monitor.h
|
| diff --git a/media/audio/audio_power_monitor.h b/media/audio/audio_power_monitor.h
|
| index b65fb13f495c852aac2b47b77f32767b03d656a7..bb8fc6f7e2e29ceef9b8b45d532eb3d44a62e9cc 100644
|
| --- a/media/audio/audio_power_monitor.h
|
| +++ b/media/audio/audio_power_monitor.h
|
| @@ -6,8 +6,10 @@
|
| #define MEDIA_AUDIO_AUDIO_POWER_MONITOR_H_
|
|
|
| #include <limits>
|
| +#include <utility>
|
|
|
| #include "base/callback.h"
|
| +#include "base/synchronization/lock.h"
|
| #include "media/base/media_export.h"
|
|
|
| // An audio signal power monitor. It is periodically provided an AudioBus by
|
| @@ -24,7 +26,6 @@
|
| // undetermined/unbounded amount of run-time.
|
|
|
| namespace base {
|
| -class MessageLoop;
|
| class TimeDelta;
|
| }
|
|
|
| @@ -34,31 +35,27 @@ class AudioBus;
|
|
|
| class MEDIA_EXPORT AudioPowerMonitor {
|
| public:
|
| - // Reports power level in terms of dBFS (see zero_power() and max_power()
|
| - // below). |clipped| is true if any *one* sample exceeded maximum amplitude
|
| - // since the last invocation.
|
| - typedef base::Callback<void(float power_dbfs, bool clipped)>
|
| - PowerMeasurementCallback;
|
| -
|
| // |sample_rate| is the audio signal sample rate (Hz). |time_constant|
|
| // characterizes how samples are averaged over time to determine the power
|
| // level; and is the amount of time it takes a zero power level to increase to
|
| - // ~63.2% of maximum given a step input signal. |measurement_period| is the
|
| - // time length of signal to analyze before invoking the callback to report the
|
| - // current power level. |message_loop| is where the |callback| task will be
|
| - // posted.
|
| - AudioPowerMonitor(int sample_rate,
|
| - const base::TimeDelta& time_constant,
|
| - const base::TimeDelta& measurement_period,
|
| - base::MessageLoop* message_loop,
|
| - const PowerMeasurementCallback& callback);
|
| + // ~63.2% of maximum given a step input signal.
|
| + AudioPowerMonitor(int sample_rate, const base::TimeDelta& time_constant);
|
|
|
| ~AudioPowerMonitor();
|
|
|
| + // Reset power monitor to initial state (zero power level).
|
| + void Reset();
|
| +
|
| // Scan more |frames| of audio data from |buffer|. It is safe to call this
|
| // from a real-time priority thread.
|
| void Scan(const AudioBus& buffer, int frames);
|
|
|
| + // Returns the current power level in dBFS and clip status. Clip status is
|
| + // true whenever any *one* sample scanned exceeded maximum amplitude since
|
| + // this method's last invocation. It is safe to call this method from any
|
| + // thread.
|
| + std::pair<float, bool> ReadCurrentPowerAndClip();
|
| +
|
| // dBFS value corresponding to zero power in the audio signal.
|
| static float zero_power() { return -std::numeric_limits<float>::infinity(); }
|
|
|
| @@ -70,23 +67,16 @@ class MEDIA_EXPORT AudioPowerMonitor {
|
| // |sample_rate| and |time_constant|.
|
| const float sample_weight_;
|
|
|
| - // Number of audio frames to be scanned before reporting the current power
|
| - // level via callback, as computed from |sample_rate| and
|
| - // |measurement_period|.
|
| - const int num_frames_per_callback_;
|
| -
|
| - // MessageLoop and callback used to notify of the current power level.
|
| - base::MessageLoop* const message_loop_;
|
| - const PowerMeasurementCallback power_level_callback_;
|
| -
|
| - // Accumulated results over one or more calls to Scan().
|
| + // Accumulated results over one or more calls to Scan(). These should only be
|
| + // touched by the thread invoking Scan().
|
| float average_power_;
|
| - bool clipped_since_last_notification_;
|
| - int frames_since_last_notification_;
|
| + bool has_clipped_;
|
|
|
| - // Keep track of last reported results to forgo making redundant callbacks.
|
| - float last_reported_power_;
|
| - bool last_reported_clipped_;
|
| + // Copies of power and clip status, used to deliver results synchronously
|
| + // across threads.
|
| + base::Lock reading_lock_;
|
| + float power_reading_;
|
| + bool clipped_reading_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(AudioPowerMonitor);
|
| };
|
|
|