If we don't know the length of a song from the metadata, get it from the pipeline which has the real length. Fixes #2818 when the length isn't in the podcast metadata.
This commit is contained in:
parent
d99f4032b3
commit
162b2efbb0
@ -192,15 +192,21 @@ void GstEngine::ReloadSettings() {
|
|||||||
qint64 GstEngine::position_nanosec() const {
|
qint64 GstEngine::position_nanosec() const {
|
||||||
if (!current_pipeline_) return 0;
|
if (!current_pipeline_) return 0;
|
||||||
|
|
||||||
qint64 result = current_pipeline_->position() - beginning_nanosec_;
|
const qint64 result = current_pipeline_->position() - beginning_nanosec_;
|
||||||
return qint64(qMax(0ll, result));
|
return qint64(qMax(0ll, result));
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 GstEngine::length_nanosec() const {
|
qint64 GstEngine::length_nanosec() const {
|
||||||
if (!current_pipeline_) return 0;
|
if (!current_pipeline_) return 0;
|
||||||
|
|
||||||
qint64 result = end_nanosec_ - beginning_nanosec_;
|
const qint64 result = end_nanosec_ - beginning_nanosec_;
|
||||||
return qint64(qMax(0ll, result));
|
|
||||||
|
if (result > 0) {
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
// Get the length from the pipeline if we don't know.
|
||||||
|
return current_pipeline_->length();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Engine::State GstEngine::state() const {
|
Engine::State GstEngine::state() const {
|
||||||
|
@ -1280,7 +1280,7 @@ void MainWindow::UpdateTrackPosition() {
|
|||||||
PlaylistItemPtr item(app_->player()->GetCurrentItem());
|
PlaylistItemPtr item(app_->player()->GetCurrentItem());
|
||||||
const int position = std::floor(
|
const int position = std::floor(
|
||||||
float(app_->player()->engine()->position_nanosec()) / kNsecPerSec + 0.5);
|
float(app_->player()->engine()->position_nanosec()) / kNsecPerSec + 0.5);
|
||||||
const int length = item->Metadata().length_nanosec() / kNsecPerSec;
|
const int length = app_->player()->engine()->length_nanosec() / kNsecPerSec;
|
||||||
const int scrobble_point = playlist->scrobble_point_nanosec() / kNsecPerSec;
|
const int scrobble_point = playlist->scrobble_point_nanosec() / kNsecPerSec;
|
||||||
|
|
||||||
if (length <= 0) {
|
if (length <= 0) {
|
||||||
@ -1339,7 +1339,8 @@ void MainWindow::UpdateTrackSliderPosition() {
|
|||||||
|
|
||||||
const int slider_position = std::floor(
|
const int slider_position = std::floor(
|
||||||
float(app_->player()->engine()->position_nanosec()) / kNsecPerMsec);
|
float(app_->player()->engine()->position_nanosec()) / kNsecPerMsec);
|
||||||
const int slider_length = item->Metadata().length_nanosec() / kNsecPerMsec;
|
const int slider_length =
|
||||||
|
app_->player()->engine()->length_nanosec() / kNsecPerMsec;
|
||||||
|
|
||||||
// Update the slider
|
// Update the slider
|
||||||
ui_->track_slider->SetValue(slider_position, slider_length);
|
ui_->track_slider->SetValue(slider_position, slider_length);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user