void EngineController::initializePhonon() { DEBUG_BLOCK delete m_media; delete m_audio; delete m_preamp; PERF_LOG( "EngineController: loading phonon objects" ) m_media = new Phonon::MediaObject( this ); m_audio = new Phonon::AudioOutput( Phonon::MusicCategory, this ); m_path = Phonon::createPath( m_media, m_audio ); // HACK we turn off replaygain manually on OSX, until the phonon coreaudio backend is fixed. // as the default is specified in the .cfg file, we can't just tell it to be a different default on OSX #ifdef Q_WS_MAC AmarokConfig::setReplayGainMode( AmarokConfig::EnumReplayGainMode::Off ); #endif // only create pre-amp if we have replaygain on, preamp can cause phonon issues if( AmarokConfig::replayGainMode() != AmarokConfig::EnumReplayGainMode::Off ) { m_preamp = new Phonon::VolumeFaderEffect( this ); m_path.insertEffect( m_preamp ); } m_media->setTickInterval( 100 ); debug() << "Tick Interval (actual): " << m_media->tickInterval(); PERF_LOG( "EngineController: loaded phonon objects" ) // Get the next track when there is 2 seconds left on the current one. m_media->setPrefinishMark( 2000 ); connect( m_media, SIGNAL( finished() ), SLOT( slotQueueEnded() ) ); connect( m_media, SIGNAL( aboutToFinish()), SLOT( slotAboutToFinish() ) ); connect( m_media, SIGNAL( metaDataChanged() ), SLOT( slotMetaDataChanged() ) ); connect( m_media, SIGNAL( stateChanged( Phonon::State, Phonon::State ) ), SLOT( slotStateChanged( Phonon::State, Phonon::State ) ) ); connect( m_media, SIGNAL( tick( qint64 ) ), SLOT( slotTick( qint64 ) ) ); connect( m_media, SIGNAL( totalTimeChanged( qint64 ) ), SLOT( slotTrackLengthChanged( qint64 ) ) ); connect( m_media, SIGNAL( currentSourceChanged( const Phonon::MediaSource & ) ), SLOT( slotNewTrackPlaying( const Phonon::MediaSource & ) ) ); //TODO: The xine engine does not support crossfading. Cannot get the gstreamer engine to work, will test this once I do. #if 0 if( AmarokConfig::trackDelayLength() > -1 ) m_media->setTransitionTime( AmarokConfig::trackDelayLength() ); // Also Handles gapless. else if( AmarokConfig::crossfadeLength() > 0 ) // TODO: Handle the possible options on when to crossfade.. the values are not documented anywhere however m_media->setTransitionTime( -AmarokConfig::crossfadeLength() ); #endif }
Plugins::PluginManager::PluginManager( QObject *parent ) : QObject( parent ) { DEBUG_BLOCK setObjectName( "PluginManager" ); s_instance = this; PERF_LOG( "Initialising Plugin Manager" ) init(); PERF_LOG( "Initialised Plugin Manager" ) }
App::App() : KUniqueApplication() , m_tray(0) { DEBUG_BLOCK PERF_LOG( "Begin Application ctor" ) // required for last.fm plugin to grab app version setApplicationVersion( AMAROK_VERSION ); qRegisterMetaType<Meta::DataPtr>(); qRegisterMetaType<Meta::DataList>(); qRegisterMetaType<Meta::TrackPtr>(); qRegisterMetaType<Meta::TrackList>(); qRegisterMetaType<Meta::AlbumPtr>(); qRegisterMetaType<Meta::AlbumList>(); qRegisterMetaType<Meta::ArtistPtr>(); qRegisterMetaType<Meta::ArtistList>(); qRegisterMetaType<Meta::GenrePtr>(); qRegisterMetaType<Meta::GenreList>(); qRegisterMetaType<Meta::ComposerPtr>(); qRegisterMetaType<Meta::ComposerList>(); qRegisterMetaType<Meta::YearPtr>(); qRegisterMetaType<Meta::YearList>(); qRegisterMetaType<Meta::LabelPtr>(); qRegisterMetaType<Meta::LabelList>(); qRegisterMetaType<Playlists::PlaylistPtr>(); qRegisterMetaType<Playlists::PlaylistList>(); #ifdef Q_WS_MAC // this is inspired by OpenSceneGraph: osgDB/FilePath.cpp // Start with the Bundle PlugIns directory. // Get the main bundle first. No need to retain or release it since // we are not keeping a reference CFBundleRef myBundle = CFBundleGetMainBundle(); if( myBundle ) { // CFBundleGetMainBundle will return a bundle ref even if // the application isn't part of a bundle, so we need to // check // if the path to the bundle ends in ".app" to see if it is // a // proper application bundle. If it is, the plugins path is // added CFURLRef urlRef = CFBundleCopyBundleURL(myBundle); if(urlRef) { char bundlePath[1024]; if( CFURLGetFileSystemRepresentation( urlRef, true, (UInt8 *)bundlePath, sizeof(bundlePath) ) ) { QByteArray bp( bundlePath ); size_t len = bp.length(); if( len > 4 && bp.right( 4 ) == ".app" ) { bp.append( "/Contents/MacOS" ); QByteArray path = qgetenv( "PATH" ); if( path.length() > 0 ) { path.prepend( ":" ); } path.prepend( bp ); debug() << "setting PATH=" << path; setenv("PATH", path, 1); } } // docs say we are responsible for releasing CFURLRef CFRelease(urlRef); } } setupEventHandler_mac(this); #endif PERF_LOG( "Done App ctor" ) continueInit(); }