ReactOS 0.4.15-dev-8131-g4988de4
rdswitch.c File Reference
#include "cdjpeg.h"
#include <ctype.h>
Include dependency graph for rdswitch.c:

Go to the source code of this file.

Functions

 text_getc (FILE *file)
 
 read_text_integer (FILE *file, long *result, int *termchar)
 
 read_quant_tables (j_compress_ptr cinfo, char *filename, boolean force_baseline)
 
 set_quality_ratings (j_compress_ptr cinfo, char *arg, boolean force_baseline)
 
 set_quant_slots (j_compress_ptr cinfo, char *arg)
 
 set_sample_factors (j_compress_ptr cinfo, char *arg)
 

Function Documentation

◆ read_quant_tables()

read_quant_tables ( j_compress_ptr  cinfo,
char filename,
boolean  force_baseline 
)

Definition at line 75 of file rdswitch.c.

85{
86 FILE * fp;
87 int tblno, i, termchar;
88 long val;
89 unsigned int table[DCTSIZE2];
90
91 if ((fp = fopen(filename, "r")) == NULL) {
92 fprintf(stderr, "Can't open table file %s\n", filename);
93 return FALSE;
94 }
95 tblno = 0;
96
97 while (read_text_integer(fp, &val, &termchar)) { /* read 1st element of table */
98 if (tblno >= NUM_QUANT_TBLS) {
99 fprintf(stderr, "Too many tables in file %s\n", filename);
100 fclose(fp);
101 return FALSE;
102 }
103 table[0] = (unsigned int) val;
104 for (i = 1; i < DCTSIZE2; i++) {
105 if (! read_text_integer(fp, &val, &termchar)) {
106 fprintf(stderr, "Invalid table data in file %s\n", filename);
107 fclose(fp);
108 return FALSE;
109 }
110 table[i] = (unsigned int) val;
111 }
114 tblno++;
115 }
116
117 if (termchar != EOF) {
118 fprintf(stderr, "Non-numeric data in file %s\n", filename);
119 fclose(fp);
120 return FALSE;
121 }
122
123 fclose(fp);
124 return TRUE;
125}
char boolean force_baseline
Definition: cdjpeg.h:137
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
GLuint GLfloat * val
Definition: glext.h:7180
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define EOF
Definition: stdio.h:24
#define stderr
Definition: stdio.h:100
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
const char * filename
Definition: ioapi.h:137
jpeg_add_quant_table(j_compress_ptr cinfo, int which_tbl, const unsigned int *basic_table, int scale_factor, boolean force_baseline)
Definition: jcparam.c:24
#define NUM_QUANT_TBLS
Definition: jpeglib.h:52
boolean int tblno
Definition: jpeglib.h:1010
#define DCTSIZE2
Definition: jpeglib.h:51
read_text_integer(FILE *file, long *result, int *termchar)
Definition: rdswitch.c:40
int q_scale_factor[NUM_QUANT_TBLS]
Definition: jpeglib.h:337

Referenced by parse_switches().

◆ read_text_integer()

read_text_integer ( FILE file,
long result,
int termchar 
)

Definition at line 40 of file rdswitch.c.

43{
44 register int ch;
45 register long val;
46
47 /* Skip any leading whitespace, detect EOF */
48 do {
49 ch = text_getc(file);
50 if (ch == EOF) {
51 *termchar = ch;
52 return FALSE;
53 }
54 } while (isspace(ch));
55
56 if (! isdigit(ch)) {
57 *termchar = ch;
58 return FALSE;
59 }
60
61 val = ch - '0';
62 while ((ch = text_getc(file)) != EOF) {
63 if (! isdigit(ch))
64 break;
65 val *= 10;
66 val += ch - '0';
67 }
68 *result = val;
69 *termchar = ch;
70 return TRUE;
71}
#define isspace(c)
Definition: acclib.h:69
#define isdigit(c)
Definition: acclib.h:68
GLuint64EXT * result
Definition: glext.h:11304
text_getc(FILE *file)
Definition: rdswitch.c:23
Definition: fci.c:127

Referenced by read_quant_tables().

◆ set_quality_ratings()

set_quality_ratings ( j_compress_ptr  cinfo,
char arg,
boolean  force_baseline 
)

Definition at line 267 of file rdswitch.c.

272{
273 int val = 75; /* default value */
274 int tblno;
275 char ch;
276
277 for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) {
278 if (*arg) {
279 ch = ','; /* if not set by sscanf, will be ',' */
280 if (sscanf(arg, "%d%c", &val, &ch) < 1)
281 return FALSE;
282 if (ch != ',') /* syntax check */
283 return FALSE;
284 /* Convert user 0-100 rating to percentage scaling */
286 while (*arg && *arg++ != ',') /* advance to next segment of arg string */
287 ;
288 } else {
289 /* reached end of parameter, set remaining factors to last value */
291 }
292 }
294 return TRUE;
295}
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
jpeg_default_qtables(j_compress_ptr cinfo, boolean force_baseline)
Definition: jcparam.c:91
jpeg_quality_scaling(int quality)
Definition: jcparam.c:123

Referenced by parse_switches().

◆ set_quant_slots()

set_quant_slots ( j_compress_ptr  cinfo,
char arg 
)

Definition at line 299 of file rdswitch.c.

304{
305 int val = 0; /* default table # */
306 int ci;
307 char ch;
308
309 for (ci = 0; ci < MAX_COMPONENTS; ci++) {
310 if (*arg) {
311 ch = ','; /* if not set by sscanf, will be ',' */
312 if (sscanf(arg, "%d%c", &val, &ch) < 1)
313 return FALSE;
314 if (ch != ',') /* syntax check */
315 return FALSE;
316 if (val < 0 || val >= NUM_QUANT_TBLS) {
317 fprintf(stderr, "JPEG quantization tables are numbered 0..%d\n",
319 return FALSE;
320 }
321 cinfo->comp_info[ci].quant_tbl_no = val;
322 while (*arg && *arg++ != ',') /* advance to next segment of arg string */
323 ;
324 } else {
325 /* reached end of parameter, set remaining components to last table */
326 cinfo->comp_info[ci].quant_tbl_no = val;
327 }
328 }
329 return TRUE;
330}
#define MAX_COMPONENTS
Definition: jmorecfg.h:45
jpeg_component_info * comp_info
Definition: jpeglib.h:333

Referenced by parse_switches().

◆ set_sample_factors()

set_sample_factors ( j_compress_ptr  cinfo,
char arg 
)

Definition at line 334 of file rdswitch.c.

339{
340 int ci, val1, val2;
341 char ch1, ch2;
342
343 for (ci = 0; ci < MAX_COMPONENTS; ci++) {
344 if (*arg) {
345 ch2 = ','; /* if not set by sscanf, will be ',' */
346 if (sscanf(arg, "%d%c%d%c", &val1, &ch1, &val2, &ch2) < 3)
347 return FALSE;
348 if ((ch1 != 'x' && ch1 != 'X') || ch2 != ',') /* syntax check */
349 return FALSE;
350 if (val1 <= 0 || val1 > MAX_SAMP_FACTOR ||
351 val2 <= 0 || val2 > MAX_SAMP_FACTOR) {
352 fprintf(stderr, "JPEG sampling factors must be 1..%d\n", MAX_SAMP_FACTOR);
353 return FALSE;
354 }
355 cinfo->comp_info[ci].h_samp_factor = val1;
356 cinfo->comp_info[ci].v_samp_factor = val2;
357 while (*arg && *arg++ != ',') /* advance to next segment of arg string */
358 ;
359 } else {
360 /* reached end of parameter, set remaining components to 1x1 sampling */
361 cinfo->comp_info[ci].h_samp_factor = 1;
362 cinfo->comp_info[ci].v_samp_factor = 1;
363 }
364 }
365 return TRUE;
366}
#define MAX_SAMP_FACTOR
Definition: jpeglib.h:56

Referenced by parse_switches().

◆ text_getc()

text_getc ( FILE file)

Definition at line 23 of file rdswitch.c.

26{
27 register int ch;
28
29 ch = getc(file);
30 if (ch == '#') {
31 do {
32 ch = getc(file);
33 } while (ch != '\n' && ch != EOF);
34 }
35 return ch;
36}
_Check_return_ _CRTIMP int __cdecl getc(_Inout_ FILE *_File)

Referenced by read_text_integer().