Browse Source

WavAudioImporter: a file with zero samples is not an error.

pull/343/head
Vladimír Vondruš 7 years ago
parent
commit
ffd04e96eb
  1. 2
      src/MagnumPlugins/WavAudioImporter/Test/CMakeLists.txt
  2. 14
      src/MagnumPlugins/WavAudioImporter/Test/WavImporterTest.cpp
  3. BIN
      src/MagnumPlugins/WavAudioImporter/Test/zeroSamples.wav
  4. 10
      src/MagnumPlugins/WavAudioImporter/WavImporter.cpp
  5. 3
      src/MagnumPlugins/WavAudioImporter/WavImporter.h

2
src/MagnumPlugins/WavAudioImporter/Test/CMakeLists.txt

@ -58,6 +58,8 @@ corrade_add_test(WavAudioImporterTest WavImporterTest.cpp
invalidDataChunk.wav
invalidFactChunk.wav
zeroSamples.wav
mono4.wav
mono8.wav
mono8junk.wav

14
src/MagnumPlugins/WavAudioImporter/Test/WavImporterTest.cpp

@ -50,6 +50,8 @@ struct WavImporterTest: TestSuite::Tester {
void invalidDataChunk();
void invalidFactChunk();
void zeroSamples();
void mono4();
void mono8();
void mono8junk();
@ -88,6 +90,8 @@ WavImporterTest::WavImporterTest() {
&WavImporterTest::invalidDataChunk,
&WavImporterTest::invalidFactChunk,
&WavImporterTest::zeroSamples,
&WavImporterTest::mono4,
&WavImporterTest::mono8,
&WavImporterTest::mono8junk,
@ -195,6 +199,16 @@ void WavImporterTest::invalidFactChunk() {
TestSuite::Compare::Container<Containers::ArrayView<const char>>);
}
void WavImporterTest::zeroSamples() {
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("WavAudioImporter");
/* No error should happen, it should just give an empty buffer back */
CORRADE_VERIFY(importer->openFile(Utility::Directory::join(WAVAUDIOIMPORTER_TEST_DIR, "zeroSamples.wav")));
CORRADE_COMPARE(importer->format(), BufferFormat::Mono16);
CORRADE_COMPARE(importer->frequency(), 22050);
CORRADE_VERIFY(importer->data().empty());
}
void WavImporterTest::mono4() {
std::ostringstream out;
Error redirectError{&out};

BIN
src/MagnumPlugins/WavAudioImporter/Test/zeroSamples.wav

Binary file not shown.

10
src/MagnumPlugins/WavAudioImporter/WavImporter.cpp

@ -45,7 +45,7 @@ WavImporter::WavImporter(PluginManager::AbstractManager& manager, const std::str
auto WavImporter::doFeatures() const -> Features { return Feature::OpenData; }
bool WavImporter::doIsOpened() const { return _data; }
bool WavImporter::doIsOpened() const { return !!_data; }
void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
/* Check file size */
@ -213,19 +213,19 @@ void WavImporter::doOpenData(Containers::ArrayView<const char> data) {
/* Copy the data */
const char* dataChunkPtr = reinterpret_cast<const char*>(dataChunk + 1);
_data = Containers::Array<char>(dataChunkSize);
std::copy(dataChunkPtr, dataChunkPtr+dataChunkSize, _data.begin());
std::copy(dataChunkPtr, dataChunkPtr+dataChunkSize, _data->begin());
return;
}
void WavImporter::doClose() { _data = nullptr; }
void WavImporter::doClose() { _data = Containers::NullOpt; }
BufferFormat WavImporter::doFormat() const { return _format; }
UnsignedInt WavImporter::doFrequency() const { return _frequency; }
Containers::Array<char> WavImporter::doData() {
Containers::Array<char> copy(_data.size());
std::copy(_data.begin(), _data.end(), copy.begin());
Containers::Array<char> copy(_data->size());
std::copy(_data->begin(), _data->end(), copy.begin());
return copy;
}

3
src/MagnumPlugins/WavAudioImporter/WavImporter.h

@ -31,6 +31,7 @@
*/
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/Optional.h>
#include "Magnum/Audio/AbstractImporter.h"
@ -102,7 +103,7 @@ class MAGNUM_WAVAUDIOIMPORTER_EXPORT WavImporter: public AbstractImporter {
MAGNUM_WAVAUDIOIMPORTER_LOCAL UnsignedInt doFrequency() const override;
MAGNUM_WAVAUDIOIMPORTER_LOCAL Containers::Array<char> doData() override;
Containers::Array<char> _data;
Containers::Optional<Containers::Array<char>> _data;
BufferFormat _format;
UnsignedInt _frequency;
};

Loading…
Cancel
Save