diff options
| author | Tomas Åkesson <tomas@entropic.se> | 2023-03-25 19:20:38 +0100 |
|---|---|---|
| committer | Felix Queißner <felix@ib-queissner.de> | 2023-03-26 01:01:13 +0100 |
| commit | 84c11ed7669e665863460384cc78a5ed9341552b (patch) | |
| tree | e007d94b231be27c00040d71014da142cf64f57b /src/widgets/mediaplayer.cpp | |
| parent | a63178f48fe23b0de779ea1988e72e4b128fcb1a (diff) | |
| download | kristall-84c11ed7669e665863460384cc78a5ed9341552b.tar.gz | |
Fix media player stuttering
Only call setPosition() on the QMediaPlayer object when the user has manually
dragged the slider position slider.
Otherwise the slider and player will call each other, probably causing a
feedback loop which causes stuttering.
Diffstat (limited to 'src/widgets/mediaplayer.cpp')
| -rw-r--r-- | src/widgets/mediaplayer.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/widgets/mediaplayer.cpp b/src/widgets/mediaplayer.cpp index 74551ca..bb0db0b 100644 --- a/src/widgets/mediaplayer.cpp +++ b/src/widgets/mediaplayer.cpp @@ -18,7 +18,8 @@ MediaPlayer::MediaPlayer(QWidget *parent) : QWidget(parent), ui(new Ui::MediaPlayer), media_stream(), - player() + player(), + manual_seek(false) { ui->setupUi(this); @@ -51,7 +52,9 @@ MediaPlayer::MediaPlayer(QWidget *parent) : connect(&this->player, &QMediaPlayer::positionChanged, this, &MediaPlayer::on_media_positionChanged); - connect(this->ui->media_progress, &QSlider::valueChanged, &this->player, &QMediaPlayer::setPosition); + connect(this->ui->media_progress, &QSlider::valueChanged, this, &MediaPlayer::on_seekChanged); + connect(this->ui->media_progress, &QSlider::sliderPressed, this, &MediaPlayer::on_seekPressed); + connect(this->ui->media_progress, &QSlider::sliderReleased, this, &MediaPlayer::on_seekReleased); } MediaPlayer::~MediaPlayer() @@ -132,3 +135,20 @@ void MediaPlayer::on_media_playbackChanged(QMediaPlayer::PlaybackState status) ); } #endif + +void MediaPlayer::on_seekChanged(qint64 pos) +{ + if (this->manual_seek) { + player.setPosition(pos); + } +} + +void MediaPlayer::on_seekPressed() +{ + this->manual_seek = true; +} + +void MediaPlayer::on_seekReleased() +{ + this->manual_seek = false; +} |
