]> granicus.if.org Git - libjpeg-turbo/commitdiff
Fix Windows build; Add grayscale tests to Windows build; Add proper implementation...
authorDRC <dcommander@users.sourceforge.net>
Wed, 2 Mar 2011 02:17:30 +0000 (02:17 +0000)
committerDRC <dcommander@users.sourceforge.net>
Wed, 2 Mar 2011 02:17:30 +0000 (02:17 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@486 632fc199-4ca6-4c93-a231-07263d6284db

CMakeLists.txt
jpegut.c
jpgtest.c
rrutil.h
simd/CMakeLists.txt
turbojpegl.c

index c7dc27f01c7734f25f170b510832864756c50956..74ec2a3253fbe814f10f651cfabc6dafa9dc960c 100644 (file)
@@ -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)
index 4486c07593bb349cd19d0962611d30cf52a05b8b..70f4fc8947865279e94d3392317724339ad82c03 100644 (file)
--- a/jpegut.c
+++ b/jpegut.c
 #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)
index 06efa49ea7b4c42929366561058c6ad09bed75a1..f70ecd90be0fb3e7cb58761d49c80208efc95c24 100644 (file)
--- 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)
index 4b61dbf0bda219ef710c598c56e306fff80e9468..3bb11fcae1c84847802e3361909cbf0ffc8132e4 100644 (file)
--- 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
 #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) | \
index 5be325e9d4284ac0b8dad9567fbd5ab5562dfa18..b1977ce3eac1794d460be05634e13697abaf0ec2 100755 (executable)
@@ -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()
 
index 4ae41b7cc3f1bd17b33ad578bfce350af04e029f..dc1578d17caa6af5f3f3848cb006df65fc3ca71a 100644 (file)
@@ -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;
                }