// 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);
// For clients which don't need low latency, a larger buffer size should be
// used to save power and CPU resources.
int GetHighLatencyBufferSize() const;
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_