1 // Copyright (c) 2012 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.
5 #ifndef MEDIA_AUDIO_AUDIO_PARAMETERS_H_
6 #define MEDIA_AUDIO_AUDIO_PARAMETERS_H_
8 #include "base/basictypes.h"
9 #include "base/time/time.h"
10 #include "media/base/channel_layout.h"
11 #include "media/base/media_export.h"
15 struct MEDIA_EXPORT AudioInputBufferParameters
{
21 // Use a struct-in-struct approach to ensure that we can calculate the required
22 // size as sizeof(AudioInputBufferParameters) + #(bytes in audio buffer) without
24 struct MEDIA_EXPORT AudioInputBuffer
{
25 AudioInputBufferParameters params
;
29 class MEDIA_EXPORT AudioParameters
{
31 // TODO(miu): Rename this enum to something that correctly reflects its
32 // semantics, such as "TransportScheme."
34 AUDIO_PCM_LINEAR
= 0, // PCM is 'raw' amplitude samples.
35 AUDIO_PCM_LOW_LATENCY
, // Linear PCM, low latency requested.
36 AUDIO_FAKE
, // Creates a fake AudioOutputStream object.
37 AUDIO_LAST_FORMAT
// Only used for validation of format.
41 // Telephone quality sample rate, mostly for speech-only audio.
42 kTelephoneSampleRate
= 8000,
43 // CD sampling rate is 44.1 KHz or conveniently 2x2x3x3x5x5x7x7.
44 kAudioCDSampleRate
= 44100,
47 // Bitmasks to determine whether certain platform (typically hardware) audio
48 // effects should be enabled.
49 enum PlatformEffectsMask
{
52 DUCKING
= 0x2, // Enables ducking if the OS supports it.
56 AudioParameters(Format format
, ChannelLayout channel_layout
,
57 int sample_rate
, int bits_per_sample
,
58 int frames_per_buffer
);
59 AudioParameters(Format format
, ChannelLayout channel_layout
,
61 int sample_rate
, int bits_per_sample
,
62 int frames_per_buffer
, int effects
);
63 AudioParameters(Format format
, ChannelLayout channel_layout
,
64 int channels
, int input_channels
,
65 int sample_rate
, int bits_per_sample
,
66 int frames_per_buffer
, int effects
);
68 void Reset(Format format
, ChannelLayout channel_layout
,
69 int channels
, int input_channels
,
70 int sample_rate
, int bits_per_sample
,
71 int frames_per_buffer
);
73 // Checks that all values are in the expected range. All limits are specified
77 // Returns size of audio buffer in bytes.
78 int GetBytesPerBuffer() const;
80 // Returns the number of bytes representing one second of audio.
81 int GetBytesPerSecond() const;
83 // Returns the number of bytes representing a frame of audio.
84 int GetBytesPerFrame() const;
86 // Returns the duration of this buffer as calculated from frames_per_buffer()
88 base::TimeDelta
GetBufferDuration() const;
90 Format
format() const { return format_
; }
91 ChannelLayout
channel_layout() const { return channel_layout_
; }
92 int sample_rate() const { return sample_rate_
; }
93 int bits_per_sample() const { return bits_per_sample_
; }
94 int frames_per_buffer() const { return frames_per_buffer_
; }
95 int channels() const { return channels_
; }
96 int input_channels() const { return input_channels_
; }
97 int effects() const { return effects_
; }
99 // Comparison with other AudioParams.
100 bool operator==(const AudioParameters
& other
) const {
101 return format_
== other
.format() &&
102 sample_rate_
== other
.sample_rate() &&
103 channel_layout_
== other
.channel_layout() &&
104 channels_
== other
.channels() &&
105 input_channels_
== other
.input_channels() &&
106 bits_per_sample_
== other
.bits_per_sample() &&
107 frames_per_buffer_
== other
.frames_per_buffer() &&
108 effects_
== other
.effects();
112 // These members are mutable to support entire struct assignment. They should
113 // not be mutated individually.
114 Format format_
; // Format of the stream.
115 ChannelLayout channel_layout_
; // Order of surround sound channels.
116 int sample_rate_
; // Sampling frequency/rate.
117 int bits_per_sample_
; // Number of bits per sample.
118 int frames_per_buffer_
; // Number of frames in a buffer.
120 int channels_
; // Number of channels. Value set based on
122 int input_channels_
; // Optional number of input channels.
123 // Normally 0, but can be set to specify
125 int effects_
; // Bitmask using PlatformEffectsMask.
128 // Comparison is useful when AudioParameters is used with std structures.
129 inline bool operator<(const AudioParameters
& a
, const AudioParameters
& b
) {
130 if (a
.format() != b
.format())
131 return a
.format() < b
.format();
132 if (a
.channels() != b
.channels())
133 return a
.channels() < b
.channels();
134 if (a
.input_channels() != b
.input_channels())
135 return a
.input_channels() < b
.input_channels();
136 if (a
.sample_rate() != b
.sample_rate())
137 return a
.sample_rate() < b
.sample_rate();
138 if (a
.bits_per_sample() != b
.bits_per_sample())
139 return a
.bits_per_sample() < b
.bits_per_sample();
140 return a
.frames_per_buffer() < b
.frames_per_buffer();
145 #endif // MEDIA_AUDIO_AUDIO_PARAMETERS_H_