| Index: media/audio/sounds/wav_reader.cc
|
| diff --git a/media/audio/sounds/wav_reader.cc b/media/audio/sounds/wav_reader.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1e03e6d002c5b0bf631bdfa2cd659c912eec12ef
|
| --- /dev/null
|
| +++ b/media/audio/sounds/wav_reader.cc
|
| @@ -0,0 +1,45 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "media/audio/sounds/wav_reader.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "media/base/audio_bus.h"
|
| +
|
| +namespace media {
|
| +
|
| +WavReaderImpl::WavReaderImpl(const WavParser& wav_parser)
|
| + : wav_parser_(wav_parser) {}
|
| +
|
| +WavReaderImpl::~WavReaderImpl() {}
|
| +
|
| +bool WavReaderImpl::AtEnd(size_t cursor) {
|
| + return wav_parser_.data().size() <= cursor;
|
| +}
|
| +
|
| +bool WavReaderImpl::CopyTo(AudioBus* bus,
|
| + size_t cursor,
|
| + size_t* bytes_written) {
|
| + if (!bus)
|
| + return false;
|
| + if (bus->channels() != wav_parser_.num_channels()) {
|
| + VLOG(1) << "Number of channel mismatch.";
|
| + return false;
|
| + }
|
| + if (AtEnd(cursor)) {
|
| + bus->Zero();
|
| + return true;
|
| + }
|
| + const base::StringPiece& data = wav_parser_.data();
|
| + const int remaining_frames =
|
| + (data.size() - cursor) / wav_parser_.bytes_per_frame();
|
| + const int frames = std::min(bus->frames(), remaining_frames);
|
| + bus->FromInterleaved(data.data() + cursor, frames,
|
| + wav_parser_.bytes_per_sample());
|
| + *bytes_written = frames * wav_parser_.bytes_per_frame();
|
| + bus->ZeroFramesPartial(frames, bus->frames() - frames);
|
| + return true;
|
| +}
|
| +
|
| +} // namespace media
|
|
|