Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 42e768b5 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

UI: Seek in the file using the slider

parent b308ddd4
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!15Video playback with mpv
......@@ -13,6 +13,10 @@
#include <QJsonDocument>
#include <QtGlobal>
#include <type_traits>
#include <chrono>
// Use chrono instead of std::chrono...
namespace chrono = std::chrono;
// Prety define for OpenMP's parallel for loop with indentation not fucked up
// by clang-format.
......
......@@ -197,6 +197,7 @@ MpvContainer::handleMpvEventCommandReply(const AsyncCmdType type) noexcept
sid = getAssSid();
qDebug() << "Load ASS file with id:" << sid;
break;
case AsyncCmdType::UnloadAss:
sid = getAssSid();
qDebug().nospace() << "Unload Ass, rc = " << sid;
......@@ -212,6 +213,10 @@ MpvContainer::handleMpvEventCommandReply(const AsyncCmdType type) noexcept
unloadAssFile();
break;
case AsyncCmdType::SeekTime:
qDebug() << "MPV - CMD: Seeked playback";
break;
case AsyncCmdType::TogglePlayback:
qDebug() << "MPV - CMD: Playback was toggled";
break;
......@@ -298,6 +303,12 @@ MpvContainer::asyncCommand(const AsyncCmdType cmd,
void
MpvContainer::unloadAssFile() noexcept
{
// XXX: Debug thing for now
asyncCommand(AsyncCmdType::UnloadAss, { "sub-remove", nullptr });
}
void
MpvContainer::seekInFile(const chrono::seconds time) noexcept
{
QByteArray seconds = QString::number(time.count()).toUtf8();
asyncCommand(AsyncCmdType::SeekTime, { "seek", seconds.data(), "absolute", nullptr });
}
......@@ -26,6 +26,7 @@ class MpvContainer final : public QWidget {
LoadAssFile,
ReloadAss,
UnloadAss,
SeekTime,
TogglePlayback,
};
......@@ -44,6 +45,8 @@ public:
void loadAssFile(const QString &) noexcept;
void reloadAssFile() noexcept;
void seekInFile(const chrono::seconds time) noexcept;
// Register a callback for time change, don't use Qt's signals for that.
// Here the function will likely be moved if necessary (I hope...).
void registerMpvTimeCallback(std::function<void(double)>) noexcept;
......
......@@ -31,9 +31,15 @@ MpvControls::MpvControls(MpvContainer *passedContainer, QWidget *parent) noexcep
}
});
connect(progressBar, &QAbstractSlider::valueChanged, this, [this](int value) noexcept -> void {
qDebug() << "Slider set to" << value << "max was" << timeDuration.count();
timePosition = chrono::seconds(value);
connect(progressBar, &QAbstractSlider::sliderMoved, this, [this](int value) noexcept -> void {
// FIXME: Detect if it was done by the registered time callback...
askedSliderPosition = value;
});
connect(progressBar, &QAbstractSlider::sliderReleased, this, [this]() noexcept -> void {
qDebug() << "Slider set to" << askedSliderPosition << "max was" << timeDuration.count();
timePosition = chrono::seconds(askedSliderPosition);
mpv->seekInFile(timePosition);
});
connect(togglePlaybackButton, &QAbstractButton::clicked, mpv, &MpvContainer::mpvTogglePlayback);
......
......@@ -4,8 +4,7 @@
#error "This is a C++ header"
#endif
#include <chrono>
namespace chrono = std::chrono;
#include "../../Lib/Utils.hh"
namespace Vivy
{
......@@ -19,6 +18,7 @@ private:
MpvContainer *mpv{ nullptr };
chrono::seconds timeDuration;
chrono::seconds timePosition;
int askedSliderPosition{ 0 };
public:
explicit MpvControls(MpvContainer *mpv, QWidget *parent) noexcept;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter