diff --git a/src/main.cpp b/src/main.cpp index 34c19246c..38efe0fc1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -29,12 +29,6 @@ int main(int argc, char *argv[]) { // Couldn't send the message so start anyway } -#ifdef Q_OS_WIN32 - // CONFIG += console seems to fix a race condition in xine. God knows why :/ - // Hide the console window here so it doen't annoy the user. - ShowWindow( GetConsoleWindow(), SW_HIDE ); -#endif // Q_OS_WIN32 - MainWindow w; a.setActivationWindow(&w); diff --git a/src/phononengine.cpp b/src/phononengine.cpp new file mode 100644 index 000000000..7ae960764 --- /dev/null +++ b/src/phononengine.cpp @@ -0,0 +1,79 @@ +#include "phononengine.h" + +PhononEngine::PhononEngine() + : media_object_(new Phonon::MediaObject(this)), + audio_output_(new Phonon::AudioOutput(Phonon::MusicCategory, this)) +{ + Phonon::createPath(media_object_, audio_output_); +} + +PhononEngine::~PhononEngine() { + delete media_object_; + delete audio_output_; +} + +bool PhononEngine::init() { + return true; +} + +bool PhononEngine::canDecode(const QUrl &url) const { + // TODO + return true; +} + +bool PhononEngine::load(const QUrl &url, bool stream) { + media_object_->setCurrentSource(Phonon::MediaSource(url)); + return true; +} + +bool PhononEngine::play(uint offset) { + media_object_->play(); + return true; +} + +void PhononEngine::stop() { + media_object_->stop(); +} + +void PhononEngine::pause() { + media_object_->pause(); +} + +void PhononEngine::unpause() { + media_object_->play(); +} + +Engine::State PhononEngine::state() const { + switch (media_object_->state()) { + case Phonon::LoadingState: + return Engine::Idle; + + case Phonon::PlayingState: + case Phonon::BufferingState: + return Engine::Playing; + + case Phonon::PausedState: + return Engine::Paused; + + case Phonon::StoppedState: + case Phonon::ErrorState: + default: + return Engine::Empty; + } +} + +uint PhononEngine::position() const { + return media_object_->currentTime(); +} + +uint PhononEngine::length() const { + return media_object_->totalTime(); +} + +void PhononEngine::seek(uint ms) { + media_object_->seek(ms); +} + +void PhononEngine::setVolumeSW(uint percent) { + audio_output_->setVolume(qreal(percent) / 100.0); +} diff --git a/src/phononengine.h b/src/phononengine.h new file mode 100644 index 000000000..593566fd6 --- /dev/null +++ b/src/phononengine.h @@ -0,0 +1,38 @@ +#ifndef PHONONENGINE_H +#define PHONONENGINE_H + +#include "enginebase.h" + +#include +#include + +class PhononEngine : public Engine::Base { + public: + PhononEngine(); + ~PhononEngine(); + + bool init(); + + bool canDecode( const QUrl &url ) const; + + bool load( const QUrl &url, bool stream = false ); + bool play( uint offset = 0 ); + void stop(); + void pause(); + void unpause(); + + Engine::State state() const; + uint position() const; + uint length() const; + + void seek( uint ms ); + + protected: + void setVolumeSW( uint percent ); + + private: + Phonon::MediaObject* media_object_; + Phonon::AudioOutput* audio_output_; +}; + +#endif // PHONONENGINE_H diff --git a/src/player.cpp b/src/player.cpp index c6d039e03..29d353ce7 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -1,6 +1,7 @@ #include "player.h" #include "playlist.h" #include "xine-engine.h" +#include "phononengine.h" #include "lastfmservice.h" #include @@ -13,9 +14,15 @@ Player::Player(Playlist* playlist, LastFMService* lastfm, QObject* parent) playlist_(playlist), lastfm_(lastfm), current_item_options_(PlaylistItem::Default), - engine_(new XineEngine), + engine_(NULL), init_engine_watcher_(new QFutureWatcher(this)) { +//#ifdef Q_OS_WIN32 + engine_ = new PhononEngine; +//#else +// engine_ = new XineEngine; +//#endif + settings_.beginGroup("Player"); SetVolume(settings_.value("volume", 50).toInt()); diff --git a/src/src.pro b/src/src.pro index 6df7cc11e..fb78a71dd 100644 --- a/src/src.pro +++ b/src/src.pro @@ -4,7 +4,8 @@ VERSION = 0.1 QT += sql \ network \ xml \ - opengl + opengl \ + phonon TARGET = clementine TEMPLATE = app SOURCES += main.cpp \ @@ -53,7 +54,8 @@ SOURCES += main.cpp \ librarydirectorymodel.cpp \ libraryconfigdialog.cpp \ lastfmconfigdialog.cpp \ - about.cpp + about.cpp \ + phononengine.cpp HEADERS += mainwindow.h \ player.h \ library.h \ @@ -107,7 +109,8 @@ HEADERS += mainwindow.h \ librarydirectorymodel.h \ libraryconfigdialog.h \ lastfmconfigdialog.h \ - about.h + about.h \ + phononengine.h FORMS += mainwindow.ui \ libraryconfig.ui \ fileview.ui \ @@ -129,7 +132,7 @@ RC_FILE += ../dist/windres.rc LIBS += -llastfm # Other platform specific libraries -!win32:!fedora-win32-cross { +!win32:!fedora-win32-cross { mac { QMAKE_CXXFLAGS += -I/usr/local/include LIBS += -L/usr/local/lib \ @@ -160,7 +163,7 @@ win32|fedora-win32-cross:SOURCES += osd_win.cpp # QXT INCLUDEPATH += ../3rdparty/qxt -unix:!macx:!fedora-win32-cross: { +unix:!macx:!fedora-win32-cross: { HEADERS += ../3rdparty/qxt/qxtglobalshortcut.h HEADERS += ../3rdparty/qxt/qxtglobalshortcut_p.h HEADERS += ../3rdparty/qxt/qxtglobal.h @@ -182,14 +185,9 @@ SOURCES += ../3rdparty/qtsingleapplication/qtlocalpeer.cpp SOURCES += ../3rdparty/qtsingleapplication/qtlockedfile.cpp unix:!fedora-win32-cross:SOURCES += ../3rdparty/qtsingleapplication/qtlockedfile_unix.cpp win32|fedora-win32-cross:SOURCES += ../3rdparty/qtsingleapplication/qtlockedfile_win.cpp - -win32|fedora-win32-cross: { - # Hide the console on windows - #LIBS += -Wl,-subsystem,windows - - # Show console for now since it seems to fix a xine race condition :( - CONFIG += console -} +win32|fedora-win32-cross:# Hide the console on windows +: +LIBS += -Wl,-subsystem,windows # Installs target.path = $${install_prefix}/bin/