doom3-gpl
Doom 3 GPL source release
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
jload.c
Go to the documentation of this file.
1 
2 #include "../Shared/Shared.h"
3 #include "..\Common\Common.h"
4 
5 /*
6  * Include file for users of JPEG library.
7  * You will need to have included system headers that define at least
8  * the typedefs FILE and size_t before you can include jpeglib.h.
9  * (stdio.h is sufficient on ANSI-conforming systems.)
10  * You may also wish to include "jerror.h".
11  */
12 
13 #include "jpeglib.h"
14 
15 
16 int LoadJPG( const char *filename, unsigned char **pic, int *width, int *height ) {
17  /* This struct contains the JPEG decompression parameters and pointers to
18  * working space (which is allocated as needed by the JPEG library).
19  */
20  struct jpeg_decompress_struct cinfo;
21  /* We use our private extension JPEG error handler.
22  * Note that this struct must live as long as the main JPEG parameter
23  * struct, to avoid dangling-pointer problems.
24  */
25  /* This struct represents a JPEG error handler. It is declared separately
26  * because applications often want to supply a specialized error handler
27  * (see the second half of this file for an example). But here we just
28  * take the easy way out and use the standard error handler, which will
29  * print a message on stderr and call exit() if compression fails.
30  * Note that this struct must live as long as the main JPEG parameter
31  * struct, to avoid dangling-pointer problems.
32  */
33  struct jpeg_error_mgr jerr;
34  /* More stuff */
35  fileHandle_t infile; /* source file */
36  JSAMPARRAY buffer; /* Output row buffer */
37  int row_stride; /* physical row width in output buffer */
38  unsigned char *out;
39 
40  /* In this example we want to open the input file before doing anything else,
41  * so that the setjmp() error recovery below can assume the file is open.
42  * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that
43  * requires it in order to read binary files.
44  */
45 
46  FS_FOpenFileRead( filename, &infile, qfalse );
47  if (infile == 0) {
48  return 0;
49  }
50 
51  /* Step 1: allocate and initialize JPEG decompression object */
52 
53  /* We have to set up the error handler first, in case the initialization
54  * step fails. (Unlikely, but it could happen if you are out of memory.)
55  * This routine fills in the contents of struct jerr, and returns jerr's
56  * address which we place into the link field in cinfo.
57  */
58  cinfo.err = jpeg_std_error(&jerr);
59 
60  /* Now we can initialize the JPEG decompression object. */
61  jpeg_create_decompress(&cinfo);
62 
63  /* Step 2: specify data source (eg, a file) */
64 
65  jpeg_stdio_src(&cinfo, infile);
66 
67  /* Step 3: read file parameters with jpeg_read_header() */
68 
69  (void) jpeg_read_header(&cinfo, TRUE);
70  /* We can ignore the return value from jpeg_read_header since
71  * (a) suspension is not possible with the stdio data source, and
72  * (b) we passed TRUE to reject a tables-only JPEG file as an error.
73  * See libjpeg.doc for more info.
74  */
75 
76  /* Step 4: set parameters for decompression */
77 
78  /* In this example, we don't need to change any of the defaults set by
79  * jpeg_read_header(), so we do nothing here.
80  */
81 
82  /* Step 5: Start decompressor */
83 
84  (void) jpeg_start_decompress(&cinfo);
85  /* We can ignore the return value since suspension is not possible
86  * with the stdio data source.
87  */
88 
89  /* We may need to do some setup of our own at this point before reading
90  * the data. After jpeg_start_decompress() we have the correct scaled
91  * output image dimensions available, as well as the output colormap
92  * if we asked for color quantization.
93  * In this example, we need to make an output work buffer of the right size.
94  */
95  /* JSAMPLEs per row in output buffer */
96  row_stride = cinfo.output_width * cinfo.output_components;
97 
98  out = Z_Malloc(cinfo.output_width*cinfo.output_height*cinfo.output_components);
99 
100  *pic = out;
101  *width = cinfo.output_width;
102  *height = cinfo.output_height;
103 
104  /* Step 6: while (scan lines remain to be read) */
105  /* jpeg_read_scanlines(...); */
106 
107  /* Here we use the library's state variable cinfo.output_scanline as the
108  * loop counter, so that we don't have to keep track ourselves.
109  */
110  while (cinfo.output_scanline < cinfo.output_height) {
111  /* jpeg_read_scanlines expects an array of pointers to scanlines.
112  * Here the array is only one element long, but you could ask for
113  * more than one scanline at a time if that's more convenient.
114  */
115  buffer = (JSAMPARRAY)out+(row_stride*cinfo.output_scanline);
116  (void) jpeg_read_scanlines(&cinfo, buffer, 1);
117  }
118 
119  /* Step 7: Finish decompression */
120 
121  (void) jpeg_finish_decompress(&cinfo);
122  /* We can ignore the return value since suspension is not possible
123  * with the stdio data source.
124  */
125 
126  /* Step 8: Release JPEG decompression object */
127 
128  /* This is an important step since it will release a good deal of memory. */
129  jpeg_destroy_decompress(&cinfo);
130 
131  /* After finish_decompress, we can close the input file.
132  * Here we postpone it until after no more JPEG errors are possible,
133  * so as to simplify the setjmp error logic above. (Actually, I don't
134  * think that jpeg_destroy can do an error exit, but why assume anything...)
135  */
136  FS_FCloseFile(infile);
137 
138  /* At this point you may want to check to see whether any corrupt-data
139  * warnings occurred (test whether jerr.pub.num_warnings is nonzero).
140  */
141 
142  /* And we're done! */
143  return 1;
144 }
145 
JDIMENSION output_height
Definition: jpeglib.h:455
GLOBAL boolean jpeg_start_decompress(j_decompress_ptr cinfo)
Definition: jdapistd.c:38
int LoadJPG(const char *filename, unsigned char **pic, int *width, int *height)
Definition: jload.c:16
JDIMENSION output_width
Definition: jpeglib.h:454
GLOBAL void jpeg_create_decompress(j_decompress_ptr cinfo)
Definition: jdapimin.c:30
GLOBAL JDIMENSION jpeg_read_scanlines(j_decompress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION max_lines)
Definition: jdapistd.c:152
GLuint buffer
Definition: glext.h:3108
GLenum GLsizei width
Definition: glext.h:2846
GLOBAL boolean jpeg_finish_decompress(j_decompress_ptr cinfo)
Definition: jdapimin.c:372
GLenum GLsizei GLsizei height
Definition: glext.h:2856
JSAMPROW * JSAMPARRAY
Definition: jpeglib.h:80
JDIMENSION output_scanline
Definition: jpeglib.h:484
GLOBAL void jpeg_destroy_decompress(j_decompress_ptr cinfo)
Definition: jdapimin.c:77
GLOBAL struct jpeg_error_mgr * jpeg_std_error(struct jpeg_error_mgr *err)
Definition: jerror.c:213
typedef void(APIENTRYP PFNGLBLENDCOLORPROC)(GLclampf red
#define TRUE
Definition: mprintf.c:69
GLOBAL int jpeg_read_header(j_decompress_ptr cinfo, boolean require_image)
Definition: jdapimin.c:244
GLOBAL void jpeg_stdio_src(j_decompress_ptr cinfo, unsigned char *infile)
Definition: jdatasrc.c:174