aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt8
-rw-r--r--jpegut.c11
-rw-r--r--jpgtest.c29
-rw-r--r--rrutil.h24
-rwxr-xr-xsimd/CMakeLists.txt16
-rw-r--r--turbojpegl.c27
6 files changed, 57 insertions, 58 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c7dc27f..74ec2a3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -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)
diff --git a/jpegut.c b/jpegut.c
index 4486c07..70f4fc8 100644
--- a/jpegut.c
+++ b/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)
diff --git a/jpgtest.c b/jpgtest.c
index 06efa49..f70ecd9 100644
--- a/jpgtest.c
+++ b/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)
diff --git a/rrutil.h b/rrutil.h
index 4b61dbf..3bb11fc 100644
--- a/rrutil.h
+++ b/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) | \
diff --git a/simd/CMakeLists.txt b/simd/CMakeLists.txt
index 5be325e..b1977ce 100755
--- a/simd/CMakeLists.txt
+++ b/simd/CMakeLists.txt
@@ -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()
diff --git a/turbojpegl.c b/turbojpegl.c
index 4ae41b7..dc1578d 100644
--- a/turbojpegl.c
+++ b/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;
}