audio_parameters.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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} 21 22AudioParameters::AudioParameters(Format format, ChannelLayout channel_layout, 23 int sample_rate, int bits_per_sample, 24 int frames_per_buffer) 25 : format_(format), 26 channel_layout_(channel_layout), 27 sample_rate_(sample_rate), 28 bits_per_sample_(bits_per_sample), 29 frames_per_buffer_(frames_per_buffer), 30 channels_(ChannelLayoutToChannelCount(channel_layout)), 31 input_channels_(0) { 32} 33 34AudioParameters::AudioParameters(Format format, ChannelLayout channel_layout, 35 int input_channels, 36 int sample_rate, int bits_per_sample, 37 int frames_per_buffer) 38 : format_(format), 39 channel_layout_(channel_layout), 40 sample_rate_(sample_rate), 41 bits_per_sample_(bits_per_sample), 42 frames_per_buffer_(frames_per_buffer), 43 channels_(ChannelLayoutToChannelCount(channel_layout)), 44 input_channels_(input_channels) { 45} 46 47void AudioParameters::Reset(Format format, ChannelLayout channel_layout, 48 int channels, int input_channels, 49 int sample_rate, int bits_per_sample, 50 int frames_per_buffer) { 51 if (channel_layout != CHANNEL_LAYOUT_DISCRETE) 52 DCHECK_EQ(channels, ChannelLayoutToChannelCount(channel_layout)); 53 54 format_ = format; 55 channel_layout_ = channel_layout; 56 channels_ = channels; 57 input_channels_ = input_channels; 58 sample_rate_ = sample_rate; 59 bits_per_sample_ = bits_per_sample; 60 frames_per_buffer_ = frames_per_buffer; 61} 62 63bool AudioParameters::IsValid() const { 64 return (format_ >= AUDIO_PCM_LINEAR) && 65 (format_ < AUDIO_LAST_FORMAT) && 66 (channels_ > 0) && 67 (channels_ <= media::limits::kMaxChannels) && 68 (channel_layout_ > CHANNEL_LAYOUT_UNSUPPORTED) && 69 (channel_layout_ < CHANNEL_LAYOUT_MAX) && 70 (input_channels_ >= 0) && 71 (input_channels_ <= media::limits::kMaxChannels) && 72 (sample_rate_ >= media::limits::kMinSampleRate) && 73 (sample_rate_ <= media::limits::kMaxSampleRate) && 74 (bits_per_sample_ > 0) && 75 (bits_per_sample_ <= media::limits::kMaxBitsPerSample) && 76 (frames_per_buffer_ > 0) && 77 (frames_per_buffer_ <= media::limits::kMaxSamplesPerPacket); 78} 79 80int AudioParameters::GetBytesPerBuffer() const { 81 return frames_per_buffer_ * GetBytesPerFrame(); 82} 83 84int AudioParameters::GetBytesPerSecond() const { 85 return sample_rate_ * GetBytesPerFrame(); 86} 87 88int AudioParameters::GetBytesPerFrame() const { 89 return channels_ * bits_per_sample_ / 8; 90} 91 92void AudioParameters::SetDiscreteChannels(int channels) { 93 channel_layout_ = CHANNEL_LAYOUT_DISCRETE; 94 channels_ = channels; 95} 96 97} // namespace media 98