Mercurial > hg > svcore
comparison data/fileio/AudioFileReaderFactory.cpp @ 1342:c0fece5e7755 3.0-integration
Improved debug output for file open troubleshooting
| author | Chris Cannam |
|---|---|
| date | Fri, 06 Jan 2017 09:43:40 +0000 |
| parents | 7d24f92158a7 |
| children | 1c9bbbb6116a |
comparison
equal
deleted
inserted
replaced
| 1341:513e4d67d8df | 1342:c0fece5e7755 |
|---|---|
| 61 Parameters params, | 61 Parameters params, |
| 62 ProgressReporter *reporter) | 62 ProgressReporter *reporter) |
| 63 { | 63 { |
| 64 QString err; | 64 QString err; |
| 65 | 65 |
| 66 SVDEBUG << "AudioFileReaderFactory::createReader(\"" << source.getLocation() << "\"): Requested rate: " << params.targetRate << (params.targetRate == 0 ? " (use source rate)" : "") << endl; | 66 SVDEBUG << "AudioFileReaderFactory: url \"" << source.getLocation() << "\": requested rate: " << params.targetRate << (params.targetRate == 0 ? " (use source rate)" : "") << endl; |
| 67 SVDEBUG << "AudioFileReaderFactory: local filename \"" << source.getLocalFilename() << "\", content type \"" << source.getContentType() << "\"" << endl; | |
| 67 | 68 |
| 68 if (!source.isOK()) { | 69 if (!source.isOK()) { |
| 69 SVDEBUG << "AudioFileReaderFactory::createReader(\"" << source.getLocation() << "\": Failed to retrieve source (transmission error?): " << source.getErrorString() << endl; | 70 SVCERR << "AudioFileReaderFactory::createReader(\"" << source.getLocation() << "\": Failed to retrieve source (transmission error?): " << source.getErrorString() << endl; |
| 70 return 0; | 71 return 0; |
| 71 } | 72 } |
| 72 | 73 |
| 73 if (!source.isAvailable()) { | 74 if (!source.isAvailable()) { |
| 74 SVDEBUG << "AudioFileReaderFactory::createReader(\"" << source.getLocation() << "\": Source not found" << endl; | 75 SVCERR << "AudioFileReaderFactory::createReader(\"" << source.getLocation() << "\": Source not found" << endl; |
| 75 return 0; | 76 return 0; |
| 76 } | 77 } |
| 77 | 78 |
| 78 AudioFileReader *reader = 0; | 79 AudioFileReader *reader = 0; |
| 79 | 80 |
| 86 CodedAudioFileReader::CacheMode cacheMode = | 87 CodedAudioFileReader::CacheMode cacheMode = |
| 87 CodedAudioFileReader::CacheInTemporaryFile; | 88 CodedAudioFileReader::CacheInTemporaryFile; |
| 88 | 89 |
| 89 if (estimatedSamples > 0) { | 90 if (estimatedSamples > 0) { |
| 90 size_t kb = (estimatedSamples * sizeof(float)) / 1024; | 91 size_t kb = (estimatedSamples * sizeof(float)) / 1024; |
| 92 SVDEBUG << "AudioFileReaderFactory: checking where to potentially cache " | |
| 93 << kb << "K of sample data" << endl; | |
| 91 StorageAdviser::Recommendation rec = | 94 StorageAdviser::Recommendation rec = |
| 92 StorageAdviser::recommend(StorageAdviser::SpeedCritical, kb, kb); | 95 StorageAdviser::recommend(StorageAdviser::SpeedCritical, kb, kb); |
| 93 if ((rec & StorageAdviser::UseMemory) || | 96 if ((rec & StorageAdviser::UseMemory) || |
| 94 (rec & StorageAdviser::PreferMemory)) { | 97 (rec & StorageAdviser::PreferMemory)) { |
| 98 SVDEBUG << "AudioFileReaderFactory: cacheing (if at all) in memory" << endl; | |
| 95 cacheMode = CodedAudioFileReader::CacheInMemory; | 99 cacheMode = CodedAudioFileReader::CacheInMemory; |
| 100 } else { | |
| 101 SVDEBUG << "AudioFileReaderFactory: cacheing (if at all) on disc" << endl; | |
| 96 } | 102 } |
| 97 } | 103 } |
| 98 | 104 |
| 99 CodedAudioFileReader::DecodeMode decodeMode = | 105 CodedAudioFileReader::DecodeMode decodeMode = |
| 100 (params.threadingMode == ThreadingMode::Threaded ? | 106 (params.threadingMode == ThreadingMode::Threaded ? |
| 112 | 118 |
| 113 for (int any = 0; any <= 1; ++any) { | 119 for (int any = 0; any <= 1; ++any) { |
| 114 | 120 |
| 115 bool anyReader = (any > 0); | 121 bool anyReader = (any > 0); |
| 116 | 122 |
| 123 if (!anyReader) { | |
| 124 SVDEBUG << "AudioFileReaderFactory: Checking whether any reader officially handles this source" << endl; | |
| 125 } else { | |
| 126 SVDEBUG << "AudioFileReaderFactory: Source not officially handled by any reader, trying again with each reader in turn" | |
| 127 << endl; | |
| 128 } | |
| 129 | |
| 117 if (anyReader || WavFileReader::supports(source)) { | 130 if (anyReader || WavFileReader::supports(source)) { |
| 118 | 131 |
| 119 reader = new WavFileReader(source); | 132 reader = new WavFileReader(source); |
| 120 | 133 |
| 121 sv_samplerate_t fileRate = reader->getSampleRate(); | 134 sv_samplerate_t fileRate = reader->getSampleRate(); |
| 124 (!reader->isQuicklySeekable() || | 137 (!reader->isQuicklySeekable() || |
| 125 normalised || | 138 normalised || |
| 126 (cacheMode == CodedAudioFileReader::CacheInMemory) || | 139 (cacheMode == CodedAudioFileReader::CacheInMemory) || |
| 127 (targetRate != 0 && fileRate != targetRate))) { | 140 (targetRate != 0 && fileRate != targetRate))) { |
| 128 | 141 |
| 129 SVDEBUG << "AudioFileReaderFactory::createReader: WAV file rate: " << reader->getSampleRate() << ", normalised " << normalised << ", seekable " << reader->isQuicklySeekable() << ", in memory " << (cacheMode == CodedAudioFileReader::CacheInMemory) << ", creating decoding reader" << endl; | 142 SVDEBUG << "AudioFileReaderFactory: WAV file reader rate: " << reader->getSampleRate() << ", normalised " << normalised << ", seekable " << reader->isQuicklySeekable() << ", in memory " << (cacheMode == CodedAudioFileReader::CacheInMemory) << ", creating decoding reader" << endl; |
| 130 | 143 |
| 131 delete reader; | 144 delete reader; |
| 132 reader = new DecodingWavFileReader | 145 reader = new DecodingWavFileReader |
| 133 (source, | 146 (source, |
| 134 decodeMode, cacheMode, | 147 decodeMode, cacheMode, |
| 136 normalised, | 149 normalised, |
| 137 reporter); | 150 reporter); |
| 138 } | 151 } |
| 139 | 152 |
| 140 if (reader->isOK()) { | 153 if (reader->isOK()) { |
| 154 SVDEBUG << "AudioFileReaderFactory: WAV file reader is OK, returning it" << endl; | |
| 141 return reader; | 155 return reader; |
| 142 } else { | 156 } else { |
| 143 delete reader; | 157 delete reader; |
| 144 } | 158 } |
| 145 } | 159 } |
| 150 | 164 |
| 151 reader = new OggVorbisFileReader | 165 reader = new OggVorbisFileReader |
| 152 (source, decodeMode, cacheMode, targetRate, normalised, reporter); | 166 (source, decodeMode, cacheMode, targetRate, normalised, reporter); |
| 153 | 167 |
| 154 if (reader->isOK()) { | 168 if (reader->isOK()) { |
| 169 SVDEBUG << "AudioFileReaderFactory: Ogg file reader is OK, returning it" << endl; | |
| 155 return reader; | 170 return reader; |
| 156 } else { | 171 } else { |
| 157 delete reader; | 172 delete reader; |
| 158 } | 173 } |
| 159 } | 174 } |
| 171 reader = new MP3FileReader | 186 reader = new MP3FileReader |
| 172 (source, decodeMode, cacheMode, gapless, | 187 (source, decodeMode, cacheMode, gapless, |
| 173 targetRate, normalised, reporter); | 188 targetRate, normalised, reporter); |
| 174 | 189 |
| 175 if (reader->isOK()) { | 190 if (reader->isOK()) { |
| 191 SVDEBUG << "AudioFileReaderFactory: MP3 file reader is OK, returning it" << endl; | |
| 176 return reader; | 192 return reader; |
| 177 } else { | 193 } else { |
| 178 delete reader; | 194 delete reader; |
| 179 } | 195 } |
| 180 } | 196 } |
| 185 | 201 |
| 186 reader = new CoreAudioFileReader | 202 reader = new CoreAudioFileReader |
| 187 (source, decodeMode, cacheMode, targetRate, normalised, reporter); | 203 (source, decodeMode, cacheMode, targetRate, normalised, reporter); |
| 188 | 204 |
| 189 if (reader->isOK()) { | 205 if (reader->isOK()) { |
| 190 return reader; | 206 SVDEBUG << "AudioFileReaderFactory: CoreAudio reader is OK, returning it" << endl; |
| 191 } else { | 207 return reader; |
| 192 delete reader; | 208 } else { |
| 193 } | 209 delete reader; |
| 194 } | 210 } |
| 195 #endif | 211 } |
| 196 | 212 #endif |
| 197 } | 213 |
| 198 | 214 } |
| 199 SVDEBUG << "AudioFileReaderFactory::Failed to create a reader for " | 215 |
| 200 << "url \"" << source.getLocation() | 216 SVCERR << "AudioFileReaderFactory::Failed to create a reader for " |
| 201 << "\" (content type \"" | 217 << "url \"" << source.getLocation() |
| 202 << source.getContentType() << "\")" << endl; | 218 << "\" (local filename \"" << source.getLocalFilename() |
| 219 << "\", content type \"" | |
| 220 << source.getContentType() << "\")" << endl; | |
| 203 return nullptr; | 221 return nullptr; |
| 204 } | 222 } |
| 205 | 223 |
