aboutsummaryrefslogtreecommitdiffstats
path: root/test/monniaux/jpeg-6b
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-02-01 19:22:37 +0100
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-02-01 19:30:03 +0100
commita7f4ebff7116347d69dd8030b15b800a4d6bef27 (patch)
tree855cba5a6f7fe214dfd6c04f3fed67c0b0a0acb2 /test/monniaux/jpeg-6b
parent9d54081bf1f8dafe9ae71f3e3b0dd10ef7b931c2 (diff)
downloadcompcert-kvx-a7f4ebff7116347d69dd8030b15b800a4d6bef27.tar.gz
compcert-kvx-a7f4ebff7116347d69dd8030b15b800a4d6bef27.zip
removed some switches
Diffstat (limited to 'test/monniaux/jpeg-6b')
-rw-r--r--test/monniaux/jpeg-6b/jconfig.h2
-rw-r--r--test/monniaux/jpeg-6b/jdapimin.c103
2 files changed, 104 insertions, 1 deletions
diff --git a/test/monniaux/jpeg-6b/jconfig.h b/test/monniaux/jpeg-6b/jconfig.h
index 9f41f022..b2f0b94f 100644
--- a/test/monniaux/jpeg-6b/jconfig.h
+++ b/test/monniaux/jpeg-6b/jconfig.h
@@ -28,6 +28,8 @@
*/
#define HAVE_PROTOTYPES
+#define NO_SWITCH
+
#ifdef __COMPCERT__
extern long long __compcert_i64_sdiv(long long a, long long b);
extern long long __compcert_i64_smod(long long a, long long b);
diff --git a/test/monniaux/jpeg-6b/jdapimin.c b/test/monniaux/jpeg-6b/jdapimin.c
index cadb59fc..ef09983b 100644
--- a/test/monniaux/jpeg-6b/jdapimin.c
+++ b/test/monniaux/jpeg-6b/jdapimin.c
@@ -116,6 +116,63 @@ default_decompress_parms (j_decompress_ptr cinfo)
/* Guess the input colorspace, and set output colorspace accordingly. */
/* (Wish JPEG committee had provided a real way to specify this...) */
/* Note application may override our guesses. */
+
+#ifdef NO_SWITCH
+ int choice = cinfo->num_components;
+ if (choice == 1) {
+ cinfo->jpeg_color_space = JCS_GRAYSCALE;
+ cinfo->out_color_space = JCS_GRAYSCALE;
+ } else if (choice == 3) {
+ if (cinfo->saw_JFIF_marker) {
+ cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */
+ } else if (cinfo->saw_Adobe_marker) {
+ int choice2 = cinfo->Adobe_transform;
+ if (choice2 == 0) {
+ cinfo->jpeg_color_space = JCS_RGB;
+ } else if (choice2 == 1) {
+ cinfo->jpeg_color_space = JCS_YCbCr;
+ } else {
+ WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform);
+ cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */
+ }
+ } else {
+ /* Saw no special markers, try to guess from the component IDs */
+ int cid0 = cinfo->comp_info[0].component_id;
+ int cid1 = cinfo->comp_info[1].component_id;
+ int cid2 = cinfo->comp_info[2].component_id;
+
+ if (cid0 == 1 && cid1 == 2 && cid2 == 3)
+ cinfo->jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */
+ else if (cid0 == 82 && cid1 == 71 && cid2 == 66)
+ cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */
+ else {
+ TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2);
+ cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */
+ }
+ }
+ /* Always guess RGB is proper output colorspace. */
+ cinfo->out_color_space = JCS_RGB;
+ } else if (choice == 4) {
+ if (cinfo->saw_Adobe_marker) {
+ int choice2 = cinfo->Adobe_transform;
+ if (choice2 == 0) {
+ cinfo->jpeg_color_space = JCS_CMYK;
+ } else if (choice2 == 2) {
+ cinfo->jpeg_color_space = JCS_YCCK;
+ } else {
+ WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform);
+ cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */
+ }
+ } else {
+ /* No special markers, assume straight CMYK. */
+ cinfo->jpeg_color_space = JCS_CMYK;
+ }
+ cinfo->out_color_space = JCS_CMYK;
+ } else {
+ cinfo->jpeg_color_space = JCS_UNKNOWN;
+ cinfo->out_color_space = JCS_UNKNOWN;
+ }
+#else
switch (cinfo->num_components) {
case 1:
cinfo->jpeg_color_space = JCS_GRAYSCALE;
@@ -183,11 +240,14 @@ default_decompress_parms (j_decompress_ptr cinfo)
cinfo->out_color_space = JCS_UNKNOWN;
break;
}
-
+#endif
+
/* Set defaults for other decompression parameters. */
cinfo->scale_num = 1; /* 1:1 scaling */
cinfo->scale_denom = 1;
+#ifdef HAS_FLOAT
cinfo->output_gamma = 1.0;
+#endif
cinfo->buffered_image = FALSE;
cinfo->raw_data_out = FALSE;
cinfo->dct_method = JDCT_DEFAULT;
@@ -289,6 +349,45 @@ jpeg_consume_input (j_decompress_ptr cinfo)
int retcode = JPEG_SUSPENDED;
/* NB: every possible DSTATE value should be listed in this switch */
+#ifdef NO_SWITCH
+ int choice = cinfo->global_state;
+ if (choice == DSTATE_START) {
+ /* Start-of-datastream actions: reset appropriate modules */
+ (*cinfo->inputctl->reset_input_controller) (cinfo);
+ /* Initialize application's data source module */
+ (*cinfo->src->init_source) (cinfo);
+ cinfo->global_state = DSTATE_INHEADER;
+ /*FALLTHROUGH*/
+ retcode = (*cinfo->inputctl->consume_input) (cinfo);
+ if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */
+ /* Set up default parameters based on header data */
+ default_decompress_parms(cinfo);
+ /* Set global state: ready for start_decompress */
+ cinfo->global_state = DSTATE_READY;
+ }
+ } else if (choice == DSTATE_INHEADER) {
+ retcode = (*cinfo->inputctl->consume_input) (cinfo);
+ if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */
+ /* Set up default parameters based on header data */
+ default_decompress_parms(cinfo);
+ /* Set global state: ready for start_decompress */
+ cinfo->global_state = DSTATE_READY;
+ }
+ } else if (choice == DSTATE_READY) {
+ /* Can't advance past first SOS until start_decompress is called */
+ retcode = JPEG_REACHED_SOS;
+ } else if (choice == DSTATE_PRELOAD ||
+ choice == DSTATE_PRESCAN ||
+ choice == DSTATE_SCANNING ||
+ choice == DSTATE_RAW_OK ||
+ choice == DSTATE_BUFIMAGE ||
+ choice == DSTATE_BUFPOST ||
+ choice == DSTATE_STOPPING) {
+ retcode = (*cinfo->inputctl->consume_input) (cinfo);
+ } else {
+ ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
+ }
+#else
switch (cinfo->global_state) {
case DSTATE_START:
/* Start-of-datastream actions: reset appropriate modules */
@@ -322,6 +421,8 @@ jpeg_consume_input (j_decompress_ptr cinfo)
default:
ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
}
+#endif
+ KILL_TAIL_CALL();
return retcode;
}