CSO: use zlib instead of libdeflate

This commit is contained in:
Ziemas 2020-12-29 15:22:11 +01:00
parent a88d75ceb7
commit 542843e429
8 changed files with 36 additions and 53 deletions

View file

@ -7,7 +7,6 @@ set(THREADS_PREFER_PTHREAD_FLAG ON) # -pthreads on GNU-like compilers
# Externals # Externals
add_subdirectory(ext/libdeflate)
add_subdirectory(ext/zlib) add_subdirectory(ext/zlib)
add_subdirectory(ext/lzma) add_subdirectory(ext/lzma)
add_subdirectory(ext/libFLAC) add_subdirectory(ext/libFLAC)

View file

@ -1,8 +1,8 @@
TEMPLATE = subdirs TEMPLATE = subdirs
SUBDIRS = application libdeflate \ SUBDIRS = application \
libFLAC \ libFLAC \
libchdr \ libchdr \
lzma \ lzma \
zlib zlib
application.depends = libdeflate zlib libchdr lzma libFLAC application.depends = zlib libchdr lzma libFLAC

View file

@ -11,11 +11,9 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "..\src\core\Core.vcxproj", "{353E9072-F9AB-35F7-8AFF-FAC3EA8AFEE0}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "..\src\core\Core.vcxproj", "{353E9072-F9AB-35F7-8AFF-FAC3EA8AFEE0}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
{FD2E9030-8789-4679-8251-33E85E4B315F} = {FD2E9030-8789-4679-8251-33E85E4B315F} {FD2E9030-8789-4679-8251-33E85E4B315F} = {FD2E9030-8789-4679-8251-33E85E4B315F}
{A77564F4-56BB-3D08-8126-3FD5FC44F217} = {A77564F4-56BB-3D08-8126-3FD5FC44F217} {F2719732-B37A-4075-8C89-49CD5A38F2C4} = {F2719732-B37A-4075-8C89-49CD5A38F2C4}
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdeflate", "libdeflate\libdeflate.vcxproj", "{A77564F4-56BB-3D08-8126-3FD5FC44F217}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ThirdParty", "ThirdParty", "{A80C3A32-925E-454B-BA16-98D15D93AA2B}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ThirdParty", "ThirdParty", "{A80C3A32-925E-454B-BA16-98D15D93AA2B}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib\zlib.vcxproj", "{F2719732-B37A-4075-8C89-49CD5A38F2C4}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib\zlib.vcxproj", "{F2719732-B37A-4075-8C89-49CD5A38F2C4}"
@ -67,18 +65,6 @@ Global
{353E9072-F9AB-35F7-8AFF-FAC3EA8AFEE0}.Release|x64.ActiveCfg = Release|x64 {353E9072-F9AB-35F7-8AFF-FAC3EA8AFEE0}.Release|x64.ActiveCfg = Release|x64
{353E9072-F9AB-35F7-8AFF-FAC3EA8AFEE0}.Release|x64.Build.0 = Release|x64 {353E9072-F9AB-35F7-8AFF-FAC3EA8AFEE0}.Release|x64.Build.0 = Release|x64
{353E9072-F9AB-35F7-8AFF-FAC3EA8AFEE0}.Release|x86.ActiveCfg = Release|x64 {353E9072-F9AB-35F7-8AFF-FAC3EA8AFEE0}.Release|x86.ActiveCfg = Release|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Debug|x64.ActiveCfg = Debug|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Debug|x64.Build.0 = Debug|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Debug|x86.ActiveCfg = Debug|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Devel|x64.ActiveCfg = Devel|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Devel|x64.Build.0 = Devel|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Devel|x86.ActiveCfg = Devel|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Release Optimized|x64.ActiveCfg = Release Optimized|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Release Optimized|x64.Build.0 = Release Optimized|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Release Optimized|x86.ActiveCfg = Release Optimized|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Release|x64.ActiveCfg = Release|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Release|x64.Build.0 = Release|x64
{A77564F4-56BB-3D08-8126-3FD5FC44F217}.Release|x86.ActiveCfg = Release|x64
{F2719732-B37A-4075-8C89-49CD5A38F2C4}.Debug|x64.ActiveCfg = Debug|x64 {F2719732-B37A-4075-8C89-49CD5A38F2C4}.Debug|x64.ActiveCfg = Debug|x64
{F2719732-B37A-4075-8C89-49CD5A38F2C4}.Debug|x64.Build.0 = Debug|x64 {F2719732-B37A-4075-8C89-49CD5A38F2C4}.Debug|x64.Build.0 = Debug|x64
{F2719732-B37A-4075-8C89-49CD5A38F2C4}.Debug|x86.ActiveCfg = Debug|Win32 {F2719732-B37A-4075-8C89-49CD5A38F2C4}.Debug|x86.ActiveCfg = Debug|Win32
@ -148,7 +134,6 @@ Global
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{A77564F4-56BB-3D08-8126-3FD5FC44F217} = {A80C3A32-925E-454B-BA16-98D15D93AA2B}
{F2719732-B37A-4075-8C89-49CD5A38F2C4} = {A80C3A32-925E-454B-BA16-98D15D93AA2B} {F2719732-B37A-4075-8C89-49CD5A38F2C4} = {A80C3A32-925E-454B-BA16-98D15D93AA2B}
{3B1B7EDF-E913-45A2-9DC6-5486BA7E6960} = {A80C3A32-925E-454B-BA16-98D15D93AA2B} {3B1B7EDF-E913-45A2-9DC6-5486BA7E6960} = {A80C3A32-925E-454B-BA16-98D15D93AA2B}
{12CAB131-CB23-464F-92F4-6773A10FC732} = {A80C3A32-925E-454B-BA16-98D15D93AA2B} {12CAB131-CB23-464F-92F4-6773A10FC732} = {A80C3A32-925E-454B-BA16-98D15D93AA2B}

View file

@ -6,20 +6,17 @@ TARGET = ../DobieStation
CONFIG += console c++14 CONFIG += console c++14
CONFIG -= app_bundle CONFIG -= app_bundle
INCLUDEPATH += ../../ext/libdeflate \ INCLUDEPATH += ../../ext/zlib/include \
../../ext/libchdr/include ../../ext/libchdr/include
LIBS += -L../libdeflate \ LIBS += -L../libchdr \
-L../libchdr \
-L../lzma \ -L../lzma \
-L../libFLAC \ -L../libFLAC \
-L../zlib -L../zlib
win32:LIBS += -llibdeflate \ win32:LIBS += -llibchdr \
-llibchdr \
-llzma \ -llzma \
-llibFLAC \ -llibFLAC \
-lzlib -lzlib
else:LIBS += -ldeflate \ else:LIBS += -llibchdr \
-llibchdr \
-llzma \ -llzma \
-llibFLAC \ -llibFLAC \
-lzlib -lzlib

View file

@ -30,7 +30,6 @@
<!-- includes --> <!-- includes -->
<AdditionalIncludeDirectories>$(UIDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(UIDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(ExtDir)\libdeflate;$(ExtDir)\libdeflate\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(ExtDir)\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ExtDir)\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(ExtDir)\lzma\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ExtDir)\lzma\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(ExtDir)\libFLAC\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(ExtDir)\libFLAC\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@ -75,7 +74,6 @@
<IgnoreImportLibrary>true</IgnoreImportLibrary> <IgnoreImportLibrary>true</IgnoreImportLibrary>
<DataExecutionPrevention>true</DataExecutionPrevention> <DataExecutionPrevention>true</DataExecutionPrevention>
<AdditionalDependencies>$(BinDir)\Core$(Postfix).lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>$(BinDir)\Core$(Postfix).lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>$(BinDir)\libdeflate$(Postfix).lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>$(BinDir)\libchdr$(Postfix).lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>$(BinDir)\libchdr$(Postfix).lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>$(BinDir)\libFLAC$(Postfix).lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>$(BinDir)\libFLAC$(Postfix).lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>$(BinDir)\lzma$(Postfix).lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>$(BinDir)\lzma$(Postfix).lib;%(AdditionalDependencies)</AdditionalDependencies>

View file

@ -180,5 +180,5 @@ add_library(${TARGET} ${SOURCES} ${HEADERS})
add_library(Dobie::Core ALIAS ${TARGET}) add_library(Dobie::Core ALIAS ${TARGET})
target_include_directories(${TARGET} PRIVATE ${CMAKE_SOURCE_DIR}/src) target_include_directories(${TARGET} PRIVATE ${CMAKE_SOURCE_DIR}/src)
target_link_libraries(${TARGET} Ext::libdeflate Threads::Threads libchdr) target_link_libraries(${TARGET} Threads::Threads libchdr zlib)
dobie_cxx_compile_options(${TARGET}) dobie_cxx_compile_options(${TARGET})

View file

@ -7,7 +7,7 @@ Based off reference by unknownbrackets:
*/ */
#include "cso_reader.hpp" #include "cso_reader.hpp"
#include <libdeflate.h> #include <zlib.h>
#include <cstring> #include <cstring>
#include <cassert> #include <cassert>
@ -47,8 +47,7 @@ CSO_Reader::CSO_Reader() :
m_size(0), m_shift(0), m_blocksize(0), m_version(0), m_virtptr(0), m_size(0), m_shift(0), m_blocksize(0), m_version(0), m_virtptr(0),
m_indices(nullptr), m_indices(nullptr),
m_framesize(0), m_curframe(0xFFFFFFFF), m_framesize(0), m_curframe(0xFFFFFFFF),
m_frame(nullptr), m_readbuf(nullptr), m_frame(nullptr), m_readbuf(nullptr) {}
m_inflate(nullptr) {}
CSO_Reader::~CSO_Reader() CSO_Reader::~CSO_Reader()
{ {
@ -139,22 +138,41 @@ bool CSO_Reader::read_block_internal(uint32_t block)
fprintf(stderr, "read error reading (compressed) block %d\n", block); fprintf(stderr, "read error reading (compressed) block %d\n", block);
return false; return false;
} }
size_t read; z_stream z;
auto res = libdeflate_deflate_decompress(m_inflate, m_readbuf, len, m_frame, m_framesize, &read); z.zalloc = Z_NULL;
if (res != LIBDEFLATE_SUCCESS) z.zfree = Z_NULL;
z.opaque = Z_NULL;
if (inflateInit2(&z, -15) != Z_OK)
{ {
fprintf(stderr, "libdeflate error on block %d: %d\n", block, res); fprintf(stderr, "Unable to initialize inflate: %s\n", (z.msg) ? z.msg : "?");
m_curframe = 0xFFFFFFFF;
return false; return false;
} }
z.next_in = m_readbuf;
z.avail_in = len;
z.next_out = m_frame;
z.avail_out = m_framesize;
auto res = inflate(&z, Z_FINISH);
if (res != Z_STREAM_END)
{
fprintf(stderr, "zlib error on block %d: %d, %s\n", block, res, (z.msg) ? z.msg: "?");
m_curframe = 0xFFFFFFFF;
return false;
}
size_t read = z.total_out;
if (read < m_blocksize) if (read < m_blocksize)
{ {
fprintf(stderr, "compressed sector %d decoded to less than the blocksize\n", block); fprintf(stderr, "compressed sector %d decoded to less than the blocksize\n", block);
m_curframe = 0xFFFFFFFF; m_curframe = 0xFFFFFFFF;
return false; return false;
} }
inflateEnd(&z);
} }
m_curframe = block; m_curframe = block;
@ -297,23 +315,11 @@ bool CSO_Reader::open(std::string name)
m_frame = new uint8_t[m_framesize]; m_frame = new uint8_t[m_framesize];
m_readbuf = new uint8_t[m_framesize]; m_readbuf = new uint8_t[m_framesize];
// setup libdeflate
m_inflate = libdeflate_alloc_decompressor();
if (!m_inflate)
{
fprintf(stderr, "failed to allocate decompressor\n");
close();
return false;
}
return true; return true;
} }
void CSO_Reader::close() void CSO_Reader::close()
{ {
libdeflate_free_decompressor(m_inflate);
m_inflate = nullptr;
delete[] m_readbuf; delete[] m_readbuf;
m_readbuf = nullptr; m_readbuf = nullptr;

View file

@ -22,8 +22,6 @@ class CSO_Reader : public CDVD_Container
uint8_t* m_frame; uint8_t* m_frame;
uint8_t* m_readbuf; uint8_t* m_readbuf;
struct libdeflate_decompressor* m_inflate;
bool read_block_internal(uint32_t block); bool read_block_internal(uint32_t block);
public: public:
CSO_Reader(); CSO_Reader();