Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package QMPlay2 for openSUSE:Factory checked 
in at 2023-10-22 21:02:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/QMPlay2 (Old)
 and      /work/SRC/openSUSE:Factory/.QMPlay2.new.1945 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "QMPlay2"

Sun Oct 22 21:02:35 2023 rev:79 rq:1119428 version:23.10.22

Changes:
--------
--- /work/SRC/openSUSE:Factory/QMPlay2/QMPlay2.changes  2023-09-06 
19:02:21.624471687 +0200
+++ /work/SRC/openSUSE:Factory/.QMPlay2.new.1945/QMPlay2.changes        
2023-10-22 21:02:55.063598182 +0200
@@ -1,0 +2,10 @@
+Sun Oct 22 11:35:39 UTC 2023 - Simon Vogl <[email protected]>
+
+- Update to version 23.10.22
+   * fix loading of Vulkan library in some Linux distributions,
+   * add Mesa 23.3.0 interlaced video workaround for VA-API,
+   * (re)store compact view on application launch,
+   * unescape HTML content in subtitles,
+   * yt-dlp fixes.
+
+-------------------------------------------------------------------

Old:
----
  QMPlay2-src-23.09.05.tar.xz

New:
----
  QMPlay2-src-23.10.22.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ QMPlay2.spec ++++++
--- /var/tmp/diff_new_pack.PqjupD/_old  2023-10-22 21:02:55.563616363 +0200
+++ /var/tmp/diff_new_pack.PqjupD/_new  2023-10-22 21:02:55.563616363 +0200
@@ -20,7 +20,7 @@
 %bcond_with qt6
 
 Name:           QMPlay2
-Version:        23.09.05
+Version:        23.10.22
 Release:        0
 Summary:        A Qt based media player, streamer and downloader
 License:        LGPL-3.0-or-later

++++++ QMPlay2-src-23.09.05.tar.xz -> QMPlay2-src-23.10.22.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QMPlay2-src-23.09.05/ChangeLog 
new/QMPlay2-src-23.10.22/ChangeLog
--- old/QMPlay2-src-23.09.05/ChangeLog  2023-09-05 19:28:53.000000000 +0200
+++ new/QMPlay2-src-23.10.22/ChangeLog  2023-10-21 21:16:34.000000000 +0200
@@ -1,3 +1,10 @@
+Changes in QMPlay2 23.10.22:
+    - fix loading of Vulkan library in some Linux distributions,
+    - add Mesa 23.3.0 interlaced video workaround for VA-API,
+    - (re)store compact view on application launch,
+    - unescape HTML content in subtitles,
+    - yt-dlp fixes,
+
 Changes in QMPlay2 23.09.05:
     - Wayland Vulkan crash fix for Qt <= 6.4,
     - RadioBrowser improvements and fixes,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QMPlay2-src-23.09.05/lang/uk.ts 
new/QMPlay2-src-23.10.22/lang/uk.ts
--- old/QMPlay2-src-23.09.05/lang/uk.ts 2023-09-03 13:58:58.000000000 +0200
+++ new/QMPlay2-src-23.10.22/lang/uk.ts 2023-10-10 11:23:50.000000000 +0200
@@ -574,7 +574,7 @@
     </message>
     <message>
         <source>unknown</source>
-        <translation type="unfinished"></translation>
+        <translation>невідомо</translation>
     </message>
 </context>
 <context>
@@ -1028,7 +1028,7 @@
     </message>
     <message>
         <source>Subtitles and tags encoding</source>
-        <translation type="unfinished"></translation>
+        <translation>Кодування субтитрів і 
тегів</translation>
     </message>
 </context>
 <context>
@@ -1867,7 +1867,7 @@
     </message>
     <message>
         <source>Allow HDR content for VP9 codec</source>
-        <translation type="unfinished"></translation>
+        <translation>Дозволити вміст HDR для кодека 
VP9</translation>
     </message>
 </context>
 <context>
@@ -2390,7 +2390,7 @@
     </message>
     <message>
         <source>Remember playback position for each playlist entry</source>
-        <translation type="unfinished"></translation>
+        <translation>Пам'ятати позицію відтворення 
для кожного запису зі списку</translation>
     </message>
 </context>
 <context>
@@ -2497,11 +2497,11 @@
     </message>
     <message>
         <source>&amp;Continue playback</source>
-        <translation type="unfinished"></translation>
+        <translation>&amp;Продовжити 
відтворення</translation>
     </message>
     <message>
         <source>Continue playing from the last position</source>
-        <translation type="unfinished"></translation>
+        <translation>Продовжити відтворення з 
останньої позиції</translation>
     </message>
 </context>
 <context>
@@ -2798,11 +2798,11 @@
     </message>
     <message>
         <source>Type the station name and press Enter</source>
-        <translation type="unfinished"></translation>
+        <translation>Введіть назву станції і 
натисніть Enter</translation>
     </message>
     <message>
         <source>Select a &quot;%1&quot; from the drop-down list</source>
-        <translation type="unfinished"></translation>
+        <translation>Виберіть &quot;%1&quot; зі спадного 
списку</translation>
     </message>
 </context>
 <context>
@@ -2825,7 +2825,7 @@
     </message>
     <message>
         <source>Clicks</source>
-        <translation type="unfinished"></translation>
+        <translation>Кліки</translation>
     </message>
 </context>
 <context>
@@ -3195,15 +3195,15 @@
     </message>
     <message>
         <source>Try to display HDR10 videos in HDR mode (experimental)</source>
-        <translation type="unfinished"></translation>
+        <translation>Спробувати переглянути відео 
HDR10 у режимі HDR (експериментально)</translation>
     </message>
     <message>
         <source>Low quality image scaling (nearest neighbor)</source>
-        <translation type="unfinished"></translation>
+        <translation>Низька якість масштабування 
зображення (nearest neighbor)</translation>
     </message>
     <message>
         <source>Useful for retro scaling. Can also be used for software Vulkan 
implementation to lower the CPU overhead.</source>
-        <translation type="unfinished"></translation>
+        <translation>Корисно для ретро 
масштабування. Також можна 
використовувати для програмної реалізації 
Vulkan для зменшення навантаження на 
ЦП.</translation>
     </message>
 </context>
 <context>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QMPlay2-src-23.09.05/src/gui/MainWidget.cpp 
new/QMPlay2-src-23.10.22/src/gui/MainWidget.cpp
--- old/QMPlay2-src-23.09.05/src/gui/MainWidget.cpp     2023-09-04 
20:52:36.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/gui/MainWidget.cpp     2023-10-16 
00:30:40.000000000 +0200
@@ -1149,7 +1149,7 @@
 }
 void MainWidget::toggleFullScreen()
 {
-    static bool visible, compact_view, tb_movable;
+    static bool visible, tb_movable;
 #ifndef Q_OS_ANDROID
     static bool maximized;
 #endif
@@ -1164,7 +1164,7 @@
     {
         visible = isVisible();
 
-        if ((compact_view = isCompactView))
+        if ((m_compactViewBeforeFullScreen = isCompactView))
             toggleCompactView();
 
 #ifndef Q_OS_ANDROID
@@ -1290,7 +1290,7 @@
 
         mainTB->setMovable(tb_movable);
 
-        if (compact_view)
+        if (m_compactViewBeforeFullScreen)
             toggleCompactView();
 
         playlistDock->scrollToCurrectItem();
@@ -1988,6 +1988,7 @@
 #ifndef Q_OS_MACOS
     settings.set("MainWidget/isVisible", isVisible());
 #endif
+    settings.set("MainWidget/IsCompactView", fullScreen ? 
m_compactViewBeforeFullScreen : isCompactView);
     if (tray)
         settings.set("TrayVisible", tray->isVisible());
     settings.set("VolumeL", volW->volumeL());
@@ -2051,6 +2052,8 @@
 #ifdef Q_OS_WIN
         setWindowsTaskBarFeatures();
 #endif
+        if (QMPlay2Core.getSettings().getBool("MainWidget/IsCompactView"))
+            menuBar->window->toggleCompactView->trigger();
         wasShow = true;
     }
     menuBar->window->toggleVisibility->setText(tr("&Hide"));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QMPlay2-src-23.09.05/src/gui/MainWidget.hpp 
new/QMPlay2-src-23.10.22/src/gui/MainWidget.hpp
--- old/QMPlay2-src-23.09.05/src/gui/MainWidget.hpp     2023-06-03 
00:07:26.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/gui/MainWidget.hpp     2023-10-14 
00:31:57.000000000 +0200
@@ -186,6 +186,7 @@
     SettingsWidget *settingsW;
     AboutWidget *aboutW;
     bool isCompactView, wasShow, fullScreen, seekSFocus, 
m_restoreWindowOnVideo = false;
+    bool m_compactViewBeforeFullScreen = false;
     bool m_loaded = false;
 
 #if !defined Q_OS_MACOS && !defined Q_OS_ANDROID
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/QMPlay2-src-23.09.05/src/modules/FFmpeg/FFDecVAAPI.cpp 
new/QMPlay2-src-23.10.22/src/modules/FFmpeg/FFDecVAAPI.cpp
--- old/QMPlay2-src-23.09.05/src/modules/FFmpeg/FFDecVAAPI.cpp  2023-08-18 
20:32:02.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/modules/FFmpeg/FFDecVAAPI.cpp  2023-10-15 
16:29:03.000000000 +0200
@@ -106,9 +106,11 @@
 {
     if (flush)
         maybeClearHwSurfaces();
-    m_vaapi->m_mutex.lock();
+    if (m_vaapi->m_mutex)
+        m_vaapi->m_mutex->lock();
     int ret = FFDecHWAccel::decodeVideo(encodedPacket, decoded, newPixFmt, 
flush, hurryUp);
-    m_vaapi->m_mutex.unlock();
+    if (m_vaapi->m_mutex)
+        m_vaapi->m_mutex->unlock();
     if (m_hasHWDecContext && ret > -1)
     {
         decoded.setOnDestroyFn([vaapi = m_vaapi] {
@@ -154,7 +156,7 @@
 
 #if defined(USE_OPENGL) || defined(USE_VULKAN)
     auto maybeResetVaapi = [this, codec] {
-        if (m_vaapi && m_vaapi->m_codecId != codec->id && 
m_vaapi->m_vendor.contains("Mesa Gallium") && m_vaapi->m_vendor.contains("AMD 
Radeon"))
+        if (m_vaapi && m_vaapi->m_codecId != codec->id && 
m_vaapi->m_isMesaRadeon && m_vaapi->m_driverVersion >= QVersionNumber(22, 0, 0))
             m_vaapi.reset();
     };
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QMPlay2-src-23.09.05/src/modules/FFmpeg/VAAPI.cpp 
new/QMPlay2-src-23.10.22/src/modules/FFmpeg/VAAPI.cpp
--- old/QMPlay2-src-23.09.05/src/modules/FFmpeg/VAAPI.cpp       2023-08-06 
00:06:25.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/modules/FFmpeg/VAAPI.cpp       2023-10-15 
16:44:55.000000000 +0200
@@ -35,6 +35,7 @@
 }
 
 #include <QGuiApplication>
+#include <QVersionNumber>
 #include <QFileInfo>
 #include <QDebug>
 #include <QDir>
@@ -140,6 +141,27 @@
     if (m_vendor.isEmpty())
         return false;
 
+    m_isMesaRadeon = m_vendor.contains("Mesa Gallium") && 
m_vendor.contains("AMD Radeon");
+    if (m_isMesaRadeon)
+    {
+        // Some issues discussed here: 
https://gitlab.freedesktop.org/mesa/mesa/-/issues/8740
+
+        const auto parts = m_vendor.simplified().split(" ");
+        for (auto &&part : parts)
+        {
+            const auto ver = QVersionNumber::fromString(part);
+            if (!ver.isNull())
+            {
+                m_driverVersion = ver;
+                break;
+            }
+        }
+        if (m_driverVersion >= QVersionNumber(22, 0, 0) && m_driverVersion < 
QVersionNumber(23, 3, 0))
+        {
+            m_mutex = std::make_unique<QMutex>();
+        }
+    }
+
     return true;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QMPlay2-src-23.09.05/src/modules/FFmpeg/VAAPI.hpp 
new/QMPlay2-src-23.10.22/src/modules/FFmpeg/VAAPI.hpp
--- old/QMPlay2-src-23.09.05/src/modules/FFmpeg/VAAPI.hpp       2023-05-24 
23:39:35.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/modules/FFmpeg/VAAPI.hpp       2023-10-15 
16:05:32.000000000 +0200
@@ -19,10 +19,13 @@
 #pragma once
 
 #include <QCoreApplication>
+#include <QVersionNumber>
 #include <QVector>
 #include <QMutex>
 #include <QHash>
 
+#include <memory>
+
 #include <va/va.h>
 #include <va/va_vpp.h>
 
@@ -65,6 +68,8 @@
     AVBufferRef *m_hwDeviceBufferRef = nullptr;
 
     QString m_vendor;
+    bool m_isMesaRadeon = false;
+    QVersionNumber m_driverVersion; // Used for Mesa Radeon workarounds
 
     bool ok = false;
 
@@ -75,7 +80,7 @@
 
     int m_codecId = 0;
 
-    QMutex m_mutex;
+    std::unique_ptr<QMutex> m_mutex;
 
     // Postprocessing
     VAProcDeinterlacingType vpp_deint_type = VAProcDeinterlacingNone;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/QMPlay2-src-23.09.05/src/modules/FFmpeg/VAAPIOpenGL.cpp 
new/QMPlay2-src-23.10.22/src/modules/FFmpeg/VAAPIOpenGL.cpp
--- old/QMPlay2-src-23.09.05/src/modules/FFmpeg/VAAPIOpenGL.cpp 2023-06-06 
22:05:47.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/modules/FFmpeg/VAAPIOpenGL.cpp 2023-10-15 
16:05:59.000000000 +0200
@@ -172,7 +172,8 @@
     auto &vaSurfaceDescr = m_surfaces[id];
     if (vaSurfaceDescr.fourcc == 0 && vaSurfaceDescr.num_objects == 0)
     {
-        m_vaapi->m_mutex.lock();
+        if (m_vaapi->m_mutex)
+            m_vaapi->m_mutex->lock();
         if (vaExportSurfaceHandle(
                 m_vaapi->VADisp,
                 id,
@@ -181,13 +182,15 @@
                 &vaSurfaceDescr
             ) != VA_STATUS_SUCCESS)
         {
-            m_vaapi->m_mutex.unlock();
+            if (m_vaapi->m_mutex)
+                m_vaapi->m_mutex->unlock();
             QMPlay2Core.logError("VA-API :: Unable to export surface handle");
             m_surfaces.erase(id);
             m_error = true;
             return false;
         }
-        m_vaapi->m_mutex.unlock();
+        if (m_vaapi->m_mutex)
+            m_vaapi->m_mutex->unlock();
     }
 
     auto eraseSurface = [&] {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/QMPlay2-src-23.09.05/src/modules/FFmpeg/VAAPIVulkan.cpp 
new/QMPlay2-src-23.10.22/src/modules/FFmpeg/VAAPIVulkan.cpp
--- old/QMPlay2-src-23.09.05/src/modules/FFmpeg/VAAPIVulkan.cpp 2023-08-06 
13:37:51.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/modules/FFmpeg/VAAPIVulkan.cpp 2023-10-15 
16:39:39.000000000 +0200
@@ -111,27 +111,32 @@
     if (!m_vaapi->filterVideo(frame, id, vaField))
         return;
 
+    VADRMPRIMESurfaceDescriptor vaSurfaceDescr = {};
+    MemoryObject::FdDescriptors fdDescriptors;
+    vector<vk::DeviceSize> offsets;
+    bool isLinear = false;
+    bool exported = false;
+
     auto &vkImage = m_images[id];
 
-    if (!vkImage)
+    if (!vkImage || (vaField != VA_FRAME_PICTURE && m_vaapi->m_isMesaRadeon && 
m_vaapi->m_driverVersion >= QVersionNumber(23, 3, 0)))
     {
-        VADRMPRIMESurfaceDescriptor vaSurfaceDescr = {};
-        m_vaapi->m_mutex.lock();
-        const bool exported = vaExportSurfaceHandle(
+        if (m_vaapi->m_mutex)
+            m_vaapi->m_mutex->lock();
+        exported = vaExportSurfaceHandle(
             m_vaapi->VADisp,
             id,
             VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2,
             VA_EXPORT_SURFACE_READ_ONLY | VA_EXPORT_SURFACE_SEPARATE_LAYERS,
             &vaSurfaceDescr
         ) == VA_STATUS_SUCCESS;
-        m_vaapi->m_mutex.unlock();
+        if (m_vaapi->m_mutex)
+            m_vaapi->m_mutex->unlock();
 
         if (exported)
         {
-            bool isLinear = false;
-
-            MemoryObject::FdDescriptors 
fdDescriptors(vaSurfaceDescr.num_objects);
-            vector<vk::DeviceSize> offsets(vaSurfaceDescr.num_layers);
+            fdDescriptors.resize(vaSurfaceDescr.num_objects);
+            offsets.resize(vaSurfaceDescr.num_layers);
 
             for (uint32_t i = 0; i < vaSurfaceDescr.num_layers; ++i)
             {
@@ -153,71 +158,86 @@
                     isLinear = (drmFormatModifier == DRM_FORMAT_MOD_LINEAR || 
drmFormatModifier == DRM_FORMAT_MOD_INVALID);
                 }
             }
+        }
+    }
 
-            try
-            {
-                constexpr auto externalMemoryHandleType = 
vk::ExternalMemoryHandleTypeFlagBits::eDmaBufEXT;
+    auto closeFDs = [&] {
+        for (auto &&fdDescriptor : fdDescriptors)
+        {
+            ::close(fdDescriptor.first);
+        }
+    };
 
-                vk::ImageDrmFormatModifierExplicitCreateInfoEXT 
imageDrmFormatModifierExplicitCreateInfo;
-                vk::SubresourceLayout drmFormatModifierPlaneLayout;
+    if (!vkImage)
+    {
+        if (exported) try
+        {
+            constexpr auto externalMemoryHandleType = 
vk::ExternalMemoryHandleTypeFlagBits::eDmaBufEXT;
 
-                auto imageCreateInfoCallback = [&](uint32_t plane, 
vk::ImageCreateInfo &imageCreateInfo) {
-                    if (!m_hasDrmFormatModifier)
-                        return;
-
-                    if (plane >= vaSurfaceDescr.num_layers)
-                        throw vk::LogicError("Pitches count and planes count 
missmatch");
-
-                    const auto &layer = vaSurfaceDescr.layers[plane];
-
-                    auto drmFormatModifier = 
vaSurfaceDescr.objects[layer.object_index[0]].drm_format_modifier;
-                    if (drmFormatModifier == DRM_FORMAT_MOD_INVALID)
-                        drmFormatModifier = DRM_FORMAT_MOD_LINEAR;
-
-                    imageDrmFormatModifierExplicitCreateInfo.drmFormatModifier 
= drmFormatModifier;
-                    
imageDrmFormatModifierExplicitCreateInfo.drmFormatModifierPlaneCount = 1;
-                    imageDrmFormatModifierExplicitCreateInfo.pPlaneLayouts = 
&drmFormatModifierPlaneLayout;
-                    imageDrmFormatModifierExplicitCreateInfo.pNext = 
imageCreateInfo.pNext;
-
-                    drmFormatModifierPlaneLayout.offset = layer.offset[0];
-                    drmFormatModifierPlaneLayout.rowPitch = layer.pitch[0];
-
-                    imageCreateInfo.tiling = 
vk::ImageTiling::eDrmFormatModifierEXT;
-                    imageCreateInfo.pNext = 
&imageDrmFormatModifierExplicitCreateInfo;
-                };
-
-                vkImage = Image::createExternalImport(
-                    device,
-                    vk::Extent2D(frame.width(), frame.height()),
-                    format,
-                    isLinear,
-                    externalMemoryHandleType,
-                    imageCreateInfoCallback
-                );
-
-                auto fdCustomData = make_unique<FDCustomData>();
-                for (auto &&fdDescriptor : fdDescriptors)
-                    fdCustomData->fds.push_back(::dup(fdDescriptor.first));
-                vkImage->setCustomData(move(fdCustomData));
-
-                vkImage->importFD(
-                    fdDescriptors,
-                    offsets,
-                    externalMemoryHandleType
-                );
-            }
-            catch (const vk::Error &e)
-            {
-                QMPlay2Core.logError(QString("VA-API :: %1").arg(e.what()));
-                vkImage.reset();
-                for (uint32_t o = 0; o < vaSurfaceDescr.num_objects; ++o)
-                    ::close(vaSurfaceDescr.objects[o].fd);
-            }
+            vk::ImageDrmFormatModifierExplicitCreateInfoEXT 
imageDrmFormatModifierExplicitCreateInfo;
+            vk::SubresourceLayout drmFormatModifierPlaneLayout;
+
+            auto imageCreateInfoCallback = [&](uint32_t plane, 
vk::ImageCreateInfo &imageCreateInfo) {
+                if (!m_hasDrmFormatModifier)
+                    return;
+
+                if (plane >= vaSurfaceDescr.num_layers)
+                    throw vk::LogicError("Pitches count and planes count 
missmatch");
+
+                const auto &layer = vaSurfaceDescr.layers[plane];
+
+                auto drmFormatModifier = 
vaSurfaceDescr.objects[layer.object_index[0]].drm_format_modifier;
+                if (drmFormatModifier == DRM_FORMAT_MOD_INVALID)
+                    drmFormatModifier = DRM_FORMAT_MOD_LINEAR;
+
+                imageDrmFormatModifierExplicitCreateInfo.drmFormatModifier = 
drmFormatModifier;
+                
imageDrmFormatModifierExplicitCreateInfo.drmFormatModifierPlaneCount = 1;
+                imageDrmFormatModifierExplicitCreateInfo.pPlaneLayouts = 
&drmFormatModifierPlaneLayout;
+                imageDrmFormatModifierExplicitCreateInfo.pNext = 
imageCreateInfo.pNext;
+
+                drmFormatModifierPlaneLayout.offset = layer.offset[0];
+                drmFormatModifierPlaneLayout.rowPitch = layer.pitch[0];
+
+                imageCreateInfo.tiling = 
vk::ImageTiling::eDrmFormatModifierEXT;
+                imageCreateInfo.pNext = 
&imageDrmFormatModifierExplicitCreateInfo;
+            };
+
+            vkImage = Image::createExternalImport(
+                device,
+                vk::Extent2D(frame.width(), frame.height()),
+                format,
+                isLinear,
+                externalMemoryHandleType,
+                imageCreateInfoCallback
+            );
+
+            auto fdCustomData = make_unique<FDCustomData>();
+            for (auto &&fdDescriptor : fdDescriptors)
+                fdCustomData->fds.push_back(::dup(fdDescriptor.first));
+            vkImage->setCustomData(move(fdCustomData));
+
+            vkImage->importFD(
+                fdDescriptors,
+                offsets,
+                externalMemoryHandleType
+            );
+        }
+        catch (const vk::Error &e)
+        {
+            QMPlay2Core.logError(QString("VA-API :: %1").arg(e.what()));
+            vkImage.reset();
+            closeFDs();
         }
 
         if (!vkImage)
             m_error = true;
     }
+    else if (exported)
+    {
+        // Interlaced videos needs to call "vaExportSurfaceHandle" on every 
frame since Mesa 23.3.0,
+        // but it reuses the image buffer, so close FDs here.
+        closeFDs();
+    }
 
     if (vkImage)
     {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QMPlay2-src-23.09.05/src/qmplay2/Functions.cpp 
new/QMPlay2-src-23.10.22/src/qmplay2/Functions.cpp
--- old/QMPlay2-src-23.09.05/src/qmplay2/Functions.cpp  2023-08-04 
00:29:43.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/qmplay2/Functions.cpp  2023-10-19 
19:54:40.000000000 +0200
@@ -571,6 +571,11 @@
 
 QByteArray Functions::convertToASS(QString txt)
 {
+    txt.replace("&nbsp;", " ", Qt::CaseInsensitive);
+    txt.replace("&lt;", "<", Qt::CaseInsensitive);
+    txt.replace("&gt;", ">", Qt::CaseInsensitive);
+    txt.replace("&amp;", "&", Qt::CaseInsensitive);
+    txt.replace("&quot;", "\"", Qt::CaseInsensitive);
     txt.replace("<i>", "{\\i1}", Qt::CaseInsensitive);
     txt.replace("</i>", "{\\i0}", Qt::CaseInsensitive);
     txt.replace("<b>", "{\\b1}", Qt::CaseInsensitive);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QMPlay2-src-23.09.05/src/qmplay2/Version.cpp 
new/QMPlay2-src-23.10.22/src/qmplay2/Version.cpp
--- old/QMPlay2-src-23.09.05/src/qmplay2/Version.cpp    2023-09-05 
19:28:53.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/qmplay2/Version.cpp    2023-10-21 
21:16:30.000000000 +0200
@@ -25,7 +25,7 @@
 #ifndef QMPlay2GitHEAD
     #define QMPlay2GitHEAD
 #endif
-#define QMPlay2Version "23.09.05" QMPlay2GitHEAD
+#define QMPlay2Version "23.10.22" QMPlay2GitHEAD
 
 QByteArray Version::get()
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QMPlay2-src-23.09.05/src/qmplay2/YouTubeDL.cpp 
new/QMPlay2-src-23.10.22/src/qmplay2/YouTubeDL.cpp
--- old/QMPlay2-src-23.09.05/src/qmplay2/YouTubeDL.cpp  2023-06-03 
17:43:18.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/qmplay2/YouTubeDL.cpp  2023-10-11 
23:21:26.000000000 +0200
@@ -42,17 +42,25 @@
 static QMutex g_mutex(QMutex::Recursive);
 #endif
 
+static inline QString getYtDlpFileName()
+{
+    return "yt-dlp"
+#ifdef Q_OS_WIN
+# ifdef Q_PROCESSOR_X86_32
+        "_x86"
+# endif
+        ".exe"
+#endif
+    ;
+}
+
 QString YouTubeDL::getFilePath()
 {
 #ifdef Q_OS_HAIKU
-    return "/bin/yt-dlp"
+    return "/bin/" + getYtDlpFileName();
 #else
-    return QMPlay2Core.getSettingsDir() + "yt-dlp"
-#ifdef Q_OS_WIN
-    "_x86.exe"
+    return QMPlay2Core.getSettingsDir() + getYtDlpFileName();
 #endif
-#endif
-    ;
 }
 QStringList YouTubeDL::getCommonArgs()
 {
@@ -249,7 +257,12 @@
                 for (const QJsonValue &formats : json["formats"].toArray())
                 {
                     if (url == formats["url"].toString())
-                        QMPlay2Core.addCookies(url, 
formats["http_headers"]["Cookie"].toString().toUtf8());
+                    {
+                        auto cookies = 
formats["http_headers"]["Cookie"].toString();
+                        if (cookies.isEmpty())
+                            cookies = formats["cookies"].toString();
+                        QMPlay2Core.addCookies(url, cookies.toUtf8());
+                    }
                 }
 
                 result.removeAt(i);
@@ -323,11 +336,7 @@
 #endif
     // Mutex must be locked here
 
-    const QString downloadUrl = 
"https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp";
-#ifdef Q_OS_WIN
-    "_x86.exe"
-#endif
-    ;
+    const QString downloadUrl = 
"https://github.com/yt-dlp/yt-dlp/releases/latest/download/"; + 
getYtDlpFileName();
 
     QMPlay2Core.setWorking(true);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/QMPlay2-src-23.09.05/src/qmplay2/vulkan/VulkanInstance.cpp 
new/QMPlay2-src-23.10.22/src/qmplay2/vulkan/VulkanInstance.cpp
--- old/QMPlay2-src-23.09.05/src/qmplay2/vulkan/VulkanInstance.cpp      
2023-08-17 00:27:51.000000000 +0200
+++ new/QMPlay2-src-23.10.22/src/qmplay2/vulkan/VulkanInstance.cpp      
2023-10-21 00:33:24.000000000 +0200
@@ -31,6 +31,10 @@
 #include <QLibrary>
 #include <QWindow>
 
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+#   include <QVersionNumber>
+#endif
+
 #if defined(Q_OS_WIN)
 #   include <QRegularExpression>
 #elif defined(Q_OS_LINUX)
@@ -266,8 +270,36 @@
         VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME,
     });
 
-    if (!m_qVulkanInstance->create())
-        throw vk::InitializationFailedError("Can't create Vulkan instance");
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+    const bool maybeSetEnvVar = (QVersionNumber::fromString(qVersion()) < 
QVersionNumber(6, 3, 0) || QGuiApplication::platformName().contains("wayland")) 
&& !qEnvironmentVariableIsSet("QT_VULKAN_LIB");
+
+    QtMessageHandler oldMsgHandler = nullptr;
+    if (maybeSetEnvVar)
+        oldMsgHandler = qInstallMessageHandler(nullptr);
+#endif
+
+    bool ok = m_qVulkanInstance->create();
+
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+    if (maybeSetEnvVar && oldMsgHandler)
+        qInstallMessageHandler(oldMsgHandler);
+#endif
+
+    if (!ok)
+    {
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+        if (maybeSetEnvVar)
+        {
+            qputenv("QT_VULKAN_LIB", "libvulkan.so.1");
+            qDebug() << "Set QT_VULKAN_LIB to \"libvulkan.so.1\"";
+            ok = m_qVulkanInstance->create();
+        }
+        if (!ok)
+#endif
+        {
+            throw vk::InitializationFailedError("Can't create Vulkan 
instance");
+        }
+    }
 
 #ifdef QT_DEBUG
     if (!m_qVulkanInstance->layers().contains("VK_LAYER_KHRONOS_validation"))

Reply via email to