From ffd04e96eb4558f2645bde31b24dbb7469884830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 25 May 2019 21:18:40 +0200 Subject: [PATCH] WavAudioImporter: a file with zero samples is not an error. --- .../WavAudioImporter/Test/CMakeLists.txt | 2 ++ .../WavAudioImporter/Test/WavImporterTest.cpp | 14 ++++++++++++++ .../WavAudioImporter/Test/zeroSamples.wav | Bin 0 -> 78 bytes .../WavAudioImporter/WavImporter.cpp | 10 +++++----- src/MagnumPlugins/WavAudioImporter/WavImporter.h | 3 ++- 5 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 src/MagnumPlugins/WavAudioImporter/Test/zeroSamples.wav diff --git a/src/MagnumPlugins/WavAudioImporter/Test/CMakeLists.txt b/src/MagnumPlugins/WavAudioImporter/Test/CMakeLists.txt index f928058a9..9de404f6a 100644 --- a/src/MagnumPlugins/WavAudioImporter/Test/CMakeLists.txt +++ b/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 diff --git a/src/MagnumPlugins/WavAudioImporter/Test/WavImporterTest.cpp b/src/MagnumPlugins/WavAudioImporter/Test/WavImporterTest.cpp index 93d498748..94ce7800b 100644 --- a/src/MagnumPlugins/WavAudioImporter/Test/WavImporterTest.cpp +++ b/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>); } +void WavImporterTest::zeroSamples() { + Containers::Pointer 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}; diff --git a/src/MagnumPlugins/WavAudioImporter/Test/zeroSamples.wav b/src/MagnumPlugins/WavAudioImporter/Test/zeroSamples.wav new file mode 100644 index 0000000000000000000000000000000000000000..52563627390c94c8cbabae6fcf79098cbedfda71 GIT binary patch literal 78 zcmWIYbaQiKU| Features { return Feature::OpenData; } -bool WavImporter::doIsOpened() const { return _data; } +bool WavImporter::doIsOpened() const { return !!_data; } void WavImporter::doOpenData(Containers::ArrayView data) { /* Check file size */ @@ -213,19 +213,19 @@ void WavImporter::doOpenData(Containers::ArrayView data) { /* Copy the data */ const char* dataChunkPtr = reinterpret_cast(dataChunk + 1); _data = Containers::Array(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 WavImporter::doData() { - Containers::Array copy(_data.size()); - std::copy(_data.begin(), _data.end(), copy.begin()); + Containers::Array copy(_data->size()); + std::copy(_data->begin(), _data->end(), copy.begin()); return copy; } diff --git a/src/MagnumPlugins/WavAudioImporter/WavImporter.h b/src/MagnumPlugins/WavAudioImporter/WavImporter.h index ffa17a847..5d239d70a 100644 --- a/src/MagnumPlugins/WavAudioImporter/WavImporter.h +++ b/src/MagnumPlugins/WavAudioImporter/WavImporter.h @@ -31,6 +31,7 @@ */ #include +#include #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 doData() override; - Containers::Array _data; + Containers::Optional> _data; BufferFormat _format; UnsignedInt _frequency; };