diff options
author | paulberg <paulberg> | 2006-02-25 22:08:39 +0000 |
---|---|---|
committer | paulberg <paulberg> | 2006-02-25 22:08:39 +0000 |
commit | fc35039e97ae63e9542404f512fa126055ee4c67 (patch) | |
tree | 9daf55e88bd7f1ad4b789bde75e5d007f2ef8f0d /rdswitch.c | |
parent | 06ad12d8dad0b13befb85b44f7e10a5bb1408f44 (diff) | |
download | libjpeg-fc35039e97ae63e9542404f512fa126055ee4c67.tar.gz |
Initial commit of Vollbeding changes
Diffstat (limited to 'rdswitch.c')
-rw-r--r-- | rdswitch.c | 39 |
1 files changed, 36 insertions, 3 deletions
@@ -9,6 +9,7 @@ * command-line switches. Switches processed here are: * -qtables file Read quantization tables from text file * -scans file Read scan script from text file + * -quality N[,N,...] Set quality ratings * -qslots N[,N,...] Set component quantization table selectors * -sample HxV[,HxV,...] Set component sampling factors */ @@ -70,8 +71,7 @@ read_text_integer (FILE * file, long * result, int * termchar) GLOBAL(boolean) -read_quant_tables (j_compress_ptr cinfo, char * filename, - int scale_factor, boolean force_baseline) +read_quant_tables (j_compress_ptr cinfo, char * filename, boolean force_baseline) /* Read a set of quantization tables from the specified file. * The file is plain ASCII text: decimal numbers with whitespace between. * Comments preceded by '#' may be included in the file. @@ -108,7 +108,8 @@ read_quant_tables (j_compress_ptr cinfo, char * filename, } table[i] = (unsigned int) val; } - jpeg_add_quant_table(cinfo, tblno, table, scale_factor, force_baseline); + jpeg_add_quant_table(cinfo, tblno, table, cinfo->q_scale_factor[tblno], + force_baseline); tblno++; } @@ -263,6 +264,38 @@ bogus: GLOBAL(boolean) +set_quality_ratings (j_compress_ptr cinfo, char *arg, boolean force_baseline) +/* Process a quality-ratings parameter string, of the form + * N[,N,...] + * If there are more q-table slots than parameters, the last value is replicated. + */ +{ + int val = 75; /* default value */ + int tblno; + char ch; + + for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) { + if (*arg) { + ch = ','; /* if not set by sscanf, will be ',' */ + if (sscanf(arg, "%d%c", &val, &ch) < 1) + return FALSE; + if (ch != ',') /* syntax check */ + return FALSE; + /* Convert user 0-100 rating to percentage scaling */ + cinfo->q_scale_factor[tblno] = jpeg_quality_scaling(val); + while (*arg && *arg++ != ',') /* advance to next segment of arg string */ + ; + } else { + /* reached end of parameter, set remaining factors to last value */ + cinfo->q_scale_factor[tblno] = jpeg_quality_scaling(val); + } + } + jpeg_default_qtables(cinfo, force_baseline); + return TRUE; +} + + +GLOBAL(boolean) set_quant_slots (j_compress_ptr cinfo, char *arg) /* Process a quantization-table-selectors parameter string, of the form * N[,N,...] |