[vlc-commits] [Git][videolan/vlc][master] 4 commits: qt: don't return invalid time/duration as subSecond/subHour
Felix Paul Kühne (@fkuehne)
gitlab at videolan.org
Sat Nov 29 07:38:27 UTC 2025
Felix Paul Kühne pushed to branch master at VideoLAN / VLC
Commits:
f65deb4f by Pierre Lamot at 2025-11-29T08:12:40+01:00
qt: don't return invalid time/duration as subSecond/subHour
- - - - -
a25dc910 by Pierre Lamot at 2025-11-29T08:12:40+01:00
qt: distinguish invalid durations
- - - - -
556b217f by Pierre Lamot at 2025-11-29T08:12:40+01:00
qt: add arithmetic operators to VLCDuration
- - - - -
310b6683 by Pierre Lamot at 2025-11-29T08:12:40+01:00
qt: store playlist item duration as VLCDuration
- - - - -
8 changed files:
- modules/gui/qt/Makefile.am
- modules/gui/qt/meson.build
- modules/gui/qt/playlist/playlist_item.cpp
- modules/gui/qt/playlist/playlist_item.hpp
- modules/gui/qt/playlist/playlist_model.cpp
- modules/gui/qt/playlist/playlist_model_p.hpp
- modules/gui/qt/util/vlctick.cpp
- modules/gui/qt/util/vlctick.hpp
Changes:
=====================================
modules/gui/qt/Makefile.am
=====================================
@@ -1623,6 +1623,7 @@ test_ml_model_SOURCES = \
tests/test_ml_model.cpp \
util/base_model.hpp util/base_model_p.hpp util/base_model.cpp \
util/listcache.hpp \
+ util/vlctick.cpp util/vlctick.hpp \
util/locallistcacheloader.hpp \
medialibrary/mlqmltypes.hpp \
medialibrary/mlbasemodel.hpp medialibrary/mlbasemodel.cpp \
@@ -1636,6 +1637,7 @@ nodist_test_ml_model_SOURCES = \
util/base_model.moc.cpp \
util/listcache.moc.cpp \
util/locallistcacheloader.moc.cpp \
+ util/vlctick.moc.cpp \
medialibrary/mlqmltypes.moc.cpp \
medialibrary/mlbasemodel.moc.cpp \
medialibrary/medialib.moc.cpp \
=====================================
modules/gui/qt/meson.build
=====================================
@@ -1195,6 +1195,7 @@ if qt6_dep.found()
'tests/test_ml_model.cpp',
'tests/vlc_stub_modules.cpp',
'util/base_model.cpp',
+ 'util/vlctick.cpp',
'medialibrary/mlbasemodel.cpp',
'medialibrary/medialib.cpp',
'medialibrary/mlthreadpool.cpp',
@@ -1206,15 +1207,16 @@ if qt6_dep.found()
),
'moc_headers': files(
'tests/vlc_stub_modules.cpp',
- 'util/base_model.hpp',
- 'util/listcache.hpp',
- 'util/locallistcacheloader.hpp',
- 'medialibrary/mlqmltypes.hpp',
- 'medialibrary/mlbasemodel.hpp',
- 'medialibrary/medialib.hpp',
- 'medialibrary/mlthreadpool.hpp',
- 'playlist/playlist_controller.hpp',
- 'playlist/playlist_item.hpp',
+ 'util/base_model.hpp',
+ 'util/listcache.hpp',
+ 'util/locallistcacheloader.hpp',
+ 'util/vlctick.hpp',
+ 'medialibrary/mlqmltypes.hpp',
+ 'medialibrary/mlbasemodel.hpp',
+ 'medialibrary/medialib.hpp',
+ 'medialibrary/mlthreadpool.hpp',
+ 'playlist/playlist_controller.hpp',
+ 'playlist/playlist_item.hpp',
),
'suite': ['qt'],
'include_directories' : qt_include_dir,
=====================================
modules/gui/qt/playlist/playlist_item.cpp
=====================================
@@ -16,6 +16,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "playlist_item.hpp"
+#include "util/vlctick.hpp"
#include <vlc_input_item.h>
//namespace vlc {
@@ -61,7 +62,7 @@ QUrl PlaylistItem::getArtwork() const
return d->artwork;
}
-vlc_tick_t PlaylistItem::getDuration() const
+VLCDuration PlaylistItem::getDuration() const
{
return d->duration;
}
@@ -75,7 +76,11 @@ void PlaylistItem::sync() {
input_item_t *media = inputItem();
assert(media);
vlc_mutex_locker locker(&media->lock);
- d->duration = media->i_duration;
+ d->duration =
+ (media->i_duration == INPUT_DURATION_INDEFINITE
+ || media->i_duration == INPUT_DURATION_UNSET)
+ ? VLCDuration{}
+ : VLCDuration{media->i_duration};
d->url = media->psz_uri;
if (media->p_meta) {
=====================================
modules/gui/qt/playlist/playlist_item.hpp
=====================================
@@ -30,6 +30,8 @@
#include <QUrl>
#include <QMetaType>
+#include "util/vlctick.hpp"
+
//namespace vlc {
// namespace playlist {
@@ -53,7 +55,7 @@ public:
Q_PROPERTY(QString artist READ getArtist CONSTANT FINAL)
Q_PROPERTY(QString album READ getAlbum CONSTANT FINAL)
Q_PROPERTY(QUrl artwork READ getArtwork CONSTANT FINAL)
- Q_PROPERTY(vlc_tick_t duration READ getDuration CONSTANT FINAL)
+ Q_PROPERTY(VLCDuration duration READ getDuration CONSTANT FINAL)
Q_PROPERTY(QUrl url READ getUrl CONSTANT FINAL)
PlaylistItem(vlc_playlist_item_t *item = nullptr);
@@ -84,7 +86,7 @@ public:
QUrl getArtwork() const;
- vlc_tick_t getDuration() const;
+ VLCDuration getDuration() const;
QUrl getUrl() const;
@@ -103,7 +105,7 @@ private:
QString album;
QUrl artwork;
- vlc_tick_t duration;
+ VLCDuration duration;
QUrl url;
};
=====================================
modules/gui/qt/playlist/playlist_model.cpp
=====================================
@@ -178,7 +178,7 @@ void PlaylistListModelPrivate::onItemsReset(const QVector<PlaylistItem>&& newCon
m_items = newContent;
q->endResetModel();
- m_duration = VLC_TICK_FROM_SEC(0);
+ m_duration = VLCDuration();
if (m_items.size())
{
for(const auto& i : m_items)
@@ -242,6 +242,14 @@ void PlaylistListModelPrivate::onItemsRemoved(size_t index, size_t count)
m_items.remove(index, count);
q->endRemoveRows();
+ //maybe we removed the only valid elements
+ if (m_duration.toVLCTick() == 0 && m_duration.valid())
+ {
+ m_duration = VLCDuration();
+ for(const auto& i : m_items)
+ m_duration += i.getDuration();
+ }
+
emit q->countChanged(m_items.size());
}
@@ -303,7 +311,7 @@ VLCDuration
PlaylistListModel::getDuration() const
{
Q_D(const PlaylistListModel);
- return VLCDuration(d->m_duration);
+ return d->m_duration;
}
PlaylistItem
=====================================
modules/gui/qt/playlist/playlist_model_p.hpp
=====================================
@@ -66,7 +66,7 @@ public:
QVector<PlaylistItem> m_items;
ssize_t m_current = -1;
- vlc_tick_t m_duration = 0;
+ VLCDuration m_duration = VLCDuration{};
};
} //namespace playlist
=====================================
modules/gui/qt/util/vlctick.cpp
=====================================
@@ -36,12 +36,12 @@ VLCTick::VLCTick(vlc_tick_t ticks)
bool VLCTick::isSubSecond() const
{
- return asMilliseconds() < 1000;
+ return valid() && asMilliseconds() < 1000;
}
bool VLCTick::isSubHour() const
{
- return asSeconds() < 3600;
+ return valid() && asSeconds() < 3600;
}
QString VLCTick::formatHMS(int formatFlags) const
@@ -168,22 +168,28 @@ int VLCTick::toMilliseconds() const
VLCDuration::VLCDuration()
: VLCTick(0)
+ , m_valid(false)
{
+
}
VLCDuration::VLCDuration(vlc_tick_t t)
: VLCTick(t)
+ , m_valid(true)
{
}
VLCDuration VLCDuration::operator*(double f) const
{
- return VLCDuration(m_ticks * f);
+ if (m_valid)
+ return VLCDuration(m_ticks * f);
+ else
+ return {};
}
bool VLCDuration::operator==(const VLCDuration &rhs) const
{
- return m_ticks == rhs.m_ticks;
+ return m_valid == rhs.m_valid && m_ticks == rhs.m_ticks;
}
bool VLCDuration::operator>(const VLCDuration &rhs) const
@@ -191,6 +197,34 @@ bool VLCDuration::operator>(const VLCDuration &rhs) const
return m_ticks > rhs.m_ticks;
}
+VLCDuration VLCDuration::operator+(const VLCDuration &rhs) const
+{
+ if (m_valid || rhs.m_valid)
+ return VLCDuration{m_ticks + rhs.m_ticks};
+ return VLCDuration{};
+}
+
+VLCDuration& VLCDuration::operator+=(const VLCDuration &rhs)
+{
+ m_valid |= rhs.m_valid;
+ m_ticks += rhs.m_ticks;
+ return *this;
+}
+
+VLCDuration VLCDuration::operator-(const VLCDuration &rhs) const
+{
+ if (m_valid || rhs.m_valid)
+ return VLCDuration{m_ticks + rhs.m_ticks};
+ return VLCDuration{};
+}
+
+VLCDuration& VLCDuration::operator-=(const VLCDuration &rhs)
+{
+ m_valid |= rhs.m_valid;
+ m_ticks -= rhs.m_ticks;
+ return *this;
+}
+
double VLCDuration::toSecf() const
{
return secf_from_vlc_tick(m_ticks);
@@ -198,7 +232,10 @@ double VLCDuration::toSecf() const
VLCDuration VLCDuration::scale(float scalar) const
{
- return VLCDuration(m_ticks * scalar);
+ if (m_valid)
+ return VLCDuration(m_ticks * scalar);
+ else
+ return {};
}
VLCDuration VLCDuration::fromMS(int64_t ms)
@@ -218,7 +255,7 @@ int64_t VLCDuration::asSeconds() const
bool VLCDuration::valid() const
{
- return true;
+ return m_valid;
}
///// VLCTime
=====================================
modules/gui/qt/util/vlctick.hpp
=====================================
@@ -104,6 +104,10 @@ public:
VLCDuration(vlc_tick_t);
VLCDuration operator*(double) const;
+ VLCDuration operator+(const VLCDuration &) const;
+ VLCDuration& operator+=(const VLCDuration &);
+ VLCDuration operator-(const VLCDuration &) const;
+ VLCDuration& operator-=(const VLCDuration &);
bool operator==(const VLCDuration &) const;
bool operator>(const VLCDuration &) const;
@@ -116,6 +120,9 @@ public:
int64_t asMilliseconds() const override;
int64_t asSeconds() const override;
bool valid() const override;
+
+private:
+ bool m_valid;
};
class VLCTime : public VLCTick
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/342abe8c6794332b4ae3440f4bd2428d760ded74...310b6683039d62a3577f549196de0fdd1ecb9513
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/342abe8c6794332b4ae3440f4bd2428d760ded74...310b6683039d62a3577f549196de0fdd1ecb9513
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list