Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
4912e62d by Fatih Uzunoglu at 2026-05-08T03:42:41+00:00
qt: handle if provider is destroyed in `TextureProviderObserver`

This is very unlikely, but still better to have it.

- - - - -
b40fef60 by Fatih Uzunoglu at 2026-05-08T03:42:41+00:00
qt: add note regarding source texture provider in `TextureProviderIndirection`

- - - - -


3 changed files:

- modules/gui/qt/util/textureproviderindirection.hpp
- modules/gui/qt/util/textureproviderobserver.cpp
- modules/gui/qt/util/textureproviderobserver.hpp


Changes:

=====================================
modules/gui/qt/util/textureproviderindirection.hpp
=====================================
@@ -57,6 +57,8 @@ class TextureProviderIndirection : public QQuickItem
 {
     Q_OBJECT
 
+    // NOTE: source must be a texture provider item.
+    // NOTE: If source's texture provider changes, it is required to re-set 
the property.
     Q_PROPERTY(const QQuickItem* source MEMBER m_source NOTIFY sourceChanged 
FINAL)
     // NOTE: Although this is named as `textureSubRect`, it is allowed to 
provide a larger size than
     //       the texture size. In that case, the texture's wrap mode is going 
to be relevant, provided


=====================================
modules/gui/qt/util/textureproviderobserver.cpp
=====================================
@@ -129,6 +129,14 @@ void TextureProviderObserver::setSource(const QQuickItem 
*source, bool enforce)
 
                 connect(m_provider, &QSGTextureProvider::textureChanged, this, 
&TextureProviderObserver::updateProperties, Qt::DirectConnection);
 
+                // `QQuickItem` does not signal if it would have a new texture 
provider, so we simply set the source to null instead.
+                // We probably don't need to do the same for `m_source`, 
because if it is destroyed, the property should be updated
+                // instead, which in QML side is assumed to be done 
implicitly. Note that this is unlikely and no item does that,
+                // but it is still better to have this:
+                connect(m_provider, &QObject::destroyed, this, [this]() {
+                    setSource(nullptr); // This also implicitly calls 
`resetProperties()`.
+                });
+
                 updateProperties();
             }, static_cast<Qt::ConnectionType>(Qt::SingleShotConnection | 
Qt::DirectConnection));
         };


=====================================
modules/gui/qt/util/textureproviderobserver.hpp
=====================================
@@ -33,6 +33,7 @@ class TextureProviderObserver : public QObject
     Q_OBJECT
 
     // NOTE: source must be a texture provider item.
+    // NOTE: If source's texture provider changes, it is required to re-set 
the property.
     Q_PROPERTY(const QQuickItem* source MEMBER m_source WRITE setSource NOTIFY 
sourceChanged FINAL)
 
     // WARNING: Texture properties are updated in the rendering thread.



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/32d35ba1caf94055b98465555d591abe6bfb4390...b40fef60bb042165f96d48be67f476cbf99c84a4

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/32d35ba1caf94055b98465555d591abe6bfb4390...b40fef60bb042165f96d48be67f476cbf99c84a4
You're receiving this email because of your account on code.videolan.org.


_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to