Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / media / audio / audio_parameters.cc
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.
4
5 #include "media/audio/audio_parameters.h"
6
7 #include "base/logging.h"
8 #include "media/base/limits.h"
9
10 namespace media {
11
12 AudioParameters::AudioParameters()
13     : format_(AUDIO_PCM_LINEAR),
14       channel_layout_(CHANNEL_LAYOUT_NONE),
15       sample_rate_(0),
16       bits_per_sample_(0),
17       frames_per_buffer_(0),
18       channels_(0),
19       input_channels_(0),
20       effects_(NO_EFFECTS) {
21 }
22
23 AudioParameters::AudioParameters(Format format, ChannelLayout channel_layout,
24                                  int sample_rate, int bits_per_sample,
25                                  int frames_per_buffer)
26     : format_(format),
27       channel_layout_(channel_layout),
28       sample_rate_(sample_rate),
29       bits_per_sample_(bits_per_sample),
30       frames_per_buffer_(frames_per_buffer),
31       channels_(ChannelLayoutToChannelCount(channel_layout)),
32       input_channels_(0),
33       effects_(NO_EFFECTS) {
34 }
35
36 AudioParameters::AudioParameters(Format format, ChannelLayout channel_layout,
37                                  int input_channels,
38                                  int sample_rate, int bits_per_sample,
39                                  int frames_per_buffer, int effects)
40     : format_(format),
41       channel_layout_(channel_layout),
42       sample_rate_(sample_rate),
43       bits_per_sample_(bits_per_sample),
44       frames_per_buffer_(frames_per_buffer),
45       channels_(ChannelLayoutToChannelCount(channel_layout)),
46       input_channels_(input_channels),
47       effects_(effects) {
48 }
49
50 AudioParameters::AudioParameters(Format format, ChannelLayout channel_layout,
51                                  int channels, int input_channels,
52                                  int sample_rate, int bits_per_sample,
53                                  int frames_per_buffer, int effects)
54     : format_(format),
55       channel_layout_(channel_layout),
56       sample_rate_(sample_rate),
57       bits_per_sample_(bits_per_sample),
58       frames_per_buffer_(frames_per_buffer),
59       channels_(channels),
60       input_channels_(input_channels),
61       effects_(effects) {
62   if (channel_layout != CHANNEL_LAYOUT_DISCRETE)
63     DCHECK_EQ(channels, ChannelLayoutToChannelCount(channel_layout));
64 }
65
66 void AudioParameters::Reset(Format format, ChannelLayout channel_layout,
67                             int channels, int input_channels,
68                             int sample_rate, int bits_per_sample,
69                             int frames_per_buffer) {
70   if (channel_layout != CHANNEL_LAYOUT_DISCRETE)
71     DCHECK_EQ(channels, ChannelLayoutToChannelCount(channel_layout));
72
73   format_ = format;
74   channel_layout_ = channel_layout;
75   channels_ = channels;
76   input_channels_ = input_channels;
77   sample_rate_ = sample_rate;
78   bits_per_sample_ = bits_per_sample;
79   frames_per_buffer_ = frames_per_buffer;
80 }
81
82 bool AudioParameters::IsValid() const {
83   return (format_ >= AUDIO_PCM_LINEAR) &&
84          (format_ < AUDIO_LAST_FORMAT) &&
85          (channels_ > 0) &&
86          (channels_ <= media::limits::kMaxChannels) &&
87          (channel_layout_ > CHANNEL_LAYOUT_UNSUPPORTED) &&
88          (channel_layout_ < CHANNEL_LAYOUT_MAX) &&
89          (input_channels_ >= 0) &&
90          (input_channels_ <= media::limits::kMaxChannels) &&
91          (sample_rate_ >= media::limits::kMinSampleRate) &&
92          (sample_rate_ <= media::limits::kMaxSampleRate) &&
93          (bits_per_sample_ > 0) &&
94          (bits_per_sample_ <= media::limits::kMaxBitsPerSample) &&
95          (frames_per_buffer_ > 0) &&
96          (frames_per_buffer_ <= media::limits::kMaxSamplesPerPacket);
97 }
98
99 int AudioParameters::GetBytesPerBuffer() const {
100   return frames_per_buffer_ * GetBytesPerFrame();
101 }
102
103 int AudioParameters::GetBytesPerSecond() const {
104   return sample_rate_ * GetBytesPerFrame();
105 }
106
107 int AudioParameters::GetBytesPerFrame() const {
108   return channels_ * bits_per_sample_ / 8;
109 }
110
111 base::TimeDelta AudioParameters::GetBufferDuration() const {
112   return base::TimeDelta::FromMicroseconds(
113       frames_per_buffer_ * base::Time::kMicrosecondsPerSecond /
114       static_cast<float>(sample_rate_));
115 }
116
117 }  // namespace media