From 84c11ed7669e665863460384cc78a5ed9341552b Mon Sep 17 00:00:00 2001 From: Tomas Ã…kesson Date: Sat, 25 Mar 2023 19:20:38 +0100 Subject: 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. --- src/widgets/mediaplayer.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src/widgets/mediaplayer.cpp') 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; +} -- cgit v1.2.3