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
add_subdirectory(ext/libdeflate)
add_subdirectory(ext/zlib)
add_subdirectory(ext/lzma)
add_subdirectory(ext/libFLAC)

View file

@ -1,8 +1,8 @@
TEMPLATE = subdirs
SUBDIRS = application libdeflate \
SUBDIRS = application \
libFLAC \
libchdr \
lzma \
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}"
ProjectSection(ProjectDependencies) = postProject
{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
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}"
EndProject
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.Build.0 = 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.Build.0 = Debug|x64
{F2719732-B37A-4075-8C89-49CD5A38F2C4}.Debug|x86.ActiveCfg = Debug|Win32
@ -148,7 +134,6 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A77564F4-56BB-3D08-8126-3FD5FC44F217} = {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}
{12CAB131-CB23-464F-92F4-6773A10FC732} = {A80C3A32-925E-454B-BA16-98D15D93AA2B}

View file

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

View file

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

View file

@ -7,7 +7,7 @@ Based off reference by unknownbrackets:
*/
#include "cso_reader.hpp"
#include <libdeflate.h>
#include <zlib.h>
#include <cstring>
#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_indices(nullptr),
m_framesize(0), m_curframe(0xFFFFFFFF),
m_frame(nullptr), m_readbuf(nullptr),
m_inflate(nullptr) {}
m_frame(nullptr), m_readbuf(nullptr) {}
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);
return false;
}
size_t read;
auto res = libdeflate_deflate_decompress(m_inflate, m_readbuf, len, m_frame, m_framesize, &read);
if (res != LIBDEFLATE_SUCCESS)
z_stream z;
z.zalloc = Z_NULL;
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);
m_curframe = 0xFFFFFFFF;
fprintf(stderr, "Unable to initialize inflate: %s\n", (z.msg) ? z.msg : "?");
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)
{
fprintf(stderr, "compressed sector %d decoded to less than the blocksize\n", block);
m_curframe = 0xFFFFFFFF;
return false;
}
inflateEnd(&z);
}
m_curframe = block;
@ -297,23 +315,11 @@ bool CSO_Reader::open(std::string name)
m_frame = 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;
}
void CSO_Reader::close()
{
libdeflate_free_decompressor(m_inflate);
m_inflate = nullptr;
delete[] m_readbuf;
m_readbuf = nullptr;

View file

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