// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_BASE_AUDIO_HARDWARE_CONFIG_H_ #define MEDIA_BASE_AUDIO_HARDWARE_CONFIG_H_ #include "base/compiler_specific.h" #include "base/synchronization/lock.h" #include "media/audio/audio_parameters.h" #include "media/base/channel_layout.h" #include "media/base/media_export.h" namespace media { // Provides thread safe access to the audio hardware configuration. class MEDIA_EXPORT AudioHardwareConfig { public: AudioHardwareConfig(const media::AudioParameters& input_params, const media::AudioParameters& output_params); virtual ~AudioHardwareConfig(); // Accessors for the currently cached hardware configuration. Safe to call // from any thread. int GetOutputBufferSize() const; int GetOutputSampleRate() const; ChannelLayout GetOutputChannelLayout() const; int GetOutputChannels() const; int GetInputSampleRate() const; ChannelLayout GetInputChannelLayout() const; int GetInputChannels() const; media::AudioParameters GetInputConfig() const; media::AudioParameters GetOutputConfig() const; // Allows callers to update the cached values for either input or output. The // values are paired under the assumption that these values will only be set // after an input or output device change respectively. Safe to call from // any thread. void UpdateInputConfig(const media::AudioParameters& input_params); void UpdateOutputConfig(const media::AudioParameters& output_params); private: // Cached values; access is protected by |config_lock_|. mutable base::Lock config_lock_; media::AudioParameters input_params_; media::AudioParameters output_params_; DISALLOW_COPY_AND_ASSIGN(AudioHardwareConfig); }; } // namespace media #endif // MEDIA_BASE_AUDIO_HARDWARE_CONFIG_H_