@@ -17,6 +17,17 @@ const idLibSndFile = :LibSndFile => UUID("b13ce0c6-77b0-50c6-a2db-140568b8d1a5")
17
17
const idJpegTurbo = :JpegTurbo => UUID (" b835a17e-a41a-41e7-81f0-2f016b05efe0" )
18
18
const idNPZ = :NPZ => UUID (" 15e1cf62-19b3-5cfa-8e77-841668bca605" )
19
19
20
+ # Cf. https://developers.google.com/speed/webp/docs/riff_container#riff_file_format, and https://learn.microsoft.com/en-us/windows/win32/xaudio2/resource-interchange-file-format--riff-#chunks
21
+ function detect_riff (io:: IO , expected_magic:: AbstractVector{UInt8} )
22
+ getlength (io) >= 12 || return false
23
+ buf = Vector {UInt8} (undef, 4 )
24
+ fourcc = read! (io, buf)
25
+ fourcc == b " RIFF" || return false
26
+ seek (io, 8 )
27
+ magic = read! (io, buf)
28
+ return magic == expected_magic
29
+ end
30
+
20
31
# ## Simple cases
21
32
22
33
# data formats
@@ -204,6 +215,13 @@ add_format(
204
215
" .pcx" ,
205
216
[idImageMagick]
206
217
)
218
+ add_format (
219
+ format " QOI" ,
220
+ " qoif" ,
221
+ " .qoi" ,
222
+ [:QOI => UUID (" 4b34888f-f399-49d4-9bb3-47ed5cae4e65" )],
223
+ [idImageIO]
224
+ )
207
225
add_format (
208
226
format " SVG" ,
209
227
(),
@@ -218,19 +236,18 @@ add_format(
218
236
[idImageIO],
219
237
[idImageMagick]
220
238
)
239
+ detect_webp (io) = detect_riff (io, b " WEBP" )
240
+ add_format (
241
+ format " WebP" ,
242
+ detect_webp,
243
+ " .webp" ,
244
+ [:WebP => UUID (" e3aaa7dc-3e4b-44e0-be63-ffb868ccd7c1" )],
245
+ [idImageIO]
246
+ )
221
247
222
248
# Video formats
223
249
224
- # AVI is a subtype of RIFF, as is WAV
225
- function detectavi (io)
226
- getlength (io) >= 12 || return false
227
- magic = read! (io, Vector {UInt8} (undef, 4 ))
228
- magic == b " RIFF" || return false
229
- seek (io, 8 )
230
- submagic = read! (io, Vector {UInt8} (undef, 4 ))
231
-
232
- submagic == b " AVI "
233
- end
250
+ detectavi (io) = detect_riff (io, b " AVI " )
234
251
add_format (format " AVI" , detectavi, " .avi" , [idImageMagick], [idVideoIO])
235
252
236
253
"""
@@ -278,15 +295,7 @@ add_format(format"OUT", "# Bundle file v0.3\n", ".out", [:BundlerIO => UUID("654
278
295
add_format (format " GSLIB" , (), [" .gslib" ," .sgems" ], [:GslibIO => UUID (" 4610876b-9b01-57c8-9ad9-06315f1a66a5" )])
279
296
280
297
# ## Audio formats
281
- function detectwav (io)
282
- getlength (io) >= 12 || return false
283
- buf = Vector {UInt8} (undef, 4 )
284
- read! (io, buf)
285
- buf == b " RIFF" || return false
286
- seek (io, 8 )
287
- read! (io, buf)
288
- buf == b " WAVE"
289
- end
298
+ detectwav (io) = detect_riff (io, b " WAVE" )
290
299
add_format (format " WAV" , detectwav, " .wav" , [:WAV => UUID (" 8149f6b0-98f6-5db9-b78f-408fbbb8ef88" )], [idLibSndFile])
291
300
add_format (format " FLAC" , " fLaC" , " .flac" , [:FLAC => UUID (" abae9e3b-a9a0-4778-b5c6-ca109b507d99" )], [idLibSndFile])
292
301
@@ -542,8 +551,6 @@ add_format(format"HTML", (), [".html", ".htm"], [MimeWriter, SAVE])
542
551
543
552
add_format (format " MIDI" , " MThd" , [" .mid" , " .midi" , " .MID" ], [:MIDI => UUID (" f57c4921-e30c-5f49-b073-3f2f2ada663e" )])
544
553
545
- add_format (format " QOI" , " qoif" , " .qoi" , [:QOI => UUID (" 4b34888f-f399-49d4-9bb3-47ed5cae4e65" )], [idImageIO])
546
-
547
554
# Bibliography files.
548
555
add_format (format " BIB" , (), [" .bib" ], [:Bibliography => UUID (" f1be7e48-bf82-45af-a471-ae754a193061" )])
549
556
0 commit comments