From a854130c17f1490cf5fb25650994c12d8c9ad0a7 Mon Sep 17 00:00:00 2001 From: divverent Date: Mon, 20 Jul 2009 15:30:38 +0000 Subject: [PATCH] experimental makefile option make DP_LINK_TO_JPEG=1 - use libjpeg.h instead of dynamic loading of libjpeg at startup. Can anyone test this against libjpeg7? git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9064 d7cf8633-e32d-0410-b094-e92efae38249 --- BSDmakefile | 8 ++++++++ jpeg.c | 45 ++++++++++++++++++++++++++++++++++++--------- makefile | 8 ++++++++ 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/BSDmakefile b/BSDmakefile index 23563cd3..24012acb 100644 --- a/BSDmakefile +++ b/BSDmakefile @@ -87,6 +87,14 @@ LDFLAGS_SDL+=$(LDFLAGS_UNIXSDL_PRELOAD) CFLAGS_PRELOAD=$(CFLAGS_UNIX_PRELOAD) .endif +.ifdef DP_LINK_TO_LIBJPEG +LDFLAGS_LIBJPEG?=-ljpeg +LDFLAGS_CL+=$(LDFLAGS_LIBJPEG) +LDFLAGS_SV+=$(LDFLAGS_LIBJPEG) +LDFLAGS_SDL+=$(LDFLAGS_LIBJPEG) +CFLAGS_PRELOAD+=$(CFLAGS_LIBJPEG) -DLINK_TO_LIBJPEG +.endif + ##### BSD Make specific definitions ##### diff --git a/jpeg.c b/jpeg.c index 936bc551..5d09b498 100644 --- a/jpeg.c +++ b/jpeg.c @@ -28,6 +28,32 @@ cvar_t sv_writepicture_quality = {CVAR_SAVE, "sv_writepicture_quality", "10", "WritePicture quality offset (higher means better quality, but slower)"}; +// jboolean is unsigned char instead of int on Win32 +#ifdef WIN32 +typedef unsigned char jboolean; +#else +typedef int jboolean; +#endif + +#ifdef LINK_TO_LIBJPEG +#include +#define qjpeg_create_compress jpeg_create_compress +#define qjpeg_create_decompress jpeg_create_decompress +#define qjpeg_destroy_compress jpeg_destroy_compress +#define qjpeg_destroy_decompress jpeg_destroy_decompress +#define qjpeg_finish_compress jpeg_finish_compress +#define qjpeg_finish_decompress jpeg_finish_decompress +#define qjpeg_resync_to_restart jpeg_resync_to_restart +#define qjpeg_read_header jpeg_read_header +#define qjpeg_read_scanlines jpeg_read_scanlines +#define qjpeg_set_defaults jpeg_set_defaults +#define qjpeg_set_quality jpeg_set_quality +#define qjpeg_start_compress jpeg_start_compress +#define qjpeg_start_decompress jpeg_start_decompress +#define qjpeg_std_error jpeg_std_error +#define qjpeg_write_scanlines jpeg_write_scanlines +#define jpeg_dll true +#else /* ================================================================= @@ -39,18 +65,12 @@ cvar_t sv_writepicture_quality = {CVAR_SAVE, "sv_writepicture_quality", "10", "W ================================================================= */ -// jboolean is unsigned char instead of int on Win32 -#ifdef WIN32 -typedef unsigned char jboolean; -#else -typedef int jboolean; -#endif - -#define JPEG_LIB_VERSION 62 // Version 6b - typedef void *j_common_ptr; typedef struct jpeg_compress_struct *j_compress_ptr; typedef struct jpeg_decompress_struct *j_decompress_ptr; + +#define JPEG_LIB_VERSION 62 // Version 6b + typedef enum { JCS_UNKNOWN, @@ -430,6 +450,7 @@ static dllfunction_t jpegfuncs[] = // Handle for JPEG DLL dllhandle_t jpeg_dll = NULL; qboolean jpeg_tried_loading = 0; +#endif static unsigned char jpeg_eoi_marker [2] = {0xFF, JPEG_EOI}; static jmp_buf error_in_jpeg; @@ -464,6 +485,9 @@ Try to load the JPEG DLL */ qboolean JPEG_OpenLibrary (void) { +#ifdef LINK_TO_LIBJPEG + return true; +#else const char* dllnames [] = { #if defined(WIN64) @@ -490,6 +514,7 @@ qboolean JPEG_OpenLibrary (void) // Load the DLL return Sys_LoadLibrary (dllnames, &jpeg_dll, jpegfuncs); +#endif } @@ -502,8 +527,10 @@ Unload the JPEG DLL */ void JPEG_CloseLibrary (void) { +#ifndef LINK_TO_LIBJPEG Sys_UnloadLibrary (&jpeg_dll); jpeg_tried_loading = false; // allow retry +#endif } diff --git a/makefile b/makefile index 1bf6a24b..4112001b 100644 --- a/makefile +++ b/makefile @@ -251,6 +251,14 @@ ifdef DP_PRELOAD_DEPENDENCIES endif endif +ifdef DP_LINK_TO_LIBJPEG + LDFLAGS_LIBJPEG?=-ljpeg + LDFLAGS_CL+=$(LDFLAGS_LIBJPEG) + LDFLAGS_SV+=$(LDFLAGS_LIBJPEG) + LDFLAGS_SDL+=$(LDFLAGS_LIBJPEG) + CFLAGS_PRELOAD+=$(CFLAGS_LIBJPEG) -DLINK_TO_LIBJPEG +endif + ##### GNU Make specific definitions ##### DO_LD=$(CC) -o $@ $^ $(LDFLAGS) -- 2.39.2