annotate data/fileio/AudioFileReader.cpp @ 557:a40023bebd15

* Fix crash when processing a file that is shorter than a single block
author Chris Cannam
date Tue, 10 Feb 2009 17:24:30 +0000
parents 1d656dcda8ef
children 59e7fe1b1003
rev   line source
Chris@175 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@175 2
Chris@175 3 /*
Chris@175 4 Sonic Visualiser
Chris@175 5 An audio file viewer and annotation editor.
Chris@175 6 Centre for Digital Music, Queen Mary, University of London.
Chris@175 7 This file copyright 2006 Chris Cannam.
Chris@175 8
Chris@175 9 This program is free software; you can redistribute it and/or
Chris@175 10 modify it under the terms of the GNU General Public License as
Chris@175 11 published by the Free Software Foundation; either version 2 of the
Chris@175 12 License, or (at your option) any later version. See the file
Chris@175 13 COPYING included with this distribution for more information.
Chris@175 14 */
Chris@175 15
Chris@175 16 #include "AudioFileReader.h"
Chris@175 17
Chris@327 18 void
Chris@327 19 AudioFileReader::getDeInterleavedFrames(size_t start, size_t count,
Chris@327 20 std::vector<SampleBlock> &frames) const
Chris@327 21 {
Chris@327 22 SampleBlock interleaved;
Chris@327 23 getInterleavedFrames(start, count, interleaved);
Chris@327 24
Chris@327 25 size_t channels = getChannelCount();
Chris@327 26 size_t rc = interleaved.size() / channels;
Chris@327 27
Chris@327 28 frames.clear();
Chris@327 29
Chris@327 30 for (size_t c = 0; c < channels; ++c) {
Chris@327 31 frames.push_back(SampleBlock());
Chris@327 32 }
Chris@327 33
Chris@327 34 for (size_t i = 0; i < rc; ++i) {
Chris@327 35 for (size_t c = 0; c < channels; ++c) {
Chris@327 36 frames[c].push_back(interleaved[i * channels + c]);
Chris@327 37 }
Chris@327 38 }
Chris@327 39 }
Chris@327 40