1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/* common defs for jpeg read/write
*/
/*
Copyright (C) 1991-2005 The National Gallery
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA
*/
/*
These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk
*/
#ifndef VIPS_JPEG_H
#define VIPS_JPEG_H
#ifdef __cplusplus
extern "C" {
#endif /*__cplusplus*/
/* jpeglib defines its own boolean type as an enum which then clashes with
* everyone elses. Rename it as jboolean.
*/
#define boolean jboolean
/* Any TRUE/FALSE macros which have crept in will cause terrible confusion as
* well.
*/
#ifdef TRUE
#undef TRUE
#endif /*TRUE*/
#ifdef FALSE
#undef FALSE
#endif /*FALSE*/
#include <setjmp.h>
#include <jpeglib.h>
#include <jerror.h>
/* Our custom error message codes.
*/
#define JERR_VIPS_IMAGE_EOF (1000)
#define JWRN_VIPS_IMAGE_EOF JERR_VIPS_IMAGE_EOF
#define JERR_VIPS_TARGET_WRITE (1001)
/* Define a new error handler for when we bomb out.
*/
typedef struct {
/* Public fields.
*/
struct jpeg_error_mgr pub;
/* Private stuff for us.
*/
jmp_buf jmp; /* longjmp() here to get back to VIPS */
FILE *fp; /* fclose() if non-NULL */
} ErrorManager;
/* Stuff we track during a read.
*/
typedef struct _ReadJpeg {
VipsImage *out;
/* Shrink by this much during load. 1, 2, 4, 8.
*/
int shrink;
/* Types of error to cause failure.
*/
VipsFailOn fail_on;
struct jpeg_decompress_struct cinfo;
ErrorManager eman;
gboolean invert_pels;
/* Use orientation tag to automatically rotate and flip image
* during load.
*/
gboolean autorotate;
/* Remove DoS limits.
*/
gboolean unlimited;
/* cinfo->output_width and height can be larger than we want since
* libjpeg rounds up on shrink-on-load. This is the real size we will
* output, as opposed to the size we decompress to.
*/
int output_width;
int output_height;
/* The source we read from.
*/
VipsSource *source;
} ReadJpeg;
extern const char *vips__jpeg_message_table[];
void vips__new_output_message(j_common_ptr cinfo);
void vips__new_error_exit(j_common_ptr cinfo);
ReadJpeg *vips__readjpeg_new(VipsSource *source, VipsImage *out,
int shrink, VipsFailOn fail_on, gboolean autorotate,
gboolean unlimited);
int vips__readjpeg_open_input(ReadJpeg *jpeg);
#ifdef __cplusplus
}
#endif /*__cplusplus*/
#endif /*VIPS_JPEG_H*/
|