ReactOS 0.4.16-dev-2613-g9533ad7
tif_compress.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 1988-1997 Sam Leffler
3 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
4 *
5 * Permission to use, copy, modify, distribute, and sell this software and
6 * its documentation for any purpose is hereby granted without fee, provided
7 * that (i) the above copyright notices and this permission notice appear in
8 * all copies of the software and related documentation, and (ii) the names of
9 * Sam Leffler and Silicon Graphics may not be used in any advertising or
10 * publicity relating to the software without the specific, prior written
11 * permission of Sam Leffler and Silicon Graphics.
12 *
13 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
14 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16 *
17 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
18 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
21 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
22 * OF THIS SOFTWARE.
23 */
24
25/*
26 * TIFF Library
27 *
28 * Compression Scheme Configuration Support.
29 */
30#include "tiffiop.h"
31
32static int TIFFNoEncode(TIFF *tif, const char *method)
33{
35
36 if (c)
37 {
38 TIFFErrorExtR(tif, tif->tif_name, "%s %s encoding is not implemented",
39 c->name, method);
40 }
41 else
42 {
43 TIFFErrorExtR(tif, tif->tif_name,
44 "Compression scheme %" PRIu16
45 " %s encoding is not implemented",
47 }
48 return (-1);
49}
50
52{
53 (void)pp;
54 (void)cc;
55 (void)s;
56 return (TIFFNoEncode(tif, "scanline"));
57}
58
60{
61 (void)pp;
62 (void)cc;
63 (void)s;
64 return (TIFFNoEncode(tif, "strip"));
65}
66
68{
69 (void)pp;
70 (void)cc;
71 (void)s;
72 return (TIFFNoEncode(tif, "tile"));
73}
74
75static int TIFFNoDecode(TIFF *tif, const char *method)
76{
78
79 if (c)
80 TIFFErrorExtR(tif, tif->tif_name, "%s %s decoding is not implemented",
81 c->name, method);
82 else
83 TIFFErrorExtR(tif, tif->tif_name,
84 "Compression scheme %" PRIu16
85 " %s decoding is not implemented",
87 return (0);
88}
89
90static int _TIFFNoFixupTags(TIFF *tif)
91{
92 (void)tif;
93 return (1);
94}
95
97{
98 (void)pp;
99 (void)cc;
100 (void)s;
101 return (TIFFNoDecode(tif, "scanline"));
102}
103
105{
106 (void)pp;
107 (void)cc;
108 (void)s;
109 return (TIFFNoDecode(tif, "strip"));
110}
111
113{
114 (void)pp;
115 (void)cc;
116 (void)s;
117 return (TIFFNoDecode(tif, "tile"));
118}
119
121{
122 (void)off;
123 TIFFErrorExtR(tif, tif->tif_name,
124 "Compression algorithm does not support random access");
125 return (0);
126}
127
129{
130 (void)tif;
131 (void)s;
132 return (1);
133}
134
135static int _TIFFtrue(TIFF *tif)
136{
137 (void)tif;
138 return (1);
139}
140static void _TIFFvoid(TIFF *tif) { (void)tif; }
141
143{
145 tif->tif_decodestatus = TRUE;
151 tif->tif_encodestatus = TRUE;
158 tif->tif_close = _TIFFvoid;
159 tif->tif_seek = _TIFFNoSeek;
160 tif->tif_cleanup = _TIFFvoid;
164}
165
167{
169
171 /*
172 * Don't treat an unknown compression scheme as an error.
173 * This permits applications to open files with data that
174 * the library does not have builtin support for, but which
175 * may still be meaningful.
176 */
177 return (c ? (*c->init)(tif, scheme) : 1);
178}
179
180/*
181 * Other compression schemes may be registered. Registered
182 * schemes can also override the builtin versions provided
183 * by this library.
184 */
185typedef struct _codec
186{
187 struct _codec *next;
191
193{
194 const TIFFCodec *c;
195 codec_t *cd;
196
197 for (cd = registeredCODECS; cd; cd = cd->next)
198 if (cd->info->scheme == scheme)
199 return ((const TIFFCodec *)cd->info);
200 for (c = _TIFFBuiltinCODECS; c->name; c++)
201 if (c->scheme == scheme)
202 return (c);
203 return ((const TIFFCodec *)0);
204}
205
208{
210 NULL,
211 (tmsize_t)(sizeof(codec_t) + sizeof(TIFFCodec) + strlen(name) + 1));
212
213 if (cd != NULL)
214 {
215 cd->info = (TIFFCodec *)((uint8_t *)cd + sizeof(codec_t));
216 cd->info->name = (char *)((uint8_t *)cd->info + sizeof(TIFFCodec));
217 strcpy(cd->info->name, name);
218 cd->info->scheme = scheme;
219 cd->info->init = init;
220 cd->next = registeredCODECS;
222 }
223 else
224 {
225 TIFFErrorExt(0, "TIFFRegisterCODEC",
226 "No space to register compression scheme %s", name);
227 return NULL;
228 }
229 return (cd->info);
230}
231
233{
234 codec_t *cd;
235 codec_t **pcd;
236
237 for (pcd = &registeredCODECS; (cd = *pcd) != NULL; pcd = &cd->next)
238 if (cd->info == c)
239 {
240 *pcd = cd->next;
242 return;
243 }
244 TIFFErrorExt(0, "TIFFUnRegisterCODEC",
245 "Cannot remove compression scheme %s; not registered",
246 c->name);
247}
248
249/************************************************************************/
250/* TIFFGetConfisuredCODECs() */
251/************************************************************************/
252
262{
263 int i = 1;
264 codec_t *cd;
265 const TIFFCodec *c;
267 TIFFCodec *new_codecs;
268
269 for (cd = registeredCODECS; cd; cd = cd->next)
270 {
271 new_codecs =
273 if (!new_codecs)
274 {
276 return NULL;
277 }
278 codecs = new_codecs;
279 _TIFFmemcpy(codecs + i - 1, cd->info, sizeof(TIFFCodec));
280 i++;
281 }
282 for (c = _TIFFBuiltinCODECS; c->name; c++)
283 {
284 if (TIFFIsCODECConfigured(c->scheme))
285 {
286 new_codecs = (TIFFCodec *)_TIFFreallocExt(NULL, codecs,
287 i * sizeof(TIFFCodec));
288 if (!new_codecs)
289 {
291 return NULL;
292 }
293 codecs = new_codecs;
294 _TIFFmemcpy(codecs + i - 1, (const void *)c, sizeof(TIFFCodec));
295 i++;
296 }
297 }
298
299 new_codecs =
301 if (!new_codecs)
302 {
304 return NULL;
305 }
306 codecs = new_codecs;
307 _TIFFmemset(codecs + i - 1, 0, sizeof(TIFFCodec));
308
309 return codecs;
310}
InitDirComponents & cd
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
UINT32 uint32_t
Definition: types.h:75
static const struct image_codec codecs[NUM_CODECS]
Definition: image.c:4283
#define PRIu16
Definition: inttypes.h:83
unsigned short uint16_t
Definition: stdint.h:35
unsigned char uint8_t
Definition: stdint.h:33
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1592
method
Definition: dragdrop.c:54
GLdouble s
Definition: gl.h:2039
const GLubyte * c
Definition: glext.h:8905
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
uint32_t cc
Definition: isohybrid.c:75
#define c
Definition: ke_i.h:80
DWORD scheme
strcpy
Definition: string.h:131
char * name
Definition: tiffio.h:272
uint16_t td_compression
Definition: tif_dir.h:88
TIFFCodec * info
Definition: tif_compress.c:188
struct _codec * next
Definition: tif_compress.c:187
Definition: name.c:39
Definition: tiffiop.h:113
TIFFTileMethod tif_deftilesize
Definition: tiffiop.h:215
TIFFCodeMethod tif_encodestrip
Definition: tiffiop.h:208
TIFFSeekMethod tif_seek
Definition: tiffiop.h:212
TIFFCodeMethod tif_encodetile
Definition: tiffiop.h:210
TIFFPreMethod tif_preencode
Definition: tiffiop.h:203
TIFFBoolMethod tif_fixuptags
Definition: tiffiop.h:198
TIFFPreMethod tif_predecode
Definition: tiffiop.h:200
TIFFCodeMethod tif_decodestrip
Definition: tiffiop.h:207
TIFFStripMethod tif_defstripsize
Definition: tiffiop.h:214
char * tif_name
Definition: tiffiop.h:114
TIFFCodeMethod tif_decoderow
Definition: tiffiop.h:205
TIFFBoolMethod tif_setupencode
Definition: tiffiop.h:201
TIFFDirectory tif_dir
Definition: tiffiop.h:157
TIFFBoolMethod tif_postencode
Definition: tiffiop.h:204
TIFFCodeMethod tif_encoderow
Definition: tiffiop.h:206
TIFFVoidMethod tif_close
Definition: tiffiop.h:211
int tif_decodestatus
Definition: tiffiop.h:197
int tif_encodestatus
Definition: tiffiop.h:202
TIFFVoidMethod tif_cleanup
Definition: tiffiop.h:213
TIFFBoolMethod tif_setupdecode
Definition: tiffiop.h:199
uint32_t tif_flags
Definition: tiffiop.h:117
TIFFCodeMethod tif_decodetile
Definition: tiffiop.h:209
const TIFFCodec _TIFFBuiltinCODECS[]
Definition: tif_codec.c:86
int TIFFIsCODECConfigured(uint16_t scheme)
Definition: tif_codec.c:146
static void _TIFFvoid(TIFF *tif)
Definition: tif_compress.c:140
TIFFCodec * TIFFRegisterCODEC(uint16_t scheme, const char *name, TIFFInitMethod init)
Definition: tif_compress.c:206
const TIFFCodec * TIFFFindCODEC(uint16_t scheme)
Definition: tif_compress.c:192
int TIFFSetCompressionScheme(TIFF *tif, int scheme)
Definition: tif_compress.c:166
int _TIFFNoTileEncode(TIFF *tif, uint8_t *pp, tmsize_t cc, uint16_t s)
Definition: tif_compress.c:67
static int TIFFNoEncode(TIFF *tif, const char *method)
Definition: tif_compress.c:32
void _TIFFSetDefaultCompressionState(TIFF *tif)
Definition: tif_compress.c:142
static int _TIFFtrue(TIFF *tif)
Definition: tif_compress.c:135
int _TIFFNoTileDecode(TIFF *tif, uint8_t *pp, tmsize_t cc, uint16_t s)
Definition: tif_compress.c:112
struct _codec codec_t
static codec_t * registeredCODECS
Definition: tif_compress.c:190
static int _TIFFNoFixupTags(TIFF *tif)
Definition: tif_compress.c:90
int _TIFFNoRowDecode(TIFF *tif, uint8_t *pp, tmsize_t cc, uint16_t s)
Definition: tif_compress.c:96
int _TIFFNoRowEncode(TIFF *tif, uint8_t *pp, tmsize_t cc, uint16_t s)
Definition: tif_compress.c:51
int _TIFFNoStripEncode(TIFF *tif, uint8_t *pp, tmsize_t cc, uint16_t s)
Definition: tif_compress.c:59
static int TIFFNoDecode(TIFF *tif, const char *method)
Definition: tif_compress.c:75
int _TIFFNoStripDecode(TIFF *tif, uint8_t *pp, tmsize_t cc, uint16_t s)
Definition: tif_compress.c:104
int _TIFFNoPreCode(TIFF *tif, uint16_t s)
Definition: tif_compress.c:128
int _TIFFNoSeek(TIFF *tif, uint32_t off)
Definition: tif_compress.c:120
TIFFCodec * TIFFGetConfiguredCODECs()
Definition: tif_compress.c:261
void TIFFUnRegisterCODEC(TIFFCodec *c)
Definition: tif_compress.c:232
void TIFFErrorExt(thandle_t fd, const char *module, const char *fmt,...)
Definition: tif_error.c:63
void TIFFErrorExtR(TIFF *tif, const char *module, const char *fmt,...)
Definition: tif_error.c:107
void _TIFFfreeExt(TIFF *tif, void *p)
Definition: tif_open.c:275
void * _TIFFreallocExt(TIFF *tif, void *p, tmsize_t s)
Definition: tif_open.c:235
void * _TIFFmallocExt(TIFF *tif, tmsize_t s)
Definition: tif_open.c:173
uint32_t _TIFFDefaultStripSize(TIFF *tif, uint32_t s)
Definition: tif_strip.c:223
void _TIFFDefaultTileSize(TIFF *tif, uint32_t *tw, uint32_t *th)
Definition: tif_tile.c:272
void _TIFFmemset(void *p, int v, tmsize_t c)
Definition: tif_unix.c:353
void _TIFFmemcpy(void *d, const void *s, tmsize_t c)
Definition: tif_unix.c:355
TIFF_SSIZE_T tmsize_t
Definition: tiffio.h:67
int(* TIFFInitMethod)(TIFF *, int)
Definition: tiffio.h:269
#define TIFF_NOREADRAW
Definition: tiffiop.h:135
#define TIFF_NOBITREV
Definition: tiffiop.h:125
static int init
Definition: wintirpc.c:33