From 5edea6f3cc5d0739e992b1c1a4848a634a43b850 Mon Sep 17 00:00:00 2001
From: graysky <therealgraysky@proton.me>
Date: Sat, 6 Apr 2024 03:20:53 -0400
Subject: [PATCH] alarm/kodi-rpi-legacy to 21.0-1

---
 .../000-temp-revert-fences.patch              | 456 ++++++++++++++++++
 ...001-ffmpeg-update-for-official-5.1.4.patch |  23 -
 ...mpeg-build-with-lto-when-DUSE_LTO-ON.patch |  51 --
 alarm/kodi-rpi-legacy/PKGBUILD                |  57 +--
 alarm/kodi-rpi/PKGBUILD                       |   2 +-
 5 files changed, 480 insertions(+), 109 deletions(-)
 create mode 100644 alarm/kodi-rpi-legacy/000-temp-revert-fences.patch
 delete mode 100644 alarm/kodi-rpi-legacy/0001-ffmpeg-update-for-official-5.1.4.patch
 delete mode 100644 alarm/kodi-rpi-legacy/0002-ffmpeg-build-with-lto-when-DUSE_LTO-ON.patch

diff --git a/alarm/kodi-rpi-legacy/000-temp-revert-fences.patch b/alarm/kodi-rpi-legacy/000-temp-revert-fences.patch
new file mode 100644
index 000000000..c5d747347
--- /dev/null
+++ b/alarm/kodi-rpi-legacy/000-temp-revert-fences.patch
@@ -0,0 +1,456 @@
+diff --git a/xbmc/utils/EGLFence.cpp b/xbmc/utils/EGLFence.cpp
+index 9d0065bdaf..535e3bce31 100644
+--- a/xbmc/utils/EGLFence.cpp
++++ b/xbmc/utils/EGLFence.cpp
+@@ -22,14 +22,6 @@ CEGLFence::CEGLFence(EGLDisplay display)
+     m_eglGetSyncAttribKHR(
+         CEGLUtils::GetRequiredProcAddress<PFNEGLGETSYNCATTRIBKHRPROC>("eglGetSyncAttribKHR"))
+ {
+-#if defined(EGL_ANDROID_native_fence_sync) && defined(EGL_KHR_fence_sync)
+-  m_eglDupNativeFenceFDANDROID =
+-      CEGLUtils::GetRequiredProcAddress<PFNEGLDUPNATIVEFENCEFDANDROIDPROC>(
+-          "eglDupNativeFenceFDANDROID");
+-  m_eglClientWaitSyncKHR =
+-      CEGLUtils::GetRequiredProcAddress<PFNEGLCLIENTWAITSYNCKHRPROC>("eglClientWaitSyncKHR");
+-  m_eglWaitSyncKHR = CEGLUtils::GetRequiredProcAddress<PFNEGLWAITSYNCKHRPROC>("eglWaitSyncKHR");
+-#endif
+ }
+ 
+ void CEGLFence::CreateFence()
+@@ -79,65 +71,3 @@ bool CEGLFence::IsSignaled()
+ 
+   return false;
+ }
+-
+-#if defined(EGL_ANDROID_native_fence_sync) && defined(EGL_KHR_fence_sync)
+-EGLSyncKHR CEGLFence::CreateFence(int fd)
+-{
+-  CEGLAttributes<1> attributeList;
+-  attributeList.Add({{EGL_SYNC_NATIVE_FENCE_FD_ANDROID, fd}});
+-
+-  EGLSyncKHR fence =
+-      m_eglCreateSyncKHR(m_display, EGL_SYNC_NATIVE_FENCE_ANDROID, attributeList.Get());
+-
+-  if (fence == EGL_NO_SYNC_KHR)
+-  {
+-    CEGLUtils::Log(LOGERROR, "failed to create EGL sync object");
+-    return nullptr;
+-  }
+-
+-  return fence;
+-}
+-
+-void CEGLFence::CreateGPUFence()
+-{
+-  m_gpuFence = CreateFence(EGL_NO_NATIVE_FENCE_FD_ANDROID);
+-}
+-
+-void CEGLFence::CreateKMSFence(int fd)
+-{
+-  m_kmsFence = CreateFence(fd);
+-}
+-
+-EGLint CEGLFence::FlushFence()
+-{
+-  EGLint fd = m_eglDupNativeFenceFDANDROID(m_display, m_gpuFence);
+-  if (fd == EGL_NO_NATIVE_FENCE_FD_ANDROID)
+-    CEGLUtils::Log(LOGERROR, "failed to duplicate EGL fence fd");
+-
+-  m_eglDestroySyncKHR(m_display, m_gpuFence);
+-
+-  return fd;
+-}
+-
+-void CEGLFence::WaitSyncGPU()
+-{
+-  if (!m_kmsFence)
+-    return;
+-
+-  if (m_eglWaitSyncKHR(m_display, m_kmsFence, 0) != EGL_TRUE)
+-    CEGLUtils::Log(LOGERROR, "failed to create EGL sync point");
+-}
+-
+-void CEGLFence::WaitSyncCPU()
+-{
+-  if (!m_kmsFence)
+-    return;
+-
+-  EGLint status{EGL_FALSE};
+-
+-  while (status != EGL_CONDITION_SATISFIED_KHR)
+-    status = m_eglClientWaitSyncKHR(m_display, m_kmsFence, 0, EGL_FOREVER_KHR);
+-
+-  m_eglDestroySyncKHR(m_display, m_kmsFence);
+-}
+-#endif
+diff --git a/xbmc/utils/EGLFence.h b/xbmc/utils/EGLFence.h
+index 03c246b60b..bd96444e47 100644
+--- a/xbmc/utils/EGLFence.h
++++ b/xbmc/utils/EGLFence.h
+@@ -30,14 +30,6 @@ public:
+   void DestroyFence();
+   bool IsSignaled();
+ 
+-#if defined(EGL_ANDROID_native_fence_sync) && defined(EGL_KHR_fence_sync)
+-  void CreateKMSFence(int fd);
+-  void CreateGPUFence();
+-  EGLint FlushFence();
+-  void WaitSyncGPU();
+-  void WaitSyncCPU();
+-#endif
+-
+ private:
+   EGLDisplay m_display{nullptr};
+   EGLSyncKHR m_fence{nullptr};
+@@ -45,17 +37,6 @@ private:
+   PFNEGLCREATESYNCKHRPROC m_eglCreateSyncKHR{nullptr};
+   PFNEGLDESTROYSYNCKHRPROC m_eglDestroySyncKHR{nullptr};
+   PFNEGLGETSYNCATTRIBKHRPROC m_eglGetSyncAttribKHR{nullptr};
+-
+-#if defined(EGL_ANDROID_native_fence_sync) && defined(EGL_KHR_fence_sync)
+-  EGLSyncKHR CreateFence(int fd);
+-
+-  EGLSyncKHR m_gpuFence{EGL_NO_SYNC_KHR};
+-  EGLSyncKHR m_kmsFence{EGL_NO_SYNC_KHR};
+-
+-  PFNEGLDUPNATIVEFENCEFDANDROIDPROC m_eglDupNativeFenceFDANDROID{nullptr};
+-  PFNEGLCLIENTWAITSYNCKHRPROC m_eglClientWaitSyncKHR{nullptr};
+-  PFNEGLWAITSYNCKHRPROC m_eglWaitSyncKHR{nullptr};
+-#endif
+ };
+ 
+ }
+diff --git a/xbmc/windowing/gbm/WinSystemGbm.cpp b/xbmc/windowing/gbm/WinSystemGbm.cpp
+index f334156d89..34c8c16fe4 100644
+--- a/xbmc/windowing/gbm/WinSystemGbm.cpp
++++ b/xbmc/windowing/gbm/WinSystemGbm.cpp
+@@ -278,7 +278,7 @@ void CWinSystemGbm::UpdateDisplayHardwareScaling(const RESOLUTION_INFO& resInfo)
+   SetFullScreen(true, resMutable, false);
+ }
+ 
+-void CWinSystemGbm::FlipPage(bool rendered, bool videoLayer, bool async)
++void CWinSystemGbm::FlipPage(bool rendered, bool videoLayer)
+ {
+   if (m_videoLayerBridge && !videoLayer)
+   {
+@@ -293,7 +293,7 @@ void CWinSystemGbm::FlipPage(bool rendered, bool videoLayer, bool async)
+     bo = m_GBM->GetDevice()->GetSurface()->LockFrontBuffer()->Get();
+   }
+ 
+-  m_DRM->FlipPage(bo, rendered, videoLayer, async);
++  m_DRM->FlipPage(bo, rendered, videoLayer);
+ 
+   if (m_videoLayerBridge && !videoLayer)
+   {
+@@ -310,14 +310,14 @@ bool CWinSystemGbm::UseLimitedColor()
+ bool CWinSystemGbm::Hide()
+ {
+   bool ret = m_DRM->SetActive(false);
+-  FlipPage(false, false, false);
++  FlipPage(false, false);
+   return ret;
+ }
+ 
+ bool CWinSystemGbm::Show(bool raise)
+ {
+   bool ret = m_DRM->SetActive(true);
+-  FlipPage(false, false, false);
++  FlipPage(false, false);
+   return ret;
+ }
+ 
+diff --git a/xbmc/windowing/gbm/WinSystemGbm.h b/xbmc/windowing/gbm/WinSystemGbm.h
+index 879d0f58f8..a800acef6b 100644
+--- a/xbmc/windowing/gbm/WinSystemGbm.h
++++ b/xbmc/windowing/gbm/WinSystemGbm.h
+@@ -49,7 +49,7 @@ public:
+   bool DisplayHardwareScalingEnabled() override;
+   void UpdateDisplayHardwareScaling(const RESOLUTION_INFO& resInfo) override;
+ 
+-  void FlipPage(bool rendered, bool videoLayer, bool async);
++  void FlipPage(bool rendered, bool videoLayer);
+ 
+   bool CanDoWindowed() override { return false; }
+   void UpdateResolutions() override;
+diff --git a/xbmc/windowing/gbm/WinSystemGbmEGLContext.cpp b/xbmc/windowing/gbm/WinSystemGbmEGLContext.cpp
+index ee27fba1bd..83a59413f7 100644
+--- a/xbmc/windowing/gbm/WinSystemGbmEGLContext.cpp
++++ b/xbmc/windowing/gbm/WinSystemGbmEGLContext.cpp
+@@ -58,17 +58,6 @@ bool CWinSystemGbmEGLContext::InitWindowSystemEGL(EGLint renderableType, EGLint
+     return false;
+   }
+ 
+-  if (CEGLUtils::HasExtension(m_eglContext.GetEGLDisplay(), "EGL_ANDROID_native_fence_sync") &&
+-      CEGLUtils::HasExtension(m_eglContext.GetEGLDisplay(), "EGL_KHR_fence_sync"))
+-  {
+-    m_eglFence = std::make_unique<KODI::UTILS::EGL::CEGLFence>(m_eglContext.GetEGLDisplay());
+-  }
+-  else
+-  {
+-    CLog::Log(LOGWARNING, "[GBM] missing support for EGL_KHR_fence_sync and "
+-                          "EGL_ANDROID_native_fence_sync - performance may be impacted");
+-  }
+-
+   return true;
+ }
+ 
+diff --git a/xbmc/windowing/gbm/WinSystemGbmEGLContext.h b/xbmc/windowing/gbm/WinSystemGbmEGLContext.h
+index fbd52354ee..84f863d6d3 100644
+--- a/xbmc/windowing/gbm/WinSystemGbmEGLContext.h
++++ b/xbmc/windowing/gbm/WinSystemGbmEGLContext.h
+@@ -9,7 +9,6 @@
+ #pragma once
+ 
+ #include "WinSystemGbm.h"
+-#include "utils/EGLFence.h"
+ #include "utils/EGLUtils.h"
+ #include "windowing/linux/WinSystemEGL.h"
+ 
+@@ -47,8 +46,6 @@ protected:
+   bool InitWindowSystemEGL(EGLint renderableType, EGLint apiType);
+   virtual bool CreateContext() = 0;
+ 
+-  std::unique_ptr<KODI::UTILS::EGL::CEGLFence> m_eglFence;
+-
+   struct delete_CVaapiProxy
+   {
+     void operator()(CVaapiProxy *p) const;
+diff --git a/xbmc/windowing/gbm/WinSystemGbmGLContext.cpp b/xbmc/windowing/gbm/WinSystemGbmGLContext.cpp
+index adbb539f21..e4ff49c618 100644
+--- a/xbmc/windowing/gbm/WinSystemGbmGLContext.cpp
++++ b/xbmc/windowing/gbm/WinSystemGbmGLContext.cpp
+@@ -119,37 +119,13 @@ void CWinSystemGbmGLContext::PresentRender(bool rendered, bool videoLayer)
+   {
+     if (rendered)
+     {
+-#if defined(EGL_ANDROID_native_fence_sync) && defined(EGL_KHR_fence_sync)
+-      if (m_eglFence)
+-      {
+-        int fd = m_DRM->TakeOutFenceFd();
+-        if (fd != -1)
+-        {
+-          m_eglFence->CreateKMSFence(fd);
+-          m_eglFence->WaitSyncGPU();
+-        }
+-
+-        m_eglFence->CreateGPUFence();
+-      }
+-#endif
+-
+       if (!m_eglContext.TrySwapBuffers())
+       {
+         CEGLUtils::Log(LOGERROR, "eglSwapBuffers failed");
+         throw std::runtime_error("eglSwapBuffers failed");
+       }
+-
+-#if defined(EGL_ANDROID_native_fence_sync) && defined(EGL_KHR_fence_sync)
+-      if (m_eglFence)
+-      {
+-        int fd = m_eglFence->FlushFence();
+-        m_DRM->SetInFenceFd(fd);
+-
+-        m_eglFence->WaitSyncCPU();
+-      }
+-#endif
+     }
+-    CWinSystemGbm::FlipPage(rendered, videoLayer, static_cast<bool>(m_eglFence));
++    CWinSystemGbm::FlipPage(rendered, videoLayer);
+ 
+     if (m_dispReset && m_dispResetTimer.IsTimePast())
+     {
+diff --git a/xbmc/windowing/gbm/WinSystemGbmGLESContext.cpp b/xbmc/windowing/gbm/WinSystemGbmGLESContext.cpp
+index ad80abf46c..0d071c31f1 100644
+--- a/xbmc/windowing/gbm/WinSystemGbmGLESContext.cpp
++++ b/xbmc/windowing/gbm/WinSystemGbmGLESContext.cpp
+@@ -128,38 +128,13 @@ void CWinSystemGbmGLESContext::PresentRender(bool rendered, bool videoLayer)
+   {
+     if (rendered)
+     {
+-#if defined(EGL_ANDROID_native_fence_sync) && defined(EGL_KHR_fence_sync)
+-      if (m_eglFence)
+-      {
+-        int fd = m_DRM->TakeOutFenceFd();
+-        if (fd != -1)
+-        {
+-          m_eglFence->CreateKMSFence(fd);
+-          m_eglFence->WaitSyncGPU();
+-        }
+-
+-        m_eglFence->CreateGPUFence();
+-      }
+-#endif
+-
+       if (!m_eglContext.TrySwapBuffers())
+       {
+         CEGLUtils::Log(LOGERROR, "eglSwapBuffers failed");
+         throw std::runtime_error("eglSwapBuffers failed");
+       }
+-
+-#if defined(EGL_ANDROID_native_fence_sync) && defined(EGL_KHR_fence_sync)
+-      if (m_eglFence)
+-      {
+-        int fd = m_eglFence->FlushFence();
+-        m_DRM->SetInFenceFd(fd);
+-
+-        m_eglFence->WaitSyncCPU();
+-      }
+-#endif
+     }
+-
+-    CWinSystemGbm::FlipPage(rendered, videoLayer, static_cast<bool>(m_eglFence));
++    CWinSystemGbm::FlipPage(rendered, videoLayer);
+ 
+     if (m_dispReset && m_dispResetTimer.IsTimePast())
+     {
+diff --git a/xbmc/windowing/gbm/drm/DRMAtomic.cpp b/xbmc/windowing/gbm/drm/DRMAtomic.cpp
+index ff7f137d60..029b5cae81 100644
+--- a/xbmc/windowing/gbm/drm/DRMAtomic.cpp
++++ b/xbmc/windowing/gbm/drm/DRMAtomic.cpp
+@@ -111,11 +111,6 @@ void CDRMAtomic::DrmAtomicCommit(int fb_id, int flags, bool rendered, bool video
+       AddProperty(m_gui_plane, "CRTC_H", m_mode->vdisplay);
+     }
+ 
+-    if (m_inFenceFd != -1)
+-    {
+-      AddProperty(m_crtc, "OUT_FENCE_PTR", reinterpret_cast<uint64_t>(&m_outFenceFd));
+-      AddProperty(m_gui_plane, "IN_FENCE_FD", m_inFenceFd);
+-    }
+   }
+   else if (videoLayer && !CServiceBroker::GetGUI()->GetWindowManager().HasVisibleControls())
+   {
+@@ -151,12 +146,6 @@ void CDRMAtomic::DrmAtomicCommit(int fb_id, int flags, bool rendered, bool video
+               strerror(errno));
+   }
+ 
+-  if (m_inFenceFd != -1)
+-  {
+-    close(m_inFenceFd);
+-    m_inFenceFd = -1;
+-  }
+-
+   if (flags & DRM_MODE_ATOMIC_ALLOW_MODESET)
+   {
+     if (drmModeDestroyPropertyBlob(m_fd, blob_id) != 0)
+@@ -171,10 +160,9 @@ void CDRMAtomic::DrmAtomicCommit(int fb_id, int flags, bool rendered, bool video
+   m_req = m_atomicRequestQueue.back().get();
+ }
+ 
+-void CDRMAtomic::FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer, bool async)
++void CDRMAtomic::FlipPage(struct gbm_bo *bo, bool rendered, bool videoLayer)
+ {
+   struct drm_fb *drm_fb = nullptr;
+-  uint32_t flags = 0;
+ 
+   if (rendered)
+   {
+@@ -189,11 +177,10 @@ void CDRMAtomic::FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer, boo
+       CLog::Log(LOGERROR, "CDRMAtomic::{} - Failed to get a new FBO", __FUNCTION__);
+       return;
+     }
+-
+-    if (async && !m_need_modeset)
+-      flags |= DRM_MODE_ATOMIC_NONBLOCK;
+   }
+ 
++  uint32_t flags = 0;
++
+   if (m_need_modeset)
+   {
+     flags |= DRM_MODE_ATOMIC_ALLOW_MODESET;
+diff --git a/xbmc/windowing/gbm/drm/DRMAtomic.h b/xbmc/windowing/gbm/drm/DRMAtomic.h
+index 6b19657587..ca2cd9a1d0 100644
+--- a/xbmc/windowing/gbm/drm/DRMAtomic.h
++++ b/xbmc/windowing/gbm/drm/DRMAtomic.h
+@@ -27,7 +27,7 @@ class CDRMAtomic : public CDRMUtils
+ public:
+   CDRMAtomic() = default;
+   ~CDRMAtomic() override = default;
+-  void FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer, bool async) override;
++  void FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer) override;
+   bool SetVideoMode(const RESOLUTION_INFO& res, struct gbm_bo* bo) override;
+   bool SetActive(bool active) override;
+   bool InitDrm() override;
+diff --git a/xbmc/windowing/gbm/drm/DRMLegacy.cpp b/xbmc/windowing/gbm/drm/DRMLegacy.cpp
+index 4e9c3a6b9f..418d067e70 100644
+--- a/xbmc/windowing/gbm/drm/DRMLegacy.cpp
++++ b/xbmc/windowing/gbm/drm/DRMLegacy.cpp
+@@ -108,7 +108,7 @@ bool CDRMLegacy::QueueFlip(struct gbm_bo *bo)
+   return true;
+ }
+ 
+-void CDRMLegacy::FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer, bool async)
++void CDRMLegacy::FlipPage(struct gbm_bo *bo, bool rendered, bool videoLayer)
+ {
+   if (rendered || videoLayer)
+   {
+diff --git a/xbmc/windowing/gbm/drm/DRMLegacy.h b/xbmc/windowing/gbm/drm/DRMLegacy.h
+index e763f298f7..2b7ff45617 100644
+--- a/xbmc/windowing/gbm/drm/DRMLegacy.h
++++ b/xbmc/windowing/gbm/drm/DRMLegacy.h
+@@ -22,7 +22,7 @@ class CDRMLegacy : public CDRMUtils
+ public:
+   CDRMLegacy() = default;
+   ~CDRMLegacy() override = default;
+-  void FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer, bool async) override;
++  void FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer) override;
+   bool SetVideoMode(const RESOLUTION_INFO& res, struct gbm_bo* bo) override;
+   bool SetActive(bool active) override;
+   bool InitDrm() override;
+diff --git a/xbmc/windowing/gbm/drm/DRMUtils.h b/xbmc/windowing/gbm/drm/DRMUtils.h
+index f92f716fc4..5327e35570 100644
+--- a/xbmc/windowing/gbm/drm/DRMUtils.h
++++ b/xbmc/windowing/gbm/drm/DRMUtils.h
+@@ -15,7 +15,6 @@
+ #include "windowing/Resolution.h"
+ #include "windowing/gbm/GBMUtils.h"
+ 
+-#include <utility>
+ #include <vector>
+ 
+ #include <gbm.h>
+@@ -40,7 +39,7 @@ class CDRMUtils
+ public:
+   CDRMUtils() = default;
+   virtual ~CDRMUtils();
+-  virtual void FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer, bool async) {}
++  virtual void FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer) {}
+   virtual bool SetVideoMode(const RESOLUTION_INFO& res, struct gbm_bo* bo) { return false; }
+   virtual bool SetActive(bool active) { return false; }
+   virtual bool InitDrm();
+@@ -63,13 +62,6 @@ public:
+   static uint32_t FourCCWithAlpha(uint32_t fourcc);
+   static uint32_t FourCCWithoutAlpha(uint32_t fourcc);
+ 
+-  void SetInFenceFd(int fd) { m_inFenceFd = fd; }
+-  int TakeOutFenceFd()
+-  {
+-    int fd{-1};
+-    return std::exchange(m_outFenceFd, fd);
+-  }
+-
+ protected:
+   bool OpenDrm(bool needConnector);
+   drm_fb* DrmFbGetFromBo(struct gbm_bo *bo);
+@@ -86,9 +78,6 @@ protected:
+   int m_width = 0;
+   int m_height = 0;
+ 
+-  int m_inFenceFd{-1};
+-  int m_outFenceFd{-1};
+-
+   std::vector<std::unique_ptr<CDRMPlane>> m_planes;
+ 
+ private:
+diff --git a/xbmc/windowing/gbm/drm/OffScreenModeSetting.h b/xbmc/windowing/gbm/drm/OffScreenModeSetting.h
+index bba0db9a53..4270d4ecb2 100644
+--- a/xbmc/windowing/gbm/drm/OffScreenModeSetting.h
++++ b/xbmc/windowing/gbm/drm/OffScreenModeSetting.h
+@@ -22,7 +22,7 @@ class COffScreenModeSetting : public CDRMUtils
+ public:
+   COffScreenModeSetting() = default;
+   ~COffScreenModeSetting() override = default;
+-  void FlipPage(struct gbm_bo* bo, bool rendered, bool videoLayer, bool async) override {}
++  void FlipPage(struct gbm_bo *bo, bool rendered, bool videoLayer) override {}
+   bool SetVideoMode(const RESOLUTION_INFO& res, struct gbm_bo *bo) override { return false; }
+   bool SetActive(bool active) override { return false; }
+   bool InitDrm() override;
diff --git a/alarm/kodi-rpi-legacy/0001-ffmpeg-update-for-official-5.1.4.patch b/alarm/kodi-rpi-legacy/0001-ffmpeg-update-for-official-5.1.4.patch
deleted file mode 100644
index 9e1afdb27..000000000
--- a/alarm/kodi-rpi-legacy/0001-ffmpeg-update-for-official-5.1.4.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 19668d52077b6352522ee21b225e7672dad746e7 Mon Sep 17 00:00:00 2001
-Date: Fri, 10 Nov 2023 15:08:12 -0400
-Subject: [PATCH] ffmpeg: update for official 5.1.4
-
----
- tools/depends/target/ffmpeg/FFMPEG-VERSION | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/tools/depends/target/ffmpeg/FFMPEG-VERSION b/tools/depends/target/ffmpeg/FFMPEG-VERSION
-index d80ab0a..b2f6ec1 100644
---- a/tools/depends/target/ffmpeg/FFMPEG-VERSION
-+++ b/tools/depends/target/ffmpeg/FFMPEG-VERSION
-@@ -1,5 +1,5 @@
- LIBNAME=ffmpeg
- BASE_URL=https://github.com/xbmc/FFmpeg
--VERSION=5.1.2-Nexus-Alpha3
-+VERSION=5.1.4
- ARCHIVE=$(LIBNAME)-$(VERSION).tar.gz
--SHA512=ce60852b8456d6f4bfc60de0ceadb33034d9b3eea8c0bc84d8b7199984ecbf334a2c4d9b42eade439d0ef30ce22e3b2ca0a49d4df837a18cd3136b4343ed3113
-+SHA512=02817439d8382a9f27acc2d5b0fd778872a5fc8283022f3c9d08926abb8c62dca576b5fae4c6afa5d53e01f3d3e3a803df8efc58d294587fa0b3057e80fd1a6d
--- 
-2.40.1
-
diff --git a/alarm/kodi-rpi-legacy/0002-ffmpeg-build-with-lto-when-DUSE_LTO-ON.patch b/alarm/kodi-rpi-legacy/0002-ffmpeg-build-with-lto-when-DUSE_LTO-ON.patch
deleted file mode 100644
index fb72ce6cc..000000000
--- a/alarm/kodi-rpi-legacy/0002-ffmpeg-build-with-lto-when-DUSE_LTO-ON.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From e32ddfda63944ef786b3a3ddea243dc0ed2f4c11 Mon Sep 17 00:00:00 2001
-From: graysky <graysky@archlinux.us>
-Date: Fri, 7 Jan 2022 10:22:22 -0500
-Subject: [PATCH] ffmpeg: build with lto when -DUSE_LTO=ON
-
-I do not believe the internal ffmpeg build uses LTO if the user calls for it
-via -DUSE_LTO=ON.  This commit passes --enable-lto to ffmpeg's configure script
-if CMAKE has CMAKE_INTERPROCEDURAL_OPTIMIZATION set which -DUSE_LTO=ON does.
-
-The original author of this, loqs, points this out here[1].
-
-1. https://bugs.archlinux.org/task/69333#comment196255
----
- cmake/modules/FindFFMPEG.cmake             | 5 +++++
- tools/depends/target/ffmpeg/CMakeLists.txt | 4 ++++
- 2 files changed, 9 insertions(+)
-
-diff --git a/cmake/modules/FindFFMPEG.cmake b/cmake/modules/FindFFMPEG.cmake
-index 13c810591b..5f0c596cb7 100644
---- a/cmake/modules/FindFFMPEG.cmake
-+++ b/cmake/modules/FindFFMPEG.cmake
-@@ -55,6 +55,11 @@ macro(buildFFMPEG)
-                    -DOS=${OS}
-                    -DCMAKE_AR=${CMAKE_AR})
-   endif()
-+
-+  if(USE_LTO)
-+    list(APPEND FFMPEG_OPTIONS -DUSE_LTO=ON)
-+  endif()
-+
-   set(LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS})
-   list(APPEND LINKER_FLAGS ${SYSTEM_LDFLAGS})
- 
-diff --git a/tools/depends/target/ffmpeg/CMakeLists.txt b/tools/depends/target/ffmpeg/CMakeLists.txt
-index 1bf9f53499..d438449888 100644
---- a/tools/depends/target/ffmpeg/CMakeLists.txt
-+++ b/tools/depends/target/ffmpeg/CMakeLists.txt
-@@ -126,6 +126,10 @@ if(CPU MATCHES x86 OR CPU MATCHES x86_64)
-   list(APPEND ffmpeg_conf --x86asmexe=${NASM_EXECUTABLE})
- endif()
- 
-+if(USE_LTO)
-+   list(APPEND ffmpeg_conf --enable-lto)
-+endif()
-+
- if(ENABLE_DAV1D)
-   list(APPEND ffmpeg_conf --enable-libdav1d)
-   set(pkgconf_path "PKG_CONFIG_PATH=${PKG_CONFIG_PATH}")
--- 
-2.44.0
-
diff --git a/alarm/kodi-rpi-legacy/PKGBUILD b/alarm/kodi-rpi-legacy/PKGBUILD
index 105dc9d79..61b41da0b 100644
--- a/alarm/kodi-rpi-legacy/PKGBUILD
+++ b/alarm/kodi-rpi-legacy/PKGBUILD
@@ -16,17 +16,17 @@ pkgname=(
   'kodi-rpi-legacy-eventclients' 'kodi-rpi-legacy-tools-texturepacker' 'kodi-rpi-legacy-dev'
 )
 
-_commitnumber=62420
-_commit=8ff17bbfc65c9b3c1923e85c4b40e5033aceebcc
+_commitnumber=65539
+_commit=7ead006b14bf638bb1928e389b5552ec32288222
 
 # set this to anything to build with clang
 # recommend manually setting -DUSE_LTO=OFF to -DUSE_LTO=$(nproc) in build()
 _clangbuild=
 
-pkgver=20.5
-pkgrel=7
+pkgver=21.0
+pkgrel=1
 arch=('armv7h')
-url="https://github.com/graysky2/xbmc/tree/gs-gbm_nexus"
+url="https://github.com/graysky2/xbmc/tree/gs-gbm_omega"
 license=('GPL2')
 makedepends=(
   'afpfs-ng' 'bluez-libs' 'cmake' 'curl' 'dav1d' 'doxygen' 'git' 'glew'
@@ -37,16 +37,23 @@ makedepends=(
   'pipewire' 'python-pycryptodomex' 'python-pillow' 'python-pybluez'
   'python-simplejson' 'shairplay' 'smbclient' 'sndio' 'spdlog' 'taglib'
   'tinyxml' 'swig' 'upower' 'giflib' 'rapidjson' 'ghostscript' 'meson' 'gtest'
-  'graphviz' 'libinput' 'libxkbcommon' 'pcre'
+  'graphviz' 'libinput' 'libxkbcommon' 'pcre' 'libdisplay-info' 'tinyxml2'
 )
+
+# there are incompatibilities with recent java releases
+# see: sttps://bugs.archlinux.org/task/79844
+# armv7h needs v17 but aarch64 be use a later one
+makedepends_armv7h=('jdk17-openjdk')
+makedepends_aarch64=('java-environment<21')
+
 [[ -n "$_clangbuild" ]] && makedepends+=('clang' 'lld' 'llvm')
 
-_codename=Nexus
+_codename=Omega
 _init_version=1.137
 _libdvdcss_version="1.4.3-Next-Nexus-Alpha2-2"
 _libdvdnav_version="6.1.1-Next-Nexus-Alpha2-2"
 _libdvdread_version="6.1.3-Next-Nexus-Alpha2-2"
-_ffmpeg_version="5.1.4"
+_ffmpeg_version="6.0.1"
 _crossguid_version="ca1bf4b810e2d188d04cb6286f957008ee1b7681"
 _fstrcmp_version="0.7.D001"
 _flatbuffers_version="23.3.3"
@@ -63,10 +70,7 @@ source=(
   "https://mirrors.kodi.tv/build-deps/sources/libudfread-$_libudfread_version.tar.gz"
   "ArchARM-kodi-init-v$_init_version.tar.gz::https://github.com/graysky2/kodi-standalone-service/archive/v$_init_version.tar.gz"
   kodi.config.txt
-  0001-ffmpeg-update-for-official-5.1.4.patch
-  flatbuffers-23.3.3.patch::https://github.com/xbmc/xbmc/commit/35be40daa39965a9ea5b3569eb7d515e6a14da5d.patch
-  pr23703.patch::https://patch-diff.githubusercontent.com/raw/xbmc/xbmc/pull/23703.patch
-  https://github.com/xbmc/xbmc/pull/23227.patch
+  000-temp-revert-fences.patch
 )
 backup=(boot/kodi.config.txt etc/conf.d/kodi-standalone)
 noextract=(
@@ -79,21 +83,18 @@ noextract=(
   "flatbuffers-$_flatbuffers_version.tar.gz"
   "libudfread-$_libudfread_version.tar.gz"
 )
-sha256sums=('c57658cf04c18556fa7a60a9ec26cd8630da39438cf5f2e822395a47240162a1'
+sha256sums=('9917487bc8dfef0c12d7c59c736c09072284df3c7befbc8ac418488e5116add8'
             'f38c4a4e7a4f4da6d8e83b8852489aa3bb6588a915dc41f5ee89d9aad305a06e'
             '584f62a3896794408d46368e2ecf2c6217ab9c676ce85921b2d68b8961f49dfc'
             '719130091e3adc9725ba72df808f24a14737a009dca5a4c38c601c0c76449b62'
-            'ad1d83e0f022ba405928ea4985c9cab978c4698bb7937738a1085808c3eb78b4'
+            '375fd8abab657d18578554927d23abfc9cb3b6794bd9839330230cf5f9fcea26'
             '6be27e0b3a4907f0cd3cfadec255ee1b925569e1bd06e67a4d2f4267299b69c4'
             'e4018e850f80700acee8da296e56e15b1eef711ab15157e542e7d7e1237c3476'
             '8aff985da30aaab37edf8e5b02fda33ed4cbdd962699a8e2af98fdef306f4e4d'
             '2bf16726ac98d093156195bb049a663e07d3323e079c26912546f4e05c77bac5'
             '8f8ab84a0cf3bd382edb118e475b336ca2fe1e1d4da3ad8e4637f8278ed9179c'
             '6418929a98e2c8ebb8eb85c3d2e48952b29b57f033afd1c05dd845536ab9a3f5'
-            '9dd3923d87f645ed31d37bca6cd791798d7a486335e952dd09b8076bb4c1908b'
-            'ea7a409c4e260bd8f4f949cbd02b7a6609ac0ec5a6920b405abc63ec1a3e312b'
-            '41ed62f58f531ee65278eba2c05411c8948957989c6a21af4e19ca2623d5c03c'
-            'c0570dfddbd42a88446695ec4af38f6cf8a5a99f95210eeefb596c155a18f9d9')
+            'e812fc2f74d71915c3179785a8f99647612bd21ce96f866769ee1bc58682ee3b')
 
 prepare() {
   [[ -d kodi-build ]] && rm -rf kodi-build
@@ -102,17 +103,8 @@ prepare() {
 
   rm -rf system/certs # remove not needed cacert
 
-  patch -p1 -i ../0001-ffmpeg-update-for-official-5.1.4.patch
-
-  # use flatbuffers 23.3.3
-  patch -p1 -i ../flatbuffers-23.3.3.patch
-
-  # expose CPU temp for RPis
-  patch -p1 -i ../pr23703.patch
-
-  # potential fix for thread priority crash
-  # https://gitlab.archlinux.org/archlinux/packaging/packages/kodi/-/issues/3
-  patch -p1 -i ../23227.patch
+  # fix https://forum.kodi.tv/showthread.php?tid=376430
+  patch -p1 -i ../000-temp-revert-fences.patch
 }
 
 build() {
@@ -171,16 +163,13 @@ build() {
     -DCORE_PLATFORM_NAME="x11 gbm"
   )
 
-  # https://github.com/google/flatbuffers/issues/7404
-  CXXFLAGS+=' -Wno-error=restrict'
-
   echo "building kodi"
   cmake "${_args[@]}" ../"xbmc-$_commit"
   make
 }
 
 package_kodi-rpi-legacy() {
-  pkgdesc="Media player and entertainment hub with hw accel for RPi 2, gbm_nexus fork"
+  pkgdesc="Media player and entertainment hub with hw accel for RPi 2, gbm_omega fork"
   depends=(
     'bluez-libs' 'curl' 'dav1d' 'desktop-file-utils' 'hicolor-icon-theme' 'fmt'
     'lcms2' 'libass' 'libbluray' 'libcdio' 'libcec' 'libmicrohttpd' 'libnfs'
@@ -188,7 +177,7 @@ package_kodi-rpi-legacy() {
     'mesa' 'libpipewire' 'python-pillow' 'python-pycryptodomex'
     'python-simplejson' 'shairplay' 'smbclient' 'sndio' 'spdlog' 'sqlite'
     'taglib' 'tinyxml' 'libxkbcommon' 'polkit' 'linux>=5.4.35' 'lzo' 'libinput'
-    'pcre'
+    'pcre' 'libdisplay-info' 'tinyxml2'
   )
   [[ -n "$_clangbuild" ]] && depends+=('glu')
 
diff --git a/alarm/kodi-rpi/PKGBUILD b/alarm/kodi-rpi/PKGBUILD
index dc9ee39b5..dca919836 100644
--- a/alarm/kodi-rpi/PKGBUILD
+++ b/alarm/kodi-rpi/PKGBUILD
@@ -29,7 +29,7 @@ url="https://github.com/graysky2/xbmc/tree/gs-gbm_omega"
 license=('GPL2')
 makedepends=(
   'afpfs-ng' 'bluez-libs' 'cmake' 'curl' 'dav1d' 'doxygen' 'git' 'glew'
-  'gperf' 'hicolor-icon-theme' 'fmt' 'libaacs' 'libass'
+  'gperf' 'hicolor-icon-theme' 'jdk17-openjdk' 'fmt' 'libaacs' 'libass'
   'libbluray' 'libcdio' 'libcec' 'libgl' 'mariadb-libs' 'libmicrohttpd'
   'libmodplug' 'libmpeg2' 'libnfs' 'libplist' 'libpulse'
   'libxrandr' 'libxslt' 'lirc' 'lzo' 'mesa' 'nasm'