// static void SoundSourceProxy::loadPlugins() { // Initialize built-in file types. // Fallback providers should be registered before specialized // providers to ensure that they are only after the specialized // provider failed to open a file. But the order of registration // only matters among providers with equal priority. #ifdef __FFMPEGFILE__ // Use FFmpeg as the last resort. s_soundSourceProviders.registerProvider( mixxx::newSoundSourceProvider<mixxx::SoundSourceProviderFFmpeg>()); #endif #ifdef __SNDFILE__ // libsndfile is another fallback s_soundSourceProviders.registerProvider( mixxx::newSoundSourceProvider<mixxx::SoundSourceProviderSndFile>()); #endif s_soundSourceProviders.registerProvider( mixxx::newSoundSourceProvider<mixxx::SoundSourceProviderFLAC>()); s_soundSourceProviders.registerProvider( mixxx::newSoundSourceProvider<mixxx::SoundSourceProviderOggVorbis>()); #ifdef __OPUS__ s_soundSourceProviders.registerProvider( mixxx::newSoundSourceProvider<mixxx::SoundSourceProviderOpus>()); #endif #ifdef __MAD__ s_soundSourceProviders.registerProvider( mixxx::newSoundSourceProvider<mixxx::SoundSourceProviderMp3>()); #endif #ifdef __MODPLUG__ s_soundSourceProviders.registerProvider( mixxx::newSoundSourceProvider<mixxx::SoundSourceProviderModPlug>()); #endif #ifdef __COREAUDIO__ s_soundSourceProviders.registerProvider( mixxx::newSoundSourceProvider<mixxx::SoundSourceProviderCoreAudio>()); #endif // Scan for and initialize all plugins. // Loaded plugins will replace any built-in providers // that have been registered before (see above)! const QList<QDir> pluginDirs(getSoundSourcePluginDirectories()); for (const auto& pluginDir: pluginDirs) { qDebug() << "Loading SoundSource plugins" << pluginDir.path(); const QStringList files(pluginDir.entryList( SOUND_SOURCE_PLUGIN_FILENAME_PATTERN, QDir::Files | QDir::NoDotAndDotDot)); for (const auto& file: files) { const QString libFilePath(pluginDir.filePath(file)); mixxx::SoundSourcePluginLibraryPointer pPluginLibrary( mixxx::SoundSourcePluginLibrary::load(libFilePath)); if (pPluginLibrary) { s_soundSourceProviders.registerPluginLibrary(pPluginLibrary); } else { qWarning() << "Failed to load SoundSource plugin" << libFilePath; } } } const QStringList supportedFileExtensions( s_soundSourceProviders.getRegisteredFileExtensions()); for (const auto &supportedFileExtension: supportedFileExtensions) { qDebug() << "SoundSource providers for file extension" << supportedFileExtension; const QList<mixxx::SoundSourceProviderRegistration> registrationsForFileExtension( s_soundSourceProviders.getRegistrationsForFileExtension( supportedFileExtension)); for (const auto& registration: registrationsForFileExtension) { if (registration.getPluginLibrary()) { qDebug() << " " << static_cast<int>(registration.getProviderPriority()) << ":" << registration.getProvider()->getName() << "@" << registration.getPluginLibrary()->getFilePath(); } else { qDebug() << " " << static_cast<int>(registration.getProviderPriority()) << ":" << registration.getProvider()->getName(); } } } // Turn the file extension list into a [ "*.mp3", "*.wav", ... ] style string list s_supportedFileNamePatterns.clear(); for (const auto& supportedFileExtension: supportedFileExtensions) { s_supportedFileNamePatterns += QString("*.%1").arg(supportedFileExtension); } // Build regular expression of supported file extensions QString supportedFileExtensionsRegex( RegexUtils::fileExtensionsRegex(supportedFileExtensions)); s_supportedFileNamesRegex = QRegExp(supportedFileExtensionsRegex, Qt::CaseInsensitive); }
// static void SoundSourceProxy::registerSoundSourceProviders() { // Initialize built-in file types. // Fallback providers should be registered before specialized // providers to ensure that they are only after the specialized // provider failed to open a file. But the order of registration // only matters among providers with equal priority. #ifdef __FFMPEGFILE__ // Use FFmpeg as the last resort. s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderFFmpeg>()); #endif #ifdef __SNDFILE__ // libsndfile is another fallback s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderSndFile>()); #endif s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderFLAC>()); s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderOggVorbis>()); #ifdef __OPUS__ s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderOpus>()); #endif #ifdef __MAD__ s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderMp3>()); #endif #ifdef __MODPLUG__ s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderModPlug>()); #endif #ifdef __WV__ s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderWV>()); #endif #ifdef __FAAD__ s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderM4A>()); #endif #ifdef __COREAUDIO__ s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderCoreAudio>()); #endif #ifdef __MEDIAFOUNDATION__ s_soundSourceProviders.registerProvider( std::make_shared<mixxx::SoundSourceProviderMediaFoundation>()); #endif const QStringList supportedFileExtensions( s_soundSourceProviders.getRegisteredFileExtensions()); if (kLogger.infoEnabled()) { for (const auto &supportedFileExtension: supportedFileExtensions) { kLogger.info() << "SoundSource providers for file extension" << supportedFileExtension; const QList<mixxx::SoundSourceProviderRegistration> registrationsForFileExtension( s_soundSourceProviders.getRegistrationsForFileExtension( supportedFileExtension)); for (const auto& registration: registrationsForFileExtension) { kLogger.info() << " " << static_cast<int>(registration.getProviderPriority()) << ":" << registration.getProvider()->getName(); } } } // Turn the file extension list into a [ "*.mp3", "*.wav", ... ] style string list s_supportedFileNamePatterns.clear(); for (const auto& supportedFileExtension: supportedFileExtensions) { s_supportedFileNamePatterns += QString("*.%1").arg(supportedFileExtension); } // Build regular expression of supported file extensions QString supportedFileExtensionsRegex( RegexUtils::fileExtensionsRegex(supportedFileExtensions)); s_supportedFileNamesRegex = QRegExp(supportedFileExtensionsRegex, Qt::CaseInsensitive); }