aboutsummaryrefslogtreecommitdiff
path: root/src/mediaplayer.cpp
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-08 11:02:39 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-08 11:02:39 +0200
commit67af296c10de639c6d2391ae4608ec5c307549d2 (patch)
treebd8fbbc3b7304b0c0eb585c0e9049376296c3f31 /src/mediaplayer.cpp
parent7a4d3771bc24cf66d77d9bf32d26a3eb9d8489f3 (diff)
downloadkristall-67af296c10de639c6d2391ae4608ec5c307549d2.tar.gz
Adds support for multimedia modules: Now can pla audio/ (tested) and video/ (untested).
Diffstat (limited to 'src/mediaplayer.cpp')
-rw-r--r--src/mediaplayer.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/mediaplayer.cpp b/src/mediaplayer.cpp
new file mode 100644
index 0000000..6b6c67d
--- /dev/null
+++ b/src/mediaplayer.cpp
@@ -0,0 +1,72 @@
+#include "mediaplayer.hpp"
+#include "ui_mediaplayer.h"
+
+#include <QMediaContent>
+#include <QToolButton>
+#include <QTime>
+
+MediaPlayer::MediaPlayer(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::MediaPlayer),
+ media_stream(),
+ player()
+{
+ ui->setupUi(this);
+
+ this->player.setVideoOutput(this->ui->video_out);
+
+ connect(&this->player, &QMediaPlayer::durationChanged, this->ui->media_progress, &QSlider::setMaximum);
+ connect(&this->player, &QMediaPlayer::positionChanged, this->ui->media_progress, &QSlider::setValue);
+
+ connect(&this->player, &QMediaPlayer::audioAvailableChanged, this->ui->mute_button, &QToolButton::setEnabled);
+ connect(&this->player, &QMediaPlayer::videoAvailableChanged, this->ui->video_out, &QVideoWidget::setVisible);
+
+ connect(&this->player, &QMediaPlayer::mediaStatusChanged, [](QMediaPlayer::MediaStatus status) {
+ qDebug() << "media status changed" << status;
+ });
+
+ connect(&this->player, &QMediaPlayer::positionChanged, this, &MediaPlayer::on_media_positionChanged);
+
+ connect(this->ui->media_progress, &QSlider::valueChanged, &this->player, &QMediaPlayer::setPosition);
+}
+
+MediaPlayer::~MediaPlayer()
+{
+ delete ui;
+}
+
+void MediaPlayer::setMedia(QByteArray const & data, QUrl const & ref_url, QString const & mime)
+{
+ this->player.stop();
+
+ this->mime = mime;
+
+ this->media_stream.close();
+ this->media_stream.setData(data); // = QBuffer { &this->backing_buffer };
+ this->media_stream.open(QIODevice::ReadOnly);
+
+ QMediaContent content { ref_url };
+
+ this->player.setMedia(content, &this->media_stream);
+}
+
+void MediaPlayer::on_playpause_button_clicked()
+{
+ if(this->player.state() != QMediaPlayer::PlayingState) {
+ this->player.play();
+ } else {
+ this->player.pause();
+ }
+}
+
+void MediaPlayer::on_mute_button_clicked(bool checked)
+{
+ this->player.setMuted(checked);
+}
+
+void MediaPlayer::on_media_positionChanged(qint64 pos)
+{
+ auto time = QTime::fromMSecsSinceStartOfDay(pos);
+
+ this->ui->media_position->setText(time.toString());
+}