1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_BASE_AUDIO_HARDWARE_CONFIG_H_ 6 #define MEDIA_BASE_AUDIO_HARDWARE_CONFIG_H_ 7 8 #include "base/compiler_specific.h" 9 #include "base/synchronization/lock.h" 10 #include "media/audio/audio_parameters.h" 11 #include "media/base/channel_layout.h" 12 #include "media/base/media_export.h" 13 14 namespace media { 15 16 // Provides thread safe access to the audio hardware configuration. 17 class MEDIA_EXPORT AudioHardwareConfig { 18 public: 19 AudioHardwareConfig(const media::AudioParameters& input_params, 20 const media::AudioParameters& output_params); 21 virtual ~AudioHardwareConfig(); 22 23 // Accessors for the currently cached hardware configuration. Safe to call 24 // from any thread. 25 int GetOutputBufferSize() const; 26 int GetOutputSampleRate() const; 27 ChannelLayout GetOutputChannelLayout() const; 28 int GetOutputChannels() const; 29 30 int GetInputSampleRate() const; 31 ChannelLayout GetInputChannelLayout() const; 32 int GetInputChannels() const; 33 34 media::AudioParameters GetInputConfig() const; 35 media::AudioParameters GetOutputConfig() const; 36 37 // Allows callers to update the cached values for either input or output. The 38 // values are paired under the assumption that these values will only be set 39 // after an input or output device change respectively. Safe to call from 40 // any thread. 41 void UpdateInputConfig(const media::AudioParameters& input_params); 42 void UpdateOutputConfig(const media::AudioParameters& output_params); 43 44 private: 45 // Cached values; access is protected by |config_lock_|. 46 mutable base::Lock config_lock_; 47 media::AudioParameters input_params_; 48 media::AudioParameters output_params_; 49 50 DISALLOW_COPY_AND_ASSIGN(AudioHardwareConfig); 51 }; 52 53 } // namespace media 54 55 #endif // MEDIA_BASE_AUDIO_HARDWARE_CONFIG_H_ 56