File 0001-playbackEngineVlc-build-fix.patch of Package nulloy
From b78ae63e0bb388caa66e63ff6be59457a55f9130 Mon Sep 17 00:00:00 2001
From: Sergey Vlasov <sergey@vlasov.me>
Date: Thu, 8 Feb 2024 15:52:45 +0000
Subject: [PATCH] playbackEngineVlc build fix
---
src/interfaces/playbackEngineInterface.h | 2 +-
src/plugins/pluginVlc/containerVlc.h | 2 +-
src/plugins/pluginVlc/playbackEngineVlc.cpp | 95 ++++++++++++---------
src/plugins/pluginVlc/playbackEngineVlc.h | 23 ++---
4 files changed, 68 insertions(+), 54 deletions(-)
diff --git a/src/interfaces/playbackEngineInterface.h b/src/interfaces/playbackEngineInterface.h
index 196d0e7..1576f68 100644
--- a/src/interfaces/playbackEngineInterface.h
+++ b/src/interfaces/playbackEngineInterface.h
@@ -60,7 +60,7 @@ signals:
virtual void volumeChanged(qreal vol) = 0;
virtual void message(N::MessageIcon icon, const QString &title, const QString &msg) = 0;
virtual void mediaChanged(const QString &file, int context) = 0;
- virtual void nextMediaRequested() = 0;
+ virtual void nextMediaRequested() {}
virtual void mediaFinished(const QString &file, int context) = 0;
virtual void mediaFailed(const QString &file, int context) = 0;
virtual void stateChanged(N::PlaybackState state) = 0;
diff --git a/src/plugins/pluginVlc/containerVlc.h b/src/plugins/pluginVlc/containerVlc.h
index 6db5676..b599a89 100644
--- a/src/plugins/pluginVlc/containerVlc.h
+++ b/src/plugins/pluginVlc/containerVlc.h
@@ -32,7 +32,7 @@ public:
~NContainerVlc();
QList<NPlugin *> plugins() const;
QString name() const { return "VLC"; }
- QString version() const { return "0.8"; }
+ QString version() const { return "0.9"; }
};
#endif
diff --git a/src/plugins/pluginVlc/playbackEngineVlc.cpp b/src/plugins/pluginVlc/playbackEngineVlc.cpp
index b671857..fcf2ff8 100644
--- a/src/plugins/pluginVlc/playbackEngineVlc.cpp
+++ b/src/plugins/pluginVlc/playbackEngineVlc.cpp
@@ -57,13 +57,15 @@ void NPlaybackEngineVlc::init()
<< "--no-xlib";
m_vlcInstance = libvlc_new(argVector.size(), &argVector[0]);
- m_mediaPlayer = libvlc_media_player_new(m_vlcInstance);
- m_eventManager = libvlc_media_player_event_manager(m_mediaPlayer);
- libvlc_event_attach(m_eventManager, libvlc_MediaPlayerEndReached, _eventHandler, this);
+ m_vlcMediaPlayer = libvlc_media_player_new(m_vlcInstance);
+ m_vlcEventManager = libvlc_media_player_event_manager(m_vlcMediaPlayer);
+ libvlc_event_attach(m_vlcEventManager, libvlc_MediaPlayerEndReached, _eventHandler, this);
- m_oldVolume = -1;
- m_oldPosition = -1;
- m_oldState = N::PlaybackStopped;
+ m_volume = -1;
+ m_position = -1;
+ m_vlcState = libvlc_NothingSpecial;
+ m_currentMedia = "";
+ m_currentContext = 0;
m_timer = new QTimer(this);
connect(m_timer, SIGNAL(timeout()), this, SLOT(checkStatus()));
@@ -79,11 +81,11 @@ NPlaybackEngineVlc::~NPlaybackEngineVlc()
}
stop();
- libvlc_media_player_release(m_mediaPlayer);
+ libvlc_media_player_release(m_vlcMediaPlayer);
libvlc_release(m_vlcInstance);
}
-void NPlaybackEngineVlc::setMedia(const QString &file)
+void NPlaybackEngineVlc::setMedia(const QString &file, int context)
{
stop();
@@ -91,32 +93,36 @@ void NPlaybackEngineVlc::setMedia(const QString &file)
return;
}
+ m_currentMedia = file;
+ m_currentContext = context;
+
if (!QFile(file).exists()) {
emit message(N::Warning, file, "No such file or directory");
- emit mediaChanged("");
- emit failed();
+ emit mediaFailed(m_currentMedia, m_currentContext);
return;
}
- libvlc_media_t *media = libvlc_media_player_get_media(m_mediaPlayer);
- if (media)
+ libvlc_media_t *media = libvlc_media_player_get_media(m_vlcMediaPlayer);
+ if (media) {
libvlc_media_release(media);
+ }
libvlc_media_t *mediaDescriptor = libvlc_media_new_path(m_vlcInstance, file.toUtf8());
- if (mediaDescriptor)
- libvlc_media_player_set_media(m_mediaPlayer, mediaDescriptor);
+ if (mediaDescriptor) {
+ libvlc_media_player_set_media(m_vlcMediaPlayer, mediaDescriptor);
+ }
- emit mediaChanged(file);
+ emit mediaChanged(m_currentMedia, m_currentContext);
}
void NPlaybackEngineVlc::setVolume(qreal volume)
{
- libvlc_audio_set_volume(m_mediaPlayer, qRound(qBound(0.0, volume, 1.0) * 100 / 2));
+ libvlc_audio_set_volume(m_vlcMediaPlayer, qRound(qBound(0.0, volume, 1.0) * 100 / 2));
}
qreal NPlaybackEngineVlc::volume() const
{
- return libvlc_audio_get_volume(m_mediaPlayer) / (qreal)100 * 2;
+ return libvlc_audio_get_volume(m_vlcMediaPlayer) / (qreal)100 * 2;
}
void NPlaybackEngineVlc::setPosition(qreal pos)
@@ -125,7 +131,7 @@ void NPlaybackEngineVlc::setPosition(qreal pos)
return;
}
- libvlc_media_player_set_position(m_mediaPlayer, qBound(0.0, pos, 1.0));
+ libvlc_media_player_set_position(m_vlcMediaPlayer, qBound(0.0, pos, 1.0));
}
qreal NPlaybackEngineVlc::position() const
@@ -134,16 +140,18 @@ qreal NPlaybackEngineVlc::position() const
return -1;
}
- return libvlc_media_player_get_position(m_mediaPlayer);
+ return libvlc_media_player_get_position(m_vlcMediaPlayer);
}
void NPlaybackEngineVlc::jump(qint64 msec)
{
- if (!hasMedia() || !libvlc_media_player_is_seekable(m_mediaPlayer))
+ if (!hasMedia() || !libvlc_media_player_is_seekable(m_vlcMediaPlayer)) {
return;
+ }
- qint64 posMsec = qBound(0LL, libvlc_media_player_get_time(m_mediaPlayer) + msec, durationMsec());
- libvlc_media_player_set_time(m_mediaPlayer, posMsec);
+ qint64 posMsec = qBound(0LL, libvlc_media_player_get_time(m_vlcMediaPlayer) + msec,
+ durationMsec());
+ libvlc_media_player_set_time(m_vlcMediaPlayer, posMsec);
}
qint64 NPlaybackEngineVlc::durationMsec() const
@@ -152,7 +160,7 @@ qint64 NPlaybackEngineVlc::durationMsec() const
return -1;
}
- return libvlc_media_player_get_length(m_mediaPlayer);
+ return libvlc_media_player_get_length(m_vlcMediaPlayer);
}
void NPlaybackEngineVlc::play()
@@ -161,8 +169,8 @@ void NPlaybackEngineVlc::play()
return;
}
- if (!libvlc_media_player_is_playing(m_mediaPlayer)) {
- libvlc_media_player_play(m_mediaPlayer);
+ if (!libvlc_media_player_is_playing(m_vlcMediaPlayer)) {
+ libvlc_media_player_play(m_vlcMediaPlayer);
}
}
@@ -172,7 +180,7 @@ void NPlaybackEngineVlc::pause()
return;
}
- libvlc_media_player_set_pause(m_mediaPlayer, true);
+ libvlc_media_player_set_pause(m_vlcMediaPlayer, true);
}
void NPlaybackEngineVlc::stop()
@@ -181,48 +189,53 @@ void NPlaybackEngineVlc::stop()
return;
}
- libvlc_media_player_stop(m_mediaPlayer);
+ libvlc_media_player_stop(m_vlcMediaPlayer);
}
bool NPlaybackEngineVlc::hasMedia() const
{
- libvlc_media_t *media = libvlc_media_player_get_media(m_mediaPlayer);
+ libvlc_media_t *media = libvlc_media_player_get_media(m_vlcMediaPlayer);
return (media != NULL);
}
QString NPlaybackEngineVlc::currentMedia() const
{
- libvlc_media_t *media = libvlc_media_player_get_media(m_mediaPlayer);
- if (media != NULL)
+ libvlc_media_t *media = libvlc_media_player_get_media(m_vlcMediaPlayer);
+ if (media) {
return QUrl(QUrl::fromPercentEncoding(libvlc_media_get_mrl(media))).toLocalFile();
+ }
return QString();
}
+N::PlaybackState NPlaybackEngineVlc::state() const
+{
+ return fromVlcState(m_vlcState);
+}
+
void NPlaybackEngineVlc::checkStatus()
{
qreal pos = position();
- if (m_oldPosition != pos) {
- m_oldPosition = pos;
+ if (m_position != pos) {
+ m_position = pos;
emit positionChanged(pos);
}
qreal vol = volume();
- if (m_oldVolume != vol) {
- m_oldVolume = vol;
+ if (m_volume != vol) {
+ m_volume = vol;
emit volumeChanged(vol);
}
- libvlc_state_t vlcState = libvlc_media_player_get_state(m_mediaPlayer);
- N::PlaybackState state = fromVlcState(vlcState);
- if (m_oldState != state) {
- emit stateChanged(state);
- m_oldState = state;
+ libvlc_state_t vlcState = libvlc_media_player_get_state(m_vlcMediaPlayer);
+ if (m_vlcState != vlcState) {
+ m_vlcState = vlcState;
+ emit stateChanged(fromVlcState(m_vlcState));
}
- emit tick(libvlc_media_player_get_time(m_mediaPlayer));
+ emit tick(libvlc_media_player_get_time(m_vlcMediaPlayer));
}
void NPlaybackEngineVlc::_emitFinished()
{
- emit finished();
+ emit mediaFinished(m_currentMedia, m_currentContext);
}
diff --git a/src/plugins/pluginVlc/playbackEngineVlc.h b/src/plugins/pluginVlc/playbackEngineVlc.h
index 083d099..3932c7d 100644
--- a/src/plugins/pluginVlc/playbackEngineVlc.h
+++ b/src/plugins/pluginVlc/playbackEngineVlc.h
@@ -32,14 +32,15 @@ class NPlaybackEngineVlc : public NPlaybackEngineInterface, public NPlugin
private:
libvlc_instance_t *m_vlcInstance;
- libvlc_media_player_t *m_mediaPlayer;
- libvlc_event_manager_t *m_eventManager;
+ libvlc_media_player_t *m_vlcMediaPlayer;
+ libvlc_event_manager_t *m_vlcEventManager;
QTimer *m_timer;
- qreal m_oldVolume;
- qreal m_oldPosition;
- N::PlaybackState m_oldState;
+ qreal m_volume;
+ qreal m_position;
+ libvlc_state_t m_vlcState;
QString m_currentMedia;
+ int m_currentContext;
public:
NPlaybackEngineVlc(QObject *parent = NULL) : NPlaybackEngineInterface(parent) {}
@@ -50,14 +51,14 @@ public:
Q_INVOKABLE bool hasMedia() const;
Q_INVOKABLE QString currentMedia() const;
- Q_INVOKABLE N::PlaybackState state() const { return m_oldState; }
+ Q_INVOKABLE N::PlaybackState state() const;
Q_INVOKABLE qreal volume() const;
Q_INVOKABLE qreal position() const;
Q_INVOKABLE qint64 durationMsec() const;
public slots:
- Q_INVOKABLE void setMedia(const QString &file);
+ Q_INVOKABLE void setMedia(const QString &file, int context);
Q_INVOKABLE void setVolume(qreal volume);
Q_INVOKABLE void setPosition(qreal pos);
Q_INVOKABLE void jump(qint64 msec);
@@ -74,10 +75,10 @@ private slots:
signals:
void positionChanged(qreal pos);
void volumeChanged(qreal volume);
- void message(N::MessageIcon icon, const QString &title, const QString &msg);
- void mediaChanged(const QString &file);
- void finished();
- void failed();
+ void message(N::MessageIcon icon, const QString &file, const QString &msg);
+ void mediaChanged(const QString &file, int context);
+ void mediaFinished(const QString &file, int context);
+ void mediaFailed(const QString &file, int context);
void stateChanged(N::PlaybackState state);
void tick(qint64 msec);
};
--
2.35.3