svn-gvsig-desktop / trunk / libraries / libjni-ecwcompress / include / NCSECWCompressClient.h @ 12522
History | View | Annotate | Download (9.65 KB)
1 |
/**********************************************************
|
---|---|
2 |
** Copyright 1999 Earth Resource Mapping Pty Ltd.
|
3 |
** This document contains unpublished source code of
|
4 |
** Earth Resource Mapping Pty Ltd. This notice does
|
5 |
** not indicate any intention to publish the source
|
6 |
** code contained herein.
|
7 |
**
|
8 |
** FILE: NCSECWCompessClient.h
|
9 |
** CREATED: Thu 19/08/1999
|
10 |
** AUTHOR: Simon Cope
|
11 |
** PURPOSE: Public Interface library to compress ECW v2.0 image files
|
12 |
** EDITS:
|
13 |
** [01] sjc 08Dec1999 Updated comments
|
14 |
**
|
15 |
********************************************************/
|
16 |
|
17 |
/** @file NCSECWCompressClient.h */
|
18 |
#ifndef NCSECWCOMPRESSCLIENT_H
|
19 |
#define NCSECWCOMPRESSCLIENT_H
|
20 |
|
21 |
#ifndef NCSECWCLIENT_H
|
22 |
#include "NCSECWClient.h" |
23 |
#endif
|
24 |
|
25 |
#ifdef __cplusplus
|
26 |
extern "C" { |
27 |
#endif
|
28 |
|
29 |
#ifndef NCSTYPES_H
|
30 |
#include "NCSTypes.h" |
31 |
#endif
|
32 |
#ifndef NCSERRORS_H
|
33 |
#include "NCSErrors.h" |
34 |
#endif
|
35 |
|
36 |
#define ERSWAVE_VERSION 2 |
37 |
#define ERSWAVE_VERSION_STRING "2.0" /* should be in sync with the above */ |
38 |
|
39 |
/**
|
40 |
* @enum
|
41 |
* An enumerated type specifying the format of the compressed data. Currently greyscale, RGB
|
42 |
* and luminance-chrominance formats are supported. This will later need expanding to include
|
43 |
* multiband formats such as CMYK.
|
44 |
*/
|
45 |
typedef enum { |
46 |
/** The compressed data is unformatted */
|
47 |
COMPRESS_NONE = NCSCS_NONE, |
48 |
/** Greyscale format, single band */
|
49 |
COMPRESS_UINT8 = NCSCS_GREYSCALE, |
50 |
/** JPEG standard YUV digital format, three band */
|
51 |
COMPRESS_YUV = NCSCS_YUV, |
52 |
/** Multiband format */
|
53 |
COMPRESS_MULTI = NCSCS_MULTIBAND, |
54 |
/** RGB images (converted to COMPRESS_YUV internally) */
|
55 |
COMPRESS_RGB = NCSCS_sRGB |
56 |
} CompressFormat; |
57 |
|
58 |
/**
|
59 |
* @enum
|
60 |
* An enumerated type allowing the user to hint at an appropriate compression scheme. The
|
61 |
* value is a guideline for the SDK compression functions.
|
62 |
*/
|
63 |
typedef enum { |
64 |
/** No compression hint */
|
65 |
COMPRESS_HINT_NONE = 0,
|
66 |
/** Do the fastest compression possible */
|
67 |
COMPRESS_HINT_FAST = 1,
|
68 |
/** Try to achieve the maximum possible compression ratio */
|
69 |
COMPRESS_HINT_BEST = 2,
|
70 |
/** Optimise compression process for later Internet use of the compressed file */
|
71 |
COMPRESS_HINT_INTERNET = 3
|
72 |
} CompressHint; |
73 |
|
74 |
/** @def Maximum length of a datum definition string */
|
75 |
#define ECW_MAX_DATUM_LEN 16 |
76 |
/** @def Maximum length of a projection definition string */
|
77 |
#ifndef ECW_MAX_PROJECTION_LEN
|
78 |
#define ECW_MAX_PROJECTION_LEN 16 |
79 |
#endif
|
80 |
|
81 |
/** @def X dimension of the default (and preferred) block size */
|
82 |
#define X_BLOCK_SIZE 64 |
83 |
/** @def Y dimension of the default (and preferred) block size */
|
84 |
#define Y_BLOCK_SIZE 64 |
85 |
|
86 |
/**
|
87 |
* @struct
|
88 |
* This structure contains information used when compressing raster data
|
89 |
* to an output ECW file. Most of the values have sensible defaults so users
|
90 |
* need only customise those of significance to their application. Certain
|
91 |
* of these values must always be specified in the client code, namely
|
92 |
* fTargetCompression, nInOutSizeX, nInOutSizeY, nInputBands, and pReadCallback.
|
93 |
*
|
94 |
* Once compression is complete certain statistics are calculated and added
|
95 |
* to this structure. These include the time taken, the output file size in
|
96 |
* bytes, the actual compression ratio achieved, and the MB/s throughput of the
|
97 |
* process.
|
98 |
*/
|
99 |
typedef struct NCSEcwCompressClient { |
100 |
/*
|
101 |
** These fields are populated by the compression client
|
102 |
*/
|
103 |
/** If this is specified but the output file is not, a default output filename will be created.
|
104 |
* Otherwise this field is unused.
|
105 |
*/
|
106 |
char szInputFilename[MAX_PATH];
|
107 |
/** An output filename must be specified if no input filename is specified */
|
108 |
char szOutputFilename[MAX_PATH];
|
109 |
/** The target compression ratio - must be specified */
|
110 |
IEEE4 fTargetCompression; |
111 |
/** The compression format to use. See the related enumerated type definition */
|
112 |
CompressFormat eCompressFormat; |
113 |
/** A guideline for an appropriate compression scheme to use. This currently has
|
114 |
* no effect, though the default value is COMPRESS_HINT_INTERNET. Reserved for
|
115 |
* future use, see the related enumerated type definition
|
116 |
*/
|
117 |
CompressHint eCompressHint; |
118 |
/** X dimension of the block size to use. Can be 64, 128, 256, 512, 1024, or 2048.
|
119 |
* The default for these is set to 64 which produces preferred performance over the internet.
|
120 |
*/
|
121 |
UINT32 nBlockSizeX; |
122 |
/** Y dimension of the block size to use. Can be 64, 128, 256, 512, 1024, or 2048.
|
123 |
* The default for these is set to 64 which produces preferred performance over the internet.
|
124 |
*/
|
125 |
UINT32 nBlockSizeY; /* Y Block size (64, 128, 256, 512) */
|
126 |
/** Number of cells of input data and compressed file in the X direction - must be specified */
|
127 |
UINT32 nInOutSizeX; |
128 |
/** Number of cells of input data and compressed file in the Y direction - must be specified */
|
129 |
UINT32 nInOutSizeY; |
130 |
/** Number of bands in the input data - must be specified */
|
131 |
UINT32 nInputBands; |
132 |
/** Number of bands in the output file - should not generally be specified */
|
133 |
UINT32 nOutputBands; |
134 |
/** Size of the input file in bytes - should not be specified, it will be determined automatically. */
|
135 |
UINT64 nInputSize; |
136 |
/** Optional field specifying the cell size in the X direction in eCellSizeUnits */
|
137 |
IEEE8 fCellIncrementX; |
138 |
/** Optional field specifying the cell size in the Y direction in eCellSizeUnits */
|
139 |
IEEE8 fCellIncrementY; |
140 |
/** Optional field specifying the X world origin of the input data in eCellSizeUnits */
|
141 |
IEEE8 fOriginX; |
142 |
/** Optional field specifying the Y world origin of the input data in eCellSizeUnits */
|
143 |
IEEE8 fOriginY; |
144 |
/** Optional field specifying the units in which world cell sizes are specified, e.g. meters, feet */
|
145 |
CellSizeUnits eCellSizeUnits; |
146 |
/** ER Mapper GDT style datum string */
|
147 |
char szDatum[ECW_MAX_DATUM_LEN];
|
148 |
/** ER Mapper GDT style projection string */
|
149 |
char szProjection[ECW_MAX_PROJECTION_LEN];
|
150 |
/** Callback function used to obtain lines of band data from the input data - must be specified */
|
151 |
BOOLEAN (*pReadCallback) (struct NCSEcwCompressClient *pClient,
|
152 |
UINT32 nNextLine, |
153 |
IEEE4 **ppInputArray); |
154 |
/** Optional status callback function to track the progress of the compression process */
|
155 |
void (*pStatusCallback) (struct NCSEcwCompressClient *pClient, |
156 |
UINT32 nCurrentLine); |
157 |
/** Optional cancel callback function which can be used to cancel a compression process */
|
158 |
BOOLEAN (*pCancelCallback) (struct NCSEcwCompressClient *pClient);
|
159 |
/** (void *) Pointer to any private data you need to access in the three callback functions */
|
160 |
void *pClientData;
|
161 |
/** Created by NCSEcwCompressOpen() */
|
162 |
struct EcwCompressionTask *pTask;
|
163 |
/*
|
164 |
** The remaining fields are populated by NCSEcwCompressClose()
|
165 |
*/
|
166 |
/** Actual compression rate achieved - ratio of input data size to output file size */
|
167 |
IEEE4 fActualCompression; |
168 |
/** Time taken to perform the complete compression, in seconds */
|
169 |
IEEE8 fCompressionSeconds; |
170 |
/** MB/s throughput during the compression process */
|
171 |
IEEE8 fCompressionMBSec; |
172 |
/** Total size of the output file in bytes */
|
173 |
UINT64 nOutputSize; |
174 |
} NCSEcwCompressClient; |
175 |
|
176 |
/**
|
177 |
* Allocate a new CompressionClient structure and fill in defaults
|
178 |
*
|
179 |
* @return A pointer to memory allocated to an NCSEcwCompressClient structure
|
180 |
*/
|
181 |
NCSEcwCompressClient * NCS_CALL NCSEcwCompressAllocClient(void);
|
182 |
/**
|
183 |
* Having set compression parameters, initialise the compression process
|
184 |
*
|
185 |
* @param[in,out] pInfo The NCSEcwCompressClient structure containing the compression parameters
|
186 |
* @param[in] bCalculateSizesOnly Which output statistics to calculate
|
187 |
* @return NCSError value, NCS_SUCCESS or any applicable error code
|
188 |
*/
|
189 |
NCSError NCS_CALL NCSEcwCompressOpen(NCSEcwCompressClient *pInfo, BOOLEAN bCalculateSizesOnly); |
190 |
/**
|
191 |
* Start the compression process based on these parameters
|
192 |
*
|
193 |
* @param[in,out] pInfo The NCSEcwCompressClient structure for this compression process
|
194 |
* @return NCSError value, NCS_SUCCESS or any applicable error code
|
195 |
*/
|
196 |
NCSError NCS_CALL NCSEcwCompress(NCSEcwCompressClient *pInfo); |
197 |
/**
|
198 |
* Having completed compression, close, calculate output statistics, and clean up
|
199 |
*
|
200 |
* @param[in,out] pInfo The NCSEcwCompressClient structure for this compression process
|
201 |
* @return NCSError value, NCS_SUCCESS or any applicable error code
|
202 |
*/
|
203 |
NCSError NCS_CALL NCSEcwCompressClose(NCSEcwCompressClient *pInfo); |
204 |
/**
|
205 |
* Free the memory allocated to the NCSEcwCompressClient structure
|
206 |
*
|
207 |
* @param[in,out] pInfo The structure to free
|
208 |
* @return NCSError value, NCS_SUCCESS or any applicable error code
|
209 |
*/
|
210 |
NCSError NCS_CALL NCSEcwCompressFreeClient(NCSEcwCompressClient *pInfo); |
211 |
|
212 |
typedef struct { |
213 |
UINT8 nVersion; // ECW file version == ERSWAVE_VERSION
|
214 |
CellSizeUnits eCellSizeUnits; // Units used for pixel size
|
215 |
IEEE8 fCellIncrementX; // Increment in CellSizeUnits in X direction. May be negative. Will never be zero
|
216 |
IEEE8 fCellIncrementY; // Increment in CellSizeUnits in Y direction. May be negative. Will never be zero
|
217 |
IEEE8 fOriginX; // World X origin for top-left corner of top-left cell, in CellSizeUnits
|
218 |
IEEE8 fOriginY; // World Y origin for top-left corner of top-left cell, in CellSizeUnits
|
219 |
char *szDatum; // ER Mapper style Datum name string, e.g. "RAW" or "NAD27". Will never be NULL |
220 |
char *szProjection; // ER Mapper style Projection name string, e.g. "RAW" or "WGS84". Will never be NULL |
221 |
|
222 |
BOOLEAN bCompressedOffsetTable; // Is the block table compressed
|
223 |
} NCSEcwEditInfo; |
224 |
|
225 |
NCSError NCS_CALL NCSEcwEditReadInfo(char *pFilename, NCSEcwEditInfo **ppInfo);
|
226 |
NCSError NCS_CALL NCSEcwEditWriteInfo(char *pFilename, NCSEcwEditInfo *pInfo, void (*pProgressFunc)(UINT64 nTotal, UINT64 nWritten, void *pClientData), BOOLEAN (*pCancelFunc)(void *pClientData), void *pClientData); |
227 |
NCSError NCS_CALL NCSEcwEditFreeInfo(NCSEcwEditInfo *pInfo); |
228 |
|
229 |
#ifdef __cplusplus
|
230 |
} |
231 |
#endif
|
232 |
|
233 |
#endif /* NCSECWCOMPRESSCLIENT_H */ |