Fix Windows build; Add grayscale tests to Windows build; Add proper implementation of snprintf on Windows and use snprintf() in TurboJPEG library and tests instead of sprintf()
This commit is contained in:
@@ -173,7 +173,7 @@ if(WITH_SIMD)
|
||||
add_dependencies(jpeg-static simd)
|
||||
endif()
|
||||
|
||||
set(TURBOJPEG_SOURCES turbojpegl.c)
|
||||
set(TURBOJPEG_SOURCES turbojpegl.c transupp.c)
|
||||
if(WITH_JNI)
|
||||
set(TURBOJPEG_SOURCES ${TURBOJPEG_SOURCES} turbojpeg-jni.c)
|
||||
endif()
|
||||
@@ -187,7 +187,7 @@ target_link_libraries(turbojpeg jpeg-static)
|
||||
set_target_properties(turbojpeg PROPERTIES LINK_INTERFACE_LIBRARIES "")
|
||||
|
||||
add_library(turbojpeg-static STATIC ${JPEG_SOURCES} ${SIMD_OBJS}
|
||||
turbojpegl.c)
|
||||
turbojpegl.c transupp.c)
|
||||
if(NOT MSVC)
|
||||
set_target_properties(turbojpeg-static PROPERTIES OUTPUT_NAME turbojpeg)
|
||||
endif()
|
||||
@@ -246,6 +246,8 @@ add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/t
|
||||
else()
|
||||
add_test(cjpeg-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimgflt-nosimd.jpg testoutflt.jpg)
|
||||
endif()
|
||||
add_test(cjpeg-int-gray sharedlib/cjpeg -dct int -grayscale -outfile testoutgray.jpg ${CMAKE_SOURCE_DIR}/testorig.ppm)
|
||||
add_test(cjpeg-int-gray-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimggray.jpg testoutgray.jpg)
|
||||
add_test(djpeg-int sharedlib/djpeg -dct int -fast -ppm -outfile testoutint.ppm ${CMAKE_SOURCE_DIR}/testorig.jpg)
|
||||
add_test(djpeg-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimgint.ppm testoutint.ppm)
|
||||
add_test(djpeg-fast sharedlib/djpeg -dct fast -ppm -outfile testoutfst.ppm ${CMAKE_SOURCE_DIR}/testorig.jpg)
|
||||
@@ -291,6 +293,8 @@ add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE
|
||||
else()
|
||||
add_test(cjpeg-static-float-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimgflt-nosimd.jpg testoutflt.jpg)
|
||||
endif()
|
||||
add_test(cjpeg-static-int-gray cjpeg-static -dct int -grayscale -outfile testoutgray.jpg ${CMAKE_SOURCE_DIR}/testorig.ppm)
|
||||
add_test(cjpeg-static-int-gray-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimggray.jpg testoutgray.jpg)
|
||||
add_test(djpeg-static-int djpeg-static -dct int -fast -ppm -outfile testoutint.ppm ${CMAKE_SOURCE_DIR}/testorig.jpg)
|
||||
add_test(djpeg-static-int-cmp ${CMAKE_COMMAND} -E compare_files ${CMAKE_SOURCE_DIR}/testimgint.ppm testoutint.ppm)
|
||||
add_test(djpeg-static-fast djpeg-static -dct fast -ppm -outfile testoutfst.ppm ${CMAKE_SOURCE_DIR}/testorig.jpg)
|
||||
|
||||
11
jpegut.c
11
jpegut.c
@@ -17,10 +17,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "./rrtimer.h"
|
||||
#include "./rrutil.h"
|
||||
#include "./turbojpeg.h"
|
||||
#ifndef _WIN32
|
||||
#define stricmp strcasecmp
|
||||
#endif
|
||||
|
||||
#define _catch(f) {if((f)==-1) {printf("TJPEG: %s\n", tjGetErrorStr()); bailout();}}
|
||||
|
||||
@@ -126,9 +124,10 @@ int checkbuf(unsigned char *buf, int w, int h, int ps, int subsamp,
|
||||
{
|
||||
int roffset=(flags&TJ_BGR)?2:0, goffset=1, boffset=(flags&TJ_BGR)?0:2, i,
|
||||
_i, j, retval=1;
|
||||
int halfway=16*scale_num/scale_denom, blocksize=8*scale_num/scale_denom;
|
||||
|
||||
if(flags&TJ_ALPHAFIRST) {roffset++; goffset++; boffset++;}
|
||||
if(ps==1) roffset=goffset=boffset=0;
|
||||
int halfway=16*scale_num/scale_denom, blocksize=8*scale_num/scale_denom;
|
||||
|
||||
for(_i=0; _i<halfway; _i++)
|
||||
{
|
||||
@@ -356,10 +355,10 @@ void gentestjpeg(tjhandle hnd, unsigned char *jpegbuf, unsigned long *size,
|
||||
t=rrtime()-t;
|
||||
|
||||
if(yuv==YUVENCODE)
|
||||
sprintf(tempstr, "%s_enc_%s_%s_%s.yuv", basefilename, pixformat,
|
||||
snprintf(tempstr, 1024, "%s_enc_%s_%s_%s.yuv", basefilename, pixformat,
|
||||
(flags&TJ_BOTTOMUP)? "BU":"TD", _subnames[subsamp]);
|
||||
else
|
||||
sprintf(tempstr, "%s_enc_%s_%s_%sQ%d.jpg", basefilename, pixformat,
|
||||
snprintf(tempstr, 1024, "%s_enc_%s_%s_%sQ%d.jpg", basefilename, pixformat,
|
||||
(flags&TJ_BOTTOMUP)? "BU":"TD", _subnames[subsamp], qual);
|
||||
writejpeg(jpegbuf, *size, tempstr);
|
||||
if(yuv==YUVENCODE)
|
||||
|
||||
29
jpgtest.c
29
jpgtest.c
@@ -54,13 +54,13 @@ void printsigfig(double val, int figs)
|
||||
if(_l<0.)
|
||||
{
|
||||
l=(int)fabs(_l);
|
||||
sprintf(format, "%%%d.%df", figs+l+2, figs+l);
|
||||
snprintf(format, 80, "%%%d.%df", figs+l+2, figs+l);
|
||||
}
|
||||
else
|
||||
{
|
||||
l=(int)_l+1;
|
||||
if(figs<=l) sprintf(format, "%%.0f");
|
||||
else sprintf(format, "%%%d.%df", figs+1, figs-l);
|
||||
if(figs<=l) snprintf(format, 80, "%%.0f");
|
||||
else snprintf(format, 80, "%%%d.%df", figs+1, figs-l);
|
||||
}
|
||||
printf(format, val);
|
||||
}
|
||||
@@ -70,7 +70,7 @@ int decomptest(unsigned char *srcbuf, unsigned char **jpegbuf,
|
||||
unsigned long *comptilesize, unsigned char *rgbbuf, int w, int h,
|
||||
int jpegsub, int qual, char *filename, int tilesizex, int tilesizey)
|
||||
{
|
||||
char tempstr[1024], qualstr[5]="\0";
|
||||
char tempstr[1024], qualstr[5]="\0", *ptr;
|
||||
FILE *outfile=NULL; tjhandle hnd=NULL;
|
||||
int flags=(forcemmx?TJ_FORCEMMX:0)|(forcesse?TJ_FORCESSE:0)
|
||||
|(forcesse2?TJ_FORCESSE2:0)|(forcesse3?TJ_FORCESSE3:0)
|
||||
@@ -152,7 +152,8 @@ int decomptest(unsigned char *srcbuf, unsigned char **jpegbuf,
|
||||
}
|
||||
if(yuv==YUVDECODE)
|
||||
{
|
||||
sprintf(tempstr, "%s_%s%s.yuv", filename, _subnames[jpegsub], qualstr);
|
||||
snprintf(tempstr, 1024, "%s_%s%s.yuv", filename, _subnames[jpegsub],
|
||||
qualstr);
|
||||
if((outfile=fopen(tempstr, "wb"))==NULL)
|
||||
_throwunix("opening YUV image for output");
|
||||
if(fwrite(rgbbuf, yuvsize, 1, outfile)!=1)
|
||||
@@ -164,16 +165,17 @@ int decomptest(unsigned char *srcbuf, unsigned char **jpegbuf,
|
||||
if(tilesizex==w && tilesizey==h)
|
||||
{
|
||||
if(decomponly)
|
||||
sprintf(tempstr, "%s_full.%s", filename, useppm?"ppm":"bmp");
|
||||
snprintf(tempstr, 1024, "%s_full.%s", filename, useppm?"ppm":"bmp");
|
||||
else
|
||||
sprintf(tempstr, "%s_%s%s_full.%s", filename, _subnames[jpegsub],
|
||||
qualstr, useppm?"ppm":"bmp");
|
||||
snprintf(tempstr, 1024, "%s_%s%s_full.%s", filename,
|
||||
_subnames[jpegsub], qualstr, useppm?"ppm":"bmp");
|
||||
}
|
||||
else sprintf(tempstr, "%s_%s%s_%dx%d.%s", filename, _subnames[jpegsub],
|
||||
qualstr, tilesizex, tilesizey, useppm?"ppm":"bmp");
|
||||
else snprintf(tempstr, 1024, "%s_%s%s_%dx%d.%s", filename,
|
||||
_subnames[jpegsub], qualstr, tilesizex, tilesizey, useppm?"ppm":"bmp");
|
||||
if(savebmp(tempstr, rgbbuf, scaledw, scaledh, pf, pitch, bu)==-1)
|
||||
_throwbmp("saving bitmap");
|
||||
sprintf(strrchr(tempstr, '.'), "-err.%s", useppm?"ppm":"bmp");
|
||||
ptr=strrchr(tempstr, '.');
|
||||
snprintf(ptr, 1024-(ptr-tempstr), "-err.%s", useppm?"ppm":"bmp");
|
||||
if(srcbuf && scale_num==1 && scale_denom==1)
|
||||
{
|
||||
if(!quiet)
|
||||
@@ -337,9 +339,10 @@ void dotest(unsigned char *srcbuf, int w, int h, int jpegsub, int qual,
|
||||
if(tilesizex==w && tilesizey==h)
|
||||
{
|
||||
if(yuv==YUVENCODE)
|
||||
sprintf(tempstr, "%s_%s.yuv", filename, _subnames[jpegsub]);
|
||||
snprintf(tempstr, 1024, "%s_%s.yuv", filename, _subnames[jpegsub]);
|
||||
else
|
||||
sprintf(tempstr, "%s_%sQ%d.jpg", filename, _subnames[jpegsub], qual);
|
||||
snprintf(tempstr, 1024, "%s_%sQ%d.jpg", filename, _subnames[jpegsub],
|
||||
qual);
|
||||
if((outfile=fopen(tempstr, "wb"))==NULL)
|
||||
_throwunix("opening reference image");
|
||||
if(fwrite(jpegbuf[0], jpgbufsize, 1, outfile)!=1)
|
||||
|
||||
24
rrutil.h
24
rrutil.h
@@ -18,8 +18,8 @@
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#define sleep(t) Sleep((t)*1000)
|
||||
#define usleep(t) Sleep((t)/1000)
|
||||
#define snprintf(str, n, format, ...) \
|
||||
_snprintf_s(str, n, _TRUNCATE, format, __VA_ARGS__)
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#define stricmp strcasecmp
|
||||
@@ -37,30 +37,10 @@
|
||||
#define pow2(i) (1<<(i))
|
||||
#define isPow2(x) (((x)&(x-1))==0)
|
||||
|
||||
#ifdef sgi
|
||||
#define _SC_NPROCESSORS_CONF _SC_NPROC_CONF
|
||||
#endif
|
||||
|
||||
#ifdef sun
|
||||
#define __inline inline
|
||||
#endif
|
||||
|
||||
static __inline int numprocs(void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
DWORD_PTR ProcAff, SysAff, i; int count=0;
|
||||
if(!GetProcessAffinityMask(GetCurrentProcess(), &ProcAff, &SysAff)) return(1);
|
||||
for(i=0; i<sizeof(long*)*8; i++) if(ProcAff&(1LL<<i)) count++;
|
||||
return(count);
|
||||
#elif defined (__APPLE__)
|
||||
return(1);
|
||||
#else
|
||||
long count=1;
|
||||
if((count=sysconf(_SC_NPROCESSORS_CONF))!=-1) return((int)count);
|
||||
else return(1);
|
||||
#endif
|
||||
}
|
||||
|
||||
#define byteswap(i) ( \
|
||||
(((i) & 0xff000000) >> 24) | \
|
||||
(((i) & 0x00ff0000) >> 8) | \
|
||||
|
||||
@@ -22,16 +22,16 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug"
|
||||
endif()
|
||||
|
||||
if(SIMD_X86_64)
|
||||
set(SIMD_BASENAMES jfsseflt-64 jccolss2-64 jdcolss2-64 jcsamss2-64
|
||||
jdsamss2-64 jdmerss2-64 jcqnts2i-64 jfss2fst-64 jfss2int-64 jiss2red-64
|
||||
jiss2int-64 jiss2fst-64 jcqnts2f-64 jiss2flt-64)
|
||||
set(SIMD_BASENAMES jfsseflt-64 jccolss2-64 jdcolss2-64 jcgrass2-64
|
||||
jcsamss2-64 jdsamss2-64 jdmerss2-64 jcqnts2i-64 jfss2fst-64 jfss2int-64
|
||||
jiss2red-64 jiss2int-64 jiss2fst-64 jcqnts2f-64 jiss2flt-64)
|
||||
message(STATUS "Building x86_64 SIMD extensions")
|
||||
else()
|
||||
set(SIMD_BASENAMES jsimdcpu jccolmmx jdcolmmx jcsammmx jdsammmx jdmermmx
|
||||
jcqntmmx jfmmxfst jfmmxint jimmxred jimmxint jimmxfst jcqnt3dn jf3dnflt
|
||||
ji3dnflt jcqntsse jfsseflt jisseflt jccolss2 jdcolss2 jcsamss2 jdsamss2
|
||||
jdmerss2 jcqnts2i jfss2fst jfss2int jiss2red jiss2int jiss2fst jcqnts2f
|
||||
jiss2flt)
|
||||
set(SIMD_BASENAMES jsimdcpu jccolmmx jcgrammx jdcolmmx jcsammmx jdsammmx
|
||||
jdmermmx jcqntmmx jfmmxfst jfmmxint jimmxred jimmxint jimmxfst jcqnt3dn
|
||||
jf3dnflt ji3dnflt jcqntsse jfsseflt jisseflt jccolss2 jcgrass2 jdcolss2
|
||||
jcsamss2 jdsamss2 jdmerss2 jcqnts2i jfss2fst jfss2int jiss2red jiss2int
|
||||
jiss2fst jcqnts2f jiss2flt)
|
||||
message(STATUS "Building i386 SIMD extensions")
|
||||
endif()
|
||||
|
||||
|
||||
27
turbojpegl.c
27
turbojpegl.c
@@ -23,6 +23,7 @@
|
||||
#include <jerror.h>
|
||||
#include <setjmp.h>
|
||||
#include "./turbojpeg.h"
|
||||
#include "./rrutil.h"
|
||||
#include "transupp.h"
|
||||
|
||||
#ifndef min
|
||||
@@ -82,9 +83,10 @@ static const tjscalingfactor sf[NUMSF]={
|
||||
{1, 8}
|
||||
};
|
||||
|
||||
#define _throw(c) {sprintf(lasterror, "%s", c); retval=-1; goto bailout;}
|
||||
#define _throw(c) {snprintf(lasterror, JMSG_LENGTH_MAX, "%s", c); \
|
||||
retval=-1; goto bailout;}
|
||||
#define checkhandle(h) jpgstruct *j=(jpgstruct *)h; \
|
||||
if(!j) {sprintf(lasterror, "Invalid handle"); return -1;}
|
||||
if(!j) {snprintf(lasterror, JMSG_LENGTH_MAX, "Invalid handle"); return -1;}
|
||||
|
||||
|
||||
// CO
|
||||
@@ -124,7 +126,10 @@ DLLEXPORT tjhandle DLLCALL tjInitCompress(void)
|
||||
{
|
||||
jpgstruct *j=NULL;
|
||||
if((j=(jpgstruct *)malloc(sizeof(jpgstruct)))==NULL)
|
||||
{sprintf(lasterror, "Memory allocation failure"); return NULL;}
|
||||
{
|
||||
snprintf(lasterror, JMSG_LENGTH_MAX, "Memory allocation failure");
|
||||
return NULL;
|
||||
}
|
||||
memset(j, 0, sizeof(jpgstruct));
|
||||
return _tjInitCompress(j);
|
||||
}
|
||||
@@ -408,7 +413,10 @@ DLLEXPORT tjhandle DLLCALL tjInitDecompress(void)
|
||||
{
|
||||
jpgstruct *j;
|
||||
if((j=(jpgstruct *)malloc(sizeof(jpgstruct)))==NULL)
|
||||
{sprintf(lasterror, "Memory allocation failure"); return NULL;}
|
||||
{
|
||||
snprintf(lasterror, JMSG_LENGTH_MAX, "Memory allocation failure");
|
||||
return NULL;
|
||||
}
|
||||
memset(j, 0, sizeof(jpgstruct));
|
||||
return _tjInitDecompress(j);
|
||||
}
|
||||
@@ -483,7 +491,8 @@ DLLEXPORT tjscalingfactor* DLLCALL tjGetScalingFactors(int *numscalingfactors)
|
||||
{
|
||||
if(numscalingfactors==NULL)
|
||||
{
|
||||
sprintf(lasterror, "Invalid argument in tjGetScalingFactors()");
|
||||
snprintf(lasterror, JMSG_LENGTH_MAX,
|
||||
"Invalid argument in tjGetScalingFactors()");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -691,7 +700,10 @@ DLLEXPORT tjhandle DLLCALL tjInitTransform(void)
|
||||
{
|
||||
jpgstruct *j=NULL; tjhandle tj=NULL;
|
||||
if((j=(jpgstruct *)malloc(sizeof(jpgstruct)))==NULL)
|
||||
{sprintf(lasterror, "Memory allocation failure"); return NULL;}
|
||||
{
|
||||
snprintf(lasterror, JMSG_LENGTH_MAX, "Memory allocation failure");
|
||||
return NULL;
|
||||
}
|
||||
memset(j, 0, sizeof(jpgstruct));
|
||||
tj=_tjInitCompress(j);
|
||||
if(!tj) return NULL;
|
||||
@@ -773,7 +785,8 @@ DLLEXPORT int DLLCALL tjTransform(tjhandle hnd,
|
||||
{
|
||||
if((x%xinfo.iMCU_sample_width)!=0 || (y%xinfo.iMCU_sample_height)!=0)
|
||||
{
|
||||
sprintf(lasterror, "To crop this JPEG image, x must be a multiple of %d and y must be a multiple\n"
|
||||
snprintf(lasterror, JMSG_LENGTH_MAX,
|
||||
"To crop this JPEG image, x must be a multiple of %d and y must be a multiple\n"
|
||||
"of %d.\n", xinfo.iMCU_sample_width, xinfo.iMCU_sample_height);
|
||||
retval=-1; goto bailout;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user