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>&Continue playback</source> - <translation type="unfinished"></translation> + <translation>&ÐÑодовжиÑи вÑдÑвоÑеннÑ</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 "%1" from the drop-down list</source> - <translation type="unfinished"></translation> + <translation>ÐибеÑÑÑÑ "%1" Ð·Ñ Ñпадного ÑпиÑкÑ</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(" ", " ", Qt::CaseInsensitive); + txt.replace("<", "<", Qt::CaseInsensitive); + txt.replace(">", ">", Qt::CaseInsensitive); + txt.replace("&", "&", Qt::CaseInsensitive); + txt.replace(""", "\"", 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"))
