Skip to content

Commit

Permalink
decouple lzo from xrCore
Browse files Browse the repository at this point in the history
  • Loading branch information
Yan Yakubov committed Apr 4, 2016
1 parent 66323ad commit abd6f22
Show file tree
Hide file tree
Showing 9 changed files with 272 additions and 97 deletions.
23 changes: 23 additions & 0 deletions src/xrCore/Compression/lzo_compressor.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#include "stdafx.h"
#include "lzo_compressor.h"
#include "lzo/lzo1x.h"

int lzo_compress_dict(const void *input, u32 inputSize, void *output, u32 &outputSize,
void *workMem, const void *dict, u32 dictSize)
{
return lzo1x_999_compress_dict((lzo_bytep)input, inputSize, (lzo_bytep)output, (lzo_uintp)&outputSize,
workMem, (lzo_bytep)dict, dictSize);
}

int lzo_decompress_dict(const void *input, u32 inputSize, void *output, u32 &outputSize,
void *workMem, const void *dict, u32 dictSize)
{
return lzo1x_decompress_dict_safe((lzo_bytep)input, inputSize, (lzo_bytep)output, (lzo_uintp)&outputSize,
workMem, (lzo_bytep)dict, dictSize);
}

int lzo_initialize()
{ return lzo_init(); }

u32 lzo_get_workmem_size()
{ return LZO1X_999_MEM_COMPRESS; }
12 changes: 12 additions & 0 deletions src/xrCore/Compression/lzo_compressor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#pragma once
#include "xrCore/xrCore.h"

XRCORE_API int lzo_compress_dict(const void *input, u32 inputSize, void *output, u32 &outputSize,
void *workMem, const void *dict, u32 dictSize);

XRCORE_API int lzo_decompress_dict(const void *input, u32 inputSize, void *output, u32 &outputSize,
void *workMem, const void *dict, u32 dict_len);

XRCORE_API int lzo_initialize();

XRCORE_API u32 lzo_get_workmem_size();
47 changes: 47 additions & 0 deletions src/xrCore/Compression/rt_compressor.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#include "stdafx.h"
#pragma hdrstop



#include "lzo/lzo1x.h"


#define HEAP_ALLOC(var,size) \
lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]

__declspec(thread) HEAP_ALLOC(rtc_wrkmem, LZO1X_1_MEM_COMPRESS);


void rtc_initialize()
{
VERIFY(lzo_init() == LZO_E_OK);
}

u32 rtc_csize(u32 in)
{
VERIFY(in);
return in + in / 64 + 16 + 3;
}

u32 rtc_compress(void* dst, u32 dst_len, const void* src, u32 src_len)
{
u32 out_size = dst_len;
int r = lzo1x_1_compress(
(const lzo_byte*)src, (lzo_uint)src_len,
(lzo_byte*)dst, (lzo_uintp)&out_size,
rtc_wrkmem);
VERIFY(r == LZO_E_OK);
return out_size;
}
u32 rtc_decompress(void* dst, u32 dst_len, const void* src, u32 src_len)
{
u32 out_size = dst_len;
int r = lzo1x_decompress(
(const lzo_byte*)src, (lzo_uint)src_len,
(lzo_byte*)dst, (lzo_uintp)&out_size,
rtc_wrkmem);
VERIFY(r == LZO_E_OK);
return out_size;
}


16 changes: 16 additions & 0 deletions src/xrCore/Compression/rt_compressor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef rt_compressorH
#define rt_compressorH
#pragma once

extern XRCORE_API void rtc_initialize();
extern XRCORE_API u32 rtc_compress(void* dst, u32 dst_len, const void* src, u32 src_len);
extern XRCORE_API u32 rtc_decompress(void* dst, u32 dst_len, const void* src, u32 src_len);
extern XRCORE_API u32 rtc_csize(u32 in);

extern XRCORE_API void rtc9_initialize();
extern XRCORE_API void rtc9_uninitialize();
extern XRCORE_API u32 rtc9_compress(void* dst, u32 dst_len, const void* src, u32 src_len);
extern XRCORE_API u32 rtc9_decompress(void* dst, u32 dst_len, const void* src, u32 src_len);
extern XRCORE_API u32 rtc9_csize(u32 in);

#endif
143 changes: 143 additions & 0 deletions src/xrCore/Compression/rt_compressor9.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
#include "stdafx.h"
#pragma hdrstop

#include "lzo/lzo1x.h"


//==============================================================================

#define HEAP_ALLOC(var,size) \
lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]

__declspec(thread) HEAP_ALLOC(rtc9_wrkmem, LZO1X_999_MEM_COMPRESS);


static u8* _LZO_Dictionary = NULL;
static u32 _LZO_DictionarySize = 0;


//------------------------------------------------------------------------------

void
rtc9_initialize()
{
static bool initialized = false;

if (initialized)
return;

VERIFY(lzo_init() == LZO_E_OK);

string_path file_name;

FS.update_path(file_name, "$game_config$", "mp\\lzo-dict.bin");

if (FS.exist(file_name))
{
IReader* reader = FS.r_open(file_name);

R_ASSERT(reader);

_LZO_DictionarySize = reader->length();
_LZO_Dictionary = (u8*)xr_malloc(_LZO_DictionarySize);

reader->r(_LZO_Dictionary, _LZO_DictionarySize);
FS.r_close(reader);

Msg("using LZO-dictionary \"%s\"", file_name);
}
else
{
Msg("\"%s\" not found", file_name);
}

initialized = true;
}


//------------------------------------------------------------------------------

void
rtc9_uninitialize()
{
if (_LZO_Dictionary)
{
xr_free(_LZO_Dictionary);

_LZO_Dictionary = NULL;
_LZO_DictionarySize = 0;
}
}


//------------------------------------------------------------------------------

u32
rtc9_csize(u32 in)
{
VERIFY(in);
return in + in / 64 + 16 + 3;
}


//------------------------------------------------------------------------------

u32
rtc9_compress(void* dst, u32 dst_len, const void* src, u32 src_len)
{
u32 out_size = dst_len;
int r = LZO_E_ERROR;

rtc9_initialize();

if (_LZO_Dictionary)
{
r = lzo1x_999_compress_dict((const lzo_byte*)src, (lzo_uint)src_len,
(lzo_byte*)dst, (lzo_uintp)&out_size,
rtc9_wrkmem, _LZO_Dictionary, _LZO_DictionarySize
);
}
else
{
r = lzo1x_999_compress((const lzo_byte*)src, (lzo_uint)src_len,
(lzo_byte*)dst, (lzo_uintp)&out_size,
rtc9_wrkmem
);
}

VERIFY(r == LZO_E_OK);

return out_size;
}


//------------------------------------------------------------------------------

u32
rtc9_decompress(void* dst, u32 dst_len, const void* src, u32 src_len)
{
u32 out_size = dst_len;
int r = LZO_E_ERROR;

rtc9_initialize();

if (_LZO_Dictionary)
{
r = lzo1x_decompress_dict_safe((const lzo_byte*)src, (lzo_uint)src_len,
(lzo_byte*)dst, (lzo_uintp)&out_size,
NULL, _LZO_Dictionary, _LZO_DictionarySize
);
}
else
{
r = lzo1x_decompress((const lzo_byte*)src, (lzo_uint)src_len,
(lzo_byte*)dst, (lzo_uintp)&out_size,
NULL
);
}

VERIFY(r == LZO_E_OK);

return out_size;
}

2 changes: 1 addition & 1 deletion src/xrCore/xrCore.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
#include "xrsharedmem.h"
#include "xrstring.h"
#include "xr_resource.h"
#include "rt_compressor.h"
#include "Compression\rt_compressor.h"
#include "xr_shared.h"
#include "string_concatenations.h"

Expand Down
43 changes: 14 additions & 29 deletions src/xrCore/xrCore.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(SolutionDir)Externals;$(SolutionDir)Externals\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)Externals;$(SolutionDir)Externals\openssl\include;$(SolutionDir)Externals\lzo-2.02\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_USRDLL;XRCORE_EXPORTS;CRYPTO_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>false</StringPooling>
<MinimalRebuild>true</MinimalRebuild>
Expand All @@ -86,12 +86,12 @@
</ClCompile>
<Link>
<SuppressStartupBanner>true</SuppressStartupBanner>
<AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;$(SolutionDir)Externals\BugTrap\Bin;$(SolutionDir)Externals\openssl\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;$(SolutionDir)Externals\BugTrap\Bin;$(SolutionDir)Externals\openssl\lib;$(SolutionDir)Externals\lzo-2.02;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<MapExports>false</MapExports>
<SubSystem>Windows</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<TargetMachine>MachineX86</TargetMachine>
<AdditionalDependencies>libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>libeay32.lib;ssleay32.lib;lzo2.lib;%(AdditionalDependencies)</AdditionalDependencies>
<LargeAddressAware>true</LargeAddressAware>
</Link>
</ItemDefinitionGroup>
Expand All @@ -104,7 +104,7 @@
<OmitFramePointers>true</OmitFramePointers>
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
<WholeProgramOptimization>true</WholeProgramOptimization>
<AdditionalIncludeDirectories>$(SolutionDir)Externals;$(SolutionDir)Externals\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)Externals;$(SolutionDir)Externals\openssl\include;$(SolutionDir)Externals\lzo-2.02\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_USRDLL;XRCORE_EXPORTS;CRYPTO_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
Expand All @@ -118,14 +118,14 @@
<WarningLevel>Level4</WarningLevel>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;$(SolutionDir)Externals\BugTrap\Bin;$(SolutionDir)Externals\openssl\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;$(SolutionDir)Externals\BugTrap\Bin;$(SolutionDir)Externals\openssl\lib;$(SolutionDir)Externals\lzo-2.02;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<TargetMachine>MachineX86</TargetMachine>
<AdditionalDependencies>libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>libeay32.lib;ssleay32.lib;lzo2.lib;%(AdditionalDependencies)</AdditionalDependencies>
<LargeAddressAware>true</LargeAddressAware>
</Link>
</ItemDefinitionGroup>
Expand All @@ -137,7 +137,7 @@
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>false</OmitFramePointers>
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
<AdditionalIncludeDirectories>$(SolutionDir)Externals;$(SolutionDir)Externals\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)Externals;$(SolutionDir)Externals\openssl\include;$(SolutionDir)Externals\lzo-2.02\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_USRDLL;XRCORE_EXPORTS;CRYPTO_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
Expand All @@ -151,13 +151,13 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;$(SolutionDir)Externals\BugTrap\Bin;$(SolutionDir)Externals\openssl\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>$(DXSDK_DIR)Lib\x86;$(SolutionDir)Externals\BugTrap\Bin;$(SolutionDir)Externals\openssl\lib;$(SolutionDir)Externals\lzo-2.02;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SubSystem>Windows</SubSystem>
<LargeAddressAware>true</LargeAddressAware>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<ImportLibrary>$(xrLibDir)$(TargetName).lib</ImportLibrary>
<TargetMachine>MachineX86</TargetMachine>
<AdditionalDependencies>libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>libeay32.lib;ssleay32.lib;lzo2.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
Expand All @@ -167,6 +167,9 @@
<ClCompile Include="Animation\Motion.cpp" />
<ClCompile Include="Animation\SkeletonMotions.cpp" />
<ClCompile Include="clsid.cpp" />
<ClCompile Include="Compression\lzo_compressor.cpp" />
<ClCompile Include="Compression\rt_compressor.cpp" />
<ClCompile Include="Compression\rt_compressor9.cpp" />
<ClCompile Include="cpuid.cpp" />
<ClCompile Include="crc32.cpp" />
<ClCompile Include="Crypto\crypto.cpp" />
Expand All @@ -190,7 +193,6 @@
<ClCompile Include="LocatorAPI_defs.cpp" />
<ClCompile Include="log.cpp" />
<ClCompile Include="LzHuf.cpp" />
<ClCompile Include="lzo_compressor.cpp" />
<ClCompile Include="Math\PLC_SSE.cpp" />
<ClCompile Include="Math\Skin4W_MT.cpp" />
<ClCompile Include="Math\SkinXW_SSE.cpp" />
Expand Down Expand Up @@ -234,14 +236,6 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
</ClCompile>
<ClCompile Include="rt_compressor.cpp" />
<ClCompile Include="rt_compressor9.cpp" />
<ClCompile Include="rt_lzo1x_1.cpp" />
<ClCompile Include="rt_lzo1x_9x.cpp" />
<ClCompile Include="rt_lzo1x_d1.cpp" />
<ClCompile Include="rt_lzo1x_d2.cpp" />
<ClCompile Include="rt_lzo1x_d3.cpp" />
<ClCompile Include="rt_lzo_init.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Mixed|Win32'">Create</PrecompiledHeader>
Expand Down Expand Up @@ -302,6 +296,8 @@
<ClInclude Include="cdecl_cast.hpp" />
<ClInclude Include="clsid.h" />
<ClInclude Include="Coder.hpp" />
<ClInclude Include="Compression\lzo_compressor.h" />
<ClInclude Include="Compression\rt_compressor.h" />
<ClInclude Include="compression_ppmd_stream.h" />
<ClInclude Include="compression_ppmd_stream_inline.h" />
<ClInclude Include="Containers\AssociativeVector.hpp" />
Expand Down Expand Up @@ -338,7 +334,6 @@
<ClInclude Include="LocatorAPI_defs.h" />
<ClInclude Include="log.h" />
<ClInclude Include="lzhuf.h" />
<ClInclude Include="lzo_compressor.h" />
<ClInclude Include="Math\PLC_SSE.hpp" />
<ClInclude Include="Math\Random32.hpp" />
<ClInclude Include="Math\Skin4W_MT.hpp" />
Expand All @@ -356,16 +351,6 @@
<ClInclude Include="ppmd_compressor.h" />
<ClInclude Include="ptmalloc3\malloc-2.8.3.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="rt_compressor.h" />
<ClInclude Include="rt_config1x.h" />
<ClInclude Include="rt_lzo1x.h" />
<ClInclude Include="rt_lzoconf.h" />
<ClInclude Include="rt_lzodefs.h" />
<ClInclude Include="rt_lzo_conf.h" />
<ClInclude Include="rt_lzo_config.h" />
<ClInclude Include="rt_lzo_dict.h" />
<ClInclude Include="rt_lzo_ptr.h" />
<ClInclude Include="rt_miniacc.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="stream_reader.h" />
<ClInclude Include="stream_reader_inline.h" />
Expand Down
Loading

0 comments on commit abd6f22

Please sign in to comment.