From a7f4ebff7116347d69dd8030b15b800a4d6bef27 Mon Sep 17 00:00:00 2001 From: David Monniaux Date: Fri, 1 Feb 2019 19:22:37 +0100 Subject: removed some switches --- test/monniaux/jpeg-6b/jdapimin.c | 103 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) (limited to 'test/monniaux/jpeg-6b/jdapimin.c') 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; } -- cgit