First go at a phonon engine
This commit is contained in:
parent
fe45d1ee7d
commit
65ce08ae85
@ -29,12 +29,6 @@ int main(int argc, char *argv[]) {
|
|||||||
// Couldn't send the message so start anyway
|
// 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;
|
MainWindow w;
|
||||||
a.setActivationWindow(&w);
|
a.setActivationWindow(&w);
|
||||||
|
|
||||||
|
79
src/phononengine.cpp
Normal file
79
src/phononengine.cpp
Normal file
@ -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);
|
||||||
|
}
|
38
src/phononengine.h
Normal file
38
src/phononengine.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#ifndef PHONONENGINE_H
|
||||||
|
#define PHONONENGINE_H
|
||||||
|
|
||||||
|
#include "enginebase.h"
|
||||||
|
|
||||||
|
#include <Phonon/MediaObject>
|
||||||
|
#include <Phonon/AudioOutput>
|
||||||
|
|
||||||
|
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
|
@ -1,6 +1,7 @@
|
|||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "playlist.h"
|
#include "playlist.h"
|
||||||
#include "xine-engine.h"
|
#include "xine-engine.h"
|
||||||
|
#include "phononengine.h"
|
||||||
#include "lastfmservice.h"
|
#include "lastfmservice.h"
|
||||||
|
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
@ -13,9 +14,15 @@ Player::Player(Playlist* playlist, LastFMService* lastfm, QObject* parent)
|
|||||||
playlist_(playlist),
|
playlist_(playlist),
|
||||||
lastfm_(lastfm),
|
lastfm_(lastfm),
|
||||||
current_item_options_(PlaylistItem::Default),
|
current_item_options_(PlaylistItem::Default),
|
||||||
engine_(new XineEngine),
|
engine_(NULL),
|
||||||
init_engine_watcher_(new QFutureWatcher<bool>(this))
|
init_engine_watcher_(new QFutureWatcher<bool>(this))
|
||||||
{
|
{
|
||||||
|
//#ifdef Q_OS_WIN32
|
||||||
|
engine_ = new PhononEngine;
|
||||||
|
//#else
|
||||||
|
// engine_ = new XineEngine;
|
||||||
|
//#endif
|
||||||
|
|
||||||
settings_.beginGroup("Player");
|
settings_.beginGroup("Player");
|
||||||
|
|
||||||
SetVolume(settings_.value("volume", 50).toInt());
|
SetVolume(settings_.value("volume", 50).toInt());
|
||||||
|
24
src/src.pro
24
src/src.pro
@ -4,7 +4,8 @@ VERSION = 0.1
|
|||||||
QT += sql \
|
QT += sql \
|
||||||
network \
|
network \
|
||||||
xml \
|
xml \
|
||||||
opengl
|
opengl \
|
||||||
|
phonon
|
||||||
TARGET = clementine
|
TARGET = clementine
|
||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
SOURCES += main.cpp \
|
SOURCES += main.cpp \
|
||||||
@ -53,7 +54,8 @@ SOURCES += main.cpp \
|
|||||||
librarydirectorymodel.cpp \
|
librarydirectorymodel.cpp \
|
||||||
libraryconfigdialog.cpp \
|
libraryconfigdialog.cpp \
|
||||||
lastfmconfigdialog.cpp \
|
lastfmconfigdialog.cpp \
|
||||||
about.cpp
|
about.cpp \
|
||||||
|
phononengine.cpp
|
||||||
HEADERS += mainwindow.h \
|
HEADERS += mainwindow.h \
|
||||||
player.h \
|
player.h \
|
||||||
library.h \
|
library.h \
|
||||||
@ -107,7 +109,8 @@ HEADERS += mainwindow.h \
|
|||||||
librarydirectorymodel.h \
|
librarydirectorymodel.h \
|
||||||
libraryconfigdialog.h \
|
libraryconfigdialog.h \
|
||||||
lastfmconfigdialog.h \
|
lastfmconfigdialog.h \
|
||||||
about.h
|
about.h \
|
||||||
|
phononengine.h
|
||||||
FORMS += mainwindow.ui \
|
FORMS += mainwindow.ui \
|
||||||
libraryconfig.ui \
|
libraryconfig.ui \
|
||||||
fileview.ui \
|
fileview.ui \
|
||||||
@ -129,7 +132,7 @@ RC_FILE += ../dist/windres.rc
|
|||||||
LIBS += -llastfm
|
LIBS += -llastfm
|
||||||
|
|
||||||
# Other platform specific libraries
|
# Other platform specific libraries
|
||||||
!win32:!fedora-win32-cross {
|
!win32:!fedora-win32-cross {
|
||||||
mac {
|
mac {
|
||||||
QMAKE_CXXFLAGS += -I/usr/local/include
|
QMAKE_CXXFLAGS += -I/usr/local/include
|
||||||
LIBS += -L/usr/local/lib \
|
LIBS += -L/usr/local/lib \
|
||||||
@ -160,7 +163,7 @@ win32|fedora-win32-cross:SOURCES += osd_win.cpp
|
|||||||
|
|
||||||
# QXT
|
# QXT
|
||||||
INCLUDEPATH += ../3rdparty/qxt
|
INCLUDEPATH += ../3rdparty/qxt
|
||||||
unix:!macx:!fedora-win32-cross: {
|
unix:!macx:!fedora-win32-cross: {
|
||||||
HEADERS += ../3rdparty/qxt/qxtglobalshortcut.h
|
HEADERS += ../3rdparty/qxt/qxtglobalshortcut.h
|
||||||
HEADERS += ../3rdparty/qxt/qxtglobalshortcut_p.h
|
HEADERS += ../3rdparty/qxt/qxtglobalshortcut_p.h
|
||||||
HEADERS += ../3rdparty/qxt/qxtglobal.h
|
HEADERS += ../3rdparty/qxt/qxtglobal.h
|
||||||
@ -182,14 +185,9 @@ SOURCES += ../3rdparty/qtsingleapplication/qtlocalpeer.cpp
|
|||||||
SOURCES += ../3rdparty/qtsingleapplication/qtlockedfile.cpp
|
SOURCES += ../3rdparty/qtsingleapplication/qtlockedfile.cpp
|
||||||
unix:!fedora-win32-cross:SOURCES += ../3rdparty/qtsingleapplication/qtlockedfile_unix.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:SOURCES += ../3rdparty/qtsingleapplication/qtlockedfile_win.cpp
|
||||||
|
win32|fedora-win32-cross:# Hide the console on windows
|
||||||
win32|fedora-win32-cross: {
|
:
|
||||||
# Hide the console on windows
|
LIBS += -Wl,-subsystem,windows
|
||||||
#LIBS += -Wl,-subsystem,windows
|
|
||||||
|
|
||||||
# Show console for now since it seems to fix a xine race condition :(
|
|
||||||
CONFIG += console
|
|
||||||
}
|
|
||||||
|
|
||||||
# Installs
|
# Installs
|
||||||
target.path = $${install_prefix}/bin/
|
target.path = $${install_prefix}/bin/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user