audio_parameters.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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 10namespace media { 11 12AudioParameters::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 23AudioParameters::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 36AudioParameters::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 50AudioParameters::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 66void 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 82bool 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 99int AudioParameters::GetBytesPerBuffer() const { 100 return frames_per_buffer_ * GetBytesPerFrame(); 101} 102 103int AudioParameters::GetBytesPerSecond() const { 104 return sample_rate_ * GetBytesPerFrame(); 105} 106 107int AudioParameters::GetBytesPerFrame() const { 108 return channels_ * bits_per_sample_ / 8; 109} 110 111base::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 118