diff -Nru kodi-vfs-sacd-1.0.4/appveyor.yml kodi-vfs-sacd-2.0.0/appveyor.yml --- kodi-vfs-sacd-1.0.4/appveyor.yml 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/appveyor.yml 2020-09-16 20:58:22.000000000 +0000 @@ -16,14 +16,14 @@ CONFIG: Release - GENERATOR: "Visual Studio 15 Win64" CONFIG: Release - WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.16299.0" + WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.17763.0" - GENERATOR: "Visual Studio 15 ARM" CONFIG: Release - WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.16299.0" + WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.17763.0" build_script: - cd .. - - git clone --branch Leia --depth=1 https://github.com/xbmc/xbmc.git + - git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git - cd %app_id% - mkdir build - cd build diff -Nru kodi-vfs-sacd-1.0.4/azure-pipelines.yml kodi-vfs-sacd-2.0.0/azure-pipelines.yml --- kodi-vfs-sacd-1.0.4/azure-pipelines.yml 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/azure-pipelines.yml 2020-09-16 20:58:22.000000000 +0000 @@ -4,7 +4,7 @@ trigger: branches: include: - - Leia + - Matrix - releases/* paths: include: @@ -32,12 +32,12 @@ GENERATOR: "Visual Studio 15 2017" ARCHITECTURE: x64 CONFIGURATION: Release - WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.16299.0" + WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.17763.0" ARM64-UWP: GENERATOR: "Visual Studio 15 2017" ARCHITECTURE: ARM64 CONFIGURATION: Release - WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.16299.0" + WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.17763.0" workspace: clean: all @@ -46,7 +46,7 @@ - script: | cd .. - git clone --branch Leia --depth=1 https://github.com/xbmc/xbmc.git kodi + git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git kodi cd $(Build.SourcesDirectory) mkdir build cd build diff -Nru kodi-vfs-sacd-1.0.4/.clang-format kodi-vfs-sacd-2.0.0/.clang-format --- kodi-vfs-sacd-1.0.4/.clang-format 1970-01-01 00:00:00.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/.clang-format 2020-09-16 20:58:22.000000000 +0000 @@ -0,0 +1,88 @@ +--- +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: DontAlign +AlignOperands: true +AlignTrailingComments: false +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: InlineOnly +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Allman +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 100 +CommentPragmas: '^ IWYU pragma:' +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 2 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +IncludeBlocks: Regroup +IncludeCategories: + - Regex: '^<[a-z0-9_]+>$' + Priority: 3 + - Regex: '^<(assert|complex|ctype|errno|fenv|float|inttypes|iso646|limits|locale|math|setjmp|signal|stdalign|stdarg|stdatomic|stdbool|stddef|stdint|stdio|stdlib|stdnoreturn|string|tgmath|threads|time|uchar|wchar|wctype)\.h>$' + Priority: 3 + - Regex: '^<' + Priority: 3 + - Regex: '^["<](kodi|p8-platform)\/.*\.h[">]$' + Priority: 2 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '$' +IndentCaseLabels: true +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60000 +PointerAlignment: Left +ReflowComments: false +SortIncludes: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 8 +UseTab: Never +... diff -Nru kodi-vfs-sacd-1.0.4/debian/changelog kodi-vfs-sacd-2.0.0/debian/changelog --- kodi-vfs-sacd-1.0.4/debian/changelog 2020-04-09 09:50:10.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/debian/changelog 2013-05-31 22:59:22.000000000 +0000 @@ -1,9 +1,7 @@ -kodi-vfs-sacd (1.0.4-1~focal) focal; urgency=low +kodi-vfs-sacd (2.0.0-1~focal) focal; urgency=low [ kodi ] * autogenerated dummy changelog - [ wsnipex ] - * no upstream changelog available + -- Nobody Sat, 01 Jun 2013 00:59:22 +0200 - -- wsnipex Thu, 09 Apr 2020 09:50:10 +0000 diff -Nru kodi-vfs-sacd-1.0.4/debian/changelog.tmp kodi-vfs-sacd-2.0.0/debian/changelog.tmp --- kodi-vfs-sacd-1.0.4/debian/changelog.tmp 2020-04-09 09:50:08.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/debian/changelog.tmp 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -kodi-vfs-sacd (1.0.4-1~#DIST#) #DIST#; urgency=low - - [ kodi ] - * autogenerated dummy changelog - - -- Nobody Sat, 01 Jun 2013 00:59:22 +0200 - diff -Nru kodi-vfs-sacd-1.0.4/debian/control kodi-vfs-sacd-2.0.0/debian/control --- kodi-vfs-sacd-1.0.4/debian/control 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/debian/control 2013-05-31 22:59:22.000000000 +0000 @@ -2,7 +2,7 @@ Priority: extra Maintainer: wsnipex Build-Depends: debhelper (>= 9.0.0), cmake, kodi-addon-dev -Standards-Version: 3.9.8 +Standards-Version: 4.1.2 Section: libs Package: kodi-vfs-sacd diff -Nru kodi-vfs-sacd-1.0.4/debian/kodi-vfs-sacd.install kodi-vfs-sacd-2.0.0/debian/kodi-vfs-sacd.install --- kodi-vfs-sacd-1.0.4/debian/kodi-vfs-sacd.install 2020-04-09 09:50:08.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/debian/kodi-vfs-sacd.install 2013-05-31 22:59:22.000000000 +0000 @@ -1,2 +1,2 @@ -usr/lib -usr/share +usr/lib/* +usr/share/* diff -Nru kodi-vfs-sacd-1.0.4/debian/source/format kodi-vfs-sacd-2.0.0/debian/source/format --- kodi-vfs-sacd-1.0.4/debian/source/format 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/debian/source/format 2013-05-31 22:59:22.000000000 +0000 @@ -1 +1 @@ -3.0 (native) +3.0 (quilt) diff -Nru kodi-vfs-sacd-1.0.4/.gitignore kodi-vfs-sacd-2.0.0/.gitignore --- kodi-vfs-sacd-1.0.4/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/.gitignore 2020-09-16 20:58:22.000000000 +0000 @@ -0,0 +1,50 @@ +# build artifacts +build/ +vfs.*/addon.xml + +# Debian build files +debian/changelog +debian/files +debian/*.log +debian/*.substvars +debian/.debhelper/ +debian/tmp/ +debian/kodi-vfs-*/ +obj-x86_64-linux-gnu/ + +# commonly used editors +# vim +*.swp + +# Eclipse +*.project +*.cproject +.classpath +*.sublime-* +.settings/ + +# KDevelop 4 +*.kdev4 + +# gedit +*~ + +# CLion +/.idea + +# clion +.idea/ + +# to prevent add after a "git format-patch VALUE" and "git add ." call +/*.patch + +# Visual Studio Code +.vscode + +# to prevent add if project code opened by Visual Studio over CMake file +.vs/ + +# General MacOS +.DS_Store +.AppleDouble +.LSOverride diff -Nru kodi-vfs-sacd-1.0.4/Jenkinsfile kodi-vfs-sacd-2.0.0/Jenkinsfile --- kodi-vfs-sacd-1.0.4/Jenkinsfile 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/Jenkinsfile 2020-09-16 20:58:22.000000000 +0000 @@ -1 +1 @@ -buildPlugin(version: "Leia") +buildPlugin(version: "Matrix") diff -Nru kodi-vfs-sacd-1.0.4/README.md kodi-vfs-sacd-2.0.0/README.md --- kodi-vfs-sacd-1.0.4/README.md 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/README.md 2020-09-16 20:58:22.000000000 +0000 @@ -2,11 +2,13 @@ This is a [Kodi](https://kodi.tv) VFS addon for SACD isos. +> **NOTE:** Addon deprecated, use [audiodecoder.sacd](https://github.com/xbmc/audiodecoder.sacd), as this does not have full SACD support. + [![License: GPL-2.0-or-later](https://img.shields.io/badge/License-GPL%20v2+-blue.svg)](LICENSE.md) -[![Build Status](https://travis-ci.org/xbmc/vfs.sacd.svg?branch=Leia)](https://travis-ci.org/xbmc/vfs.sacd/branches) -[![Build Status](https://dev.azure.com/teamkodi/binary-addons/_apis/build/status/xbmc.vfs.sacd?branchName=Leia)](https://dev.azure.com/teamkodi/binary-addons/_build/latest?definitionId=53&branchName=Leia) -[![Build Status](https://jenkins.kodi.tv/view/Addons/job/xbmc/job/vfs.sacd/job/Leia/badge/icon)](https://jenkins.kodi.tv/blue/organizations/jenkins/xbmc%2Fvfs.sacd/branches/) - +[![Build Status](https://travis-ci.org/xbmc/vfs.sacd.svg?branch=Matrix)](https://travis-ci.org/xbmc/vfs.sacd/branches) +[![Build Status](https://dev.azure.com/teamkodi/binary-addons/_apis/build/status/xbmc.vfs.sacd?branchName=Matrix)](https://dev.azure.com/teamkodi/binary-addons/_build/latest?definitionId=53&branchName=Matrix) +[![Build Status](https://jenkins.kodi.tv/view/Addons/job/xbmc/job/vfs.sacd/job/Matrix/badge/icon)](https://jenkins.kodi.tv/blue/organizations/jenkins/xbmc%2Fvfs.sacd/branches/) + ## Build instructions @@ -19,8 +21,8 @@ The following instructions assume you will have built Kodi already in the `kodi-build` directory suggested by the README. -1. `git clone --branch Leia https://github.com/xbmc/xbmc.git` -2. `git clone --branch Leia https://github.com/xbmc/vfs.sacd.git` +1. `git clone --branch master https://github.com/xbmc/xbmc.git` +2. `git clone --branch Matrix https://github.com/xbmc/vfs.sacd.git` 3. `cd vfs.sacd && mkdir build && cd build` 4. `cmake -DADDONS_TO_BUILD=vfs.sacd -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/kodi-build/addons -DPACKAGE_ZIP=1 ../../xbmc/cmake/addons` 5. `make` diff -Nru kodi-vfs-sacd-1.0.4/src/Helpers.h kodi-vfs-sacd-2.0.0/src/Helpers.h --- kodi-vfs-sacd-1.0.4/src/Helpers.h 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/src/Helpers.h 2020-09-16 20:58:22.000000000 +0000 @@ -26,14 +26,10 @@ return "LOG_DEBUG: "; case ADDON_LOG_INFO: return "LOG_INFO: "; - case ADDON_LOG_NOTICE: - return "LOG_NOTICE: "; case ADDON_LOG_WARNING: return "LOG_WARNING: "; case ADDON_LOG_ERROR: return "LOG_ERROR: "; - case ADDON_LOG_SEVERE: - return "LOG_SEVERE: "; case ADDON_LOG_FATAL: return "LOG_FATAL: "; default: @@ -68,21 +64,20 @@ inline ~PreventCopy(void) = default; private: - inline PreventCopy(const PreventCopy &c) { *this = c; } - inline PreventCopy &operator=(const PreventCopy &c){ (void)c; return *this; } + inline PreventCopy(const PreventCopy& c) { *this = c; } + inline PreventCopy& operator=(const PreventCopy& c) + { + (void)c; + return *this; + } }; class CMutex : public PreventCopy { public: - inline CMutex(void) : m_iLockCount(0) - { - } + inline CMutex(void) : m_iLockCount(0) {} - inline ~CMutex(void) - { - Clear(); - } + inline ~CMutex(void) { Clear(); } inline bool TryLock(void) { @@ -137,9 +132,8 @@ class CLockObject : public PreventCopy { public: - inline CLockObject(CMutex &mutex, bool bClearOnExit = false) : - m_mutex(mutex), - m_bClearOnExit(bClearOnExit) + inline CLockObject(CMutex& mutex, bool bClearOnExit = false) + : m_mutex(mutex), m_bClearOnExit(bClearOnExit) { m_mutex.Lock(); } @@ -152,28 +146,16 @@ Unlock(); } - inline bool TryLock(void) - { - return m_mutex.TryLock(); - } + inline bool TryLock(void) { return m_mutex.TryLock(); } - inline void Unlock(void) - { - m_mutex.Unlock(); - } + inline void Unlock(void) { m_mutex.Unlock(); } - inline bool Clear(void) - { - return m_mutex.Clear(); - } + inline bool Clear(void) { return m_mutex.Clear(); } - inline bool Lock(void) - { - return m_mutex.Lock(); - } + inline bool Lock(void) { return m_mutex.Lock(); } private: - CMutex &m_mutex; + CMutex& m_mutex; bool m_bClearOnExit; }; diff -Nru kodi-vfs-sacd-1.0.4/src/RingBuffer.cpp kodi-vfs-sacd-2.0.0/src/RingBuffer.cpp --- kodi-vfs-sacd-1.0.4/src/RingBuffer.cpp 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/src/RingBuffer.cpp 2020-09-16 20:58:22.000000000 +0000 @@ -8,9 +8,9 @@ #include "RingBuffer.h" -#include -#include #include +#include +#include /* Destructor */ CRingBuffer::~CRingBuffer() @@ -61,7 +61,7 @@ /* Read in data from the ring buffer to the supplied buffer 'buf'. The amount * read in is specified by 'size'. */ -bool CRingBuffer::ReadData(char *buf, unsigned int size) +bool CRingBuffer::ReadData(char* buf, unsigned int size) { ThreadHelpers::CLockObject lock(m_critSection, true); @@ -91,7 +91,7 @@ /* Read in data from the ring buffer to another ring buffer object specified by * 'rBuf'. */ -bool CRingBuffer::ReadData(CRingBuffer &rBuf, unsigned int size) +bool CRingBuffer::ReadData(CRingBuffer& rBuf, unsigned int size) { ThreadHelpers::CLockObject lock(m_critSection, true); @@ -115,7 +115,7 @@ /* Write data to ring buffer from buffer specified in 'buf'. Amount read in is * specified by 'size'. */ -bool CRingBuffer::WriteData(const char *buf, unsigned int size) +bool CRingBuffer::WriteData(const char* buf, unsigned int size) { ThreadHelpers::CLockObject lock(m_critSection, true); @@ -145,7 +145,7 @@ /* Write data to ring buffer from another ring buffer object specified by * 'rBuf'. */ -bool CRingBuffer::WriteData(CRingBuffer &rBuf, unsigned int size) +bool CRingBuffer::WriteData(CRingBuffer& rBuf, unsigned int size) { ThreadHelpers::CLockObject lock(m_critSection, true); @@ -197,20 +197,20 @@ } /* Append all content from ring buffer 'rBuf' to this ring buffer */ -bool CRingBuffer::Append(CRingBuffer &rBuf) +bool CRingBuffer::Append(CRingBuffer& rBuf) { return WriteData(rBuf, rBuf.getMaxReadSize()); } /* Copy all content from ring buffer 'rBuf' to this ring buffer overwriting any existing data */ -bool CRingBuffer::Copy(CRingBuffer &rBuf) +bool CRingBuffer::Copy(CRingBuffer& rBuf) { Clear(); return Append(rBuf); } /* Our various 'get' methods */ -char *CRingBuffer::getBuffer() +char* CRingBuffer::getBuffer() { return m_buffer; } diff -Nru kodi-vfs-sacd-1.0.4/src/RingBuffer.h kodi-vfs-sacd-2.0.0/src/RingBuffer.h --- kodi-vfs-sacd-1.0.4/src/RingBuffer.h 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/src/RingBuffer.h 2020-09-16 20:58:22.000000000 +0000 @@ -19,14 +19,14 @@ bool Create(unsigned int size); void Destroy(); void Clear(); - bool ReadData(char *buf, unsigned int size); - bool ReadData(CRingBuffer &rBuf, unsigned int size); - bool WriteData(const char *buf, unsigned int size); - bool WriteData(CRingBuffer &rBuf, unsigned int size); + bool ReadData(char* buf, unsigned int size); + bool ReadData(CRingBuffer& rBuf, unsigned int size); + bool WriteData(const char* buf, unsigned int size); + bool WriteData(CRingBuffer& rBuf, unsigned int size); bool SkipBytes(int skipSize); - bool Append(CRingBuffer &rBuf); - bool Copy(CRingBuffer &rBuf); - char *getBuffer(); + bool Append(CRingBuffer& rBuf); + bool Copy(CRingBuffer& rBuf); + char* getBuffer(); unsigned int getSize(); unsigned int getReadPtr() const; unsigned int getWritePtr(); @@ -36,7 +36,7 @@ private: ThreadHelpers::CMutex m_critSection; - char *m_buffer = nullptr; + char* m_buffer = nullptr; unsigned int m_size = 0; unsigned int m_readPtr = 0; unsigned int m_writePtr = 0; diff -Nru kodi-vfs-sacd-1.0.4/src/SACDFile.cpp kodi-vfs-sacd-2.0.0/src/SACDFile.cpp --- kodi-vfs-sacd-1.0.4/src/SACDFile.cpp 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/src/SACDFile.cpp 2020-09-16 20:58:22.000000000 +0000 @@ -7,16 +7,17 @@ * See LICENSE.md for more information. */ -#include -#include +#include "RingBuffer.h" + #include #include -#include -#include #include #include +#include +#include +#include +#include #include -#include "RingBuffer.h" extern "C" { @@ -26,244 +27,244 @@ #include "sacd_reader.h" #include "scarletbook.h" #include "scarletbook_id3.h" -#include "scarletbook_read.h" #include "scarletbook_output.h" #include "scarletbook_print.h" +#include "scarletbook_read.h" -struct sacd_input_s -{ - void* fd; - uint8_t* input_buffer; - ssize_t total_sectors; -}; + struct sacd_input_s + { + void* fd; + uint8_t* input_buffer; + ssize_t total_sectors; + }; -int sacd_vfs_input_authenticate(sacd_input_t dev) -{ - return 0; -} + int sacd_vfs_input_authenticate(sacd_input_t dev) { return 0; } -int sacd_vfs_input_decrypt(sacd_input_t dev, uint8_t *buffer, int blocks) -{ - return 0; -} + int sacd_vfs_input_decrypt(sacd_input_t dev, uint8_t* buffer, int blocks) { return 0; } -/** + /** * initialize and open a SACD device or file. */ -sacd_input_t sacd_vfs_input_open(const char *target) -{ - sacd_input_t dev; - - /* Allocate the library structure */ - dev = static_cast(calloc(sizeof(*dev), 1)); - if (dev == nullptr) + sacd_input_t sacd_vfs_input_open(const char* target) { - kodiLog(ADDON_LOG_ERROR, "%s: Could not allocate memory", __func__); - return nullptr; - } + sacd_input_t dev; - /* Open the device */ - STAT_STRUCTURE buffer; - kodi::vfs::StatFile(target, buffer); - dev->total_sectors = buffer.size/SACD_LSN_SIZE; - kodi::vfs::CFile* file = new kodi::vfs::CFile; - dev->fd = file; - bool result = file->OpenFile(target, 0); - if (!result) - { - goto error; - } + /* Allocate the library structure */ + dev = static_cast(calloc(sizeof(*dev), 1)); + if (dev == nullptr) + { + kodiLog(ADDON_LOG_ERROR, "%s: Could not allocate memory", __func__); + return nullptr; + } - return dev; + /* Open the device */ + kodi::vfs::FileStatus status; + kodi::vfs::StatFile(target, status); + dev->total_sectors = status.GetSize() / SACD_LSN_SIZE; + kodi::vfs::CFile* file = new kodi::vfs::CFile; + dev->fd = file; + bool result = file->OpenFile(target, 0); + if (!result) + { + goto error; + } -error: + return dev; - delete file; - free(dev); + error: - return 0; -} + delete file; + free(dev); -/** + return 0; + } + + /** * return the last error message */ -char *sacd_vfs_input_error(sacd_input_t dev) -{ - return const_cast("unknown error"); -} + char* sacd_vfs_input_error(sacd_input_t dev) { return const_cast("unknown error"); } -/** + /** * read data from the device. */ -ssize_t sacd_vfs_input_read(sacd_input_t dev, int pos, int blocks, void *buffer) -{ - kodi::vfs::CFile* file = static_cast(dev->fd); - file->Seek(pos*SACD_LSN_SIZE, SEEK_SET); - return file->Read(buffer, blocks*SACD_LSN_SIZE)/SACD_LSN_SIZE; -} + ssize_t sacd_vfs_input_read(sacd_input_t dev, int pos, int blocks, void* buffer) + { + kodi::vfs::CFile* file = static_cast(dev->fd); + file->Seek(pos * SACD_LSN_SIZE, SEEK_SET); + return file->Read(buffer, blocks * SACD_LSN_SIZE) / SACD_LSN_SIZE; + } -/** + /** * close the SACD device and clean up. */ -int sacd_vfs_input_close(sacd_input_t dev) -{ - kodi::vfs::CFile* file = static_cast(dev->fd); - delete file; - - free(dev); + int sacd_vfs_input_close(sacd_input_t dev) + { + kodi::vfs::CFile* file = static_cast(dev->fd); + delete file; - return 0; -} + free(dev); -uint32_t sacd_vfs_input_total_sectors(sacd_input_t dev) -{ - if (!dev) return 0; + } - return dev->total_sectors; -} - -static std::string URLDecode(const std::string& strURLData) -//modified to be more accomodating - if a non hex value follows a % take the characters directly and don't raise an error. -// However % characters should really be escaped like any other non safe character (www.rfc-editor.org/rfc/rfc1738.txt) -{ - std::string strResult; + uint32_t sacd_vfs_input_total_sectors(sacd_input_t dev) + { + if (!dev) + return 0; - /* result will always be less than source */ - strResult.reserve( strURLData.length() ); + return dev->total_sectors; + } - for (unsigned int i = 0; i < strURLData.size(); ++i) + static std::string URLDecode(const std::string& strURLData) + //modified to be more accomodating - if a non hex value follows a % take the characters directly and don't raise an error. + // However % characters should really be escaped like any other non safe character (www.rfc-editor.org/rfc/rfc1738.txt) { - int kar = (unsigned char)strURLData[i]; - if (kar == '+') strResult += ' '; - else if (kar == '%') + std::string strResult; + + /* result will always be less than source */ + strResult.reserve(strURLData.length()); + + for (unsigned int i = 0; i < strURLData.size(); ++i) { - if (i < strURLData.size() - 2) + int kar = (unsigned char)strURLData[i]; + if (kar == '+') + strResult += ' '; + else if (kar == '%') { - std::string strTmp; - strTmp.assign(strURLData.substr(i + 1, 2)); - int dec_num=-1; - sscanf(strTmp.c_str(), "%x", reinterpret_cast(&dec_num)); - if (dec_num<0 || dec_num>255) - strResult += kar; - else + if (i < strURLData.size() - 2) { - strResult += (char)dec_num; - i += 2; + std::string strTmp; + strTmp.assign(strURLData.substr(i + 1, 2)); + int dec_num = -1; + sscanf(strTmp.c_str(), "%x", reinterpret_cast(&dec_num)); + if (dec_num < 0 || dec_num > 255) + strResult += kar; + else + { + strResult += (char)dec_num; + i += 2; + } } + else + strResult += kar; } else strResult += kar; } - else strResult += kar; - } - - return strResult; -} - -static std::string URLEncode(const std::string& strURLData) -{ - std::string strResult; - /* wonder what a good value is here is, depends on how often it occurs */ - strResult.reserve( strURLData.length() * 2 ); + return strResult; + } - for (size_t i = 0; i < strURLData.size(); ++i) + static std::string URLEncode(const std::string& strURLData) { - const char kar = strURLData[i]; + std::string strResult; - // Don't URL encode "-_.!()" according to RFC1738 - //! @todo Update it to "-_.~" after Gotham according to RFC3986 - if (std::isalnum(kar) || kar == '-' || kar == '.' || kar == '_' || kar == '!' || kar == '(' || kar == ')') - strResult.push_back(kar); - else + /* wonder what a good value is here is, depends on how often it occurs */ + strResult.reserve(strURLData.length() * 2); + + for (size_t i = 0; i < strURLData.size(); ++i) { - char temp[128]; - sprintf(temp,"%%%2.2X", (unsigned int)((unsigned char)kar)); - strResult += temp; - } - } + const char kar = strURLData[i]; - return strResult; -} + // Don't URL encode "-_.!()" according to RFC1738 + //! @todo Update it to "-_.~" after Gotham according to RFC3986 + if (std::isalnum(kar) || kar == '-' || kar == '.' || kar == '_' || kar == '!' || kar == '(' || + kar == ')') + strResult.push_back(kar); + else + { + char temp[128]; + sprintf(temp, "%%%2.2X", (unsigned int)((unsigned char)kar)); + strResult += temp; + } + } -struct SACDContext -{ - sacd_reader_t* reader = nullptr; - scarletbook_handle_t* handle = nullptr; - scarletbook_output_t* output = nullptr; - scarletbook_output_format_t* ft = nullptr; - uint32_t block_size = 0; - uint32_t end_lsn = 0; - uint32_t encrypted_start_1 = 0; - uint32_t encrypted_start_2 = 0; - uint32_t encrypted_end_1 = 0; - uint32_t encrypted_end_2 = 0; - uint32_t checked_for_non_encrypted_disc = 0; - uint32_t non_encrypted_disc = 0; - int encrypted = 0; - uint8_t* frame_buffer = nullptr; - CRingBuffer decode_buffer; - int64_t pos = 0; -}; + return strResult; + } -static void frame_read_callback(scarletbook_handle_t* handle, uint8_t* frame_data, - size_t frame_size, void* userdata) -{ - SACDContext* ctx = static_cast(userdata); + struct SACDContext + { + sacd_reader_t* reader = nullptr; + scarletbook_handle_t* handle = nullptr; + scarletbook_output_t* output = nullptr; + scarletbook_output_format_t* ft = nullptr; + uint32_t block_size = 0; + uint32_t end_lsn = 0; + uint32_t encrypted_start_1 = 0; + uint32_t encrypted_start_2 = 0; + uint32_t encrypted_end_1 = 0; + uint32_t encrypted_end_2 = 0; + uint32_t checked_for_non_encrypted_disc = 0; + uint32_t non_encrypted_disc = 0; + int encrypted = 0; + uint8_t* frame_buffer = nullptr; + CRingBuffer decode_buffer; + int64_t pos = 0; + }; - size_t actual = (*ctx->ft->handler.write)(ctx->ft, frame_data, frame_size); - ctx->decode_buffer.WriteData(reinterpret_cast(ctx->frame_buffer), actual); - ctx->ft->write_length += actual; -} + static void frame_read_callback(scarletbook_handle_t* handle, + uint8_t* frame_data, + size_t frame_size, + void* userdata) + { + SACDContext* ctx = static_cast(userdata); -static void frame_decoded_callback(uint8_t* frame_data, size_t frame_size, void* userdata) -{ - SACDContext* ctx = static_cast(userdata); - dsf_handle_t* handle = static_cast(ctx->ft->priv); + size_t actual = (*ctx->ft->handler.write)(ctx->ft, frame_data, frame_size); + ctx->decode_buffer.WriteData(reinterpret_cast(ctx->frame_buffer), actual); + ctx->ft->write_length += actual; + } - size_t actual = (*ctx->ft->handler.write)(ctx->ft, frame_data, frame_size); - ctx->decode_buffer.WriteData(reinterpret_cast(ctx->frame_buffer), actual); - ctx->ft->write_length += actual; -} + static void frame_decoded_callback(uint8_t* frame_data, size_t frame_size, void* userdata) + { + SACDContext* ctx = static_cast(userdata); + dsf_handle_t* handle = static_cast(ctx->ft->priv); -static void frame_error_callback(int frame_count, int frame_error_code, - const char *frame_error_message, void *userdata) -{ - kodiLog(ADDON_LOG_ERROR, "%s: ERROR decoding DST frame", __func__); -} + size_t actual = (*ctx->ft->handler.write)(ctx->ft, frame_data, frame_size); + ctx->decode_buffer.WriteData(reinterpret_cast(ctx->frame_buffer), actual); + ctx->ft->write_length += actual; + } + static void frame_error_callback(int frame_count, + int frame_error_code, + const char* frame_error_message, + void* userdata) + { + kodiLog(ADDON_LOG_ERROR, "%s: ERROR decoding DST frame", __func__); + } } -class CSACDFile : public kodi::addon::CInstanceVFS +class ATTRIBUTE_HIDDEN CSACDFile : public kodi::addon::CInstanceVFS { public: - CSACDFile(KODI_HANDLE instance) : CInstanceVFS(instance) { } - void* Open(const VFSURL& url) override; - ssize_t Read(void* context, void* lpBuf, size_t uiBufSize) override; - bool Close(void* context) override; - int64_t GetLength(void* context) override; - int64_t GetPosition(void* context) override; - int Stat(const VFSURL& url, struct __stat64* buffer) override; - int IoControl(void* context, XFILE::EIoControl request, void* param) override; - bool ContainsFiles(const VFSURL& url, + CSACDFile(KODI_HANDLE instance, const std::string& version) : CInstanceVFS(instance, version) {} + kodi::addon::VFSFileHandle Open(const kodi::addon::VFSUrl& url) override; + ssize_t Read(kodi::addon::VFSFileHandle context, uint8_t* lpBuf, size_t uiBufSize) override; + bool Close(kodi::addon::VFSFileHandle context) override; + int64_t GetLength(kodi::addon::VFSFileHandle context) override; + int64_t GetPosition(kodi::addon::VFSFileHandle context) override; + int Stat(const kodi::addon::VFSUrl& url, kodi::vfs::FileStatus& buffer) override; + bool IoControlGetSeekPossible(kodi::addon::VFSFileHandle context) override; + bool ContainsFiles(const kodi::addon::VFSUrl& url, std::vector& items, std::string& rootPath) override; - bool GetDirectory(const VFSURL& url, + bool GetDirectory(const kodi::addon::VFSUrl& url, std::vector& items, CVFSCallbacks callbacks) override - { std::string rpath; return ContainsFiles(url, items, rpath); } + { + std::string rpath; + return ContainsFiles(url, items, rpath); + } std::vector id3_buffer; }; -void* CSACDFile::Open(const VFSURL& url) +kodi::addon::VFSFileHandle CSACDFile::Open(const kodi::addon::VFSUrl& url) { - std::string file(url.filename); - int track = strtol(file.substr(0,file.size()-4).c_str(), 0, 10); + std::string file(url.GetFilename()); + int track = strtol(file.substr(0, file.size() - 4).c_str(), 0, 10); SACDContext* result = new SACDContext; - result->reader = sacd_open(URLDecode(url.hostname).c_str()); + result->reader = sacd_open(URLDecode(url.GetHostname()).c_str()); if (!result->reader) { delete result; @@ -277,19 +278,18 @@ return nullptr; } + std::string url2 = url.GetURL(); result->output = scarletbook_output_create(result->handle, 0, 0, 0); - scarletbook_output_enqueue_track(result->output, result->handle->twoch_area_idx, - track-1, const_cast(url.url), - const_cast("dsf"), 0); + scarletbook_output_enqueue_track(result->output, result->handle->twoch_area_idx, track - 1, + const_cast(url2.c_str()), const_cast("dsf"), 0); scarletbook_frame_init(result->handle); - result->frame_buffer = new uint8_t[128*1024]; - result->decode_buffer.Create(1024*1024*10); + result->frame_buffer = new uint8_t[128 * 1024]; + result->decode_buffer.Create(1024 * 1024 * 10); - id3_buffer.resize(128*1024); - int len = scarletbook_id3_tag_render(result->handle, id3_buffer.data(), - 0, track-1); + id3_buffer.resize(128 * 1024); + int len = scarletbook_id3_tag_render(result->handle, id3_buffer.data(), 0, track - 1); id3_buffer.resize(len); struct list_head* node_ptr = result->output->ripping_queue.next; @@ -302,7 +302,8 @@ result->end_lsn = result->ft->start_lsn + result->ft->length_lsn; dsf_handle_t* handle = static_cast(result->ft->priv); - handle->header_size = (result->end_lsn-result->ft->start_lsn) * SACD_LSN_SIZE; // store approximate length here for header injection + handle->header_size = (result->end_lsn - result->ft->start_lsn) * + SACD_LSN_SIZE; // store approximate length here for header injection (*result->ft->handler.startwrite)(result->ft); // set the encryption range @@ -320,7 +321,7 @@ return result; } -ssize_t CSACDFile::Read(void* context, void* lpBuf, size_t uiBufSize) +ssize_t CSACDFile::Read(kodi::addon::VFSFileHandle context, uint8_t* lpBuf, size_t uiBufSize) { SACDContext* ctx = static_cast(context); @@ -330,22 +331,22 @@ if (handle && ctx->pos < id3_buffer.size()) { - size_t tocopy = std::min(uiBufSize, static_cast(id3_buffer.size()-ctx->pos)); - memcpy(lpBuf, id3_buffer.data()+ctx->pos, tocopy); + size_t tocopy = std::min(uiBufSize, static_cast(id3_buffer.size() - ctx->pos)); + memcpy(lpBuf, id3_buffer.data() + ctx->pos, tocopy); ctx->pos += tocopy; return tocopy; } - int header_pos = ctx->pos-id3_buffer.size(); + int header_pos = ctx->pos - id3_buffer.size(); if (handle && header_pos < handle->header_size) { - size_t tocopy = std::min(uiBufSize, static_cast(handle->header_size-header_pos)); - memcpy(lpBuf, handle->header+header_pos, tocopy); + size_t tocopy = std::min(uiBufSize, static_cast(handle->header_size - header_pos)); + memcpy(lpBuf, handle->header + header_pos, tocopy); ctx->pos += tocopy; return tocopy; } - while (ctx->decode_buffer.getMaxReadSize() < 32*1024) + while (ctx->decode_buffer.getMaxReadSize() < 32 * 1024) { // decode some more data if (ctx->ft->current_lsn < ctx->end_lsn) @@ -353,29 +354,29 @@ // check what block ranges are encrypted.. if (ctx->ft->current_lsn < ctx->encrypted_start_1) { - ctx->block_size = std::min(ctx->encrypted_start_1 - ctx->ft->current_lsn, - MAX_PROCESSING_BLOCK_SIZE); + ctx->block_size = + std::min(ctx->encrypted_start_1 - ctx->ft->current_lsn, MAX_PROCESSING_BLOCK_SIZE); ctx->encrypted = 0; } else if (ctx->ft->current_lsn >= ctx->encrypted_start_1 && ctx->ft->current_lsn <= ctx->encrypted_end_1) { - ctx->block_size = std::min(ctx->encrypted_end_1 + 1 - ctx->ft->current_lsn, - MAX_PROCESSING_BLOCK_SIZE); + ctx->block_size = + std::min(ctx->encrypted_end_1 + 1 - ctx->ft->current_lsn, MAX_PROCESSING_BLOCK_SIZE); ctx->encrypted = 1; } else if (ctx->ft->current_lsn > ctx->encrypted_end_1 && ctx->ft->current_lsn < ctx->encrypted_start_2) { - ctx->block_size = std::min(ctx->encrypted_start_2 - ctx->ft->current_lsn, - MAX_PROCESSING_BLOCK_SIZE); + ctx->block_size = + std::min(ctx->encrypted_start_2 - ctx->ft->current_lsn, MAX_PROCESSING_BLOCK_SIZE); ctx->encrypted = 0; } else if (ctx->ft->current_lsn >= ctx->encrypted_start_2 && ctx->ft->current_lsn <= ctx->encrypted_end_2) { - ctx->block_size = std::min(ctx->encrypted_end_2 + 1 - ctx->ft->current_lsn, - MAX_PROCESSING_BLOCK_SIZE); + ctx->block_size = + std::min(ctx->encrypted_end_2 + 1 - ctx->ft->current_lsn, MAX_PROCESSING_BLOCK_SIZE); ctx->encrypted = 1; } else @@ -386,10 +387,9 @@ ctx->block_size = std::min(ctx->end_lsn - ctx->ft->current_lsn, ctx->block_size); // read some blocks - ctx->block_size = (uint32_t) sacd_read_block_raw(static_cast(ctx->ft->sb_handle->sacd), - ctx->ft->current_lsn, - ctx->block_size, - ctx->output->read_buffer); + ctx->block_size = (uint32_t)sacd_read_block_raw( + static_cast(ctx->ft->sb_handle->sacd), ctx->ft->current_lsn, + ctx->block_size, ctx->output->read_buffer); if (ctx->block_size == 0) return -1; @@ -406,7 +406,7 @@ { case FRAME_FORMAT_DSD_3_IN_14: case FRAME_FORMAT_DSD_3_IN_16: - ctx->non_encrypted_disc = *(uint64_t *)(ctx->output->read_buffer + 16) == 0; + ctx->non_encrypted_disc = *(uint64_t*)(ctx->output->read_buffer + 16) == 0; break; } @@ -418,21 +418,20 @@ sacd_decrypt(static_cast(ctx->ft->sb_handle->sacd), ctx->output->read_buffer, ctx->block_size); - scarletbook_process_frames(ctx->ft->sb_handle, ctx->output->read_buffer, - ctx->block_size, ctx->ft->current_lsn == ctx->end_lsn, - frame_read_callback, ctx); + scarletbook_process_frames(ctx->ft->sb_handle, ctx->output->read_buffer, ctx->block_size, + ctx->ft->current_lsn == ctx->end_lsn, frame_read_callback, ctx); } else return 0; } size_t tocopy = std::min(uiBufSize, (size_t)ctx->decode_buffer.getMaxReadSize()); - ctx->decode_buffer.ReadData(static_cast(lpBuf), tocopy); + ctx->decode_buffer.ReadData(reinterpret_cast(lpBuf), tocopy); ctx->pos += tocopy; return tocopy; } -bool CSACDFile::Close(void* context) +bool CSACDFile::Close(kodi::addon::VFSFileHandle context) { SACDContext* ctx = static_cast(context); free(ctx->output->read_buffer); @@ -443,48 +442,45 @@ return true; } -int64_t CSACDFile::GetLength(void* context) +int64_t CSACDFile::GetLength(kodi::addon::VFSFileHandle context) { SACDContext* ctx = static_cast(context); dsf_handle_t* handle = static_cast(ctx->ft->priv); - return (ctx->end_lsn - ctx->ft->start_lsn) * SACD_LSN_SIZE + handle->header_size + id3_buffer.size(); + return (ctx->end_lsn - ctx->ft->start_lsn) * SACD_LSN_SIZE + handle->header_size + + id3_buffer.size(); } -int64_t CSACDFile::GetPosition(void* context) +int64_t CSACDFile::GetPosition(kodi::addon::VFSFileHandle context) { SACDContext* ctx = static_cast(context); return ctx->pos; } -int CSACDFile::Stat(const VFSURL& url, struct __stat64* buffer) +int CSACDFile::Stat(const kodi::addon::VFSUrl& url, kodi::vfs::FileStatus& buffer) { - memset(buffer, 0, sizeof(struct __stat64)); - - errno = ENOENT; return -1; } -int CSACDFile::IoControl(void* context, XFILE::EIoControl request, void* param) +bool CSACDFile::IoControlGetSeekPossible(kodi::addon::VFSFileHandle context) { - if (request == XFILE::IOCTRL_SEEK_POSSIBLE) - return 0; - - return -1; + return false; } -bool CSACDFile::ContainsFiles(const VFSURL& url, std::vector& items, std::string& rootPath) +bool CSACDFile::ContainsFiles(const kodi::addon::VFSUrl& url, + std::vector& items, + std::string& rootPath) { sacd_reader_t* reader; std::string encoded; - if (strncmp(url.url, "sacd://",7) == 0 && strlen(url.hostname)) + if (strncmp(url.GetURL().c_str(), "sacd://", 7) == 0 && !url.GetHostname().empty()) { - encoded = URLEncode(url.hostname); - reader = sacd_open(url.hostname); + encoded = URLEncode(url.GetHostname()); + reader = sacd_open(url.GetHostname().c_str()); } else { - encoded = URLEncode(url.url); - reader = sacd_open(url.url); + encoded = URLEncode(url.GetURL()); + reader = sacd_open(url.GetURL().c_str()); } if (reader) { @@ -493,13 +489,13 @@ { scarletbook_area_t* area = &handle->area[0]; kodi::vfs::CDirEntry item; - for (size_t i=0;iarea_toc->track_count;++i) + for (size_t i = 0; i < area->area_toc->track_count; ++i) { area_track_text_t* track_text = &area->area_track_text[i]; item.SetLabel(track_text->track_type_title); item.SetTitle(track_text->track_type_title); std::stringstream str; - str << "sacd://" << encoded << '/' << i+1 << ".dsf"; + str << "sacd://" << encoded << '/' << i + 1 << ".dsf"; item.SetPath(str.str()); items.push_back(item); } @@ -520,17 +516,18 @@ class ATTRIBUTE_HIDDEN CMyAddon : public kodi::addon::CAddonBase { public: - CMyAddon() { } - virtual ADDON_STATUS CreateInstance(int instanceType, std::string instanceID, KODI_HANDLE instance, KODI_HANDLE& addonInstance) override + CMyAddon() = default; + ADDON_STATUS CreateInstance(int instanceType, + const std::string& instanceID, + KODI_HANDLE instance, + const std::string& version, + KODI_HANDLE& addonInstance) override { init_logging(); - addonInstance = new CSACDFile(instance); + addonInstance = new CSACDFile(instance, version); return ADDON_STATUS_OK; } - virtual ~CMyAddon() - { - destroy_logging(); - } + ~CMyAddon() override { destroy_logging(); } }; ADDONCREATOR(CMyAddon); diff -Nru kodi-vfs-sacd-1.0.4/.travis.yml kodi-vfs-sacd-2.0.0/.travis.yml --- kodi-vfs-sacd-1.0.4/.travis.yml 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/.travis.yml 2020-09-16 20:58:22.000000000 +0000 @@ -1,16 +1,12 @@ language: cpp -# -# Define the build matrix -# -# Travis defaults to building on Ubuntu Precise when building on -# Linux. We need Trusty in order to get up to date versions of -# cmake and g++. -# env: global: - app_id=vfs.sacd +# +# Define the build matrix +# matrix: include: - os: linux @@ -21,19 +17,38 @@ dist: xenial sudo: required compiler: clang + - os: linux + dist: bionic + sudo: required + compiler: gcc + env: DEBIAN_BUILD=true + - os: linux + dist: focal + sudo: required + compiler: gcc + env: DEBIAN_BUILD=true - os: osx - osx_image: xcode9.3 + osx_image: xcode10.2 + +before_install: + - if [[ $DEBIAN_BUILD != true ]] && [[ $TRAVIS_OS_NAME == linux ]]; then sudo apt-get install -y libgl1-mesa-dev; fi + - if [[ $DEBIAN_BUILD == true ]]; then sudo add-apt-repository -y ppa:team-xbmc/xbmc-nightly; fi + - if [[ $DEBIAN_BUILD == true ]]; then sudo apt-get install fakeroot; fi # # The addon source is automatically checked out in $TRAVIS_BUILD_DIR, # we'll put the Kodi source on the same level # before_script: - - cd $TRAVIS_BUILD_DIR/.. - - git clone --branch Leia --depth=1 https://github.com/xbmc/xbmc.git - - cd ${app_id} && mkdir build && cd build - - mkdir -p definition/${app_id} - - echo ${app_id} $TRAVIS_BUILD_DIR $TRAVIS_COMMIT > definition/${app_id}/${app_id}.txt - - cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DADDONS_DEFINITION_DIR=$TRAVIS_BUILD_DIR/build/definition -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons + - if [[ $DEBIAN_BUILD != true ]]; then cd $TRAVIS_BUILD_DIR/..; fi + - if [[ $DEBIAN_BUILD != true ]]; then git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git; fi + - if [[ $DEBIAN_BUILD != true ]]; then cd ${app_id} && mkdir build && cd build; fi + - if [[ $DEBIAN_BUILD != true ]]; then mkdir -p definition/${app_id}; fi + - if [[ $DEBIAN_BUILD != true ]]; then echo ${app_id} $TRAVIS_BUILD_DIR $TRAVIS_COMMIT > definition/${app_id}/${app_id}.txt; fi + - if [[ $DEBIAN_BUILD != true ]]; then cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DADDONS_DEFINITION_DIR=$TRAVIS_BUILD_DIR/build/definition -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons; fi + - if [[ $DEBIAN_BUILD == true ]]; then wget https://raw.githubusercontent.com/xbmc/xbmc/master/xbmc/addons/kodi-dev-kit/tools/debian-addon-package-test.sh && chmod +x ./debian-addon-package-test.sh; fi + - if [[ $DEBIAN_BUILD == true ]]; then sudo apt-get build-dep $TRAVIS_BUILD_DIR; fi -script: make +script: + - if [[ $DEBIAN_BUILD != true ]]; then make; fi + - if [[ $DEBIAN_BUILD == true ]]; then ./debian-addon-package-test.sh $TRAVIS_BUILD_DIR; fi diff -Nru kodi-vfs-sacd-1.0.4/vfs.sacd/addon.xml.in kodi-vfs-sacd-2.0.0/vfs.sacd/addon.xml.in --- kodi-vfs-sacd-1.0.4/vfs.sacd/addon.xml.in 2020-03-28 20:49:32.000000000 +0000 +++ kodi-vfs-sacd-2.0.0/vfs.sacd/addon.xml.in 2020-09-16 20:58:22.000000000 +0000 @@ -1,7 +1,7 @@ @ADDON_DEPENDS@ @@ -15,16 +15,25 @@ encodedhostname="true" library_@PLATFORM@="@LIBRARY_FILENAME@" /> + Super Audio CD ISO-Image Super Audio CD ISO image -This addon allows Kodi to read content from a Super Audio CD ISO image. + Mit diesem Addon kann Kodi Inhalte von einem Super Audio CD ISO-Image lesen. + +Super Audio CD (SACD) ist ein schreibgeschütztes optisches Disc-Format für die Audiospeicherung, das 1999 eingeführt wurde und von Sony und Philips Electronics gemeinsam als Nachfolger der Compact Disc entwickelt wurde. + +Das SACD-Format bietet mehr Audiokanäle (z. B. Surround-Sound), eine höhere Bitrate und eine längere Wiedergabezeit als eine herkömmliche CD. + This addon allows Kodi to read content from a Super Audio CD ISO image. Super Audio CD (SACD) is a read-only optical disc format for audio storage, introduced in 1999, developed jointly by Sony and Philips Electronics to be the successor to the Compact Disc. The SACD format offers more audio channels (e.g. surround sound), a higher bit rate, and longer playing time than a conventional CD. + Die Wiedergabesuche ist derzeit nicht möglich. Playback seek is currently not possible. @PLATFORM@ GPL-2.0-or-later https://github.com/xbmc/vfs.sacd + Replaced by audiodecoder.sacd addon! + Ersetzt durch das Addon audiodecoder.sacd! icon.png