From da3a5b45cbb38b59560b272a2e97ec39ccf480fa Mon Sep 17 00:00:00 2001 From: Bernd Kuhls Date: Tue, 2 Mar 2021 08:07:16 +0100 Subject: [PATCH] package/kodi-pvr-mediaportal-tvserver: bump version to 8.1.0-Matrix Added patch series from upstream PR 127 to remove the dependency to kodi-platform, switch dependency to kodi. Added missing dependency to tinyxml. Switch license file to LICENSE.md. Signed-off-by: Bernd Kuhls Signed-off-by: Thomas Petazzoni --- ...o-more-supported-C-17-declaration-ke.patch | 29 + .../0002-Remove-p8-os-includes.patch | 157 ++++ .../0003-Use-kodi-StringUtils.patch | 124 ++++ .../0004-Remove-SAFE_DELETE.patch | 289 ++++++++ ...d-sleep_for-instead-of-p8-time-utils.patch | 308 ++++++++ ...td-mutex-condition_variable-instead-.patch | 673 ++++++++++++++++++ ...-Remove-charset-converter-dependency.patch | 55 ++ .../0008-Remove-p8-platform-dependency.patch | 74 ++ .../0009-Travis-changes-for-cpp17.patch | 28 + ...-keyword-as-no-longer-valid-in-CPP17.patch | 23 + .../0011-changelog-and-version-v8.1.1.patch | 42 ++ .../kodi-pvr-mediaportal-tvserver/Config.in | 2 +- .../kodi-pvr-mediaportal-tvserver.hash | 4 +- .../kodi-pvr-mediaportal-tvserver.mk | 6 +- 14 files changed, 1808 insertions(+), 6 deletions(-) create mode 100644 package/kodi-pvr-mediaportal-tvserver/0001-Revert-Removed-no-more-supported-C-17-declaration-ke.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0002-Remove-p8-os-includes.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0003-Use-kodi-StringUtils.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0004-Remove-SAFE_DELETE.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0005-Use-thread-sleep_for-instead-of-p8-time-utils.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0006-Use-std-thread-std-mutex-condition_variable-instead-.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0007-Remove-charset-converter-dependency.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0008-Remove-p8-platform-dependency.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0009-Travis-changes-for-cpp17.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0010-Remove-register-keyword-as-no-longer-valid-in-CPP17.patch create mode 100644 package/kodi-pvr-mediaportal-tvserver/0011-changelog-and-version-v8.1.1.patch diff --git a/package/kodi-pvr-mediaportal-tvserver/0001-Revert-Removed-no-more-supported-C-17-declaration-ke.patch b/package/kodi-pvr-mediaportal-tvserver/0001-Revert-Removed-no-more-supported-C-17-declaration-ke.patch new file mode 100644 index 0000000000..c09bbc14de --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0001-Revert-Removed-no-more-supported-C-17-declaration-ke.patch @@ -0,0 +1,29 @@ +From 8696d5408d6ec14b1ff4395ed538b7a48528fe68 Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Thu, 8 Oct 2020 16:12:18 +0100 +Subject: [PATCH] Revert "Removed no more supported (C++17) declaration keyword + (register)" + +This reverts commit a8edcafe6cc7a424615319995f4f7bdfab3856b1. + +Signed-off-by: Bernd Kuhls +--- + src/lib/tsreader/DvbUtil.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/lib/tsreader/DvbUtil.cpp b/src/lib/tsreader/DvbUtil.cpp +index c973062..8c4798a 100644 +--- a/src/lib/tsreader/DvbUtil.cpp ++++ b/src/lib/tsreader/DvbUtil.cpp +@@ -77,7 +77,7 @@ namespace MPTV + //******************************************************************* + uint32_t crc32(char *data, int len) + { +- int i; ++ register int i; + uint32_t crc = 0xffffffff; + + for (i = 0; i < len; i++) +-- +2.29.2 + diff --git a/package/kodi-pvr-mediaportal-tvserver/0002-Remove-p8-os-includes.patch b/package/kodi-pvr-mediaportal-tvserver/0002-Remove-p8-os-includes.patch new file mode 100644 index 0000000000..b18d1ff82c --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0002-Remove-p8-os-includes.patch @@ -0,0 +1,157 @@ +From be13de0679d1707eadaf5349ab904a07fa83bb13 Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Wed, 7 Oct 2020 17:34:56 +0100 +Subject: [PATCH] Remove p8 os includes + +Signed-off-by: Bernd Kuhls +--- + src/Socket.cpp | 1 - + src/lib/tsreader/FileReader.h | 1 - + src/lib/tsreader/MemorySink.cpp | 1 - + src/lib/tsreader/Section.cpp | 2 ++ + src/os-dependent.h | 40 ++++++++++++++++++--------------- + src/timers.cpp | 1 - + src/windows/FileUtils.cpp | 6 ++++- + 7 files changed, 29 insertions(+), 23 deletions(-) + +diff --git a/src/Socket.cpp b/src/Socket.cpp +index 12f7e80..b7dd250 100644 +--- a/src/Socket.cpp ++++ b/src/Socket.cpp +@@ -7,7 +7,6 @@ + + #include "utils.h" + #include +-#include "p8-platform/os.h" + #include "Socket.h" + + #include +diff --git a/src/lib/tsreader/FileReader.h b/src/lib/tsreader/FileReader.h +index 986bbc4..edb01f2 100644 +--- a/src/lib/tsreader/FileReader.h ++++ b/src/lib/tsreader/FileReader.h +@@ -33,7 +33,6 @@ + * http://forums.dvbowners.com/ + */ + +-#include "p8-platform/os.h" // for __stat + #include + #include + +diff --git a/src/lib/tsreader/MemorySink.cpp b/src/lib/tsreader/MemorySink.cpp +index 2d60696..dafef56 100644 +--- a/src/lib/tsreader/MemorySink.cpp ++++ b/src/lib/tsreader/MemorySink.cpp +@@ -29,7 +29,6 @@ + + #if defined LIVE555 + +-#include "p8-platform/os.h" + #include "MemorySink.h" + #include "GroupsockHelper.hh" + #include //for kodi::Log +diff --git a/src/lib/tsreader/Section.cpp b/src/lib/tsreader/Section.cpp +index 258c6a9..aac6b53 100644 +--- a/src/lib/tsreader/Section.cpp ++++ b/src/lib/tsreader/Section.cpp +@@ -22,6 +22,8 @@ + #include "os-dependent.h" + #include "Section.h" + ++#include ++ + namespace MPTV + { + CSection::CSection(void) +diff --git a/src/os-dependent.h b/src/os-dependent.h +index 1f368ea..cdc6980 100644 +--- a/src/os-dependent.h ++++ b/src/os-dependent.h +@@ -7,29 +7,33 @@ + + #pragma once + +-#include "p8-platform/os.h" ++#include + +-#ifdef TARGET_LINUX +-// Retrieve the number of milliseconds that have elapsed since the system was started +-#include +-inline unsigned long long GetTickCount64(void) +-{ +- struct timespec ts; +- if(clock_gettime(CLOCK_MONOTONIC, &ts) != 0) +- { +- return 0; +- } +- return (unsigned long long)( (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000) ); +-}; +-#elif defined(TARGET_DARWIN) +-#include ++#if (defined(_WIN32) || defined(_WIN64)) ++ ++#ifndef _SSIZE_T_DEFINED ++#ifdef _WIN64 ++typedef __int64 ssize_t; ++#else ++typedef _W64 int ssize_t; ++#endif ++#define _SSIZE_T_DEFINED ++#endif ++ ++#else ++ ++#if (defined(TARGET_LINUX) || defined(TARGET_DARWIN)) ++#include ++#include ++#include + inline unsigned long long GetTickCount64(void) + { +- struct timeval tv; +- gettimeofday(&tv, NULL); +- return (unsigned long long)( (tv.tv_sec * 1000) + (tv.tv_usec / 1000) ); ++ auto now = std::chrono::steady_clock::now(); ++ return std::chrono::duration_cast(now.time_since_epoch()).count(); + }; + #endif /* TARGET_LINUX || TARGET_DARWIN */ + ++#endif ++ + // Additional typedefs + typedef uint8_t byte; +diff --git a/src/timers.cpp b/src/timers.cpp +index a8760e4..a60b4c2 100644 +--- a/src/timers.cpp ++++ b/src/timers.cpp +@@ -11,7 +11,6 @@ + + using namespace std; + +-#include "p8-platform/os.h" //needed for snprintf + #include "timers.h" + #include "settings.h" + #include "utils.h" +diff --git a/src/windows/FileUtils.cpp b/src/windows/FileUtils.cpp +index 0d26bc6..0c8a03e 100644 +--- a/src/windows/FileUtils.cpp ++++ b/src/windows/FileUtils.cpp +@@ -6,7 +6,6 @@ + */ + + #include "../FileUtils.h" +-#include "p8-platform/os.h" + #include "p8-platform/windows/CharsetConverter.h" + #include + #include "../utils.h" +@@ -14,6 +13,11 @@ + #include + #endif + ++#ifdef TARGET_WINDOWS ++#include ++#include ++#endif ++ + namespace OS + { + bool CFile::Exists(const std::string& strFileName, long* errCode) diff --git a/package/kodi-pvr-mediaportal-tvserver/0003-Use-kodi-StringUtils.patch b/package/kodi-pvr-mediaportal-tvserver/0003-Use-kodi-StringUtils.patch new file mode 100644 index 0000000000..597e76af28 --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0003-Use-kodi-StringUtils.patch @@ -0,0 +1,124 @@ +From 621a98436875f8b4ceea18218a23025e0b59aeb3 Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Wed, 7 Oct 2020 17:46:14 +0100 +Subject: [PATCH] Use kodi StringUtils + +Signed-off-by: Bernd Kuhls +--- + src/GUIDialogRecordSettings.cpp | 6 +++--- + src/lib/tsreader/TSReader.cpp | 10 +++++----- + src/pvrclient-mediaportal.cpp | 3 ++- + src/utils.cpp | 3 ++- + 4 files changed, 12 insertions(+), 10 deletions(-) + +diff --git a/src/GUIDialogRecordSettings.cpp b/src/GUIDialogRecordSettings.cpp +index cf36d82..8e942d2 100644 +--- a/src/GUIDialogRecordSettings.cpp ++++ b/src/GUIDialogRecordSettings.cpp +@@ -9,9 +9,9 @@ + #include "timers.h" + #include "utils.h" + #include "DateTime.h" +-#include "p8-platform/util/StringUtils.h" + + #include ++#include + + /* Dialog item identifiers */ + #define BUTTON_OK 1 +@@ -106,7 +106,7 @@ bool CGUIDialogRecordSettings::OnInit() + + // Populate PreRecord spin control + std::string marginStart; +- marginStart = StringUtils::Format("%d (%s)", m_timerinfo.GetMarginStart(), kodi::GetLocalizedString(30136).c_str()); ++ marginStart = kodi::tools::StringUtils::Format("%d (%s)", m_timerinfo.GetMarginStart(), kodi::GetLocalizedString(30136).c_str()); + m_spinPreRecord->SetType(kodi::gui::controls::ADDON_SPIN_CONTROL_TYPE_TEXT); + m_spinPreRecord->AddLabel(kodi::GetLocalizedString(30135), -1); + m_spinPreRecord->AddLabel(marginStart, m_timerinfo.GetMarginStart()); //value from XBMC +@@ -120,7 +120,7 @@ bool CGUIDialogRecordSettings::OnInit() + + // Populate PostRecord spin control + std::string marginEnd; +- marginEnd = StringUtils::Format("%d (%s)", m_timerinfo.GetMarginEnd(), kodi::GetLocalizedString(30136).c_str()); ++ marginEnd = kodi::tools::StringUtils::Format("%d (%s)", m_timerinfo.GetMarginEnd(), kodi::GetLocalizedString(30136).c_str()); + m_spinPostRecord->SetType(kodi::gui::controls::ADDON_SPIN_CONTROL_TYPE_TEXT); + m_spinPostRecord->AddLabel(kodi::GetLocalizedString(30135), -1); + m_spinPostRecord->AddLabel(marginEnd, m_timerinfo.GetMarginEnd()); //value from XBMC +diff --git a/src/lib/tsreader/TSReader.cpp b/src/lib/tsreader/TSReader.cpp +index 1129c8e..3f9725b 100644 +--- a/src/lib/tsreader/TSReader.cpp ++++ b/src/lib/tsreader/TSReader.cpp +@@ -34,7 +34,7 @@ + #include "utils.h" + #include "TSDebug.h" + #include "p8-platform/util/timeutils.h" +-#include "p8-platform/util/StringUtils.h" ++#include + #ifdef LIVE555 + #include "MemoryReader.h" + #include "MepoRTSPClient.h" +@@ -104,7 +104,7 @@ namespace MPTV + { + if (!tscard.TimeshiftFolderUNC.empty()) + { +- StringUtils::Replace(sFileName, tscard.TimeshiftFolder.c_str(), tscard.TimeshiftFolderUNC.c_str()); ++ kodi::tools::StringUtils::Replace(sFileName, tscard.TimeshiftFolder.c_str(), tscard.TimeshiftFolderUNC.c_str()); + bFound = true; + } + else +@@ -129,7 +129,7 @@ namespace MPTV + if (!it->RecordingFolderUNC.empty()) + { + // Remove the original base path and replace it with the given path +- StringUtils::Replace(sFileName, it->RecordingFolder.c_str(), it->RecordingFolderUNC.c_str()); ++ kodi::tools::StringUtils::Replace(sFileName, it->RecordingFolder.c_str(), it->RecordingFolderUNC.c_str()); + bFound = true; + break; + } +@@ -412,8 +412,8 @@ namespace MPTV + if (tmp.find("smb://") != string::npos) + { + // Convert XBMC smb share name back to a real windows network share... +- StringUtils::Replace(tmp, "smb://", "\\\\"); +- StringUtils::Replace(tmp, "/", "\\"); ++ kodi::tools::StringUtils::Replace(tmp, "smb://", "\\\\"); ++ kodi::tools::StringUtils::Replace(tmp, "/", "\\"); + } + #else + //TODO: do something useful... +diff --git a/src/pvrclient-mediaportal.cpp b/src/pvrclient-mediaportal.cpp +index 93ca1bc..fdb31e7 100644 +--- a/src/pvrclient-mediaportal.cpp ++++ b/src/pvrclient-mediaportal.cpp +@@ -11,7 +11,7 @@ + #include + + #include "p8-platform/util/timeutils.h" +-#include "p8-platform/util/StringUtils.h" ++#include + + #include "timers.h" + #include "channels.h" +@@ -29,6 +29,7 @@ + #include + #include + ++using namespace kodi::tools; + using namespace std; + using namespace MPTV; + +diff --git a/src/utils.cpp b/src/utils.cpp +index 63c823a..9b8def8 100644 +--- a/src/utils.cpp ++++ b/src/utils.cpp +@@ -13,8 +13,9 @@ + #include "settings.h" + #include + #include +-#include "p8-platform/util/StringUtils.h" ++#include + ++using namespace kodi::tools; + using namespace std; + + void Tokenize(const string& str, vector& tokens, const string& delimiters = " ") diff --git a/package/kodi-pvr-mediaportal-tvserver/0004-Remove-SAFE_DELETE.patch b/package/kodi-pvr-mediaportal-tvserver/0004-Remove-SAFE_DELETE.patch new file mode 100644 index 0000000000..98667913a8 --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0004-Remove-SAFE_DELETE.patch @@ -0,0 +1,289 @@ +From 00d0d90fdac9257ed02e24677ba4f008f2486c94 Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Wed, 7 Oct 2020 18:00:57 +0100 +Subject: [PATCH] Remove SAFE_DELETE + +Signed-off-by: Bernd Kuhls +--- + src/lib/tsreader/FileReader.cpp | 9 ++++++++- + src/lib/tsreader/MemoryBuffer.cpp | 22 +++++++++++++--------- + src/lib/tsreader/MultiFileReader.cpp | 11 ++++++++++- + src/lib/tsreader/TSReader.cpp | 25 +++++++++++++++++-------- + src/pvrclient-mediaportal.cpp | 27 ++++++++++++++++++--------- + src/utils.h | 2 -- + 6 files changed, 66 insertions(+), 30 deletions(-) + +diff --git a/src/lib/tsreader/FileReader.cpp b/src/lib/tsreader/FileReader.cpp +index ac8725c..3df22f2 100644 +--- a/src/lib/tsreader/FileReader.cpp ++++ b/src/lib/tsreader/FileReader.cpp +@@ -38,7 +38,6 @@ + #include "p8-platform/threads/threads.h" + #include //std::min, std::max + #include "p8-platform/util/timeutils.h" // for usleep +-#include "p8-platform/util/util.h" + #include "utils.h" + #include + +@@ -58,6 +57,14 @@ + /* calcuate bitrate for file while reading */ + #define READ_BITRATE 0x10 + ++template void SafeDelete(T*& p) ++{ ++ if (p) ++ { ++ delete p; ++ p = nullptr; ++ } ++} + namespace MPTV + { + FileReader::FileReader() : +diff --git a/src/lib/tsreader/MemoryBuffer.cpp b/src/lib/tsreader/MemoryBuffer.cpp +index 6d411d7..609b575 100644 +--- a/src/lib/tsreader/MemoryBuffer.cpp ++++ b/src/lib/tsreader/MemoryBuffer.cpp +@@ -31,7 +31,6 @@ + + #include "p8-platform/util/timeutils.h" + #include "p8-platform/threads/mutex.h" +-#include "p8-platform/util/util.h" + #include "MemoryBuffer.h" + #include //for kodi::Log + #include "TSDebug.h" +@@ -59,11 +58,14 @@ void CMemoryBuffer::Clear() + P8PLATFORM::CLockObject BufferLock(m_BufferLock); + std::vector::iterator it = m_Array.begin(); + +- for ( ; it != m_Array.end(); ++it ) ++ for (auto& item : m_Array) + { +- BufferItem *item = *it; +- SAFE_DELETE_ARRAY(item->data); +- SAFE_DELETE(item); ++ if (item) ++ { ++ if (item->data) ++ delete[] item->data; ++ delete item; ++ } + } + + m_Array.clear(); +@@ -150,8 +152,9 @@ size_t CMemoryBuffer::ReadFromBuffer(unsigned char *pbData, size_t lDataLength) + if (item->nOffset >= item->nDataLength) + { + m_Array.erase(m_Array.begin()); +- SAFE_DELETE_ARRAY(item->data); +- SAFE_DELETE(item); ++ if (item->data) ++ delete[] item->data; ++ delete item; + } + } + return bytesWritten; +@@ -182,8 +185,9 @@ long CMemoryBuffer::PutBuffer(unsigned char *pbData, size_t lDataLength) + + m_BytesInBuffer -= copyLength; + m_Array.erase(m_Array.begin()); +- SAFE_DELETE_ARRAY(item2->data); +- SAFE_DELETE(item2); ++ if (item2->data) ++ delete[] item2->data; ++ delete item2; + } + if (m_BytesInBuffer > 0) + { +diff --git a/src/lib/tsreader/MultiFileReader.cpp b/src/lib/tsreader/MultiFileReader.cpp +index b8005b3..3828e06 100644 +--- a/src/lib/tsreader/MultiFileReader.cpp ++++ b/src/lib/tsreader/MultiFileReader.cpp +@@ -48,6 +48,15 @@ using namespace P8PLATFORM; + //Maximum time in msec to wait for the buffer file to become available - Needed for DVB radio (this sometimes takes some time) + #define MAX_BUFFER_TIMEOUT 1500 + ++template void SafeDelete(T*& p) ++{ ++ if (p) ++ { ++ delete p; ++ p = nullptr; ++ } ++} ++ + namespace MPTV + { + MultiFileReader::MultiFileReader() : +@@ -484,7 +493,7 @@ namespace MPTV + + TSDEBUG(ADDON_LOG_DEBUG, "MultiFileReader: Removing file %s\n", file->filename.c_str()); + +- SAFE_DELETE(file); ++ SafeDelete(file); + m_tsFiles.erase(m_tsFiles.begin()); + + filesToRemove--; +diff --git a/src/lib/tsreader/TSReader.cpp b/src/lib/tsreader/TSReader.cpp +index 3f9725b..4a72f4f 100644 +--- a/src/lib/tsreader/TSReader.cpp ++++ b/src/lib/tsreader/TSReader.cpp +@@ -44,6 +44,15 @@ + + using namespace std; + ++template void SafeDelete(T*& p) ++{ ++ if (p) ++ { ++ delete p; ++ p = nullptr; ++ } ++} ++ + namespace MPTV + { + CTsReader::CTsReader() : m_demultiplexer(*this), +@@ -69,10 +78,10 @@ namespace MPTV + + CTsReader::~CTsReader(void) + { +- SAFE_DELETE(m_fileReader); ++ SafeDelete(m_fileReader); + #ifdef LIVE555 +- SAFE_DELETE(m_buffer); +- SAFE_DELETE(m_rtspClient); ++ SafeDelete(m_buffer); ++ SafeDelete(m_rtspClient); + #endif + } + +@@ -225,8 +234,8 @@ namespace MPTV + + if ( !m_rtspClient->OpenStream(m_fileName.c_str()) ) + { +- SAFE_DELETE(m_rtspClient); +- SAFE_DELETE(m_buffer); ++ SafeDelete(m_rtspClient); ++ SafeDelete(m_buffer); + return E_FAIL; + } + +@@ -318,8 +327,8 @@ namespace MPTV + #ifdef LIVE555 + kodi::Log(ADDON_LOG_INFO, "TsReader: closing RTSP client"); + m_rtspClient->Stop(); +- SAFE_DELETE(m_rtspClient); +- SAFE_DELETE(m_buffer); ++ SafeDelete(m_rtspClient); ++ SafeDelete(m_buffer); + #endif + } + else +@@ -327,7 +336,7 @@ namespace MPTV + kodi::Log(ADDON_LOG_INFO, "TsReader: closing file"); + m_fileReader->CloseFile(); + } +- SAFE_DELETE(m_fileReader); ++ SafeDelete(m_fileReader); + m_State = State_Stopped; + } + } +diff --git a/src/pvrclient-mediaportal.cpp b/src/pvrclient-mediaportal.cpp +index fdb31e7..5479950 100644 +--- a/src/pvrclient-mediaportal.cpp ++++ b/src/pvrclient-mediaportal.cpp +@@ -42,6 +42,15 @@ int g_iTVServerKodiBuild = 0; + #define TVSERVERKODI_RECOMMENDED_VERSION_STRING "1.2.3.122 till 1.20.0.140" + #define TVSERVERKODI_RECOMMENDED_VERSION_BUILD 140 + ++template void SafeDelete(T*& p) ++{ ++ if (p) ++ { ++ delete p; ++ p = nullptr; ++ } ++} ++ + /************************************************************/ + /** Class interface */ + +@@ -75,10 +84,10 @@ cPVRClientMediaPortal::~cPVRClientMediaPortal() + kodi::Log(ADDON_LOG_DEBUG, "->~cPVRClientMediaPortal()"); + Disconnect(); + +- SAFE_DELETE(Timer::lifetimeValues); +- SAFE_DELETE(m_tcpclient); +- SAFE_DELETE(m_genretable); +- SAFE_DELETE(m_lastSelectedRecording); ++ SafeDelete(Timer::lifetimeValues); ++ SafeDelete(m_tcpclient); ++ SafeDelete(m_genretable); ++ SafeDelete(m_lastSelectedRecording); + } + + string cPVRClientMediaPortal::SendCommand(const char* command) +@@ -321,7 +330,7 @@ void cPVRClientMediaPortal::Disconnect() + if ((CSettings::Get().GetStreamingMethod()==TSReader) && (m_tsreader != NULL)) + { + m_tsreader->Close(); +- SAFE_DELETE(m_tsreader); ++ SafeDelete(m_tsreader); + } + SendCommand("StopTimeshift:\n"); + } +@@ -1748,7 +1757,7 @@ bool cPVRClientMediaPortal::OpenLiveStream(const kodi::addon::PVRChannel& channe + m_iCurrentChannel = -1; + if (m_tsreader != nullptr) + { +- SAFE_DELETE(m_tsreader); ++ SafeDelete(m_tsreader); + } + return false; + } +@@ -1959,7 +1968,7 @@ void cPVRClientMediaPortal::CloseLiveStream(void) + if (CSettings::Get().GetStreamingMethod() == TSReader && m_tsreader) + { + m_tsreader->Close(); +- SAFE_DELETE(m_tsreader); ++ SafeDelete(m_tsreader); + } + result = SendCommand("StopTimeshift:\n"); + kodi::Log(ADDON_LOG_INFO, "CloseLiveStream: %s", result.c_str()); +@@ -2141,7 +2150,7 @@ void cPVRClientMediaPortal::CloseRecordedStream(void) + { + kodi::Log(ADDON_LOG_INFO, "CloseRecordedStream: Stop TSReader..."); + m_tsreader->Close(); +- SAFE_DELETE(m_tsreader); ++ SafeDelete(m_tsreader); + } + else + { +@@ -2409,7 +2418,7 @@ cRecording* cPVRClientMediaPortal::GetRecordingInfo(const kodi::addon::PVRRecord + { + return m_lastSelectedRecording; + } +- SAFE_DELETE(m_lastSelectedRecording); ++ SafeDelete(m_lastSelectedRecording); + } + + if (!IsUp()) +diff --git a/src/utils.h b/src/utils.h +index 823b46e..d03569a 100644 +--- a/src/utils.h ++++ b/src/utils.h +@@ -11,13 +11,11 @@ + #include + #include + #include "uri.h" +-#include "p8-platform/util/util.h" + + #ifdef TARGET_WINDOWS + #include "windows/WindowsUtils.h" + #endif + +- + /** + * String tokenize + * Split string using the given delimiter into a vector of substrings diff --git a/package/kodi-pvr-mediaportal-tvserver/0005-Use-thread-sleep_for-instead-of-p8-time-utils.patch b/package/kodi-pvr-mediaportal-tvserver/0005-Use-thread-sleep_for-instead-of-p8-time-utils.patch new file mode 100644 index 0000000000..4d61d15b2d --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0005-Use-thread-sleep_for-instead-of-p8-time-utils.patch @@ -0,0 +1,308 @@ +From 4b4a16157870d5816339700616f1efdb60fb59e3 Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Wed, 7 Oct 2020 18:12:10 +0100 +Subject: [PATCH] Use thread sleep_for instead of p8 time utils + +Signed-off-by: Bernd Kuhls +--- + src/lib/tsreader/DeMultiplexer.cpp | 6 ++++-- + src/lib/tsreader/FileReader.cpp | 5 +++-- + src/lib/tsreader/MemoryBuffer.cpp | 5 +++-- + src/lib/tsreader/MepoRTSPClient.cpp | 5 +++-- + src/lib/tsreader/MultiFileReader.cpp | 9 +++++---- + src/lib/tsreader/TSReader.cpp | 5 +++-- + src/pvrclient-mediaportal.cpp | 23 +++++++++++++---------- + 7 files changed, 34 insertions(+), 24 deletions(-) + +diff --git a/src/lib/tsreader/DeMultiplexer.cpp b/src/lib/tsreader/DeMultiplexer.cpp +index 63bf20e..436e452 100644 +--- a/src/lib/tsreader/DeMultiplexer.cpp ++++ b/src/lib/tsreader/DeMultiplexer.cpp +@@ -37,6 +37,8 @@ + #include //for kodi::Log + #include "TSReader.h" + ++#include ++ + #define MAX_BUF_SIZE 8000 + #define BUFFER_LENGTH 0x1000 + #define READ_SIZE (1316*30) +@@ -83,7 +85,7 @@ namespace MPTV + { + size_t BytesRead = ReadFromFile(); + if (0 == BytesRead) +- usleep(10000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + m_bStarting = false; + } +@@ -248,7 +250,7 @@ namespace MPTV + { + size_t BytesRead = ReadFromFile(); + if (0 == BytesRead) +- usleep(10000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(10)); + dwBytesProcessed += BytesRead; + } + +diff --git a/src/lib/tsreader/FileReader.cpp b/src/lib/tsreader/FileReader.cpp +index 3df22f2..73b23af 100644 +--- a/src/lib/tsreader/FileReader.cpp ++++ b/src/lib/tsreader/FileReader.cpp +@@ -37,10 +37,10 @@ + #include "TSDebug.h" + #include "p8-platform/threads/threads.h" + #include //std::min, std::max +-#include "p8-platform/util/timeutils.h" // for usleep + #include "utils.h" + #include + ++#include + + /* indicate that caller can handle truncated reads, where function returns before entire buffer has been filled */ + #define READ_TRUNCATED 0x01 +@@ -145,7 +145,8 @@ namespace MPTV + } + } + } +- usleep(20000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(20)); ++ + } while (--Tmo); + + if (Tmo) +diff --git a/src/lib/tsreader/MemoryBuffer.cpp b/src/lib/tsreader/MemoryBuffer.cpp +index 609b575..0e736f2 100644 +--- a/src/lib/tsreader/MemoryBuffer.cpp ++++ b/src/lib/tsreader/MemoryBuffer.cpp +@@ -29,12 +29,13 @@ + + #ifdef LIVE555 + +-#include "p8-platform/util/timeutils.h" + #include "p8-platform/threads/mutex.h" + #include "MemoryBuffer.h" + #include //for kodi::Log + #include "TSDebug.h" + ++#include ++ + #define MAX_MEMORY_BUFFER_SIZE (1024L*1024L*12L) + + CMemoryBuffer::CMemoryBuffer(void) +@@ -197,7 +198,7 @@ long CMemoryBuffer::PutBuffer(unsigned char *pbData, size_t lDataLength) + + if (sleep) + { +- usleep(10000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + return S_OK; + } +diff --git a/src/lib/tsreader/MepoRTSPClient.cpp b/src/lib/tsreader/MepoRTSPClient.cpp +index 4971986..ccd6761 100644 +--- a/src/lib/tsreader/MepoRTSPClient.cpp ++++ b/src/lib/tsreader/MepoRTSPClient.cpp +@@ -18,13 +18,14 @@ + + #if defined LIVE555 + +-#include "p8-platform/util/timeutils.h" + #include "MepoRTSPClient.h" + #include "MemorySink.h" + #include //for kodi::Log + #include "utils.h" + #include "os-dependent.h" + ++#include ++ + CRTSPClient::CRTSPClient() + { + kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::CRTSPClient()"); +@@ -531,7 +532,7 @@ void CRTSPClient::FillBuffer(unsigned long byteCount) + + while ( IsRunning() && m_buffer->Size() < byteCount) + { +- usleep(5000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(5)); + if (GetTickCount64() - tickCount > 3000) + break; + } +diff --git a/src/lib/tsreader/MultiFileReader.cpp b/src/lib/tsreader/MultiFileReader.cpp +index 3828e06..21fd7b2 100644 +--- a/src/lib/tsreader/MultiFileReader.cpp ++++ b/src/lib/tsreader/MultiFileReader.cpp +@@ -39,10 +39,11 @@ + #include + #include "utils.h" + #include +-#include "p8-platform/util/timeutils.h" + #include "p8-platform/threads/threads.h" + #include + ++#include ++ + using namespace P8PLATFORM; + + //Maximum time in msec to wait for the buffer file to become available - Needed for DVB radio (this sometimes takes some time) +@@ -112,7 +113,7 @@ namespace MPTV + retryCount++; + kodi::Log(ADDON_LOG_DEBUG, "MultiFileReader: buffer file has zero length, closing, waiting 100 ms and re-opening. Attempt: %d.", retryCount); + m_TSBufferFile.CloseFile(); +- usleep(100000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(100)); + hResult = m_TSBufferFile.OpenFile(); + kodi::Log(ADDON_LOG_DEBUG, "MultiFileReader: buffer file opened return code %d.", hResult); + } +@@ -124,7 +125,7 @@ namespace MPTV + + do + { +- usleep(100000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(100)); + if (timeout.TimeLeft() == 0) + { + kodi::Log(ADDON_LOG_ERROR, "MultiFileReader: timed out while waiting for buffer file to become available"); +@@ -457,7 +458,7 @@ namespace MPTV + // try to clear local / remote SMB file cache. This should happen when we close the filehandle + m_TSBufferFile.CloseFile(); + m_TSBufferFile.OpenFile(); +- usleep(5000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(5)); + } + + if (Error) +diff --git a/src/lib/tsreader/TSReader.cpp b/src/lib/tsreader/TSReader.cpp +index 4a72f4f..40a4faf 100644 +--- a/src/lib/tsreader/TSReader.cpp ++++ b/src/lib/tsreader/TSReader.cpp +@@ -33,7 +33,6 @@ + #include "MultiFileReader.h" + #include "utils.h" + #include "TSDebug.h" +-#include "p8-platform/util/timeutils.h" + #include + #ifdef LIVE555 + #include "MemoryReader.h" +@@ -42,6 +41,8 @@ + #endif + #include "FileUtils.h" + ++#include ++ + using namespace std; + + template void SafeDelete(T*& p) +@@ -396,7 +397,7 @@ namespace MPTV + fileReader->OnChannelChange(); + + kodi::Log(ADDON_LOG_DEBUG, "%s:: move from %I64d to %I64d tsbufpos %I64d", __FUNCTION__, pos_before, pos_after, timeShiftBufferPos); +- usleep(100000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(100)); + + // Set the stream start times to this new channel + time(&m_startTime); +diff --git a/src/pvrclient-mediaportal.cpp b/src/pvrclient-mediaportal.cpp +index 5479950..851b940 100644 +--- a/src/pvrclient-mediaportal.cpp ++++ b/src/pvrclient-mediaportal.cpp +@@ -10,7 +10,6 @@ + #include + #include + +-#include "p8-platform/util/timeutils.h" + #include + + #include "timers.h" +@@ -29,6 +28,8 @@ + #include + #include + ++#include ++ + using namespace kodi::tools; + using namespace std; + using namespace MPTV; +@@ -389,7 +390,7 @@ void* cPVRClientMediaPortal::Process(void) + if (keepWaiting) + { + // Wait for 1 minute before re-trying +- usleep(60000000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(60000)); + } + } + SetConnectionState(state); +@@ -1571,7 +1572,8 @@ PVR_ERROR cPVRClientMediaPortal::AddTimer(const kodi::addon::PVRTimer& timerinfo + if (timerinfo.GetStartTime() <= 0) + { + // Refresh the recordings list to see the newly created recording +- usleep(100000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(100)); ++ + kodi::addon::CInstancePVRClient::TriggerRecordingUpdate(); + } + +@@ -1785,7 +1787,8 @@ bool cPVRClientMediaPortal::OpenLiveStream(const kodi::addon::PVRChannel& channe + kodi::Log(ADDON_LOG_INFO, "Channel timeshift buffer: %s", timeshiftfields[2].c_str()); + if (channelinfo.GetIsRadio()) + { +- usleep(100000); // 100 ms sleep to allow the buffer to fill ++ // 100 ms sleep to allow the buffer to fill ++ std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + } + else +@@ -1796,7 +1799,7 @@ bool cPVRClientMediaPortal::OpenLiveStream(const kodi::addon::PVRChannel& channe + if (CSettings::Get().GetSleepOnRTSPurl() > 0) + { + kodi::Log(ADDON_LOG_INFO, "Sleeping %i ms before opening stream: %s", CSettings::Get().GetSleepOnRTSPurl(), timeshiftfields[0].c_str()); +- usleep(CSettings::Get().GetSleepOnRTSPurl() * 1000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(CSettings::Get().GetSleepOnRTSPurl())); + } + + // Check the returned stream URL. When the URL is an rtsp stream, we need +@@ -1878,7 +1881,7 @@ bool cPVRClientMediaPortal::OpenLiveStream(const kodi::addon::PVRChannel& channe + CloseLiveStream(); + return false; + } +- usleep(400000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(400)); + } + } + +@@ -1924,7 +1927,7 @@ int cPVRClientMediaPortal::ReadLiveStream(unsigned char *pBuffer, unsigned int i + + if (m_tsreader->Read(bufptr, read_wanted, &read_wanted) > 0) + { +- usleep(20000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(20)); + read_timeouts++; + return static_cast(read_wanted); + } +@@ -1948,7 +1951,7 @@ int cPVRClientMediaPortal::ReadLiveStream(unsigned char *pBuffer, unsigned int i + } + bufptr += read_wanted; + read_timeouts++; +- usleep(10000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + } + read_timeouts = 0; +@@ -2175,7 +2178,7 @@ int cPVRClientMediaPortal::ReadRecordedStream(unsigned char *pBuffer, unsigned i + + if (m_tsreader->Read(bufptr, read_wanted, &read_wanted) > 0) + { +- usleep(20000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(20)); + return static_cast(read_wanted); + } + read_done += read_wanted; +@@ -2183,7 +2186,7 @@ int cPVRClientMediaPortal::ReadRecordedStream(unsigned char *pBuffer, unsigned i + if ( read_done < static_cast(iBufferSize) ) + { + bufptr += read_wanted; +- usleep(20000); ++ std::this_thread::sleep_for(std::chrono::milliseconds(20)); + } + } + diff --git a/package/kodi-pvr-mediaportal-tvserver/0006-Use-std-thread-std-mutex-condition_variable-instead-.patch b/package/kodi-pvr-mediaportal-tvserver/0006-Use-std-thread-std-mutex-condition_variable-instead-.patch new file mode 100644 index 0000000000..7d6e14115f --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0006-Use-std-thread-std-mutex-condition_variable-instead-.patch @@ -0,0 +1,673 @@ +From 482d898333facf53bd3208cf5e44a0cf3e1f4f3b Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Thu, 8 Oct 2020 14:59:55 +0100 +Subject: [PATCH] Use std::thread, std::mutex, condition_variable instead of + event + +Signed-off-by: Bernd Kuhls +--- + src/lib/tsreader/DeMultiplexer.cpp | 2 +- + src/lib/tsreader/DeMultiplexer.h | 4 +- + src/lib/tsreader/FileReader.cpp | 2 +- + src/lib/tsreader/MemoryBuffer.cpp | 15 +++-- + src/lib/tsreader/MemoryBuffer.h | 7 +- + src/lib/tsreader/MemoryReader.h | 1 + + src/lib/tsreader/MemorySink.cpp | 2 +- + src/lib/tsreader/MemorySink.h | 4 +- + src/lib/tsreader/MepoRTSPClient.cpp | 28 ++++---- + src/lib/tsreader/MepoRTSPClient.h | 10 ++- + src/lib/tsreader/MultiFileReader.cpp | 9 ++- + src/os-dependent.h | 95 ++++++++++++++++++++++++++++ + src/pvrclient-mediaportal.cpp | 29 ++++----- + src/pvrclient-mediaportal.h | 21 +++--- + 14 files changed, 168 insertions(+), 61 deletions(-) + +diff --git a/src/lib/tsreader/DeMultiplexer.cpp b/src/lib/tsreader/DeMultiplexer.cpp +index 436e452..3d0d9a2 100644 +--- a/src/lib/tsreader/DeMultiplexer.cpp ++++ b/src/lib/tsreader/DeMultiplexer.cpp +@@ -104,7 +104,7 @@ namespace MPTV + if (m_filter.IsSeeking()) + return 0; // Ambass : to check + +- P8PLATFORM::CLockObject lock(m_sectionRead); ++ std::lock_guard lock(m_sectionRead); + if (NULL == m_reader) + return 0; + +diff --git a/src/lib/tsreader/DeMultiplexer.h b/src/lib/tsreader/DeMultiplexer.h +index c7cd577..72ed87d 100644 +--- a/src/lib/tsreader/DeMultiplexer.h ++++ b/src/lib/tsreader/DeMultiplexer.h +@@ -37,7 +37,7 @@ + #include "PacketSync.h" + #include "TSHeader.h" + #include "PatParser.h" +-#include "p8-platform/threads/mutex.h" ++#include + + namespace MPTV + { +@@ -60,7 +60,7 @@ namespace MPTV + private: + unsigned long long m_LastDataFromRtsp; + bool m_bEndOfFile; +- P8PLATFORM::CMutex m_sectionRead; ++ std::mutex m_sectionRead; + FileReader* m_reader; + CPatParser m_patParser; + CTsReader& m_filter; +diff --git a/src/lib/tsreader/FileReader.cpp b/src/lib/tsreader/FileReader.cpp +index 73b23af..358b05f 100644 +--- a/src/lib/tsreader/FileReader.cpp ++++ b/src/lib/tsreader/FileReader.cpp +@@ -35,7 +35,7 @@ + #include "FileReader.h" + #include //for kodi::Log + #include "TSDebug.h" +-#include "p8-platform/threads/threads.h" ++#include "os-dependent.h" + #include //std::min, std::max + #include "utils.h" + #include +diff --git a/src/lib/tsreader/MemoryBuffer.cpp b/src/lib/tsreader/MemoryBuffer.cpp +index 0e736f2..b5400da 100644 +--- a/src/lib/tsreader/MemoryBuffer.cpp ++++ b/src/lib/tsreader/MemoryBuffer.cpp +@@ -29,7 +29,7 @@ + + #ifdef LIVE555 + +-#include "p8-platform/threads/mutex.h" ++#include "os-dependent.h" + #include "MemoryBuffer.h" + #include //for kodi::Log + #include "TSDebug.h" +@@ -56,7 +56,7 @@ bool CMemoryBuffer::IsRunning() + + void CMemoryBuffer::Clear() + { +- P8PLATFORM::CLockObject BufferLock(m_BufferLock); ++ std::lock_guard BufferLock(m_BufferLock); + std::vector::iterator it = m_Array.begin(); + + for (auto& item : m_Array) +@@ -104,14 +104,17 @@ size_t CMemoryBuffer::ReadFromBuffer(unsigned char *pbData, size_t lDataLength) + { + if (!m_bRunning) + return 0; +- m_event.Wait(5000); ++ ++ std::unique_lock lock(m_BufferLock); ++ m_condition.wait_for(lock, std::chrono::milliseconds(5000)); ++ + if (!m_bRunning) + return 0; + } + + // kodi::Log(ADDON_LOG_DEBUG, "get..%d/%d", lDataLength, m_BytesInBuffer); + size_t bytesWritten = 0; +- P8PLATFORM::CLockObject BufferLock(m_BufferLock); ++ std::lock_guard BufferLock(m_BufferLock); + + while (bytesWritten < lDataLength) + { +@@ -172,7 +175,7 @@ long CMemoryBuffer::PutBuffer(unsigned char *pbData, size_t lDataLength) + memcpy(item->data, pbData, lDataLength); + bool sleep = false; + { +- P8PLATFORM::CLockObject BufferLock(m_BufferLock); ++ std::lock_guard BufferLock(m_BufferLock); + m_Array.push_back(item); + m_BytesInBuffer += lDataLength; + +@@ -192,7 +195,7 @@ long CMemoryBuffer::PutBuffer(unsigned char *pbData, size_t lDataLength) + } + if (m_BytesInBuffer > 0) + { +- m_event.Broadcast(); ++ m_condition.notify_one(); + } + } + +diff --git a/src/lib/tsreader/MemoryBuffer.h b/src/lib/tsreader/MemoryBuffer.h +index 080553b..4f8708f 100644 +--- a/src/lib/tsreader/MemoryBuffer.h ++++ b/src/lib/tsreader/MemoryBuffer.h +@@ -30,7 +30,8 @@ + + #ifdef LIVE555 + +-#include "p8-platform/threads/mutex.h" ++#include ++#include + #include + + class CMemoryBuffer +@@ -55,9 +56,9 @@ class CMemoryBuffer + + protected: + std::vector m_Array; +- P8PLATFORM::CMutex m_BufferLock; ++ std::mutex m_BufferLock; + size_t m_BytesInBuffer; +- P8PLATFORM::CEvent m_event; ++ std::condition_variable m_condition; + bool m_bRunning; + }; + #endif //LIVE555 +diff --git a/src/lib/tsreader/MemoryReader.h b/src/lib/tsreader/MemoryReader.h +index fef4f98..288984b 100644 +--- a/src/lib/tsreader/MemoryReader.h ++++ b/src/lib/tsreader/MemoryReader.h +@@ -32,6 +32,7 @@ + + #include "FileReader.h" + #include "MemoryBuffer.h" ++#include "os-dependent.h" + + namespace MPTV + { +diff --git a/src/lib/tsreader/MemorySink.cpp b/src/lib/tsreader/MemorySink.cpp +index dafef56..af8b74c 100644 +--- a/src/lib/tsreader/MemorySink.cpp ++++ b/src/lib/tsreader/MemorySink.cpp +@@ -84,7 +84,7 @@ void CMemorySink::addData(unsigned char* data, size_t dataSize, struct timeval U + return; + } + +- P8PLATFORM::CLockObject BufferLock(m_BufferLock); ++ std::lock_guard BufferLock(m_BufferLock); + + m_bReEntrant = true; + m_buffer.PutBuffer(data, dataSize); +diff --git a/src/lib/tsreader/MemorySink.h b/src/lib/tsreader/MemorySink.h +index cc0f3c8..22d91c6 100644 +--- a/src/lib/tsreader/MemorySink.h ++++ b/src/lib/tsreader/MemorySink.h +@@ -35,7 +35,7 @@ + #endif + + #include "MemoryBuffer.h" +-#include "p8-platform/threads/mutex.h" ++#include + + class CMemorySink: public MediaSink + { +@@ -57,7 +57,7 @@ class CMemorySink: public MediaSink + private: // redefined virtual functions: + virtual Boolean continuePlaying(); + +- P8PLATFORM::CMutex m_BufferLock; ++ std::mutex m_BufferLock; + unsigned char* m_pSubmitBuffer; + int m_iSubmitBufferPos; + bool m_bReEntrant; +diff --git a/src/lib/tsreader/MepoRTSPClient.cpp b/src/lib/tsreader/MepoRTSPClient.cpp +index ccd6761..688ae84 100644 +--- a/src/lib/tsreader/MepoRTSPClient.cpp ++++ b/src/lib/tsreader/MepoRTSPClient.cpp +@@ -54,7 +54,7 @@ CRTSPClient::CRTSPClient() + m_env = NULL; + m_fDuration = 0.0f; + m_url[0] = '\0'; +- m_bRunning = false; ++ m_running = false; + } + + CRTSPClient::~CRTSPClient() +@@ -496,7 +496,9 @@ void CRTSPClient::StartBufferThread() + + if (!m_BufferThreadActive) + { +- CreateThread(); ++ m_running = true; ++ m_thread = std::thread([&] { Process(); }); ++ + m_BufferThreadActive = true; + } + kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::StartBufferThread done"); +@@ -505,11 +507,12 @@ void CRTSPClient::StartBufferThread() + void CRTSPClient::StopBufferThread() + { + kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::StopBufferThread"); +- m_bRunning = false; ++ m_running = false; + if (!m_BufferThreadActive) + return; + +- StopThread(); ++ if (m_thread.joinable()) ++ m_thread.join(); + + m_BufferThreadActive = false; + kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::StopBufferThread done"); +@@ -539,25 +542,22 @@ void CRTSPClient::FillBuffer(unsigned long byteCount) + kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::Fillbuffer...%d/%d\n", byteCount, m_buffer->Size() ); + } + +-void *CRTSPClient::Process() ++void CRTSPClient::Process() + { + m_BufferThreadActive = true; +- m_bRunning = true; + + kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient:: thread started"); + +- while (m_env != NULL && !IsStopped()) ++ while (m_env != NULL && m_running) + { + m_env->taskScheduler().doEventLoop(); +- if (m_bRunning == false) ++ if (m_running == false) + break; + } + + kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient:: thread stopped"); + + m_BufferThreadActive = false; +- +- return NULL; + } + + void CRTSPClient::Continue() +@@ -582,8 +582,12 @@ bool CRTSPClient::Pause() + if (m_ourClient != NULL && m_session != NULL) + { + kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::Pause() stopthread"); +- StopThread(10000); // Ambass : sometimes 100mS ( prev value ) is not enough and thread is not stopped. +- // now stopping takes around 5 secs ?!?! why ???? ++ // Ambass : sometimes 100mS ( prev value ) is not enough and thread is not stopped. ++ // now stopping takes around 5 secs ?!?! why ???? ++ m_running = false; ++ if (m_thread.joinable()) ++ m_thread.join(); ++ + kodi::Log(ADDON_LOG_DEBUG, "CRTSPClient::Pause() thread stopped"); + RTSPClient* rtspClient=(RTSPClient*)m_ourClient; + rtspClient->pauseMediaSession(*m_session); +diff --git a/src/lib/tsreader/MepoRTSPClient.h b/src/lib/tsreader/MepoRTSPClient.h +index bd6e578..9bb0421 100644 +--- a/src/lib/tsreader/MepoRTSPClient.h ++++ b/src/lib/tsreader/MepoRTSPClient.h +@@ -31,7 +31,8 @@ + + #ifdef LIVE555 + +-#include "p8-platform/threads/threads.h" ++#include ++#include + #include "lib/tsreader/MemoryBuffer.h" + + #include "liveMedia.hh" +@@ -41,7 +42,7 @@ + + #define RTSP_URL_BUFFERSIZE 2048 + +-class CRTSPClient: public P8PLATFORM::CThread ++class CRTSPClient + { + public: + CRTSPClient(); +@@ -101,7 +102,7 @@ class CRTSPClient: public P8PLATFORM::CThread + + // Thread + private: +- virtual void *Process(void); ++ void Process(); + void StartBufferThread(); + void StopBufferThread(); + bool m_BufferThreadActive; +@@ -113,5 +114,8 @@ class CRTSPClient: public P8PLATFORM::CThread + bool m_bRunning; + bool m_bPaused; + char m_outFileName[1000]; ++ ++ std::atomic m_running = {false}; ++ std::thread m_thread; + }; + #endif //LIVE555 +diff --git a/src/lib/tsreader/MultiFileReader.cpp b/src/lib/tsreader/MultiFileReader.cpp +index 21fd7b2..5106418 100644 +--- a/src/lib/tsreader/MultiFileReader.cpp ++++ b/src/lib/tsreader/MultiFileReader.cpp +@@ -35,17 +35,16 @@ + #include "MultiFileReader.h" + #include //for kodi::Log + #include ++#include + #include "TSDebug.h" + #include + #include "utils.h" + #include +-#include "p8-platform/threads/threads.h" + #include ++#include "os-dependent.h" + + #include + +-using namespace P8PLATFORM; +- + //Maximum time in msec to wait for the buffer file to become available - Needed for DVB radio (this sometimes takes some time) + #define MAX_BUFFER_TIMEOUT 1500 + +@@ -121,12 +120,12 @@ namespace MPTV + if (RefreshTSBufferFile() == S_FALSE) + { + // For radio the buffer sometimes needs some time to become available, so wait and try it more than once +- P8PLATFORM::CTimeout timeout(MAX_BUFFER_TIMEOUT); ++ kodi::tools::CEndTime timeout(MAX_BUFFER_TIMEOUT); + + do + { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); +- if (timeout.TimeLeft() == 0) ++ if (timeout.MillisLeft() == 0) + { + kodi::Log(ADDON_LOG_ERROR, "MultiFileReader: timed out while waiting for buffer file to become available"); + kodi::QueueNotification(QUEUE_ERROR, "", "Time out while waiting for buffer file"); +diff --git a/src/os-dependent.h b/src/os-dependent.h +index cdc6980..28c162c 100644 +--- a/src/os-dependent.h ++++ b/src/os-dependent.h +@@ -11,6 +11,13 @@ + + #if (defined(_WIN32) || defined(_WIN64)) + ++#include ++ ++/* Handling of 2-byte Windows wchar strings */ ++#define WcsLen wcslen ++#define WcsToMbs wcstombs ++typedef wchar_t Wchar_t; /* sizeof(wchar_t) = 2 bytes on Windows */ ++ + #ifndef _SSIZE_T_DEFINED + #ifdef _WIN64 + typedef __int64 ssize_t; +@@ -20,20 +27,108 @@ typedef _W64 int ssize_t; + #define _SSIZE_T_DEFINED + #endif + ++/* Prevent deprecation warnings */ ++#define strnicmp _strnicmp ++ ++#define PATH_SEPARATOR_CHAR '\\' ++ + #else + + #if (defined(TARGET_LINUX) || defined(TARGET_DARWIN)) + #include + #include + #include ++ ++#define strnicmp(X,Y,N) strncasecmp(X,Y,N) ++ + inline unsigned long long GetTickCount64(void) + { + auto now = std::chrono::steady_clock::now(); + return std::chrono::duration_cast(now.time_since_epoch()).count(); + }; ++ ++#define PATH_SEPARATOR_CHAR '/' ++ ++#if defined(__APPLE__) ++// for HRESULT ++#include ++#endif ++ ++/* Handling of 2-byte Windows wchar strings on non-Windows targets ++ * Used by The MediaPortal and ForTheRecord pvr addons ++ */ ++typedef uint16_t Wchar_t; /* sizeof(wchar_t) = 4 bytes on Linux, but the MediaPortal buffer files have 2-byte wchars */ ++ ++/* This is a replacement of the Windows wcslen() function which assumes that ++ * wchar_t is a 2-byte character. ++ * It is used for processing Windows wchar strings ++ */ ++inline size_t WcsLen(const Wchar_t *str) ++{ ++ const unsigned short *eos = (const unsigned short*)str; ++ while( *eos++ ) ; ++ return( (size_t)(eos - (const unsigned short*)str) -1); ++}; ++ ++/* This is a replacement of the Windows wcstombs() function which assumes that ++ * wchar_t is a 2-byte character. ++ * It is used for processing Windows wchar strings ++ */ ++inline size_t WcsToMbs(char *s, const Wchar_t *w, size_t n) ++{ ++ size_t i = 0; ++ const unsigned short *wc = (const unsigned short*) w; ++ while(wc[i] && (i < n)) ++ { ++ s[i] = wc[i]; ++ ++i; ++ } ++ if (i < n) s[i] = '\0'; ++ ++ return (i); ++}; ++ + #endif /* TARGET_LINUX || TARGET_DARWIN */ + + #endif + ++typedef long LONG; ++#if !defined(__APPLE__) ++typedef LONG HRESULT; ++#endif ++ ++#ifndef FAILED ++#define FAILED(Status) ((HRESULT)(Status)<0) ++#endif ++ ++#ifndef SUCCEEDED ++#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0) ++#endif ++ ++#define _FILE_OFFSET_BITS 64 ++#define FILE_BEGIN 0 ++#define FILE_CURRENT 1 ++#define FILE_END 2 ++ ++#ifndef S_OK ++#define S_OK 0L ++#endif ++ ++#ifndef S_FALSE ++#define S_FALSE 1L ++#endif ++ ++// Error codes ++#define ERROR_FILENAME_EXCED_RANGE 206L ++#define ERROR_INVALID_NAME 123L ++ ++#ifndef E_OUTOFMEMORY ++#define E_OUTOFMEMORY 0x8007000EL ++#endif ++ ++#ifndef E_FAIL ++#define E_FAIL 0x8004005EL ++#endif ++ + // Additional typedefs + typedef uint8_t byte; +diff --git a/src/pvrclient-mediaportal.cpp b/src/pvrclient-mediaportal.cpp +index 851b940..c1052e3 100644 +--- a/src/pvrclient-mediaportal.cpp ++++ b/src/pvrclient-mediaportal.cpp +@@ -28,8 +28,6 @@ + #include + #include + +-#include +- + using namespace kodi::tools; + using namespace std; + using namespace MPTV; +@@ -70,7 +68,6 @@ cPVRClientMediaPortal::cPVRClientMediaPortal(KODI_HANDLE instance, const std::st + m_BackendTime = 0; + m_tsreader = NULL; + m_genretable = NULL; +- m_iLastRecordingUpdate = 0; + m_signalStateCounter = 0; + m_iSignal = 0; + m_iSNR = 0; +@@ -99,7 +96,7 @@ string cPVRClientMediaPortal::SendCommand(const char* command) + + string cPVRClientMediaPortal::SendCommand(const string& command) + { +- P8PLATFORM::CLockObject critsec(m_mutex); ++ std::lock_guard critsec(m_mutex); + + if ( !m_tcpclient->send(command) ) + { +@@ -174,10 +171,10 @@ ADDON_STATUS cPVRClientMediaPortal::TryConnect() + case PVR_CONNECTION_STATE_SERVER_UNREACHABLE: + kodi::Log(ADDON_LOG_ERROR, "Could not connect to MediaPortal TV Server backend."); + // Start background thread for connecting to the backend +- if (!IsRunning()) ++ if (!m_running) + { +- kodi::Log(ADDON_LOG_INFO, "Waiting for a connection in the background."); +- CreateThread(); ++ m_running = true; ++ m_thread = std::thread([&] { Process(); }); + } + return ADDON_STATUS_LOST_CONNECTION; + case PVR_CONNECTION_STATE_CONNECTING: +@@ -190,7 +187,7 @@ ADDON_STATUS cPVRClientMediaPortal::TryConnect() + + PVR_CONNECTION_STATE cPVRClientMediaPortal::Connect(bool updateConnectionState) + { +- P8PLATFORM::CLockObject critsec(m_connectionMutex); ++ std::lock_guard critsec(m_connectionMutex); + + string result; + +@@ -317,9 +314,11 @@ void cPVRClientMediaPortal::Disconnect() + + kodi::Log(ADDON_LOG_INFO, "Disconnect"); + +- if (IsRunning()) ++ if (m_running) + { +- StopThread(1000); ++ m_running = false; ++ if (m_thread.joinable()) ++ m_thread.join(); + } + + if (m_tcpclient->is_valid() && m_bTimeShiftStarted) +@@ -361,14 +360,14 @@ bool cPVRClientMediaPortal::IsUp() + } + } + +-void* cPVRClientMediaPortal::Process(void) ++void cPVRClientMediaPortal::Process() + { + kodi::Log(ADDON_LOG_DEBUG, "Background thread started."); + + bool keepWaiting = true; + PVR_CONNECTION_STATE state; + +- while (!IsStopped() && keepWaiting) ++ while (m_running && keepWaiting) + { + state = Connect(false); + +@@ -396,8 +395,6 @@ void* cPVRClientMediaPortal::Process(void) + SetConnectionState(state); + + kodi::Log(ADDON_LOG_DEBUG, "Background thread finished."); +- +- return NULL; + } + + +@@ -1188,7 +1185,7 @@ PVR_ERROR cPVRClientMediaPortal::GetRecordings(bool deleted, kodi::addon::PVRRec + } + } + +- m_iLastRecordingUpdate = P8PLATFORM::GetTimeMs(); ++ m_iLastRecordingUpdate = std::chrono::system_clock::now(); + + return PVR_ERROR_NO_ERROR; + } +@@ -1383,7 +1380,7 @@ PVR_ERROR cPVRClientMediaPortal::GetTimers(kodi::addon::PVRTimersResultSet& resu + } + } + +- if ( P8PLATFORM::GetTimeMs() > m_iLastRecordingUpdate + 15000) ++ if ( std::chrono::system_clock::now() > m_iLastRecordingUpdate + std::chrono::milliseconds(15000)) + { + kodi::addon::CInstancePVRClient::TriggerRecordingUpdate(); + } +diff --git a/src/pvrclient-mediaportal.h b/src/pvrclient-mediaportal.h +index 3087634..e5da832 100644 +--- a/src/pvrclient-mediaportal.h ++++ b/src/pvrclient-mediaportal.h +@@ -7,6 +7,10 @@ + + #pragma once + ++#include ++#include ++#include ++#include + #include + + /* Master defines for client control */ +@@ -17,8 +21,6 @@ + #include "Cards.h" + #include "epg.h" + #include "channels.h" +-#include "p8-platform/threads/mutex.h" +-#include "p8-platform/threads/threads.h" + + /* Use a forward declaration here. Including RTSPClient.h via TSReader.h at this point gives compile errors */ + namespace MPTV +@@ -28,9 +30,7 @@ namespace MPTV + class cRecording; + + class ATTRIBUTE_HIDDEN cPVRClientMediaPortal +- : public kodi::addon::CInstancePVRClient, +- public P8PLATFORM::PreventCopy, +- public P8PLATFORM::CThread ++ : public kodi::addon::CInstancePVRClient + { + public: + /* Class interface */ +@@ -110,7 +110,7 @@ class ATTRIBUTE_HIDDEN cPVRClientMediaPortal + + private: + /* TVServerKodi Listening Thread */ +- void* Process(void); ++ void Process(); + PVR_CONNECTION_STATE Connect(bool updateConnectionState = true); + + void LoadGenreTable(void); +@@ -134,9 +134,9 @@ class ATTRIBUTE_HIDDEN cPVRClientMediaPortal + time_t m_BackendTime; + CCards m_cCards; + CGenreTable* m_genretable; +- P8PLATFORM::CMutex m_mutex; +- P8PLATFORM::CMutex m_connectionMutex; +- int64_t m_iLastRecordingUpdate; ++ std::mutex m_mutex; ++ std::mutex m_connectionMutex; ++ std::chrono::system_clock::time_point m_iLastRecordingUpdate; + MPTV::CTsReader* m_tsreader; + std::map m_channels; + int m_signalStateCounter; +@@ -145,6 +145,9 @@ class ATTRIBUTE_HIDDEN cPVRClientMediaPortal + + cRecording* m_lastSelectedRecording; + ++ std::atomic m_running = {false}; ++ std::thread m_thread; ++ + //Used for TV Server communication: + std::string SendCommand(const char* command); + std::string SendCommand(const std::string& command); diff --git a/package/kodi-pvr-mediaportal-tvserver/0007-Remove-charset-converter-dependency.patch b/package/kodi-pvr-mediaportal-tvserver/0007-Remove-charset-converter-dependency.patch new file mode 100644 index 0000000000..81f583c7f6 --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0007-Remove-charset-converter-dependency.patch @@ -0,0 +1,55 @@ +From bb752566a31029df4ca2c8a2d7fca6680570bfe6 Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Thu, 8 Oct 2020 16:10:44 +0100 +Subject: [PATCH] Remove charset converter dependency + +Signed-off-by: Bernd Kuhls +--- + src/windows/FileUtils.cpp | 20 ++++++++++++++++---- + 1 file changed, 16 insertions(+), 4 deletions(-) + +diff --git a/src/windows/FileUtils.cpp b/src/windows/FileUtils.cpp +index 0c8a03e..f829b2a 100644 +--- a/src/windows/FileUtils.cpp ++++ b/src/windows/FileUtils.cpp +@@ -6,24 +6,36 @@ + */ + + #include "../FileUtils.h" +-#include "p8-platform/windows/CharsetConverter.h" + #include + #include "../utils.h" + #ifdef TARGET_WINDOWS_DESKTOP + #include + #endif + +-#ifdef TARGET_WINDOWS + #include + #include +-#endif ++ ++std::wstring ToW(const char* str, size_t length) ++{ ++ int result = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, length, nullptr, 0); ++ if (result == 0) ++ return std::wstring(); ++ ++ auto newStr = std::make_unique(result); ++ result = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, length, newStr.get(), result); ++ ++ if (result == 0) ++ return std::wstring(); ++ ++ return std::wstring(newStr.get(), result); ++} + + namespace OS + { + bool CFile::Exists(const std::string& strFileName, long* errCode) + { + std::string strWinFile = ToWindowsPath(strFileName); +- std::wstring strWFile = p8::windows::ToW(strWinFile.c_str()); ++ std::wstring strWFile = ToW(strWinFile.c_str(), 0); + DWORD dwAttr = GetFileAttributesW(strWFile.c_str()); + + if(dwAttr != 0xffffffff) diff --git a/package/kodi-pvr-mediaportal-tvserver/0008-Remove-p8-platform-dependency.patch b/package/kodi-pvr-mediaportal-tvserver/0008-Remove-p8-platform-dependency.patch new file mode 100644 index 0000000000..b38138df9d --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0008-Remove-p8-platform-dependency.patch @@ -0,0 +1,74 @@ +From e78eb2db7c42e302713d5e7129603e56d0e9b43b Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Thu, 8 Oct 2020 16:11:19 +0100 +Subject: [PATCH] Remove p8-platform dependency + +Signed-off-by: Bernd Kuhls +--- + CMakeLists.txt | 7 ++----- + debian/control | 2 +- + depends/common/p8-platform/p8-platform.txt | 1 - + depends/windowsstore/p8-platform/p8-platform.txt | 1 - + 4 files changed, 3 insertions(+), 8 deletions(-) + delete mode 100644 depends/common/p8-platform/p8-platform.txt + delete mode 100644 depends/windowsstore/p8-platform/p8-platform.txt + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1226685..f612570 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -4,7 +4,6 @@ project(pvr.mediaportal.tvserver) + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}) + + find_package(Kodi REQUIRED) +-find_package(p8-platform REQUIRED) + find_package(TinyXML REQUIRED) + + set(LIVE555_INCLUDE_DIR +@@ -17,8 +16,7 @@ set(LIVE555_INCLUDE_DIR + + set(LIVE555_DEFINES -DLIVE555 -D_WINSOCK_DEPRECATED_NO_WARNINGS -DSOCKLEN_T=socklen_t -DBSD=1) + +-include_directories(${p8-platform_INCLUDE_DIRS} +- ${TINYXML_INCLUDE_DIR} ++include_directories(${TINYXML_INCLUDE_DIR} + ${KODI_INCLUDE_DIR}/.. # Hack way with "/..", need bigger Kodi cmake rework to match right include ways + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR} +@@ -229,8 +227,7 @@ source_group("Header Files\\lib\\live555" FILES ${LIVE555_HEADERS}) + # Make sure that CMake adds all files to the MSVC project + list(APPEND MPTV_SOURCES ${MPTV_HEADERS} ${TSREADER_SOURCES} ${TSREADER_HEADERS} ${LIVE555_SOURCES} ${LIVE555_HEADERS}) + +-set(DEPLIBS ${p8-platform_LIBRARIES} +- ${TINYXML_LIBRARIES}) ++set(DEPLIBS ${TINYXML_LIBRARIES}) + + if(WIN32) + list(APPEND DEPLIBS ws2_32) +diff --git a/debian/control b/debian/control +index 667e47c..e81ff45 100644 +--- a/debian/control ++++ b/debian/control +@@ -2,7 +2,7 @@ Source: kodi-pvr-mediaportal-tvserver + Priority: extra + Maintainer: Nobody + Build-Depends: debhelper (>= 9.0.0), cmake, libtinyxml-dev, +- libp8-platform-dev, kodi-addon-dev ++ kodi-addon-dev + Standards-Version: 4.1.2 + Section: libs + Homepage: http://kodi.tv +diff --git a/depends/common/p8-platform/p8-platform.txt b/depends/common/p8-platform/p8-platform.txt +deleted file mode 100644 +index 98ed58a..0000000 +--- a/depends/common/p8-platform/p8-platform.txt ++++ /dev/null +@@ -1 +0,0 @@ +-p8-platform https://github.com/xbmc/platform.git cee64e9dc0b69e8d286dc170a78effaabfa09c44 +diff --git a/depends/windowsstore/p8-platform/p8-platform.txt b/depends/windowsstore/p8-platform/p8-platform.txt +deleted file mode 100644 +index db6f782..0000000 +--- a/depends/windowsstore/p8-platform/p8-platform.txt ++++ /dev/null +@@ -1 +0,0 @@ +-p8-platform https://github.com/afedchin/platform.git win10 diff --git a/package/kodi-pvr-mediaportal-tvserver/0009-Travis-changes-for-cpp17.patch b/package/kodi-pvr-mediaportal-tvserver/0009-Travis-changes-for-cpp17.patch new file mode 100644 index 0000000000..793d3ce43d --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0009-Travis-changes-for-cpp17.patch @@ -0,0 +1,28 @@ +From e613bfbb4561173046451e9bb1ec64c7879de859 Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Sat, 17 Oct 2020 14:06:04 +0100 +Subject: [PATCH] Travis changes for cpp17 + +Signed-off-by: Bernd Kuhls +--- + .travis.yml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/.travis.yml b/.travis.yml +index 1f2b61f..285f827 100644 +--- a/.travis.yml ++++ b/.travis.yml +@@ -10,11 +10,11 @@ env: + matrix: + include: + - os: linux +- dist: xenial ++ dist: bionic + sudo: required + compiler: gcc + - os: linux +- dist: xenial ++ dist: bionic + sudo: required + compiler: clang + - os: linux diff --git a/package/kodi-pvr-mediaportal-tvserver/0010-Remove-register-keyword-as-no-longer-valid-in-CPP17.patch b/package/kodi-pvr-mediaportal-tvserver/0010-Remove-register-keyword-as-no-longer-valid-in-CPP17.patch new file mode 100644 index 0000000000..09f4c80b96 --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0010-Remove-register-keyword-as-no-longer-valid-in-CPP17.patch @@ -0,0 +1,23 @@ +From 5cf2d4e05673964e269e4b9a2e779d20f57c0d17 Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Sat, 6 Feb 2021 12:56:50 +0000 +Subject: [PATCH] Remove register keyword as no longer valid in CPP17 + +Signed-off-by: Bernd Kuhls +--- + src/lib/tsreader/DvbUtil.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/lib/tsreader/DvbUtil.cpp b/src/lib/tsreader/DvbUtil.cpp +index 8c4798a..c973062 100644 +--- a/src/lib/tsreader/DvbUtil.cpp ++++ b/src/lib/tsreader/DvbUtil.cpp +@@ -77,7 +77,7 @@ namespace MPTV + //******************************************************************* + uint32_t crc32(char *data, int len) + { +- register int i; ++ int i; + uint32_t crc = 0xffffffff; + + for (i = 0; i < len; i++) diff --git a/package/kodi-pvr-mediaportal-tvserver/0011-changelog-and-version-v8.1.1.patch b/package/kodi-pvr-mediaportal-tvserver/0011-changelog-and-version-v8.1.1.patch new file mode 100644 index 0000000000..7fded54e7e --- /dev/null +++ b/package/kodi-pvr-mediaportal-tvserver/0011-changelog-and-version-v8.1.1.patch @@ -0,0 +1,42 @@ +From 79e33e1799976e2196132f90bd7f322f213c1a99 Mon Sep 17 00:00:00 2001 +From: phunkyfish +Date: Sat, 6 Feb 2021 00:16:19 +0000 +Subject: [PATCH] changelog and version v8.1.1 + +Signed-off-by: Bernd Kuhls +--- + pvr.mediaportal.tvserver/addon.xml.in | 2 +- + pvr.mediaportal.tvserver/changelog.txt | 10 ++++++++++ + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/pvr.mediaportal.tvserver/addon.xml.in b/pvr.mediaportal.tvserver/addon.xml.in +index de30c2a..1944bc0 100644 +--- a/pvr.mediaportal.tvserver/addon.xml.in ++++ b/pvr.mediaportal.tvserver/addon.xml.in +@@ -1,7 +1,7 @@ + + + @ADDON_DEPENDS@ +diff --git a/pvr.mediaportal.tvserver/changelog.txt b/pvr.mediaportal.tvserver/changelog.txt +index 7d1630e..8e06c48 100644 +--- a/pvr.mediaportal.tvserver/changelog.txt ++++ b/pvr.mediaportal.tvserver/changelog.txt +@@ -1,3 +1,13 @@ ++v8.1.1 ++- Remove p8-platform dependency ++- Remove charset converter dependency ++- Use std::thread, std::mutex, condition_variable instead of event and bool defines ++- Use thread sleep_for instead of p8 time utils ++- Remove SAFE_DELETE ++- Use kodi StringUtils ++- Remove p8 os includes ++- Revert "Removed no more supported (C++17) declaration keyword (register)" ++ + v8.1.0 + - Update PVR API 7.1.0 + diff --git a/package/kodi-pvr-mediaportal-tvserver/Config.in b/package/kodi-pvr-mediaportal-tvserver/Config.in index 733ca8859e..e8f1e3d611 100644 --- a/package/kodi-pvr-mediaportal-tvserver/Config.in +++ b/package/kodi-pvr-mediaportal-tvserver/Config.in @@ -1,6 +1,6 @@ config BR2_PACKAGE_KODI_PVR_MEDIAPORTAL_TVSERVER bool "kodi-pvr-mediaportal-tvserver" - select BR2_PACKAGE_KODI_PLATFORM + select BR2_PACKAGE_TINYXML help MediaPortal TVServer PVR client addon for Kodi diff --git a/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.hash b/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.hash index 53d4316d06..9f700ceef2 100644 --- a/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.hash +++ b/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.hash @@ -1,3 +1,3 @@ # Locally computed -sha256 9c05578566f7448dc3a7677587c804596aa314afd493cb9c62cc65ea883645aa kodi-pvr-mediaportal-tvserver-3.5.18-Leia.tar.gz -sha256 f9df5b0c11a23b2d5ca84828c67412ecd8752df46527285aeff48f4d7988d367 debian/copyright +sha256 862b8b0c7c1cd49f0a304dd7caeb6a02dd2b6f767fff256875457040e5ca1177 kodi-pvr-mediaportal-tvserver-8.1.0-Matrix.tar.gz +sha256 310782e1abd43c4de6217c513e328bddf999d39302d67c6e05b10a59959827af LICENSE.md diff --git a/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.mk b/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.mk index a00711c662..d2cacae8a5 100644 --- a/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.mk +++ b/package/kodi-pvr-mediaportal-tvserver/kodi-pvr-mediaportal-tvserver.mk @@ -4,10 +4,10 @@ # ################################################################################ -KODI_PVR_MEDIAPORTAL_TVSERVER_VERSION = 3.5.18-Leia +KODI_PVR_MEDIAPORTAL_TVSERVER_VERSION = 8.1.0-Matrix KODI_PVR_MEDIAPORTAL_TVSERVER_SITE = $(call github,kodi-pvr,pvr.mediaportal.tvserver,$(KODI_PVR_MEDIAPORTAL_TVSERVER_VERSION)) KODI_PVR_MEDIAPORTAL_TVSERVER_LICENSE = GPL-2.0+ -KODI_PVR_MEDIAPORTAL_TVSERVER_LICENSE_FILES = debian/copyright -KODI_PVR_MEDIAPORTAL_TVSERVER_DEPENDENCIES = kodi-platform +KODI_PVR_MEDIAPORTAL_TVSERVER_LICENSE_FILES = LICENSE.md +KODI_PVR_MEDIAPORTAL_TVSERVER_DEPENDENCIES = kodi tinyxml $(eval $(cmake-package)) -- 2.30.2