Mercurial > hg > svcore
diff data/fileio/AudioFileReaderFactory.cpp @ 1592:f8e3dcbafb4d bqaudiostream
Implement title/maker in wav readers; extra handling of supported-ness for file types
author | Chris Cannam |
---|---|
date | Mon, 21 Jan 2019 13:16:17 +0000 |
parents | c8fad3c14a2b |
children | ce185d4dd408 |
line wrap: on
line diff
--- a/data/fileio/AudioFileReaderFactory.cpp Mon Jan 21 11:45:51 2019 +0000 +++ b/data/fileio/AudioFileReaderFactory.cpp Mon Jan 21 13:16:17 2019 +0000 @@ -50,6 +50,23 @@ return rv; } +bool +AudioFileReaderFactory::isSupported(FileSource source) +{ +#ifdef HAVE_MAD + if (MP3FileReader::supports(source)) { + return true; + } +#endif + if (WavFileReader::supports(source)) { + return true; + } + if (BQAFileReader::supports(source)) { + return true; + } + return false; +} + AudioFileReader * AudioFileReaderFactory::createReader(FileSource source, Parameters params, @@ -122,40 +139,34 @@ } #ifdef HAVE_MAD - if (anyReader || MP3FileReader::supports(source)) { + // Having said we'll try any reader on the second pass, we + // actually don't want to try the mp3 reader for anything not + // identified as an mp3 - it can't identify files by header, + // it'll try to read any data and then fail with + // synchronisation errors - causing misleading and potentially + // alarming warning messages at the least + if (!anyReader) { + if (MP3FileReader::supports(source)) { - MP3FileReader::GaplessMode gapless = - params.gaplessMode == GaplessMode::Gapless ? - MP3FileReader::GaplessMode::Gapless : - MP3FileReader::GaplessMode::Gappy; + MP3FileReader::GaplessMode gapless = + params.gaplessMode == GaplessMode::Gapless ? + MP3FileReader::GaplessMode::Gapless : + MP3FileReader::GaplessMode::Gappy; - reader = new MP3FileReader - (source, decodeMode, cacheMode, gapless, - targetRate, normalised, reporter); + reader = new MP3FileReader + (source, decodeMode, cacheMode, gapless, + targetRate, normalised, reporter); - if (reader->isOK()) { - SVDEBUG << "AudioFileReaderFactory: MP3 file reader is OK, returning it" << endl; - return reader; - } else { - delete reader; + if (reader->isOK()) { + SVDEBUG << "AudioFileReaderFactory: MP3 file reader is OK, returning it" << endl; + return reader; + } else { + delete reader; + } } } #endif - if (anyReader || BQAFileReader::supports(source)) { - - reader = new BQAFileReader - (source, decodeMode, cacheMode, - targetRate, normalised, reporter); - - if (reader->isOK()) { - SVDEBUG << "AudioFileReaderFactory: BQA reader is OK, returning it" << endl; - return reader; - } else { - delete reader; - } - } - if (anyReader || WavFileReader::supports(source)) { reader = new WavFileReader(source); @@ -186,6 +197,20 @@ delete reader; } } + + if (anyReader || BQAFileReader::supports(source)) { + + reader = new BQAFileReader + (source, decodeMode, cacheMode, + targetRate, normalised, reporter); + + if (reader->isOK()) { + SVDEBUG << "AudioFileReaderFactory: BQA reader is OK, returning it" << endl; + return reader; + } else { + delete reader; + } + } } SVCERR << "AudioFileReaderFactory::Failed to create a reader for "