+++ /dev/null
-From bbfc36f06c191d3bdea19cacc498afb86bd25404 Mon Sep 17 00:00:00 2001
-From: Craig Andrews <candrews@integralblue.com>
-Date: Thu, 5 Dec 2019 14:49:50 -0500
-Subject: [PATCH] Add missing cassert includes
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Without these includes, ‘assert’ was not declared in this scope errors
-occur.
----
- xbmc/profiles/dialogs/GUIDialogProfileSettings.cpp | 1 +
- xbmc/windowing/GraphicContext.cpp | 2 ++
- 2 files changed, 3 insertions(+)
-
-
---- xbmc-18.4-Leia/xbmc/profiles/dialogs/GUIDialogProfileSettings.cpp~ 2019-08-31 11:34:13.000000000 +0000
-+++ xbmc-18.4-Leia/xbmc/profiles/dialogs/GUIDialogProfileSettings.cpp 2021-08-20 09:13:44.012432476 +0000
-@@ -8,6 +8,7 @@
-
- #include "GUIDialogProfileSettings.h"
-
-+#include <cassert>
- #include <utility>
-
- #include "dialogs/GUIDialogFileBrowser.h"
---- xbmc-18.4-Leia/xbmc/windowing/GraphicContext.cpp~ 2019-08-31 11:34:13.000000000 +0000
-+++ xbmc-18.4-Leia/xbmc/windowing/GraphicContext.cpp 2021-08-20 09:16:14.469325393 +0000
-@@ -24,6 +24,8 @@
- #include "guilib/GUIWindowManager.h"
- #include "guilib/TextureManager.h"
-
-+#include <cassert>
-+
- using namespace KODI::MESSAGING;
-
- CGraphicContext::CGraphicContext(void) = default;
+++ /dev/null
-origin:
-http://cvs.rpmfusion.org/viewvc/rpms/kodi/devel/xbmc-13.0-dvdread.patch?revision=1.1&root=free&view=markup
-
-From 7bc0877dc9715e891159392abf669f970722dece Mon Sep 17 00:00:00 2001
-From: Ken Dreyer <ktdreyer@ktdreyer.com>
-Date: Mon, 6 May 2013 17:07:40 -0600
-Subject: [PATCH 1/3] Fedora: use external dvdread
-
-Original patch by Alex Lancaster <alexlan[AT]fedoraproject org>
-(cherry picked from commit 9f9845af842a376d5bdf70742785e7727695fd03)
----
- bootstrap.mk | 5 -----
- configure.in | 19 -------------------
- lib/libdvd/Makefile.in | 20 +++++++-------------
- 3 files changed, 7 insertions(+), 37 deletions(-)
-
-diff --git a/bootstrap.mk b/bootstrap.mk
-index 8bc4795..1fc31a4 100644
---- a/bootstrap.mk
-+++ b/bootstrap.mk
-@@ -8,7 +8,6 @@ ifneq ($(wildcard lib/libdvd/libdvdcss/configure.ac),)
- BOOTSTRAP_SUBDIRS += lib/libdvd/libdvdcss/configure.ac
- DVD_CSS=lib/libdvd/libdvdcss/configure
- endif
--BOOTSTRAP_SUBDIRS += lib/libdvd/libdvdread/configure.ac
- BOOTSTRAP_SUBDIRS += lib/libdvd/libdvdnav/configure.ac
-
- ifneq ($(wildcard pvr-addons/Makefile.am),)
-@@ -18,10 +17,6 @@ endif
- BOOTSTRAP_TARGETS=$(basename $(BOOTSTRAP_SUBDIRS))
- all: $(BOOTSTRAP_TARGETS)
-
--#preserve order for libdvd. dvdcss (if present) -> dvdread -> dvdnav.
--lib/libdvd/libdvdread/configure: $(DVD_CSS)
--lib/libdvd/libdvdnav/configure: lib/libdvd/libdvdread/configure
--
- %: %.ac
- autoreconf -vif $(@D)
- -@rm -rf $(@D)/autom4te.cache
-diff --git a/configure.ac b/configure.ac
-index beb8aac..343292e 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -2860,27 +2860,9 @@
- --with-pic
- ], [$SKIP_CONFIG_DVDCSS])
-
--XB_CONFIG_MODULE([lib/libdvd/libdvdread], [
-- ./configure2 \
-- --extra-cflags="$CFLAGS $DVDREAD_CFLAGS -I`pwd`/../libdvdcss/src $DROID_DVDLIB_SEEK64" \
-- --prefix="${prefix}" --includedir="${includedir}" --libdir="${libdir}" --datadir="${datadir}" \
-- --host=$host_alias \
-- --build=$build_alias \
-- --target=$target_alias \
-- --enable-static \
-- --disable-shared \
-- --disable-strip \
-- --disable-opts \
-- --cc="$CC" &&
-- mkdir -p `pwd`/../includes/dvdread
-- cp `pwd`/../libdvdread/src/*.h `pwd`/../includes/dvdread
-- cp `pwd`/../libdvdread/src/dvdread/*.h `pwd`/../includes/dvdread
--], [0])
--
- XB_CONFIG_MODULE([lib/libdvd/libdvdnav], [
- ./configure2 \
- --extra-cflags="$CFLAGS $DVDREAD_CFLAGS -I`pwd`/../includes $DROID_DVDLIB_SEEK64" \
-- --extra-ldflags="-L`pwd`/../libdvdread/obj" \
- --with-dvdread-config="`pwd`/../dvdread-config" \
- --prefix="${prefix}" --includedir="${includedir}" --libdir="${libdir}" --datadir="${datadir}" \
- --host=$host_alias \
-diff --git a/lib/libdvd/Makefile.in b/lib/libdvd/Makefile.in
-index 69d2286..1f5eebb 100644
---- a/lib/libdvd/Makefile.in
-+++ b/lib/libdvd/Makefile.in
-@@ -5,8 +5,7 @@ CXX=@CXX@
-
- SYSDIR=@abs_top_srcdir@/system/players/dvdplayer
- SOS= libdvdnav-$(ARCH).so
--DIRS= libdvdread \
-- libdvdnav
-+DIRS= libdvdnav
-
- WRAPPER=@abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper.o
- WRAPPER_MACH_ALIAS=@abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper_mach_alias
-@@ -14,7 +13,7 @@ WRAPPER_MACH_ALIAS=@abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper_mach_al
- ifeq ($(findstring osx,$(ARCH)),osx)
- LDFLAGS +=-bundle -undefined dynamic_lookup -read_only_relocs suppress
- else
--LDFLAGS += -shared -fPIC -rdynamic
-+LDFLAGS += -shared -fPIC -rdynamic -ldvdread
- endif
-
- ifeq ($(ARCH), powerpc-osx)
-@@ -35,8 +34,7 @@ SLIB=$(addprefix $(SYSDIR)/, $(SOS))
-
- DISTCLEAN_FILES=includes/dvdread/*.h \
- includes/dvdcss/*.h \
-- libdvdnav/config.h \
-- libdvdread/config.h
-+ libdvdnav/config.h
-
- .PHONY: $(DIRS) compile
-
-@@ -48,9 +46,9 @@ $(SYSDIR)/libdvdcss-$(ARCH).so: $($(WRAPPER)) libdvdcss/src/.libs/libdvdcss.a
- $(CC) $(LDFLAGS) -Wl,-alias_list,$(WRAPPER_MACH_ALIAS) -o $@ \
- $(WRAPPER) libdvdcss/src/*.o $(BUNDLE1_O)
-
--$(SYSDIR)/libdvdnav-$(ARCH).so: $($(WRAPPER)) $(DVDCSS_A) libdvdread/obj/libdvdread.a libdvdnav/obj/libdvdnav.a
-+$(SYSDIR)/libdvdnav-$(ARCH).so: $($(WRAPPER)) $(DVDCSS_A) libdvdnav/obj/libdvdnav.a
- $(CC) $(LDFLAGS) -Wl,-alias_list,$(WRAPPER_MACH_ALIAS) -o $@ \
-- $(WRAPPER) $(DVDCSS_O) libdvdread/obj/*.o libdvdnav/obj/*.o $(BUNDLE1_O)
-+ $(WRAPPER) $(DVDCSS_O) libdvdnav/obj/*.o $(BUNDLE1_O)
-
- else
-
-@@ -59,8 +57,8 @@ $(SYSDIR)/libdvdcss-$(ARCH).so: $(WRAPPER) libdvdcss/src/.libs/libdvdcss.a
- libdvdcss/src/*.o -Wl,--unresolved-symbols=ignore-all -lm \
- `cat $(WRAPPER:.o=.def)` $(WRAPPER)
-
--$(SYSDIR)/libdvdnav-$(ARCH).so: $(WRAPPER) $(DVDCSS_A) libdvdread/obj/libdvdread.a libdvdnav/obj/libdvdnav.a
-- $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ $(DVDCSS_O) libdvdread/obj/*.o libdvdnav/obj/*.o -lm \
-+$(SYSDIR)/libdvdnav-$(ARCH).so: $(WRAPPER) $(DVDCSS_A) libdvdnav/obj/libdvdnav.a
-+ $(CC) -o $@ $(LDFLAGS) -Wl,--soname,$@ $(DVDCSS_O) libdvdnav/obj/*.o -lm \
- -Wl,--unresolved-symbols=ignore-all \
- `cat $(WRAPPER:.o=.def)` $(WRAPPER)
-
-@@ -70,10 +68,6 @@ libdvdcss/src/.libs/libdvdcss.a: libdvdcss;
- libdvdcss: compile
- $(MAKE) -C $@
-
--libdvdread/obj/libdvdread.a: libdvdread;
--libdvdread: compile
-- $(MAKE) -C $@
--
- libdvdnav/obj/libdvdnav.a: libdvdnav;
- libdvdnav: compile
- $(MAKE) -C $@
---
-1.8.5.3
-
+++ /dev/null
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/DVDCodecUtils.cpp xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/DVDCodecUtils.cpp
---- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/DVDCodecUtils.cpp 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/DVDCodecUtils.cpp 2016-03-31 21:13:02.941888135 +0900
-@@ -42,7 +42,7 @@
- #include "libswscale/swscale.h"
- }
-
--// allocate a new picture (PIX_FMT_YUV420P)
-+// allocate a new picture (AV_PIX_FMT_YUV420P)
- DVDVideoPicture* CDVDCodecUtils::AllocatePicture(int iWidth, int iHeight)
- {
- DVDVideoPicture* pPicture = new DVDVideoPicture;
-@@ -267,11 +267,11 @@
-
- int dstformat;
- if (format == RENDER_FMT_UYVY422)
-- dstformat = PIX_FMT_UYVY422;
-+ dstformat = AV_PIX_FMT_UYVY422;
- else
-- dstformat = PIX_FMT_YUYV422;
-+ dstformat = AV_PIX_FMT_YUYV422;
-
-- struct SwsContext *ctx = sws_getContext(pSrc->iWidth, pSrc->iHeight, PIX_FMT_YUV420P,
-+ struct SwsContext *ctx = sws_getContext(pSrc->iWidth, pSrc->iHeight, AV_PIX_FMT_YUV420P,
- pPicture->iWidth, pPicture->iHeight, (AVPixelFormat)dstformat,
- SWS_FAST_BILINEAR | SwScaleCPUFlags(), NULL, NULL, NULL);
- sws_scale(ctx, src, srcStride, 0, pSrc->iHeight, dst, dstStride);
-@@ -464,25 +464,25 @@
- }
-
- struct EFormatMap {
-- PixelFormat pix_fmt;
-+ AVPixelFormat pix_fmt;
- ERenderFormat format;
- };
-
- static const EFormatMap g_format_map[] = {
-- { PIX_FMT_YUV420P, RENDER_FMT_YUV420P }
--, { PIX_FMT_YUVJ420P, RENDER_FMT_YUV420P }
--, { PIX_FMT_YUV420P10, RENDER_FMT_YUV420P10 }
--, { PIX_FMT_YUV420P16, RENDER_FMT_YUV420P16 }
--, { PIX_FMT_UYVY422, RENDER_FMT_UYVY422 }
--, { PIX_FMT_YUYV422, RENDER_FMT_YUYV422 }
--, { PIX_FMT_VAAPI_VLD, RENDER_FMT_VAAPI }
--, { PIX_FMT_DXVA2_VLD, RENDER_FMT_DXVA }
--, { PIX_FMT_NONE , RENDER_FMT_NONE }
-+ { AV_PIX_FMT_YUV420P, RENDER_FMT_YUV420P }
-+, { AV_PIX_FMT_YUVJ420P, RENDER_FMT_YUV420P }
-+, { AV_PIX_FMT_YUV420P10, RENDER_FMT_YUV420P10 }
-+, { AV_PIX_FMT_YUV420P16, RENDER_FMT_YUV420P16 }
-+, { AV_PIX_FMT_UYVY422, RENDER_FMT_UYVY422 }
-+, { AV_PIX_FMT_YUYV422, RENDER_FMT_YUYV422 }
-+, { AV_PIX_FMT_VAAPI_VLD, RENDER_FMT_VAAPI }
-+, { AV_PIX_FMT_DXVA2_VLD, RENDER_FMT_DXVA }
-+, { AV_PIX_FMT_NONE , RENDER_FMT_NONE }
- };
-
- ERenderFormat CDVDCodecUtils::EFormatFromPixfmt(int fmt)
- {
-- for(const EFormatMap *p = g_format_map; p->pix_fmt != PIX_FMT_NONE; ++p)
-+ for(const EFormatMap *p = g_format_map; p->pix_fmt != AV_PIX_FMT_NONE; ++p)
- {
- if(p->pix_fmt == fmt)
- return p->format;
-@@ -492,10 +492,10 @@
-
- int CDVDCodecUtils::PixfmtFromEFormat(ERenderFormat fmt)
- {
-- for(const EFormatMap *p = g_format_map; p->pix_fmt != PIX_FMT_NONE; ++p)
-+ for(const EFormatMap *p = g_format_map; p->pix_fmt != AV_PIX_FMT_NONE; ++p)
- {
- if(p->format == fmt)
- return p->pix_fmt;
- }
-- return PIX_FMT_NONE;
-+ return AV_PIX_FMT_NONE;
- }
---- xbmc-16.0-Jarvis/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp~ 2016-04-15 00:11:54.000000000 +0300
-+++ xbmc-16.0-Jarvis/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp 2016-04-15 00:17:02.509741123 +0300
-@@ -79,8 +79,8 @@
- STATE_SW_MULTI
- };
-
--enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx
-- , const PixelFormat * fmt )
-+enum AVPixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx
-+ , const AVPixelFormat * fmt )
- {
- CDVDVideoCodecFFmpeg* ctx = (CDVDVideoCodecFFmpeg*)avctx->opaque;
-
-@@ -97,8 +97,8 @@
- return avcodec_default_get_format(avctx, fmt);
- }
-
-- const PixelFormat * cur = fmt;
-- while(*cur != PIX_FMT_NONE)
-+ const AVPixelFormat * cur = fmt;
-+ while(*cur != AV_PIX_FMT_NONE)
- {
- #ifdef HAVE_LIBVDPAU
- if(VDPAU::CDecoder::IsVDPAUFormat(*cur) && CSettings::Get().GetBool("videoplayer.usevdpau"))
-@@ -137,7 +137,7 @@
- #endif
- #ifdef HAVE_LIBVA
- // mpeg4 vaapi decoding is disabled
-- if(*cur == PIX_FMT_VAAPI_VLD && CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOPLAYER_USEVAAPI))
-+ if(*cur == AV_PIX_FMT_VAAPI_VLD && CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOPLAYER_USEVAAPI))
- {
- VAAPI::CDecoder* dec = new VAAPI::CDecoder();
- if(dec->Open(avctx, ctx->m_pCodecContext, *cur, ctx->m_uSurfacesCount) == true)
-@@ -216,11 +216,11 @@
-
- for(std::vector<ERenderFormat>::iterator it = options.m_formats.begin(); it != options.m_formats.end(); ++it)
- {
-- m_formats.push_back((PixelFormat)CDVDCodecUtils::PixfmtFromEFormat(*it));
-+ m_formats.push_back((AVPixelFormat)CDVDCodecUtils::PixfmtFromEFormat(*it));
- if(*it == RENDER_FMT_YUV420P)
-- m_formats.push_back(PIX_FMT_YUVJ420P);
-+ m_formats.push_back(AV_PIX_FMT_YUVJ420P);
- }
-- m_formats.push_back(PIX_FMT_NONE); /* always add none to get a terminated list in ffmpeg world */
-+ m_formats.push_back(AV_PIX_FMT_NONE); /* always add none to get a terminated list in ffmpeg world */
-
- pCodec = avcodec_find_decoder(hints.codec);
-
-@@ -660,7 +660,7 @@
- pDvdVideoPicture->color_transfer = m_pCodecContext->color_trc;
- pDvdVideoPicture->color_matrix = m_pCodecContext->colorspace;
- if(m_pCodecContext->color_range == AVCOL_RANGE_JPEG
-- || m_pCodecContext->pix_fmt == PIX_FMT_YUVJ420P)
-+ || m_pCodecContext->pix_fmt == AV_PIX_FMT_YUVJ420P)
- pDvdVideoPicture->color_range = 1;
- else
- pDvdVideoPicture->color_range = 0;
-@@ -743,8 +743,8 @@
- pDvdVideoPicture->iFlags |= pDvdVideoPicture->data[0] ? 0 : DVP_FLAG_DROPPED;
- pDvdVideoPicture->extended_format = 0;
-
-- PixelFormat pix_fmt;
-- pix_fmt = (PixelFormat)m_pFrame->format;
-+ AVPixelFormat pix_fmt;
-+ pix_fmt = (AVPixelFormat)m_pFrame->format;
-
- pDvdVideoPicture->format = CDVDCodecUtils::EFormatFromPixfmt(pix_fmt);
- return true;
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h
---- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.h 2016-03-31 21:00:47.697798052 +0900
-@@ -46,7 +46,7 @@
- public:
- IHardwareDecoder() {}
- virtual ~IHardwareDecoder() {};
-- virtual bool Open (AVCodecContext* avctx, AVCodecContext* mainctx, const enum PixelFormat, unsigned int surfaces) = 0;
-+ virtual bool Open (AVCodecContext* avctx, AVCodecContext* mainctx, const enum AVPixelFormat, unsigned int surfaces) = 0;
- virtual int Decode (AVCodecContext* avctx, AVFrame* frame) = 0;
- virtual bool GetPicture(AVCodecContext* avctx, AVFrame* frame, DVDVideoPicture* picture) = 0;
- virtual int Check (AVCodecContext* avctx) = 0;
-@@ -77,7 +77,7 @@
- void SetHardware(IHardwareDecoder* hardware);
-
- protected:
-- static enum PixelFormat GetFormat(struct AVCodecContext * avctx, const PixelFormat * fmt);
-+ static enum AVPixelFormat GetFormat(struct AVCodecContext * avctx, const AVPixelFormat * fmt);
-
- int FilterOpen(const std::string& filters, bool scale);
- void FilterClose();
-@@ -121,7 +121,7 @@
- int m_iLastKeyframe;
- double m_dts;
- bool m_started;
-- std::vector<PixelFormat> m_formats;
-+ std::vector<AVPixelFormat> m_formats;
- double m_decoderPts;
- int m_skippedDeint;
- bool m_requestSkipDeint;
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
---- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp 2016-03-31 21:16:03.131015505 +0900
-@@ -479,7 +479,7 @@
- Close();
- }
-
--bool CDecoder::Open(AVCodecContext* avctx, AVCodecContext* mainctx, const enum PixelFormat fmt, unsigned int surfaces)
-+bool CDecoder::Open(AVCodecContext* avctx, AVCodecContext* mainctx, const enum AVPixelFormat fmt, unsigned int surfaces)
- {
- // don't support broken wrappers by default
- // nvidia cards with a vaapi to vdpau wrapper
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
---- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h 2016-03-31 21:14:41.633219057 +0900
-@@ -406,7 +406,7 @@
- CDecoder();
- virtual ~CDecoder();
-
-- virtual bool Open (AVCodecContext* avctx, AVCodecContext* mainctx, const enum PixelFormat, unsigned int surfaces = 0);
-+ virtual bool Open (AVCodecContext* avctx, AVCodecContext* mainctx, const enum AVPixelFormat, unsigned int surfaces = 0);
- virtual int Decode (AVCodecContext* avctx, AVFrame* frame);
- virtual bool GetPicture(AVCodecContext* avctx, AVFrame* frame, DVDVideoPicture* picture);
- virtual void Reset();
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
---- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp 2016-03-31 21:15:34.730618946 +0900
-@@ -483,7 +483,7 @@
- m_vdpauConfig.context = 0;
- }
-
--bool CDecoder::Open(AVCodecContext* avctx, AVCodecContext* mainctx, const enum PixelFormat fmt, unsigned int surfaces)
-+bool CDecoder::Open(AVCodecContext* avctx, AVCodecContext* mainctx, const enum AVPixelFormat fmt, unsigned int surfaces)
- {
- // check if user wants to decode this format with VDPAU
- std::string gpuvendor = g_Windowing.GetRenderVendor();
-@@ -757,7 +757,7 @@
- return 0;
- }
-
--bool CDecoder::IsVDPAUFormat(PixelFormat format)
-+bool CDecoder::IsVDPAUFormat(AVPixelFormat format)
- {
- if (format == AV_PIX_FMT_VDPAU)
- return true;
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h
---- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h 2016-03-31 21:14:26.429677869 +0900
-@@ -556,7 +556,7 @@
- CDecoder();
- virtual ~CDecoder();
-
-- virtual bool Open (AVCodecContext* avctx, AVCodecContext* mainctx, const enum PixelFormat, unsigned int surfaces = 0);
-+ virtual bool Open (AVCodecContext* avctx, AVCodecContext* mainctx, const enum AVPixelFormat, unsigned int surfaces = 0);
- virtual int Decode (AVCodecContext* avctx, AVFrame* frame);
- virtual bool GetPicture(AVCodecContext* avctx, AVFrame* frame, DVDVideoPicture* picture);
- virtual void Reset();
-@@ -571,7 +571,7 @@
- bool Supports(VdpVideoMixerFeature feature);
- bool Supports(EINTERLACEMETHOD method);
- EINTERLACEMETHOD AutoInterlaceMethod();
-- static bool IsVDPAUFormat(PixelFormat fmt);
-+ static bool IsVDPAUFormat(AVPixelFormat fmt);
-
- static void FFReleaseBuffer(void *opaque, uint8_t *data);
- static int FFGetBuffer(AVCodecContext *avctx, AVFrame *pic, int flags);
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
---- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp 2016-03-31 21:16:43.421582924 +0900
-@@ -1617,7 +1617,7 @@
-
- // for video we need a decoder to get desired information into codec context
- if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && st->codec->extradata &&
-- (!st->codec->width || st->codec->pix_fmt == PIX_FMT_NONE))
-+ (!st->codec->width || st->codec->pix_fmt == AV_PIX_FMT_NONE))
- {
- // open a decoder, it will be cleared down by ffmpeg on closing the stream
- if (!st->codec->codec)
-@@ -1674,7 +1674,7 @@
- st = m_pFormatContext->streams[idx];
- if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
- {
-- if (st->codec->width && st->codec->pix_fmt != PIX_FMT_NONE)
-+ if (st->codec->width && st->codec->pix_fmt != AV_PIX_FMT_NONE)
- return true;
- hasVideo = true;
- }
-@@ -1687,7 +1687,7 @@
- st = m_pFormatContext->streams[i];
- if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
- {
-- if (st->codec->width && st->codec->pix_fmt != PIX_FMT_NONE)
-+ if (st->codec->width && st->codec->pix_fmt != AV_PIX_FMT_NONE)
- return true;
- hasVideo = true;
- }
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDFileInfo.cpp xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDFileInfo.cpp
---- xbmc-15.0-Isengard.orig/xbmc/cores/dvdplayer/DVDFileInfo.cpp 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/dvdplayer/DVDFileInfo.cpp 2016-03-31 21:10:31.139940012 +0900
-@@ -275,7 +275,7 @@
-
- uint8_t *pOutBuf = new uint8_t[nWidth * nHeight * 4];
- struct SwsContext *context = sws_getContext(picture.iWidth, picture.iHeight,
-- PIX_FMT_YUV420P, nWidth, nHeight, PIX_FMT_BGRA, SWS_FAST_BILINEAR | SwScaleCPUFlags(), NULL, NULL, NULL);
-+ AV_PIX_FMT_YUV420P, nWidth, nHeight, AV_PIX_FMT_BGRA, SWS_FAST_BILINEAR | SwScaleCPUFlags(), NULL, NULL, NULL);
-
- if (context)
- {
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/FFmpeg.h xbmc-15.0-Isengard/xbmc/cores/FFmpeg.h
---- xbmc-15.0-Isengard.orig/xbmc/cores/FFmpeg.h 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/FFmpeg.h 2016-03-31 21:09:46.016055600 +0900
-@@ -39,13 +39,13 @@
- int flags = 0;
-
- if (cpuFeatures & CPU_FEATURE_MMX)
-- flags |= SWS_CPU_CAPS_MMX;
-+ flags |= PP_CPU_CAPS_MMX;
- if (cpuFeatures & CPU_FEATURE_MMX2)
-- flags |= SWS_CPU_CAPS_MMX2;
-+ flags |= PP_CPU_CAPS_MMX2;
- if (cpuFeatures & CPU_FEATURE_3DNOW)
-- flags |= SWS_CPU_CAPS_3DNOW;
-+ flags |= PP_CPU_CAPS_3DNOW;
- if (cpuFeatures & CPU_FEATURE_ALTIVEC)
-- flags |= SWS_CPU_CAPS_ALTIVEC;
-+ flags |= PP_CPU_CAPS_ALTIVEC;
-
- return flags;
- }
-diff -ur xbmc-15.0-Isengard.orig/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp xbmc-15.0-Isengard/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
---- xbmc-15.0-Isengard.orig/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp 2016-03-31 21:18:55.470144206 +0900
-@@ -2932,7 +2932,7 @@
- }
- else if (m_format == RENDER_FMT_NV12)
- {
-- srcFormat = PIX_FMT_NV12;
-+ srcFormat = AV_PIX_FMT_NV12;
- for (int i = 0; i < 2; i++)
- {
- src[i] = im->plane[i];
-@@ -2941,13 +2941,13 @@
- }
- else if (m_format == RENDER_FMT_YUYV422)
- {
-- srcFormat = PIX_FMT_YUYV422;
-+ srcFormat = AV_PIX_FMT_YUYV422;
- src[0] = im->plane[0];
- srcStride[0] = im->stride[0];
- }
- else if (m_format == RENDER_FMT_UYVY422)
- {
-- srcFormat = PIX_FMT_UYVY422;
-+ srcFormat = AV_PIX_FMT_UYVY422;
- src[0] = im->plane[0];
- srcStride[0] = im->stride[0];
- }
-@@ -2965,7 +2965,7 @@
-
- m_context = sws_getCachedContext(m_context,
- im->width, im->height, (AVPixelFormat)srcFormat,
-- im->width, im->height, (AVPixelFormat)PIX_FMT_BGRA,
-+ im->width, im->height, (AVPixelFormat)AV_PIX_FMT_BGRA,
- SWS_FAST_BILINEAR | SwScaleCPUFlags(), NULL, NULL, NULL);
-
- uint8_t *dst[] = { m_rgbBuffer, 0, 0, 0 };
-@@ -2995,7 +2995,7 @@
-
- if (m_format == RENDER_FMT_YUV420P)
- {
-- srcFormat = PIX_FMT_YUV420P;
-+ srcFormat = AV_PIX_FMT_YUV420P;
- for (int i = 0; i < 3; i++)
- {
- srcTop[i] = im->plane[i];
-@@ -3006,7 +3006,7 @@
- }
- else if (m_format == RENDER_FMT_NV12)
- {
-- srcFormat = PIX_FMT_NV12;
-+ srcFormat = AV_PIX_FMT_NV12;
- for (int i = 0; i < 2; i++)
- {
- srcTop[i] = im->plane[i];
-@@ -3017,7 +3017,7 @@
- }
- else if (m_format == RENDER_FMT_YUYV422)
- {
-- srcFormat = PIX_FMT_YUYV422;
-+ srcFormat = AV_PIX_FMT_YUYV422;
- srcTop[0] = im->plane[0];
- srcStrideTop[0] = im->stride[0] * 2;
- srcBot[0] = im->plane[0] + im->stride[0];
-@@ -3025,7 +3025,7 @@
- }
- else if (m_format == RENDER_FMT_UYVY422)
- {
-- srcFormat = PIX_FMT_UYVY422;
-+ srcFormat = AV_PIX_FMT_UYVY422;
- srcTop[0] = im->plane[0];
- srcStrideTop[0] = im->stride[0] * 2;
- srcBot[0] = im->plane[0] + im->stride[0];
-@@ -3045,7 +3045,7 @@
-
- m_context = sws_getCachedContext(m_context,
- im->width, im->height >> 1, (AVPixelFormat)srcFormat,
-- im->width, im->height >> 1, (AVPixelFormat)PIX_FMT_BGRA,
-+ im->width, im->height >> 1, (AVPixelFormat)AV_PIX_FMT_BGRA,
- SWS_FAST_BILINEAR | SwScaleCPUFlags(), NULL, NULL, NULL);
- uint8_t *dstTop[] = { m_rgbBuffer, 0, 0, 0 };
- uint8_t *dstBot[] = { m_rgbBuffer + m_sourceWidth * m_sourceHeight * 2, 0, 0, 0 };
-diff -ur xbmc-15.0-Isengard.orig/xbmc/video/FFmpegVideoDecoder.cpp xbmc-15.0-Isengard/xbmc/video/FFmpegVideoDecoder.cpp
---- xbmc-15.0-Isengard.orig/xbmc/video/FFmpegVideoDecoder.cpp 2015-07-22 03:41:29.000000000 +0900
-+++ xbmc-15.0-Isengard/xbmc/video/FFmpegVideoDecoder.cpp 2016-03-31 21:37:37.869490415 +0900
-@@ -248,7 +248,7 @@
- return false;
-
- // Due to a bug in swsscale we need to allocate one extra line of data
-- if ( avpicture_alloc( m_pFrameRGB, PIX_FMT_RGB32, m_frameRGBwidth, m_frameRGBheight + 1 ) < 0 )
-+ if ( avpicture_alloc( m_pFrameRGB, AV_PIX_FMT_RGB32, m_frameRGBwidth, m_frameRGBheight + 1 ) < 0 )
- return false;
- }
-
-@@ -283,7 +283,7 @@
-
- // We got the video frame, render it into the picture buffer
- struct SwsContext * context = sws_getContext( m_pCodecCtx->width, m_pCodecCtx->height, m_pCodecCtx->pix_fmt,
-- m_frameRGBwidth, m_frameRGBheight, PIX_FMT_RGB32, SWS_FAST_BILINEAR, NULL, NULL, NULL );
-+ m_frameRGBwidth, m_frameRGBheight, AV_PIX_FMT_RGB32, SWS_FAST_BILINEAR, NULL, NULL, NULL );
-
- sws_scale( context, m_pFrame->data, m_pFrame->linesize, 0, m_pCodecCtx->height,
- m_pFrameRGB->data, m_pFrameRGB->linesize );
---- xbmc-16.0-Jarvis/xbmc/pictures/Picture.cpp~ 2016-02-20 17:21:19.000000000 +0200
-+++ xbmc-16.0-Jarvis/xbmc/pictures/Picture.cpp 2016-04-15 00:56:59.263272399 +0300
-@@ -342,8 +342,8 @@
- uint8_t *out_pixels, unsigned int out_width, unsigned int out_height, unsigned int out_pitch,
- CPictureScalingAlgorithm::Algorithm scalingAlgorithm /* = CPictureScalingAlgorithm::NoAlgorithm */)
- {
-- struct SwsContext *context = sws_getContext(in_width, in_height, PIX_FMT_BGRA,
-- out_width, out_height, PIX_FMT_BGRA,
-+ struct SwsContext *context = sws_getContext(in_width, in_height, AV_PIX_FMT_BGRA,
-+ out_width, out_height, AV_PIX_FMT_BGRA,
- CPictureScalingAlgorithm::ToSwscale(scalingAlgorithm) | SwScaleCPUFlags(), NULL, NULL, NULL);
-
- uint8_t *src[] = { in_pixels, 0, 0, 0 };
+++ /dev/null
-From 18ff80a9c169fb969b75e2143d9f1f234b71a730 Mon Sep 17 00:00:00 2001
-From: Craig Andrews <candrews@integralblue.com>
-Date: Thu, 24 Jun 2021 20:41:11 -0400
-Subject: [PATCH] [utils] include fmt/xchar.h
-
-fmt 8 moved wchar/custom char overloads to xchar.h, so for fmt 8 compatibility, xchar.h must be included
-
-See https://github.com/fmtlib/fmt/commit/76ee490468212f8705a1421b4c88f8f814b2d351
----
- xbmc/utils/StringUtils.h | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/xbmc/utils/StringUtils.h b/xbmc/utils/StringUtils.h
-index ca6f82953d90a..2dc5c3f03af2f 100644
---- a/xbmc/utils/StringUtils.h
-+++ b/xbmc/utils/StringUtils.h
-@@ -36,6 +36,9 @@
- #if FMT_VERSION >= 40000
- #include <fmt/printf.h>
- #endif
-+#if FMT_VERSION >= 80000
-+#include <fmt/xchar.h>
-+#endif
-
- #include "XBDateTime.h"
- #include "utils/params_check_macros.h"
+++ /dev/null
---- xbmc-16.1-Jarvis/xbmc/filesystem/FTPParse.cpp.orig 2016-04-24 08:48:30.000000000 +0200
-+++ xbmc-16.1-Jarvis/xbmc/filesystem/FTPParse.cpp 2017-12-11 17:11:03.079955624 +0100
-@@ -34,6 +34,8 @@
- #include <cmath>
- #include "FTPParse.h"
-
-+using std::string;
-+
- CFTPParse::CFTPParse()
- {
- m_flagtrycwd = 0;
---- xbmc-16.1-Jarvis/lib/cximage-6.0/CxImage/ximadsp.cpp.orig 2016-04-24 08:48:30.000000000 +0200
-+++ xbmc-16.1-Jarvis/lib/cximage-6.0/CxImage/ximadsp.cpp 2017-12-11 18:34:55.026753161 +0100
-@@ -3,12 +3,14 @@
- * CxImage version 6.0.0 02/Feb/2008
- */
-
-+#if CXIMAGE_SUPPORT_DSP
-+// include <queue> before any local headers, as they define min/max as macros
-+#include <queue>
-+
- #include "ximage.h"
-
- #include "ximaiter.h"
-
--#if CXIMAGE_SUPPORT_DSP
--
- ////////////////////////////////////////////////////////////////////////////////
- /**
- * Converts the image to B&W.
-@@ -3477,7 +3479,6 @@
- }
-
- ////////////////////////////////////////////////////////////////////////////////
--#include <queue>
- ////////////////////////////////////////////////////////////////////////////////
- /**
- * Flood Fill
+++ /dev/null
---- xbmc-12.3-Frodo/xbmc/guilib/JpegIO.cpp~ 2013-12-12 22:47:49.000000000 +0100
-+++ xbmc-12.3-Frodo/xbmc/guilib/JpegIO.cpp 2014-01-03 18:43:06.138467273 +0100
-@@ -341,7 +341,7 @@
- else
- {
- jpeg_save_markers (&m_cinfo, JPEG_APP0 + 1, 0xFFFF);
-- jpeg_read_header(&m_cinfo, true);
-+ jpeg_read_header(&m_cinfo, TRUE);
-
- /* libjpeg can scale the image for us if it is too big. It must be in the format
- num/denom, where (for our purposes) that is [1-8]/8 where 8/8 is the unscaled image.
---- xbmc-12.3-Frodo/xbmc/guilib/JpegIO.h~ 2014-01-03 11:07:38.000000000 +0100
-+++ xbmc-12.3-Frodo/xbmc/guilib/JpegIO.h 2014-01-03 11:08:16.622039556 +0100
-@@ -26,6 +26,8 @@
- #pragma comment(lib, "turbojpeg-static.lib")
- #endif
-
-+#undef TRUE
-+#undef FALSE
- #include <jpeglib.h>
- #include "utils/StdString.h"
-
---- xbmc-12.3-Frodo/lib/cximage-6.0/CxImage/ximajpg.cpp~ 2013-12-12 22:47:49.000000000 +0100
-+++ xbmc-12.3-Frodo/lib/cximage-6.0/CxImage/ximajpg.cpp 2014-01-03 11:52:50.862020197 +0100
-@@ -10,7 +10,7 @@
- #if CXIMAGE_SUPPORT_JPG
-
- #ifdef _LINUX
--#include <jmorecfg.h>
-+//#include <jmorecfg.h>
- #else
- #include "../jpeg/jmorecfg.h"
- #endif
-@@ -659,7 +659,7 @@
- if ((GetCodecOption(CXIMAGE_FORMAT_JPG) & ENCODE_SMOOTHING) != 0)
- cinfo.smoothing_factor = m_nSmoothing;
-
-- jpeg_set_quality(&cinfo, GetJpegQuality(), (GetCodecOption(CXIMAGE_FORMAT_JPG) & ENCODE_BASELINE) != 0);
-+ jpeg_set_quality(&cinfo, GetJpegQuality(), (boolean)((GetCodecOption(CXIMAGE_FORMAT_JPG) & ENCODE_BASELINE) != 0));
-
- //#ifdef C_PROGRESSIVE_SUPPORTED
- if ((GetCodecOption(CXIMAGE_FORMAT_JPG) & ENCODE_PROGRESSIVE) != 0)
---- xbmc-12.3-Frodo/lib/cximage-6.0/CxImage/ximajpg.h~ 2014-01-03 11:51:37.000000000 +0100
-+++ xbmc-12.3-Frodo/lib/cximage-6.0/CxImage/ximajpg.h 2014-01-03 18:05:40.095150198 +0100
-@@ -29,6 +29,8 @@
-
- extern "C" {
- #ifdef _LINUX
-+#undef TRUE
-+#undef FALSE
- #include <jpeglib.h>
- #include <jerror.h>
- #else
#
# Conditional build:
# Features:
-%bcond_with afpclient # AFP support via libafpclient
-%bcond_without airplay # AirPlay support
%bcond_with airtunes # AirTunes support
-%bcond_without alsa # ALSA support
-%bcond_without avahi # Avahi support
-%bcond_without dbus # DBUS support
%bcond_without dvdcss # DVDCSS support
-%bcond_without opengl # OpenGL rendering
-%bcond_with gtest # configure Google Test Framework
-%bcond_without joystick # SDL joystick support
-%bcond_without libcap # libcap support
-%bcond_with libcec # libcec support
-%bcond_without gif # GIF support via giflib
-%bcond_without libusb # libusb support
-%bcond_with mdnsembedded # mDNSEmbedded support
-%bcond_without mysql # MySQL
-%bcond_without nfs # NFS support via libnfs
-%bcond_without nonfree # componentents with non-compliant licenses
-%bcond_with openmax # OpenMax decoding, requires OpenGLES
+%bcond_without gbm # GBM platform
%bcond_without optical_drive # optical drive
-%bcond_without projectm # ProjectM visualisation
-%bcond_without pulse # PulseAudio support
-%bcond_without rtmp # RTMP support via librtmp
-%bcond_without samba # SAMBA support
-%bcond_without sdl # SDL
-%bcond_without ssh # SSH SFTP support
-%bcond_without texturepacker # texturepacker support
-%bcond_without udev # udev support
%bcond_without upnp # UPnP support
-%bcond_without vaapi # VAAPI decoding
-%bcond_without vdpau # VDPAU decoding
-%bcond_with vtbdecoder # VTBDecoder decoding (VTB Decoder not supported on this platform)
-%bcond_without webserver # webserver
-%bcond_without x11 # x11 'Linux Only'
-%bcond_without xrandr # XRandR support
-%bcond_with asap_codec # ASAP ADPCM support
+%bcond_without x11 # X11 platform
%bcond_with gles # OpenGLES rendering
-%bcond_without libbluray # libbluray support
-%bcond_without mid # MID support
-%bcond_with profiling # gprof profiling
-%bcond_with tegra # Tegra2 arm
-%bcond_with wayland # wayland
+%bcond_without wayland # Wayland platform
# System libs:
%bcond_without system_ffmpeg # build with system ffmpeg
-%bcond_with system_dvdread # build with system dvdread
+# CPU instructions
+%bcond_with avx # use AVX instructions
+%bcond_with avx2 # use AVX2 instructions
+%bcond_with neon # use NEON instructions
+%bcond_with sse # use SSE instructions
+%bcond_with sse2 # use SSE2 instructions
+%bcond_with sse3 # use SSE3 instructions
+%bcond_with ssse3 # use SSSE3 instructions
+%bcond_with sse41 # use SSE4.1 instructions
+%bcond_with sse42 # use SSE4.2 instructions
-%define codename Leia
+%ifarch %{arm_with_neon}
+%define with_neon 1
+%endif
+%ifarch %{x86_with_sse}
+%define with_sse 1
+%endif
+%ifarch %{x86_with_sse2}
+%define with_sse2 1
+%endif
+
+%define codename Matrix
#define subver rc1
Summary: Kodi is a free and open source media-player and entertainment hub
Name: kodi
-Version: 18.4
-Release: 8
+Version: 19.3
+Release: 1
License: GPL v2+ and GPL v3+
Group: Applications/Multimedia
#Source0Download: https://github.com/xbmc/xbmc/releases
Source0: https://github.com/xbmc/xbmc/archive/%{version}-%{codename}.tar.gz
-# Source0-md5: 5e5e1e2527c2619785597b04e35fda6c
-Patch0: jpeglib-boolean.patch
-Patch1: disable-static.patch
-Patch2: dvdread.patch
-Patch3: ffmpeg3.patch
-Patch4: gcc5.patch
-Patch5: libdvd.patch
-Patch6: microhttpd.patch
-Patch7: assert.patch
-Patch8: fmt.patch
+# Source0-md5: 623583e6eac14668468d6c5628b8f1c5
+Patch0: disable-static.patch
+Patch1: libdvd.patch
URL: https://kodi.tv/
BuildRequires: EGL-devel
+%{?with_gbm:BuildRequires: Mesa-libgbm-devel}
+# for eglextchromium.h
+%{?with_x11:BuildRequires: Mesa-libEGL-devel}
+%if %{without gles}
BuildRequires: OpenGL-GLU-devel
BuildRequires: OpenGL-devel
-BuildRequires: SDL2-devel
-BuildRequires: alsa-lib-devel
+%if %{with x11}
+BuildRequires: OpenGL-GLX-devel
+%endif
+%endif
+%{?with_gles:BuildRequires: OpenGLES-devel}
+BuildRequires: alsa-lib-devel >= 1.0.27
BuildRequires: avahi-devel
BuildRequires: bluez-libs-devel >= 4.99
-BuildRequires: bzip2-devel
BuildRequires: cmake >= 3.4
BuildRequires: crossguid-devel
BuildRequires: curl-devel
+BuildRequires: dav1d-devel
BuildRequires: dbus-devel
-BuildRequires: libfmt-devel >= 3.0.1
-BuildRequires: rapidjson-devel >= 1.1.0
-# libavcodec >= 56.26.100 libavfilter >= 5.11.102 libavformat >= 56.25.101 libavutil >= 54.20.100 libpostproc >= 53.3.100 libswscale >= 3.1.101 libswresample >= 1.1.100
-%{?with_system_ffmpeg:BuildRequires: ffmpeg-devel >= 2.4.4}
-BuildRequires: flac-devel
+# libavcodec >= 58.91.100 libavfilter >= 7.85.100 libavformat >= 58.45.100 libavutil >= 56.51.100 libpostproc >= 55.7.100 libswscale >= 5.7.100 libswresample >= 3.7.100
+%{?with_system_ffmpeg:BuildRequires: ffmpeg-devel >= 4.3}
BuildRequires: flatbuffers-devel >= 1.9.0
BuildRequires: fontconfig-devel
BuildRequires: freetype-devel
BuildRequires: fribidi-devel
-BuildRequires: gawk
-BuildRequires: gettext-autopoint
+BuildRequires: fstrcmp-devel >= 0.7
BuildRequires: gettext-tools
-%{?with_gif:BuildRequires: giflib-devel}
-BuildRequires: gperf
-BuildRequires: jre
+BuildRequires: giflib-devel >= 5
BuildRequires: lcms2-devel
BuildRequires: libass-devel
BuildRequires: libatomic-devel
-BuildRequires: libbluray-devel >= 0.7.0
+BuildRequires: libbluray-devel >= 0.9.3
BuildRequires: libcap-devel
-BuildRequires: libcdio-devel
-%{?with_libcec:BuildRequires: libcec-devel >= 3.0.0}
-BuildRequires: libdrm-devel
-BuildRequires: libdvdcss-devel >= 1.4.1
-%{?with_system_dvdread:BuildRequires: libdvdread-devel}
-BuildRequires: libgcrypt-devel
+BuildRequires: libcdio-c++-devel >= 2.1.0
+BuildRequires: libcdio-devel >= 2.1.0
+BuildRequires: libcec-devel >= 3.0.0
+BuildRequires: libdrm-devel >= 2.4.95
+%{?with_dvdcss:BuildRequires: libdvdcss-devel >= 1.4.1}
+BuildRequires: libdvdnav-devel
+BuildRequires: libdvdread-devel
+BuildRequires: libfmt-devel >= 6.1.2
+%{?with_gbm:BuildRequires: libinput-devel}
BuildRequires: libjpeg-devel
-BuildRequires: libltdl-devel
BuildRequires: libmicrohttpd-devel >= 0.9.40
-BuildRequires: libogg-devel
-BuildRequires: libplist-devel
+BuildRequires: libnfs-devel
+BuildRequires: libplist-devel >= 2.0
BuildRequires: libpng-devel
-BuildRequires: librtmp-devel
BuildRequires: libsmbclient-devel
-BuildRequires: libssh-devel
-BuildRequires: libstdc++-devel
-BuildRequires: libtool
+BuildRequires: libstdc++-devel >= 6:5
+BuildRequires: libudfread-devel >= 1.0.0
BuildRequires: libuuid-devel
BuildRequires: libva-devel
-BuildRequires: libva-x11-devel
+BuildRequires: libva-drm-devel
+%{?with_wayland:BuildRequires: libva-wayland-devel}
+%{?with_x11:BuildRequires: libva-x11-devel}
+%if %{with x11} && %{without gles}
BuildRequires: libvdpau-devel
-BuildRequires: libvorbis-devel
+%endif
BuildRequires: libxml2-devel >= 2.0
BuildRequires: libxslt-devel
-BuildRequires: lzo-devel
+BuildRequires: lirc-devel
+BuildRequires: lzo-devel >= 2
BuildRequires: mysql-devel
-%ifarch %{ix86}
-BuildRequires: nasm
-%endif
-BuildRequires: fstrcmp-devel >= 0.7
-BuildRequires: openssl-devel
+BuildRequires: openssl-devel >= 1.0.2
BuildRequires: pcre-cxx-devel
BuildRequires: pkgconfig
-BuildRequires: pkgconfig(egl)
-BuildRequires: pkgconfig(gl)
-BuildRequires: pkgconfig(glu)
-BuildRequires: pulseaudio-devel >= 1.0
-BuildRequires: python-devel >= 1:2.6
+BuildRequires: pulseaudio-devel >= 11.0.0
+BuildRequires: python3-devel >= 1:3.8
+BuildRequires: rapidjson-devel >= 1.1.0
BuildRequires: rpm-pythonprov
-BuildRequires: rpmbuild(macros) >= 1.566
+BuildRequires: rpmbuild(macros) >= 2.007
BuildRequires: sed >= 4.0
+BuildRequires: spdlog-devel >= 1.5.0
BuildRequires: sqlite3-devel
BuildRequires: swig
-BuildRequires: taglib-devel >= 1.8
+BuildRequires: taglib-devel >= 1.9.0
BuildRequires: tinyxml-devel >= 2.6.2
BuildRequires: udev-devel
-BuildRequires: unzip
+%if %{with wayland}
+BuildRequires: wayland-protocols >= 1.7
+BuildRequires: waylandpp-devel >= 0.2.2
+%endif
+%if %{with x11}
BuildRequires: xorg-lib-libX11-devel
BuildRequires: xorg-lib-libXext-devel
BuildRequires: xorg-lib-libXrandr-devel
-BuildRequires: yajl-devel >= 2
-BuildRequires: zip
+%endif
+%if %{with gbm} || %{with wayland}
+BuildRequires: xorg-lib-libxkbcommon-devel >= 0.4.1
+%endif
BuildRequires: zlib-devel
-# kodi uses it's own, modified squish
-BuildConflicts: squish-devel
-#https://github.com/sahlberg/libnfs
-BuildRequires: libnfs-devel
-#http://sites.google.com/site/alexthepuffin/home
-#BuildRequires: afpfs-ng-devel
-#BuildRequires: shairplay-devel
+Requires: %{name}-common = %{version}-%{release}
Requires: /usr/bin/glxinfo
-Requires: SDL >= 1.2.14-5
+Requires: alsa-lib >= 1.0.27
+Requires: desktop-file-utils
+Requires: ffmpeg-libs >= 4.3
+Requires: flatbuffers >= 1.9.0
+Requires: hicolor-icon-theme
+Requires: libbluray >= 0.9.3
+Requires: libcdio >= 2.1.0
+Requires: libcdio-c++ >= 2.1.0
+Requires: libcec >= 3.0.0
+Requires: libdrm >= 2.4.95
+%{?with_dvdcss:Requires: libdvdcss >= 1.4.1}
+Requires: libfmt >= 6.1.2
+Requires: libmicrohttpd >= 0.9.40
+Requires: libplist >= 2.0
+Requires: libudfread >= 1.0.0
Requires: lsb-release
-Requires: xorg-app-xdpyinfo
-# dlopened libraries:
-# grep 'DLL_PATH_.*lib.*\.so' xbmc/DllPaths_generated.h | grep -v special://
-Requires: curl-libs
-Requires: libass
-Requires: libbluray
-Requires: libmodplug
-Requires: libmpeg2-libs
-Requires: libogg
-Requires: libplist
-Requires: libvorbis
+Requires: openssl >= 1.0.2
+Requires: pulseaudio-libs >= 11.0.0
+Requires: spdlog >= 1.5.0
+Requires: taglib >= 1.9.0
+Requires: tinyxml >= 2.6.2
+%{?with_wayland:Requires: waylandpp >= 0.2.2}
+%if %{with gbm} || %{with wayland}
+Requires: xorg-lib-libxkbcommon >= 0.4.1
+%endif
Obsoletes: xbmc < 14.0
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
-# extracting debug info from /home/users/glen/tmp/kodi-18.0-root-glen/usr/lib64/kodi/kodi-x11
-# /usr/lib/rpm/bin/debugedit: canonicalization unexpectedly shrank by one character
-%define _noautostrip kodi-x11
-%define _enable_debug_packages 0
-
%description
Kodi Entertainment Center (formerly XBMC) is a free and open-source
media player software developed by the XBMC Foundation, a non-profit
and view most videos, music, such as podcasts from the internet, and
all common digital media files from local and network storage media.
+%package common
+Summary: Common files for Kodi
+BuildArch: noarch
+
+%description common
+Common files for Kodi.
+
+%package devel
+Summary: Header files for Kodi
+Group: Development/Libraries
+Requires: %{name}-common = %{version}-%{release}
+
+%description devel
+Header files for Kodi.
+
%prep
%setup -q -n xbmc-%{version}%{?subver}-%{codename}
-#%patch0 -p1
+%patch0 -p1
%patch1 -p1
-%{?with_system_dvdread:%patch2 -p1}
-#%patch3 -p1
-#%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
%{__rm} -r lib/win32
%endif
%build
-install -d build
-cd build
-# cmake not picking up include path from pkgconfig
-# https://trac.kodi.tv/ticket/16861
-%define specflags -I/usr/include/freetype2
-%cmake \
- -DENABLE_AIRTUNES=%{__true_false airtunes} \
- -DENABLE_DVDCSS=%{__true_false dvdcss} \
- -DENABLE_INTERNAL_CROSSGUID=OFF \
- -DENABLE_INTERNAL_FFMPEG=%{!?with_system_ffmpeg:ON}%{?with_system_ffmpeg:OFF} \
- -DENABLE_INTERNAL_LIBDVD=OFF \
- -DENABLE_OPTICAL=%{__true_false optical_drive} \
- -DENABLE_UPNP=%{__true_false upnp} \
- ..
-%if 0
-%configure \
- ac_cv_type__Bool=yes \
- --disable-silent-rules \
- --disable-debug \
- --disable-ccache \
- --with-ffmpeg=%{!?with_system_ffmpeg:force}%{?with_system_ffmpeg:shared} \
- %{__enable_disable afpclient} \
- %{__enable_disable airplay} \
- %{__enable_disable alsa} \
- %{__enable_disable asap_codec asap-codec} \
- %{__enable_disable avahi} \
- %{__enable_disable dbus} \
- %{__enable_disable gles} \
- %{__enable_disable opengl gl} \
- %{__enable_disable gtest} \
- %{__enable_disable joystick} \
- %{__enable_disable libbluray} \
- %{__enable_disable libcap} \
- %{__enable_disable libcec} \
- %{__enable_disable gif libgif} \
- %{__enable_disable libusb} \
- %{__enable_disable mdnsembedded} \
- %{__enable_disable mid} \
- %{__enable_disable mysql} \
- %{__enable_disable nfs} \
- %{__enable_disable nonfree non-free} \
- %{__enable_disable openmax} \
- %{__enable_disable profiling} \
- %{__enable_disable pulse} \
- %{__enable_disable rtmp} \
- %{__enable_disable samba} \
- %{__enable_disable sdl} \
- %{__enable_disable ssh} \
- %{__enable_disable tegra} \
- %{__enable_disable texturepacker} \
- %{__enable_disable udev} \
- %{__enable_disable upnp} \
- %{__enable_disable vaapi} \
- %{__enable_disable vdpau} \
- %{__enable_disable vtbdecoder} \
- %{__enable_disable wayland} \
- %{__enable_disable webserver} \
- %{__enable_disable x11} \
- %{__enable_disable xrandr} \
- %{nil}
-%endif
+%cmake -B build \
+ -DAPP_RENDER_SYSTEM=%{!?with_gles:gl}%{?with_gles:gles} \
+ -DCORE_PLATFORM_NAME="%{?with_gbm:GBM;}%{?with_x11:X11;}%{?with_wayland:WAYLAND;}" \
+ %{cmake_on_off airtunes ENABLE_AIRTUNES} \
+ %{cmake_on_off dvdcss ENABLE_DVDCSS} \
+ -DENABLE_INTERNAL_CROSSGUID:BOOL=OFF \
+ -DENABLE_INTERNAL_DAV1D:BOOL=OFF \
+ -DENABLE_INTERNAL_FFMPEG:BOOLD=%{?with_system_ffmpeg:OFF}%{!?with_system_ffmpeg:ON} \
+ -DENABLE_INTERNAL_FLATBUFFERS:BOOL=OFF \
+ -DENABLE_INTERNAL_FMT:BOOL=OFF \
+ -DENABLE_INTERNAL_FSTRCMP:BOOL=OFF \
+ -DENABLE_INTERNAL_LIBDVD:BOOL=OFF \
+ -DENABLE_INTERNAL_RapidJSON:BOOL=OFF \
+ -DENABLE_INTERNAL_SPDLOG:BOOL=OFF \
+ -DENABLE_INTERNAL_UDFREAD:BOOL=OFF \
+ -DENABLE_LDGOLD:BOOL=OFF \
+ -DENABLE_TESTING:BOOL=OFF \
+ %{cmake_on_off optical_drive ENABLE_OPTICAL} \
+ %{cmake_on_off upnp ENABLE_UPNP} \
+ %{cmake_on_off avx ENABLE_AVX} \
+ %{cmake_on_off avx2 ENABLE_AVX2} \
+ %{cmake_on_off neon ENABLE_NEON} \
+ %{cmake_on_off sse ENABLE_SSE} \
+ %{cmake_on_off sse2 ENABLE_SSE2} \
+ %{cmake_on_off sse3 ENABLE_SSE3} \
+ %{cmake_on_off ssse3 ENABLE_SSSE3} \
+ %{cmake_on_off sse41 ENABLE_SSE4_1} \
+ %{cmake_on_off sse42 ENABLE_SSE4_2}
-%{__make}
+%{__make} -C build
%install
rm -rf $RPM_BUILD_ROOT
+
%{__make} -C build install \
DESTDIR=$RPM_BUILD_ROOT
# not packaged
%{__rm} $RPM_BUILD_ROOT%{_prefix}/lib/firewalld/services/kodi-*.xml
-# no -devel package yet
-%{__rm} -r $RPM_BUILD_ROOT%{_includedir}/kodi
-
%clean
rm -rf $RPM_BUILD_ROOT
+%post
+%update_icon_cache hicolor
+%update_desktop_database
+
+%postun
+%update_icon_cache hicolor
+%update_desktop_database_postun
+
%files
%defattr(644,root,root,755)
%doc README.md docs/README.Linux.md
+%attr(755,root,root) %{_bindir}/JsonSchemaBuilder
%attr(755,root,root) %{_bindir}/TexturePacker
%attr(755,root,root) %{_bindir}/kodi
%attr(755,root,root) %{_bindir}/kodi-standalone
-%{_datadir}/%{name}
+%{_datadir}/%{name}/addons
+%{_datadir}/%{name}/media
+%{_datadir}/%{name}/privacy-policy.txt
+%{_datadir}/%{name}/system
+%{_datadir}/%{name}/userdata
%attr(755,root,root) %{_libdir}/%{name}
%{_desktopdir}/kodi.desktop
%{_iconsdir}/hicolor/*/apps/%{name}.png
+%{_datadir}/metainfo/org.xbmc.kodi.metainfo.xml
%{_datadir}/xsessions/kodi.desktop
+
+%files common
+%defattr(644,root,root,755)
+%dir %{_datadir}/%{name}
+
+%files devel
+%defattr(644,root,root,755)
+%{_includedir}/kodi
+%{_datadir}/%{name}/cmake
+++ /dev/null
-From 59f9ee47dc60386f05bc331da9fd0420e22ed344 Mon Sep 17 00:00:00 2001
-From: Craig Andrews <candrews@integralblue.com>
-Date: Thu, 2 Jul 2020 14:36:09 -0400
-Subject: [PATCH] Compatibility with libmicrohttpd 0.9.71
-
-From the libmicrohttpd 0.9.71 release notes:
-
-The release introduces an 'enum MHD_Result' instead of
-for certain API misuse bugs by providing better types (not everything is
-an 'int'). While this does NOT change the binary API, this change
-_will_ cause compiler warnings for all legacy code -- until 'int' is
-replaced with 'enum MHD_Result'.
----
- xbmc/network/WebServer.cpp | 45 ++++++++++---------
- xbmc/network/WebServer.h | 30 ++++++-------
- .../httprequesthandler/HTTPFileHandler.cpp | 2 +-
- .../httprequesthandler/HTTPFileHandler.h | 2 +-
- .../HTTPImageTransformationHandler.cpp | 2 +-
- .../HTTPImageTransformationHandler.h | 2 +-
- .../httprequesthandler/HTTPJsonRpcHandler.cpp | 2 +-
- .../httprequesthandler/HTTPJsonRpcHandler.h | 2 +-
- .../httprequesthandler/HTTPPythonHandler.cpp | 2 +-
- .../httprequesthandler/HTTPPythonHandler.h | 2 +-
- .../HTTPRequestHandlerUtils.cpp | 4 +-
- .../HTTPRequestHandlerUtils.h | 4 +-
- .../HTTPWebinterfaceAddonsHandler.cpp | 2 +-
- .../HTTPWebinterfaceAddonsHandler.h | 2 +-
- .../httprequesthandler/IHTTPRequestHandler.h | 8 +++-
- 15 files changed, 60 insertions(+), 51 deletions(-)
-
-diff --git a/xbmc/network/WebServer.cpp b/xbmc/network/WebServer.cpp
-index 783404227785..53549aafa9ce 100644
---- a/xbmc/network/WebServer.cpp
-+++ b/xbmc/network/WebServer.cpp
-@@ -86,7 +86,7 @@ static MHD_Response* create_response(size_t size, const void* data, int free, in
- return MHD_create_response_from_buffer(size, const_cast<void*>(data), mode);
- }
-
--int CWebServer::AskForAuthentication(const HTTPRequest& request) const
-+MHD_RESULT CWebServer::AskForAuthentication(const HTTPRequest& request) const
- {
- struct MHD_Response *response = create_response(0, nullptr, MHD_NO, MHD_NO);
- if (!response)
-@@ -95,7 +95,7 @@ int CWebServer::AskForAuthentication(const HTTPRequest& request) const
- return MHD_NO;
- }
-
-- int ret = AddHeader(response, MHD_HTTP_HEADER_CONNECTION, "close");
-+ MHD_RESULT ret = AddHeader(response, MHD_HTTP_HEADER_CONNECTION, "close");
- if (!ret)
- {
- CLog::Log(LOGERROR, "CWebServer[%hu]: unable to prepare HTTP Unauthorized response", m_port);
-@@ -105,7 +105,10 @@ int CWebServer::AskForAuthentication(const HTTPRequest& request) const
-
- LogResponse(request, MHD_HTTP_UNAUTHORIZED);
-
-- ret = MHD_queue_basic_auth_fail_response(request.connection, "XBMC", response);
-+ // This MHD_RESULT cast is only necessary for libmicrohttpd 0.9.71
-+ // The return type of MHD_queue_basic_auth_fail_response was fixed for future versions
-+ // See https://git.gnunet.org/libmicrohttpd.git/commit/?id=860b42e9180da4dcd7e8690a3fcdb4e37e5772c5
-+ ret = static_cast<MHD_RESULT>(MHD_queue_basic_auth_fail_response(request.connection, "XBMC", response));
- MHD_destroy_response(response);
-
- return ret;
-@@ -135,7 +138,7 @@ bool CWebServer::IsAuthenticated(const HTTPRequest& request) const
- return authenticated;
- }
-
--int CWebServer::AnswerToConnection(void *cls, struct MHD_Connection *connection,
-+MHD_RESULT CWebServer::AnswerToConnection(void *cls, struct MHD_Connection *connection,
- const char *url, const char *method,
- const char *version, const char *upload_data,
- size_t *upload_data_size, void **con_cls)
-@@ -163,7 +166,7 @@ int CWebServer::AnswerToConnection(void *cls, struct MHD_Connection *connection,
- return webServer->HandlePartialRequest(connection, connectionHandler, request, upload_data, upload_data_size, con_cls);
- }
-
--int CWebServer::HandlePartialRequest(struct MHD_Connection *connection, ConnectionHandler* connectionHandler, const HTTPRequest& request, const char *upload_data, size_t *upload_data_size, void **con_cls)
-+MHD_RESULT CWebServer::HandlePartialRequest(struct MHD_Connection *connection, ConnectionHandler* connectionHandler, const HTTPRequest& request, const char *upload_data, size_t *upload_data_size, void **con_cls)
- {
- std::unique_ptr<ConnectionHandler> conHandler(connectionHandler);
-
-@@ -276,7 +279,7 @@ int CWebServer::HandlePartialRequest(struct MHD_Connection *connection, Connecti
- return SendErrorResponse(request, MHD_HTTP_NOT_FOUND, request.method);
- }
-
--int CWebServer::HandlePostField(void *cls, enum MHD_ValueKind kind, const char *key,
-+MHD_RESULT CWebServer::HandlePostField(void *cls, enum MHD_ValueKind kind, const char *key,
- const char *filename, const char *content_type,
- const char *transfer_encoding, const char *data, uint64_t off,
- size_t size)
-@@ -294,13 +297,13 @@ int CWebServer::HandlePostField(void *cls, enum MHD_ValueKind kind, const char *
- return MHD_YES;
- }
-
--int CWebServer::HandleRequest(const std::shared_ptr<IHTTPRequestHandler>& handler)
-+MHD_RESULT CWebServer::HandleRequest(const std::shared_ptr<IHTTPRequestHandler>& handler)
- {
- if (handler == nullptr)
- return MHD_NO;
-
- HTTPRequest request = handler->GetRequest();
-- int ret = handler->HandleRequest();
-+ MHD_RESULT ret = handler->HandleRequest();
- if (ret == MHD_NO)
- {
- CLog::Log(LOGERROR, "CWebServer[%hu]: failed to handle HTTP request for %s", m_port, request.pathUrl.c_str());
-@@ -348,7 +351,7 @@ int CWebServer::HandleRequest(const std::shared_ptr<IHTTPRequestHandler>& handle
- return FinalizeRequest(handler, responseDetails.status, response);
- }
-
--int CWebServer::FinalizeRequest(const std::shared_ptr<IHTTPRequestHandler>& handler, int responseStatus, struct MHD_Response *response)
-+MHD_RESULT CWebServer::FinalizeRequest(const std::shared_ptr<IHTTPRequestHandler>& handler, int responseStatus, struct MHD_Response *response)
- {
- if (handler == nullptr || response == nullptr)
- return MHD_NO;
-@@ -562,7 +565,7 @@ void CWebServer::FinalizePostDataProcessing(ConnectionHandler *connectionHandler
- MHD_destroy_post_processor(connectionHandler->postprocessor);
- }
-
--int CWebServer::CreateMemoryDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const
-+MHD_RESULT CWebServer::CreateMemoryDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const
- {
- if (handler == nullptr)
- return MHD_NO;
-@@ -620,7 +623,7 @@ int CWebServer::CreateMemoryDownloadResponse(const std::shared_ptr<IHTTPRequestH
- return CreateRangedMemoryDownloadResponse(handler, response);
- }
-
--int CWebServer::CreateRangedMemoryDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const
-+MHD_RESULT CWebServer::CreateRangedMemoryDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const
- {
- if (handler == nullptr)
- return MHD_NO;
-@@ -700,7 +703,7 @@ int CWebServer::CreateRangedMemoryDownloadResponse(const std::shared_ptr<IHTTPRe
- return CreateMemoryDownloadResponse(request.connection, result.c_str(), result.size(), false, true, response);
- }
-
--int CWebServer::CreateRedirect(struct MHD_Connection *connection, const std::string &strURL, struct MHD_Response *&response) const
-+MHD_RESULT CWebServer::CreateRedirect(struct MHD_Connection *connection, const std::string &strURL, struct MHD_Response *&response) const
- {
- response = create_response(0, nullptr, MHD_NO, MHD_NO);
- if (response == nullptr)
-@@ -713,7 +716,7 @@ int CWebServer::CreateRedirect(struct MHD_Connection *connection, const std::str
- return MHD_YES;
- }
-
--int CWebServer::CreateFileDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const
-+MHD_RESULT CWebServer::CreateFileDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const
- {
- if (handler == nullptr)
- return MHD_NO;
-@@ -850,7 +853,7 @@ int CWebServer::CreateFileDownloadResponse(const std::shared_ptr<IHTTPRequestHan
- return MHD_YES;
- }
-
--int CWebServer::CreateErrorResponse(struct MHD_Connection *connection, int responseType, HTTPMethod method, struct MHD_Response *&response) const
-+MHD_RESULT CWebServer::CreateErrorResponse(struct MHD_Connection *connection, int responseType, HTTPMethod method, struct MHD_Response *&response) const
- {
- size_t payloadSize = 0;
- const void *payload = nullptr;
-@@ -881,7 +884,7 @@ int CWebServer::CreateErrorResponse(struct MHD_Connection *connection, int respo
- return MHD_YES;
- }
-
--int CWebServer::CreateMemoryDownloadResponse(struct MHD_Connection *connection, const void *data, size_t size, bool free, bool copy, struct MHD_Response *&response) const
-+MHD_RESULT CWebServer::CreateMemoryDownloadResponse(struct MHD_Connection *connection, const void *data, size_t size, bool free, bool copy, struct MHD_Response *&response) const
- {
- response = create_response(size, const_cast<void*>(data), free ? MHD_YES : MHD_NO, copy ? MHD_YES : MHD_NO);
- if (response == nullptr)
-@@ -893,20 +896,20 @@ int CWebServer::CreateMemoryDownloadResponse(struct MHD_Connection *connection,
- return MHD_YES;
- }
-
--int CWebServer::SendResponse(const HTTPRequest& request, int responseStatus, MHD_Response *response) const
-+MHD_RESULT CWebServer::SendResponse(const HTTPRequest& request, int responseStatus, MHD_Response *response) const
- {
- LogResponse(request, responseStatus);
-
-- int ret = MHD_queue_response(request.connection, responseStatus, response);
-+ MHD_RESULT ret = MHD_queue_response(request.connection, responseStatus, response);
- MHD_destroy_response(response);
-
- return ret;
- }
-
--int CWebServer::SendErrorResponse(const HTTPRequest& request, int errorType, HTTPMethod method) const
-+MHD_RESULT CWebServer::SendErrorResponse(const HTTPRequest& request, int errorType, HTTPMethod method) const
- {
- struct MHD_Response *response = nullptr;
-- int ret = CreateErrorResponse(request.connection, errorType, method, response);
-+ MHD_RESULT ret = CreateErrorResponse(request.connection, errorType, method, response);
- if (ret == MHD_NO)
- return MHD_NO;
-
-@@ -1296,10 +1299,10 @@ std::string CWebServer::CreateMimeTypeFromExtension(const char *ext)
- return CMime::GetMimeType(ext);
- }
-
--int CWebServer::AddHeader(struct MHD_Response *response, const std::string &name, const std::string &value) const
-+MHD_RESULT CWebServer::AddHeader(struct MHD_Response *response, const std::string &name, const std::string &value) const
- {
- if (response == nullptr || name.empty())
-- return 0;
-+ return MHD_NO;
-
- CLog::Log(LOGDEBUG, LOGWEBSERVER, "CWebServer[%hu] [OUT] %s: %s", m_port, name.c_str(), value.c_str());
-
-diff --git a/xbmc/network/WebServer.h b/xbmc/network/WebServer.h
-index c7a909304a21..1274a2e0ed40 100644
---- a/xbmc/network/WebServer.h
-+++ b/xbmc/network/WebServer.h
-@@ -56,17 +56,17 @@ class CWebServer
-
- virtual void LogRequest(const char* uri) const;
-
-- virtual int HandlePartialRequest(struct MHD_Connection *connection, ConnectionHandler* connectionHandler, const HTTPRequest& request,
-+ virtual MHD_RESULT HandlePartialRequest(struct MHD_Connection *connection, ConnectionHandler* connectionHandler, const HTTPRequest& request,
- const char *upload_data, size_t *upload_data_size, void **con_cls);
-- virtual int HandleRequest(const std::shared_ptr<IHTTPRequestHandler>& handler);
-- virtual int FinalizeRequest(const std::shared_ptr<IHTTPRequestHandler>& handler, int responseStatus, struct MHD_Response *response);
-+ virtual MHD_RESULT HandleRequest(const std::shared_ptr<IHTTPRequestHandler>& handler);
-+ virtual MHD_RESULT FinalizeRequest(const std::shared_ptr<IHTTPRequestHandler>& handler, int responseStatus, struct MHD_Response *response);
-
- private:
- struct MHD_Daemon* StartMHD(unsigned int flags, int port);
-
- std::shared_ptr<IHTTPRequestHandler> FindRequestHandler(const HTTPRequest& request) const;
-
-- int AskForAuthentication(const HTTPRequest& request) const;
-+ MHD_RESULT AskForAuthentication(const HTTPRequest& request) const;
- bool IsAuthenticated(const HTTPRequest& request) const;
-
- bool IsRequestCacheable(const HTTPRequest& request) const;
-@@ -76,18 +76,18 @@ class CWebServer
- bool ProcessPostData(const HTTPRequest& request, ConnectionHandler *connectionHandler, const char *upload_data, size_t *upload_data_size, void **con_cls) const;
- void FinalizePostDataProcessing(ConnectionHandler *connectionHandler) const;
-
-- int CreateMemoryDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const;
-- int CreateRangedMemoryDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const;
-+ MHD_RESULT CreateMemoryDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const;
-+ MHD_RESULT CreateRangedMemoryDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const;
-
-- int CreateRedirect(struct MHD_Connection *connection, const std::string &strURL, struct MHD_Response *&response) const;
-- int CreateFileDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const;
-- int CreateErrorResponse(struct MHD_Connection *connection, int responseType, HTTPMethod method, struct MHD_Response *&response) const;
-- int CreateMemoryDownloadResponse(struct MHD_Connection *connection, const void *data, size_t size, bool free, bool copy, struct MHD_Response *&response) const;
-+ MHD_RESULT CreateRedirect(struct MHD_Connection *connection, const std::string &strURL, struct MHD_Response *&response) const;
-+ MHD_RESULT CreateFileDownloadResponse(const std::shared_ptr<IHTTPRequestHandler>& handler, struct MHD_Response *&response) const;
-+ MHD_RESULT CreateErrorResponse(struct MHD_Connection *connection, int responseType, HTTPMethod method, struct MHD_Response *&response) const;
-+ MHD_RESULT CreateMemoryDownloadResponse(struct MHD_Connection *connection, const void *data, size_t size, bool free, bool copy, struct MHD_Response *&response) const;
-
-- int SendResponse(const HTTPRequest& request, int responseStatus, MHD_Response *response) const;
-- int SendErrorResponse(const HTTPRequest& request, int errorType, HTTPMethod method) const;
-+ MHD_RESULT SendResponse(const HTTPRequest& request, int responseStatus, MHD_Response *response) const;
-+ MHD_RESULT SendErrorResponse(const HTTPRequest& request, int errorType, HTTPMethod method) const;
-
-- int AddHeader(struct MHD_Response *response, const std::string &name, const std::string &value) const;
-+ MHD_RESULT AddHeader(struct MHD_Response *response, const std::string &name, const std::string &value) const;
-
- void LogRequest(const HTTPRequest& request) const;
- void LogResponse(const HTTPRequest& request, int responseStatus) const;
-@@ -100,11 +100,11 @@ class CWebServer
- static ssize_t ContentReaderCallback (void *cls, uint64_t pos, char *buf, size_t max);
- static void ContentReaderFreeCallback(void *cls);
-
-- static int AnswerToConnection (void *cls, struct MHD_Connection *connection,
-+ static MHD_RESULT AnswerToConnection (void *cls, struct MHD_Connection *connection,
- const char *url, const char *method,
- const char *version, const char *upload_data,
- size_t *upload_data_size, void **con_cls);
-- static int HandlePostField(void *cls, enum MHD_ValueKind kind, const char *key,
-+ static MHD_RESULT HandlePostField(void *cls, enum MHD_ValueKind kind, const char *key,
- const char *filename, const char *content_type,
- const char *transfer_encoding, const char *data, uint64_t off,
- size_t size);
-diff --git a/xbmc/network/httprequesthandler/HTTPFileHandler.cpp b/xbmc/network/httprequesthandler/HTTPFileHandler.cpp
-index 2101d49f0911..26e53901dbfa 100644
---- a/xbmc/network/httprequesthandler/HTTPFileHandler.cpp
-+++ b/xbmc/network/httprequesthandler/HTTPFileHandler.cpp
-@@ -23,7 +23,7 @@ CHTTPFileHandler::CHTTPFileHandler(const HTTPRequest &request)
- m_lastModified()
- { }
-
--int CHTTPFileHandler::HandleRequest()
-+MHD_RESULT CHTTPFileHandler::HandleRequest()
- {
- return !m_url.empty() ? MHD_YES : MHD_NO;
- }
-diff --git a/xbmc/network/httprequesthandler/HTTPFileHandler.h b/xbmc/network/httprequesthandler/HTTPFileHandler.h
-index 3c74b5275092..6121315c6f5f 100644
---- a/xbmc/network/httprequesthandler/HTTPFileHandler.h
-+++ b/xbmc/network/httprequesthandler/HTTPFileHandler.h
-@@ -19,7 +19,7 @@ class CHTTPFileHandler : public IHTTPRequestHandler
- public:
- ~CHTTPFileHandler() override = default;
-
-- int HandleRequest() override;
-+ MHD_RESULT HandleRequest() override;
-
- bool CanHandleRanges() const override { return m_canHandleRanges; }
- bool CanBeCached() const override { return m_canBeCached; }
-diff --git a/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.cpp b/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.cpp
-index de42e7fd3017..6902be012532 100644
---- a/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.cpp
-+++ b/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.cpp
-@@ -104,7 +104,7 @@ bool CHTTPImageTransformationHandler::CanHandleRequest(const HTTPRequest &reques
- options.find(TRANSFORMATION_OPTION_HEIGHT) != options.end());
- }
-
--int CHTTPImageTransformationHandler::HandleRequest()
-+MHD_RESULT CHTTPImageTransformationHandler::HandleRequest()
- {
- if (m_response.type == HTTPError)
- return MHD_YES;
-diff --git a/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.h b/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.h
-index c55015ec4eb0..0d17afc3250a 100644
---- a/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.h
-+++ b/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.h
-@@ -23,7 +23,7 @@ class CHTTPImageTransformationHandler : public IHTTPRequestHandler
- IHTTPRequestHandler* Create(const HTTPRequest &request) const override { return new CHTTPImageTransformationHandler(request); }
- bool CanHandleRequest(const HTTPRequest &request)const override;
-
-- int HandleRequest() override;
-+ MHD_RESULT HandleRequest() override;
-
- bool CanHandleRanges() const override { return true; }
- bool CanBeCached() const override { return true; }
-diff --git a/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.cpp b/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.cpp
-index e8e2fa36924b..a4c3c198eba3 100644
---- a/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.cpp
-+++ b/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.cpp
-@@ -25,7 +25,7 @@ bool CHTTPJsonRpcHandler::CanHandleRequest(const HTTPRequest &request) const
- return (request.pathUrl.compare("/jsonrpc") == 0);
- }
-
--int CHTTPJsonRpcHandler::HandleRequest()
-+MHD_RESULT CHTTPJsonRpcHandler::HandleRequest()
- {
- CHTTPClient client(m_request.method);
- bool isRequest = false;
-diff --git a/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.h b/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.h
-index 67c14b666ef6..2659fd549c25 100644
---- a/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.h
-+++ b/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.h
-@@ -24,7 +24,7 @@ class CHTTPJsonRpcHandler : public IHTTPRequestHandler
- IHTTPRequestHandler* Create(const HTTPRequest &request) const override { return new CHTTPJsonRpcHandler(request); }
- bool CanHandleRequest(const HTTPRequest &request) const override;
-
-- int HandleRequest() override;
-+ MHD_RESULT HandleRequest() override;
-
- HttpResponseRanges GetResponseData() const override;
-
-diff --git a/xbmc/network/httprequesthandler/HTTPPythonHandler.cpp b/xbmc/network/httprequesthandler/HTTPPythonHandler.cpp
-index 5f9aeef10f2e..a07ef0d3ac31 100644
---- a/xbmc/network/httprequesthandler/HTTPPythonHandler.cpp
-+++ b/xbmc/network/httprequesthandler/HTTPPythonHandler.cpp
-@@ -112,7 +112,7 @@ bool CHTTPPythonHandler::CanHandleRequest(const HTTPRequest &request) const
- return true;
- }
-
--int CHTTPPythonHandler::HandleRequest()
-+MHD_RESULT CHTTPPythonHandler::HandleRequest()
- {
- if (m_response.type == HTTPError || m_response.type == HTTPRedirect)
- return MHD_YES;
-diff --git a/xbmc/network/httprequesthandler/HTTPPythonHandler.h b/xbmc/network/httprequesthandler/HTTPPythonHandler.h
-index 03c150693ff4..166430e68d51 100644
---- a/xbmc/network/httprequesthandler/HTTPPythonHandler.h
-+++ b/xbmc/network/httprequesthandler/HTTPPythonHandler.h
-@@ -25,7 +25,7 @@ class CHTTPPythonHandler : public IHTTPRequestHandler
- bool CanBeCached() const override { return false; }
- bool GetLastModifiedDate(CDateTime &lastModified) const override;
-
-- int HandleRequest() override;
-+ MHD_RESULT HandleRequest() override;
-
- HttpResponseRanges GetResponseData() const override { return m_responseRanges; }
-
-diff --git a/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.cpp b/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.cpp
-index 80d1d6733475..f2ea1f2e51ed 100644
---- a/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.cpp
-+++ b/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.cpp
-@@ -61,7 +61,7 @@ bool HTTPRequestHandlerUtils::GetRequestedRanges(struct MHD_Connection *connecti
- return ranges.Parse(GetRequestHeaderValue(connection, MHD_HEADER_KIND, MHD_HTTP_HEADER_RANGE), totalLength);
- }
-
--int HTTPRequestHandlerUtils::FillArgumentMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value)
-+MHD_RESULT HTTPRequestHandlerUtils::FillArgumentMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value)
- {
- if (cls == nullptr || key == nullptr)
- return MHD_NO;
-@@ -72,7 +72,7 @@ int HTTPRequestHandlerUtils::FillArgumentMap(void *cls, enum MHD_ValueKind kind,
- return MHD_YES;
- }
-
--int HTTPRequestHandlerUtils::FillArgumentMultiMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value)
-+MHD_RESULT HTTPRequestHandlerUtils::FillArgumentMultiMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value)
- {
- if (cls == nullptr || key == nullptr)
- return MHD_NO;
-diff --git a/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.h b/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.h
-index 9a07801914e4..0ec5ed1bf706 100644
---- a/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.h
-+++ b/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.h
-@@ -25,6 +25,6 @@ class HTTPRequestHandlerUtils
- private:
- HTTPRequestHandlerUtils() = delete;
-
-- static int FillArgumentMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value);
-- static int FillArgumentMultiMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value);
-+ static MHD_RESULT FillArgumentMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value);
-+ static MHD_RESULT FillArgumentMultiMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value);
- };
-diff --git a/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.cpp b/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.cpp
-index 01a6b503bdf6..0716a5df96ca 100644
---- a/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.cpp
-+++ b/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.cpp
-@@ -18,7 +18,7 @@ bool CHTTPWebinterfaceAddonsHandler::CanHandleRequest(const HTTPRequest &request
- return (request.pathUrl.compare("/addons") == 0 || request.pathUrl.compare("/addons/") == 0);
- }
-
--int CHTTPWebinterfaceAddonsHandler::HandleRequest()
-+MHD_RESULT CHTTPWebinterfaceAddonsHandler::HandleRequest()
- {
- m_responseData = ADDON_HEADER;
- ADDON::VECADDONS addons;
-diff --git a/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.h b/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.h
-index e9b1c6d29a41..23cea36d1436 100644
---- a/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.h
-+++ b/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.h
-@@ -21,7 +21,7 @@ class CHTTPWebinterfaceAddonsHandler : public IHTTPRequestHandler
- IHTTPRequestHandler* Create(const HTTPRequest &request) const override { return new CHTTPWebinterfaceAddonsHandler(request); }
- bool CanHandleRequest(const HTTPRequest &request) const override;
-
-- int HandleRequest() override;
-+ MHD_RESULT HandleRequest() override;
-
- HttpResponseRanges GetResponseData() const override;
-
-diff --git a/xbmc/network/httprequesthandler/IHTTPRequestHandler.h b/xbmc/network/httprequesthandler/IHTTPRequestHandler.h
-index 4b1e40a587a7..567c8e55ee9b 100644
---- a/xbmc/network/httprequesthandler/IHTTPRequestHandler.h
-+++ b/xbmc/network/httprequesthandler/IHTTPRequestHandler.h
-@@ -22,6 +22,12 @@
-
- #include "utils/HttpRangeUtils.h"
-
-+#if MHD_VERSION >= 0x00097002
-+using MHD_RESULT = MHD_Result;
-+#else
-+using MHD_RESULT = int;
-+#endif
-+
- class CDateTime;
- class CWebServer;
-
-@@ -114,7 +120,7 @@ class IHTTPRequestHandler
- *
- * \return MHD_NO if a severe error has occurred otherwise MHD_YES.
- */
-- virtual int HandleRequest() = 0;
-+ virtual MHD_RESULT HandleRequest() = 0;
-
- /*!
- * \brief Whether the HTTP response could also be provided in ranges.