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 14namespace media { 15 16// Provides thread safe access to the audio hardware configuration. 17class 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 // For clients which don't need low latency, a larger buffer size should be 45 // used to save power and CPU resources. 46 int GetHighLatencyBufferSize() const; 47 48 private: 49 // Cached values; access is protected by |config_lock_|. 50 mutable base::Lock config_lock_; 51 media::AudioParameters input_params_; 52 media::AudioParameters output_params_; 53 54 DISALLOW_COPY_AND_ASSIGN(AudioHardwareConfig); 55}; 56 57} // namespace media 58 59#endif // MEDIA_BASE_AUDIO_HARDWARE_CONFIG_H_ 60