Add program that demonstrates how to check for the existence of the colorspace extensions

This commit is contained in:
DRC
2011-12-19 15:01:55 +00:00
parent c1e4151607
commit 230440c8e7
4 changed files with 138 additions and 3 deletions

View File

@@ -73,7 +73,7 @@ libjpeg_la_SOURCES += jsimd_none.c
endif endif
bin_PROGRAMS = cjpeg djpeg jpegtran rdjpgcom wrjpgcom tjbench bin_PROGRAMS = cjpeg djpeg jpegtran rdjpgcom wrjpgcom tjbench
noinst_PROGRAMS = tjunittest noinst_PROGRAMS = tjunittest jcstest
tjbench_SOURCES = tjbench.c bmp.h bmp.c tjutil.h tjutil.c rdbmp.c rdppm.c \ tjbench_SOURCES = tjbench.c bmp.h bmp.c tjutil.h tjutil.c rdbmp.c rdppm.c \
wrbmp.c wrppm.c wrbmp.c wrppm.c
@@ -114,6 +114,9 @@ wrjpgcom_SOURCES = wrjpgcom.c
wrjpgcom_LDADD = libjpeg.la wrjpgcom_LDADD = libjpeg.la
jcstest_SOURCES = jcstest.c
jcstest_LDADD = libjpeg.la
dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1 dist_man1_MANS = cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1

View File

@@ -227,7 +227,7 @@ colorspace constants:
Setting cinfo.in_color_space (compression) or cinfo.out_color_space Setting cinfo.in_color_space (compression) or cinfo.out_color_space
(decompression) to one of these values will cause libjpeg-turbo to read the (decompression) to one of these values will cause libjpeg-turbo to read the
red, green, and blue values from (or write them to) the appropriate position in red, green, and blue values from (or write them to) the appropriate position in
the pixel when YUV conversion is performed. the pixel when compressing from/decompressing to an RGB buffer.
Your application can check for the existence of these extensions at compile Your application can check for the existence of these extensions at compile
time with: time with:
@@ -240,7 +240,7 @@ that doesn't support them will result in a "Bogus input colorspace" error.
When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the When using the RGBX, BGRX, XBGR, and XRGB colorspaces during decompression, the
X byte is undefined, and in order to ensure the best performance, libjpeg-turbo X byte is undefined, and in order to ensure the best performance, libjpeg-turbo
can set that byte to whatever value it wishes. If an application expects the X can set that byte to whatever value it wishes. If an application expects the X
byte to be used as an alpha channel, then it should use JCS_EXT_RGBA, byte to be used as an alpha channel, then it should specify JCS_EXT_RGBA,
JCS_EXT_BGRA, JCS_EXT_ABGR, or JCS_EXT_ARGB. When these colorspace constants JCS_EXT_BGRA, JCS_EXT_ABGR, or JCS_EXT_ARGB. When these colorspace constants
are used, the X byte is guaranteed to be 0xFF, which is interpreted as opaque. are used, the X byte is guaranteed to be 0xFF, which is interpreted as opaque.
@@ -249,6 +249,9 @@ extensions at compile time with:
#ifdef JCS_ALPHA_EXTENSIONS #ifdef JCS_ALPHA_EXTENSIONS
jcstest.c, located in the libjpeg-turbo source tree, demonstrates how to check
for the existence of the colorspace extensions at compile time and run time.
================================= =================================
libjpeg v7 and v8 API/ABI support libjpeg v7 and v8 API/ABI support
================================= =================================

126
jcstest.c Normal file
View File

@@ -0,0 +1,126 @@
/*
* Copyright (C)2011 D. R. Commander. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the name of the libjpeg-turbo Project nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/* This program demonstrates how to check for the colorspace extension
capabilities of libjpeg-turbo at both compile time and run time. */
#include <stdio.h>
#include <jpeglib.h>
#include <jerror.h>
#include <setjmp.h>
#ifndef JCS_EXTENSIONS
#define JCS_EXT_RGB 6
#endif
#if !defined(JCS_EXTENSIONS) || !defined(JCS_ALPHA_EXTENSIONS)
#define JCS_EXT_RGBA 12
#endif
static char lasterror[JMSG_LENGTH_MAX] = "No error";
typedef struct _error_mgr {
struct jpeg_error_mgr pub;
jmp_buf jb;
} error_mgr;
static void my_error_exit(j_common_ptr cinfo)
{
error_mgr *myerr = (error_mgr *)cinfo->err;
(*cinfo->err->output_message)(cinfo);
longjmp(myerr->jb, 1);
}
static void my_output_message(j_common_ptr cinfo)
{
(*cinfo->err->format_message)(cinfo, lasterror);
}
int main(void)
{
int jcs_valid = -1, jcs_alpha_valid = -1;
struct jpeg_compress_struct cinfo;
error_mgr jerr;
printf("libjpeg-turbo colorspace extensions:\n");
#if JCS_EXTENSIONS
printf(" Present at compile time\n");
#else
printf(" Not present at compile time\n");
#endif
cinfo.err = jpeg_std_error(&jerr.pub);
jerr.pub.error_exit = my_error_exit;
jerr.pub.output_message = my_output_message;
if(setjmp(jerr.jb)) {
// this will execute if libjpeg has an error
jcs_valid = 0;
goto done;
}
jpeg_create_compress(&cinfo);
cinfo.input_components = 3;
jpeg_set_defaults(&cinfo);
cinfo.in_color_space = JCS_EXT_RGB;
jpeg_default_colorspace(&cinfo);
jcs_valid = 1;
done:
if (jcs_valid)
printf(" Working properly\n");
else
printf(" Not working properly. Error returned was:\n %s\n",
lasterror);
printf("libjpeg-turbo alpha colorspace extensions:\n");
#if JCS_ALPHA_EXTENSIONS
printf(" Present at compile time\n");
#else
printf(" Not present at compile time\n");
#endif
if(setjmp(jerr.jb)) {
// this will execute if libjpeg has an error
jcs_alpha_valid = 0;
goto done2;
}
cinfo.in_color_space = JCS_EXT_RGBA;
jpeg_default_colorspace(&cinfo);
jcs_alpha_valid = 1;
done2:
if (jcs_alpha_valid)
printf(" Working properly\n");
else
printf(" Not working properly. Error returned was:\n %s\n",
lasterror);
jpeg_destroy_compress(&cinfo);
return 0;
}

View File

@@ -53,6 +53,9 @@ add_executable(jpegtran ../jpegtran.c ../cdjpeg.c ../rdswitch.c ../transupp.c)
target_link_libraries(jpegtran jpeg) target_link_libraries(jpegtran jpeg)
set_property(TARGET jpegtran PROPERTY COMPILE_FLAGS "-DUSE_SETMODE") set_property(TARGET jpegtran PROPERTY COMPILE_FLAGS "-DUSE_SETMODE")
add_executable(jcstest ../jcstest.c)
target_link_libraries(jcstest jpeg)
install(TARGETS jpeg cjpeg djpeg jpegtran install(TARGETS jpeg cjpeg djpeg jpegtran
ARCHIVE DESTINATION lib ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib LIBRARY DESTINATION lib