Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / media / base / audio_hardware_config.h
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   // 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_