iipsrv 1.3
iipsrv is an advanced high-performance feature-rich image server for web-based streamed viewing and zooming of ultra high-resolution images
Task.h
1/*
2 IIP Session & Generic Task Classes
3
4 Copyright (C) 2006-2025 Ruven Pillay
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software Foundation,
18 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
19*/
20
21#ifndef _TASK_H
22#define _TASK_H
23
24
25#include <string>
26
27#include "IIPImage.h"
28#include "IIPResponse.h"
29#include "View.h"
30#include "TileManager.h"
31#include "Timer.h"
32#include "Writer.h"
33#include "Cache.h"
34#include "Watermark.h"
35#include "Transforms.h"
36#include "Logger.h"
37
38
39
40#ifdef HAVE_EXT_POOL_ALLOCATOR
41#include <ext/pool_allocator.h>
42typedef HASHMAP < std::string, IIPImage,
43 __gnu_cxx::hash< const std::string >,
44 std::equal_to< const std::string >,
45 __gnu_cxx::__pool_alloc< std::pair<const std::string,IIPImage> >
46 > imageCacheMapType;
47#else
48typedef HASHMAP <std::string,IIPImage> imageCacheMapType;
49#endif
50
51
52
53
55struct Session {
56 IIPImage **image;
57 JPEGCompressor* jpeg;
58 TIFFCompressor* tiff;
59#ifdef HAVE_PNG
60 PNGCompressor* png;
61#endif
62#ifdef HAVE_WEBP
63 WebPCompressor* webp;
64#endif
65#ifdef HAVE_AVIF
66 AVIFCompressor* avif;
67#endif
68 View* view;
69 IIPResponse* response;
70 Watermark* watermark;
71 Transform* processor;
72 int loglevel;
73 Logger* logfile;
74 std::map <const std::string, std::string> headers;
75 std::map <const std::string, unsigned int> codecOptions;
76
77 imageCacheMapType *imageCache;
78 Cache* tileCache;
79
80#ifdef DEBUG
81 FileWriter* out;
82#else
83 FCGIWriter* out;
84#endif
85
86};
87
88
89
90
92class Task {
93
94 protected:
95
98
101
103 std::string argument;
104
105
106 public:
107
109 virtual ~Task() {};
110
112 virtual void run( Session* session, const std::string& argument ) {};
113
115
116 static Task* factory( const std::string& type );
117
119 void checkImage();
120
121};
122
123
124
125
127class OBJ : public Task {
128
129 public:
130
131 void run( Session* session, const std::string& argument );
132
133 void iip();
134 void iip_server();
135 void max_size();
136 void resolution_number();
137 void colorspace( std::string arg );
138 void tile_size();
139 void bits_per_channel();
140 void horizontal_views();
141 void vertical_views();
142 void min_max_values();
143 void resolutions();
144 void dpi();
145 void metadata( std::string field );
146 void stack();
147
148};
149
150
152class QLT : public Task {
153 public:
154 void run( Session* session, const std::string& argument );
155};
156
157
159class SDS : public Task {
160 public:
161 void run( Session* session, const std::string& argument );
162};
163
164
166class MINMAX : public Task {
167 public:
168 void run( Session* session, const std::string& argument );
169};
170
171
173class CNT : public Task {
174 public:
175 void run( Session* session, const std::string& argument );
176};
177
178
180class GAM : public Task {
181 public:
182 void run( Session* session, const std::string& argument );
183};
184
185
187class WID : public Task {
188 public:
189 void run( Session* session, const std::string& argument );
190};
191
192
194class HEI : public Task {
195 public:
196 void run( Session* session, const std::string& argument );
197};
198
199
201class RGN : public Task {
202 public:
203 void run( Session* session, const std::string& argument );
204};
205
206
208class ROT : public Task {
209 public:
210 void run( Session* session, const std::string& argument );
211};
212
213
215class FIF : public Task {
216 public:
219 static std::string filesystem_prefix;
220 static std::string filesystem_suffix;
221 static std::string filename_pattern;
222 void run( Session* session, const std::string& argument );
223};
224
225
227class JTL : public Task {
228 public:
229 void run( Session* session, const std::string& argument );
230
232
236 void send( Session* session, int resolution, int tile );
237};
238
239
241class PTL : public JTL {
242 public:
243 void run( Session* session, const std::string& argument ){
244 // Set our encoding format and call JTL::run
245 session->view->output_format = ImageEncoding::PNG;
247 };
248};
249
250
252class WTL : public JTL {
253public:
254 void run( Session* session, const std::string& argument ){
255 // Set our encoding format and call JTL::run
256 session->view->output_format = ImageEncoding::WEBP;
258 };
259};
260
261
263class ATL : public JTL {
264public:
265 void run( Session* session, const std::string& argument ){
266 // Set our encoding format and call JTL::run
267 session->view->output_format = ImageEncoding::AVIF;
269 };
270};
271
272
274class TTL : public JTL {
275public:
276 void run( Session* session, const std::string& argument ){
277 // Set our encoding format and call JTL::run
278 session->view->output_format = ImageEncoding::TIFF;
280 };
281};
282
283
285class JTLS : public Task {
286 public:
287 void run( Session* session, const std::string& argument );
288};
289
290
292class TIL : public Task {
293 public:
294 void run( Session* session, const std::string& argument );
295};
296
297
299class CVT : public Task {
300 public:
301 void run( Session* session, const std::string& argument );
302
304
305 void send( Session* session );
306};
307
308
310class ICC : public Task {
311 public:
312 void run( Session* session, const std::string& argument );
313};
314
315
317class SHD : public Task {
318 public:
319 void run( Session* session, const std::string& argument );
320};
321
322
324class CMP : public Task {
325 public:
326 void run( Session* session, const std::string& argument );
327};
328
329
331class INV : public Task {
332 public:
333 void run( Session* session, const std::string& argument );
334};
335
336
338class Zoomify : public Task {
339 public:
340 void run( Session* session, const std::string& argument );
341};
342
343
345class SPECTRA : public Task {
346 public:
347 void run( Session* session, const std::string& argument );
348};
349
350
352class PFL : public Task {
353 public:
354 void run( Session* session, const std::string& argument );
355};
356
357
359class LYR : public Task {
360 public:
361 void run( Session* session, const std::string& argument );
362};
363
364
366class DeepZoom : public Task {
367 public:
368 void run( Session* session, const std::string& argument );
369};
370
371
373class IIIF : public Task {
374 public:
375
377 static unsigned int version;
378
380 static std::string delimiter;
381
383 static std::string extra_info;
384
386 static bool extensions;
387
388 void run( Session* session, const std::string& argument );
389};
390
391
393class CTW : public Task {
394 public:
395 void run( Session* session, const std::string& argument );
396};
397
398
400class COL : public Task {
401 public:
402 void run( Session* session, const std::string& argument );
403};
404
405
407class CNV : public Task {
408 public:
409 void run( Session* session, const std::string& argument );
410};
411
412
413#endif
AVIF Tile Command.
Definition Task.h:263
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.h:265
Wrapper class to AVIF library: Handles 8 bit and alpha channels.
Definition AVIFCompressor.h:33
Colormap Command.
Definition Task.h:324
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:484
Contrast Command.
Definition Task.h:173
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:230
CNV Convolution Filter Command.
Definition Task.h:407
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:617
Color Conversion Command.
Definition Task.h:400
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:599
Color Twist Command.
Definition Task.h:393
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:538
CVT Region Export Command.
Definition Task.h:299
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:278
void send(Session *session)
Send out our requested region.
Definition CVT.cc:33
Cache to store raw tile data.
Definition Cache.h:90
DeepZoom Request Command.
Definition Task.h:366
void run(Session *session, const std::string &argument)
Main public function.
Definition DeepZoom.cc:46
FCGI Writer Class.
Definition Writer.h:70
FIF Command.
Definition Task.h:215
static std::string filesystem_prefix
File system prefix.
Definition Task.h:219
void run(Session *session, const std::string &argument)
Main public function.
Definition FIF.cc:48
static std::string filesystem_suffix
File system suffix.
Definition Task.h:220
static std::string filename_pattern
File name pattern for image sequences.
Definition Task.h:221
static long max_metadata_cache_size
Store some necessary environment variables.
Definition Task.h:218
File Writer Class.
Definition Writer.h:150
Gamma Command.
Definition Task.h:180
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:256
CVT Height Command.
Definition Task.h:194
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:331
ICC Profile Command.
Definition Task.h:310
void run(Session *session, const std::string &argument)
Main public function.
Definition ICC.cc:76
IIIF Command.
Definition Task.h:373
static unsigned int version
Default IIIF version.
Definition Task.h:377
static std::string extra_info
Extra fields for info.json.
Definition Task.h:383
static std::string delimiter
Delimiter for multi-page or image stacks.
Definition Task.h:380
void run(Session *session, const std::string &argument)
Main public function.
Definition IIIF.cc:63
static bool extensions
Whether we allow IIPImage-specific IIIF extensions.
Definition Task.h:386
Base class to handle the input image sources.
Definition IIPImage.h:69
Class to handle non-image IIP responses including errors.
Definition IIPResponse.h:40
Inversion Command.
Definition Task.h:331
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:508
Wrapper class to the IJG JPEG library.
Definition JPEGCompressor.h:59
JPEG Tile Sequence Command.
Definition Task.h:285
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:395
JPEG Tile Export Command.
Definition Task.h:227
void send(Session *session, int resolution, int tile)
Send out a single tile.
Definition JTL.cc:30
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:433
Quality Layers Command.
Definition Task.h:359
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:515
Logger class - handles ofstreams and syslog.
Definition Logger.h:79
MINMAX Command.
Definition Task.h:166
void run(Session *session, const std::string &argument)
Definition Task.cc:175
OBJ commands.
Definition Task.h:127
void run(Session *session, const std::string &argument)
Main public function.
Definition OBJ.cc:31
SPECTRA Request Command.
Definition Task.h:352
void run(Session *session, const std::string &argument)
Return the profile for a line in JSON format.
Definition PFL.cc:30
Wrapper class to PNG library: Handles 8 and 16 bit PNG as well as alpha transparency.
Definition PNGCompressor.h:57
PNG Tile Command.
Definition Task.h:241
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.h:243
JPEG Quality Command.
Definition Task.h:152
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:94
CVT Region Command.
Definition Task.h:201
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:343
ROT Rotation Command.
Definition Task.h:208
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:377
SDS Command.
Definition Task.h:159
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:150
Shading Command.
Definition Task.h:317
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:450
SPECTRA Request Command.
Definition Task.h:345
void run(Session *session, const std::string &argument)
Return the spectral reflectance for a particular point in XML format.
Definition SPECTRA.cc:29
TIFF encoder class.
Definition TIFFCompressor.h:45
Tile Command.
Definition Task.h:292
void run(Session *session, const std::string &argument)
Main public function.
Definition TIL.cc:28
TIFF Tile Command.
Definition Task.h:274
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.h:276
Generic class to encapsulate various commands.
Definition Task.h:92
std::string argument
Argument supplied to the task.
Definition Task.h:103
static Task * factory(const std::string &type)
Factory function.
Definition Task.cc:34
virtual ~Task()
Virtual destructor.
Definition Task.h:109
Session * session
Pointer to our session data.
Definition Task.h:100
Timer command_timer
Timer for each task.
Definition Task.h:97
void checkImage()
Check image.
Definition Task.cc:85
virtual void run(Session *session, const std::string &argument)
Main public function.
Definition Task.h:112
Simple Timer class to allow us to time our responses.
Definition Timer.h:40
Class to intelligently handle Image Transforms.
Definition View.h:36
ImageEncoding output_format
Requested output format.
Definition View.h:80
CVT Width Command.
Definition Task.h:187
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.cc:319
WebP Tile Command.
Definition Task.h:252
void run(Session *session, const std::string &argument)
Main public function.
Definition Task.h:254
Watermark class.
Definition Watermark.h:41
Wrapper class to WebP library: Handles 8 and 16 bit PNG as well as alpha transparency.
Definition WebPCompressor.h:34
Zoomify Request Command.
Definition Task.h:338
void run(Session *session, const std::string &argument)
Main public function.
Definition Zoomify.cc:38
Structure to hold our session data.
Definition Task.h:55
Image Processing Transforms.
Definition Transforms.h:40