1 // Copyright (c) 2011 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 #include "media/audio/audio_parameters.h"
7 #include "media/base/limits.h"
9 AudioParameters::AudioParameters()
10 : format(AUDIO_PCM_LINEAR
),
11 channel_layout(CHANNEL_LAYOUT_NONE
),
14 samples_per_packet(0),
18 AudioParameters::AudioParameters(const media::AudioDecoderConfig
& config
)
19 : format(AUDIO_PCM_LINEAR
),
20 channel_layout(config
.channel_layout
),
21 sample_rate(config
.sample_rate
),
22 bits_per_sample(config
.bits_per_channel
),
23 samples_per_packet(0),
24 channels(ChannelLayoutToChannelCount(config
.channel_layout
)) {
27 AudioParameters::AudioParameters(Format format
, ChannelLayout channel_layout
,
28 int sample_rate
, int bits_per_sample
,
29 int samples_per_packet
)
31 channel_layout(channel_layout
),
32 sample_rate(sample_rate
),
33 bits_per_sample(bits_per_sample
),
34 samples_per_packet(samples_per_packet
),
35 channels(ChannelLayoutToChannelCount(channel_layout
)) {
38 bool AudioParameters::IsValid() const {
39 return (format
>= 0) && (format
< AUDIO_LAST_FORMAT
) &&
40 (channels
> 0) && (channels
<= media::Limits::kMaxChannels
) &&
41 (sample_rate
> 0) && (sample_rate
<= media::Limits::kMaxSampleRate
) &&
42 (bits_per_sample
> 0) &&
43 (bits_per_sample
<= media::Limits::kMaxBitsPerSample
) &&
44 (samples_per_packet
> 0) &&
45 (samples_per_packet
<= media::Limits::kMaxSamplesPerPacket
);
48 int AudioParameters::GetPacketSize() const {
49 return samples_per_packet
* channels
* bits_per_sample
/ 8;
52 int AudioParameters::GetBytesPerSecond() const {
53 return sample_rate
* channels
* bits_per_sample
/ 8;
56 bool AudioParameters::Compare::operator()(
57 const AudioParameters
& a
,
58 const AudioParameters
& b
) const {
59 if (a
.format
< b
.format
)
61 if (a
.format
> b
.format
)
63 if (a
.channels
< b
.channels
)
65 if (a
.channels
> b
.channels
)
67 if (a
.sample_rate
< b
.sample_rate
)
69 if (a
.sample_rate
> b
.sample_rate
)
71 if (a
.bits_per_sample
< b
.bits_per_sample
)
73 if (a
.bits_per_sample
> b
.bits_per_sample
)
75 return a
.samples_per_packet
< b
.samples_per_packet
;