diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-08 11:02:39 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-08 11:02:39 +0200 |
| commit | 67af296c10de639c6d2391ae4608ec5c307549d2 (patch) | |
| tree | bd8fbbc3b7304b0c0eb585c0e9049376296c3f31 /src/mediaplayer.cpp | |
| parent | 7a4d3771bc24cf66d77d9bf32d26a3eb9d8489f3 (diff) | |
| download | kristall-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.cpp | 72 |
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()); +} |
