Subversion Repositories Kolibri OS

Rev

Rev 6733 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8341 dunkaist 1
;
2
; Options
3
;
4
 
5
PNG_RELEASE_BUILD equ 1
6
 
7
;---
8
; Various modes of operation.  Note that after an init, mode is set to
9
; zero automatically when the structure is created.  Three of these
10
; are defined in png.inc because they need to be visible to applications
11
; that call png_set_unknown_chunk().
12
 
13
;PNG_HAVE_IHDR            0x01 (defined in png.inc)
14
;PNG_HAVE_PLTE            0x02 (defined in png.inc)
15
PNG_HAVE_IDAT              equ 0x04
16
;PNG_AFTER_IDAT           0x08 (defined in png.inc)
17
PNG_HAVE_IEND              equ 0x10
18
	;0x20 (unused)
19
	;0x40 (unused)
20
	;0x80 (unused)
21
PNG_HAVE_CHUNK_HEADER     equ 0x100
22
PNG_WROTE_tIME            equ 0x200
23
PNG_WROTE_INFO_BEFORE_PLTE equ 0x400
24
PNG_BACKGROUND_IS_GRAY    equ 0x800
25
PNG_HAVE_PNG_SIGNATURE   equ 0x1000
26
PNG_HAVE_CHUNK_AFTER_IDAT equ 0x2000 ;Have another chunk after IDAT
27
	;0x4000 (unused)
28
PNG_IS_READ_STRUCT       equ 0x8000 ;Else is a write struct
29
 
30
; Flags for the transformations the PNG library does on the image data
31
PNG_BGR                equ 0x0001
32
PNG_INTERLACE          equ 0x0002
33
PNG_PACK               equ 0x0004
34
PNG_SHIFT              equ 0x0008
35
PNG_SWAP_BYTES         equ 0x0010
36
PNG_INVERT_MONO        equ 0x0020
37
PNG_QUANTIZE           equ 0x0040
38
PNG_COMPOSE            equ 0x0080 ;Was PNG_BACKGROUND
39
PNG_BACKGROUND_EXPAND  equ 0x0100
40
PNG_EXPAND_16          equ 0x0200 ;Added to libpng 1.5.2
41
PNG_16_TO_8            equ 0x0400 ;Becomes 'chop' in 1.5.4
42
PNG_RGBA               equ 0x0800
43
PNG_EXPAND             equ 0x1000
44
PNG_GAMMA              equ 0x2000
45
PNG_GRAY_TO_RGB        equ 0x4000
46
PNG_FILLER             equ 0x8000
47
PNG_PACKSWAP          equ 0x10000
48
PNG_SWAP_ALPHA        equ 0x20000
49
PNG_STRIP_ALPHA       equ 0x40000
50
PNG_INVERT_ALPHA      equ 0x80000
51
PNG_USER_TRANSFORM   equ 0x100000
52
PNG_RGB_TO_GRAY_ERR  equ 0x200000
53
PNG_RGB_TO_GRAY_WARN equ 0x400000
54
PNG_RGB_TO_GRAY      equ 0x600000 ;two bits, RGB_TO_GRAY_ERR|WARN
55
PNG_ENCODE_ALPHA     equ 0x800000 ;Added to libpng-1.5.4
56
PNG_ADD_ALPHA       equ 0x1000000 ;Added to libpng-1.2.7
57
PNG_EXPAND_tRNS     equ 0x2000000 ;Added to libpng-1.2.9
58
PNG_SCALE_16_TO_8   equ 0x4000000 ;Added to libpng-1.5.4
59
	;0x8000000 unused
60
	;0x10000000 unused
61
	;0x20000000 unused
62
	;0x40000000 unused
63
; Flags for png_create_struct
64
PNG_STRUCT_PNG  equ 0x0001
65
PNG_STRUCT_INFO equ 0x0002
66
 
67
; Flags for the png_ptr->flags rather than declaring a byte for each one
68
PNG_FLAG_ZLIB_CUSTOM_STRATEGY    equ 0x0001
69
PNG_FLAG_ZSTREAM_INITIALIZED     equ 0x0002 ;Added to libpng-1.6.0
70
	;0x0004    unused
71
PNG_FLAG_ZSTREAM_ENDED           equ 0x0008 ;Added to libpng-1.6.0
72
	;0x0010    unused
73
	;0x0020    unused
74
PNG_FLAG_ROW_INIT                equ 0x0040
75
PNG_FLAG_FILLER_AFTER            equ 0x0080
76
PNG_FLAG_CRC_ANCILLARY_USE       equ 0x0100
77
PNG_FLAG_CRC_ANCILLARY_NOWARN    equ 0x0200
78
PNG_FLAG_CRC_CRITICAL_USE        equ 0x0400
79
PNG_FLAG_CRC_CRITICAL_IGNORE     equ 0x0800
80
PNG_FLAG_ASSUME_sRGB             equ 0x1000 ;Added to libpng-1.5.4
81
PNG_FLAG_OPTIMIZE_ALPHA          equ 0x2000 ;Added to libpng-1.5.4
82
PNG_FLAG_DETECT_UNINITIALIZED    equ 0x4000 ;Added to libpng-1.5.4
83
;PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000
84
;PNG_FLAG_KEEP_UNSAFE_CHUNKS      0x10000
85
PNG_FLAG_LIBRARY_MISMATCH       equ 0x20000
86
PNG_FLAG_STRIP_ERROR_NUMBERS    equ 0x40000
87
PNG_FLAG_STRIP_ERROR_TEXT       equ 0x80000
88
PNG_FLAG_BENIGN_ERRORS_WARN    equ 0x100000 ;Added to libpng-1.4.0
89
PNG_FLAG_APP_WARNINGS_WARN     equ 0x200000 ;Added to libpng-1.6.0
90
PNG_FLAG_APP_ERRORS_WARN       equ 0x400000 ;Added to libpng-1.6.0
91
 
92
; Gamma values (new at libpng-1.5.4):
93
PNG_GAMMA_MAC_OLD equ 151724  ;Assume '1.8' is really 2.2/1.45!
94
PNG_GAMMA_MAC_INVERSE equ 65909
95
PNG_GAMMA_sRGB_INVERSE equ 45455
96
 
97
macro PNG_ROWBYTES pixel_bits, width
98
{
99
local .end0
100
if pixel_bits eq eax
101
else
102
	mov eax,pixel_bits
103
end if
104
	cmp eax,8
105
	jge .end0
106
		add eax,7
107
	.end0:
108
	shr eax,3
109
	imul eax,width
110
}
111
 
112
; In 1.7.0 the definitions will be made public in png.inc to avoid having to
113
; duplicate the same definitions in application code.
114
 
115
png_IDAT equ 'IDAT'
116
png_IEND equ 'IEND'
117
png_IHDR equ 'IHDR'
118
png_PLTE equ 'PLTE'
119
png_bKGD equ 'bKGD'
120
png_cHRM equ 'cHRM'
121
png_fRAc equ 'fRAc' ;registered, not defined
122
png_gAMA equ 'gAMA'
123
png_gIFg equ 'gIFg'
124
png_gIFt equ 'gIFt' ;deprecated
125
png_gIFx equ 'gIFx'
126
png_hIST equ 'hIST'
127
png_iCCP equ 'iCCP'
128
png_iTXt equ 'iTXt'
129
png_oFFs equ 'oFFs'
130
png_pCAL equ 'pCAL'
131
png_pHYs equ 'pHYs'
132
png_sBIT equ 'sBIT'
133
png_sCAL equ 'sCAL'
134
png_sPLT equ 'sPLT'
135
png_sRGB equ 'sRGB'
136
png_sTER equ 'sTER'
137
png_tEXt equ 'tEXt'
138
png_tIME equ 'tIME'
139
png_tRNS equ 'tRNS'
140
png_zTXt equ 'zTXt'
141
 
142
;Test on flag values as defined in the spec (section 5.4):
143
macro PNG_CHUNK_ANCILLARY c
144
{
145
	mov eax,c
146
	shr eax,29
147
	and eax,1
148
}
149
macro PNG_CHUNK_CRITICAL c
150
{
151
	PNG_CHUNK_ANCILLARY c
152
	xor eax,1
153
}
154
macro PNG_CHUNK_PRIVATE c
155
{
156
	mov eax,c
157
	shr eax,21
158
	and eax,1
159
}
160
macro PNG_CHUNK_RESERVED c
161
{
162
	mov eax,c
163
	shr eax,13
164
	and eax,1
165
}
166
macro PNG_CHUNK_SAFE_TO_COPY c
167
{
168
	mov eax,c
169
	shr eax,5
170
	and eax,1
171
}
172
 
173
PNG_FLAG_CRC_ANCILLARY_MASK equ (PNG_FLAG_CRC_ANCILLARY_USE or PNG_FLAG_CRC_ANCILLARY_NOWARN)
174
PNG_FLAG_CRC_CRITICAL_MASK  equ (PNG_FLAG_CRC_CRITICAL_USE or PNG_FLAG_CRC_CRITICAL_IGNORE)
175
PNG_FLAG_CRC_MASK           equ (PNG_FLAG_CRC_ANCILLARY_MASK or PNG_FLAG_CRC_CRITICAL_MASK)
176
 
177
macro PNG_sRGB_FROM_LINEAR linear
178
{
179
	mov eax,linear
180
	shr eax,15
181
	shl eax,1
182
	add eax,png_sRGB_base
183
	movzx eax,word[eax]
184
push ebx ecx
185
	mov ebx,linear
186
	shr ebx,15
187
	add ebx,png_sRGB_delta
188
	mov ecx,linear
189
	and ecx,0x7fff
190
	imul ecx,ebx
191
	shr ecx,12
192
	add eax,ecx
193
pop ecx ebx
194
	shr eax,8
195
	;;;and eax,0xff
196
}
197
; Given a value 'linear' in the range 0..255*65535 calculate the 8-bit sRGB
198
; encoded value with maximum error 0.646365.  Note that the input is not a
199
; 16-bit value; it has been multiplied by 255!
200
 
201
PNG_UNEXPECTED_ZLIB_RETURN equ (-7)
202
 
203
;...
204
 
205
; Suggested size for a number buffer (enough for 64 bits and a sign!)
206
PNG_NUMBER_BUFFER_SIZE equ 24
207
 
208
; These are the integer formats currently supported, the name is formed from
209
; the standard printf(3) format string.
210
 
211
PNG_NUMBER_FORMAT_u    equ 1 ;chose unsigned API!
212
PNG_NUMBER_FORMAT_02u  equ 2
213
PNG_NUMBER_FORMAT_d    equ 1 ;chose signed API!
214
PNG_NUMBER_FORMAT_02d  equ 2
215
PNG_NUMBER_FORMAT_x    equ 3
216
PNG_NUMBER_FORMAT_02x  equ 4
217
PNG_NUMBER_FORMAT_fixed equ 5 ;choose the signed API
218
 
219
; New defines and members adding in libpng-1.5.4
220
PNG_WARNING_PARAMETER_SIZE equ 32
221
PNG_WARNING_PARAMETER_COUNT equ 8 ;Maximum 9; see pngerror.asm
222
 
223
PNG_CHUNK_WARNING     equ 0 ;never an error
224
PNG_CHUNK_WRITE_ERROR equ 1 ;an error only on write
225
PNG_CHUNK_ERROR       equ 2 ;always an error
226
 
227
; ASCII to FP interfaces, currently only implemented if sCAL
228
; support is required.
229
 
230
; MAX_DIGITS is actually the maximum number of characters in an sCAL
231
; width or height, derived from the precision (number of significant
232
; digits - a build time settable option) and assumptions about the
233
; maximum ridiculous exponent.
234
 
235
PNG_sCAL_MAX_DIGITS equ PNG_sCAL_PRECISION+1+1+10 ;. E exponent
236
 
237
; An internal API to validate the format of a floating point number.
238
; The result is the index of the next character.  If the number is
239
; not valid it will be the index of a character in the supposed number.
240
 
241
; The format of a number is defined in the PNG extensions specification
242
; and this API is strictly conformant to that spec, not anyone elses!
243
 
244
; The format as a regular expression is:
245
 
246
; [+-]?[0-9]+.?([Ee][+-]?[0-9]+)?
247
 
248
; or:
249
 
250
; [+-]?.[0-9]+(.[0-9]+)?([Ee][+-]?[0-9]+)?
251
 
252
; The complexity is that either integer or fraction must be present and the
253
; fraction is permitted to have no digits only if the integer is present.
254
 
255
; NOTE: The dangling E problem.
256
;   There is a PNG valid floating point number in the following:
257
 
258
;       PNG floating point numbers are not greedy.
259
 
260
;   Working this out requires *TWO* character lookahead (because of the
261
;   sign), the parser does not do this - it will fail at the 'r' - this
262
;   doesn't matter for PNG sCAL chunk values, but it requires more care
263
;   if the value were ever to be embedded in something more complex.  Use
264
;   ANSI-C strtod if you need the lookahead.
265
 
266
; State table for the parser.
267
PNG_FP_INTEGER   equ 0 ;before or in integer
268
PNG_FP_FRACTION  equ 1 ;before or in fraction
269
PNG_FP_EXPONENT  equ 2 ;before or in exponent
270
PNG_FP_STATE     equ 3 ;mask for the above
271
PNG_FP_SAW_SIGN  equ 4 ;Saw +/- in current state
272
PNG_FP_SAW_DIGIT equ 8 ;Saw a digit in current state
273
PNG_FP_SAW_DOT  equ 16 ;Saw a dot in current state
274
PNG_FP_SAW_E    equ 32 ;Saw an E (or e) in current state
275
PNG_FP_SAW_ANY  equ 60 ;Saw any of the above 4
276
 
277
; These three values don't affect the parser.  They are set but not used.
278
 
279
PNG_FP_WAS_VALID equ 64 ;Preceding substring is a valid fp number
280
PNG_FP_NEGATIVE equ 128 ;A negative number, including "-0"
281
PNG_FP_NONZERO  equ 256 ;A non-zero value
282
PNG_FP_STICKY   equ 448 ;The above three flags
283
 
284
; This is available for the caller to store in 'state' if required.  Do not
285
; call the parser after setting it (the parser sometimes clears it.)
286
 
287
PNG_FP_INVALID equ 512 ;Available for callers as a distinct value
288
 
289
; Result codes for the parser (boolean - true meants ok, false means
290
; not ok yet.)
291
 
292
PNG_FP_MAYBE     equ 0 ;The number may be valid in the future
293
PNG_FP_OK        equ 1 ;The number is valid
294
 
295
; The internal structure that png_image::opaque points to.
296
struct png_control
297
	png_ptr dd ? ;png_structp
298
	info_ptr dd ? ;png_infop
299
	error_buf dd ? ;voidp ;Always a jmp_buf at present.
300
 
301
	memory dd ? ;bytep ;Memory buffer.
302
	size dd ? ;png_size_t ;Size of the memory buffer.
303
 
304
	for_write dd ? ;uint ;:1;Otherwise it is a read structure
305
	owned_file dd ? ;uint ;:1;We own the file in io_ptr
306
ends