The LICENSE has changed from a single license (Apache 2) to a dual license (Apache 2 or MIT, at your option).
base.bitvec256
.base.optional_u63
.base.hasher_bitvec256
.base.hasher_u32
update!
and checksum_u32
methods.base.hasher_u64
.compact_retaining
and dst_history_retain_length
.example/toy-aux-image
.example/mzcat
.get_quirk(key: u32) u64
.std/crc64
.std/jpeg
.std/lzip
.std/lzma
.std/netpbm
.std/sha256
.std/vp8
.std/webp
.std/xxhash32
.std/xxhash64
.std/xz
.WUFFS_CONFIG__DST_PIXEL_FORMAT__ENABLE_ALLOWLIST
.wuffs_base__status__is_truncated_input_error
.lzw.set_literal_width
to lzw.set_quirk
.set_quirk_enabled!(quirk: u32, enabled: bool)
to set_quirk!(key: u32, value: u64) status
.std/lzw.decoder.flush
.PIXEL_FORMAT__YA_{NON,}PREMUL
constant values.wuffs_foo__bar::unique_ptr
.std/png
decode PNG color type 4 to PIXEL_FORMAT__YA_NONPREMUL
(two channels) instead of PIXEL_FORMAT__BGRA_NONPREMUL
(four channels).std/gif -> std/lzw
dependency.endwhile
keyword.example/bzcat
.0xFF_FFFF
, down from 0x7FFF_FFFF
.The dot points below probably aren‘t of interest unless you’re writing Wuffs code (instead of writing C/C++ code that uses Wuffs' standard library).
if.likely
and if.unlikely
.io_forget_history
.slice_var as nptr array[etc] etc
conversion.roarray
, roslice
and rotable
.base
min/max
argument from a
to no_more/less_than
.wuffsfmt
double-indents hanging lines and each indent is now 4 spaces (not a tab).std/png
ignore tRNS chunks for color types 4 (YA) and 6 (RGBA).The wuffs_base__parse_number_f64
function has been further optimized.
The std/bmp
and std/nie
image decoders' decode_frame
method now allow decoding to a pixel buffer that's smaller than the source image. This makes these two image decoders consistent with the other ones in std
.
For a closed io_reader
, the standard library now returns "#truncated input"
instead of "$short read"
. Importantly, this is an error, not a suspension.
The wuffs_base__parse_number_f64
function's Simple Decimal Conversion fallback algorithm has been optimized.
The headline feature is that we have a production quality PNG decoder. It‘s also the fastest, safest PNG decoder in the world. There’s also a memory-safe, zero-allocation JSON decoder.
The dot points below probably aren‘t of interest unless you’re upgrading from Wuffs version 0.2.
0b
prefixed binary numbers.WUFFS_BASE__PIXEL_BLEND__SRC_OVER
.WUFFS_BASE__PIXEL_FORMAT__BGR_565
.WUFFS_CONFIG__MODULE__BASE__ETC
sub-modules.auxiliary
code.base
library support for UTF-8.base
library support for atoi
-like string conversion.choose
and choosy
.cpu_arch
.doc/logo
.endwhile
syntax.example/bzcat
.example/cbor-to-json
.example/convert-to-nia
.example/imageviewer
.example/json-to-cbor
.example/jsonfindptrs
.example/jsonptr
.example/sdl-imageviewer
.slice base.u8 peek/poke
methods.std/bmp
.std/bzip2
.std/cbor
.std/json
.std/nie
.std/png
.std/tga
.std/wbmp
.tell_me_more?
mechanism.uintptr_low_12_bits
method.gif.decoder_workbuf_len_max_incl_worst_case
from 1 to 0.clang-5.0,gcc
to clang,gcc
.-cformatter
flag.std/gif
benchmarks actually measure.wuffs_base__pixel_format
a struct.wuffs_base__pixel_subsampling
a struct.wuffs_base__status
a struct.ack_metadata_chunk?
.wuffs_base__frame_config__blend
.available
methods to length
.decode_io_writer?
methods to transform_io?
.example/library
to example/toy-genlib
.load
and store
to peek
and poke
.{read,writ}er_io_position
to {read,writ}er_position
.set_ignore_checksum!
as a quirk.swizzle_interleaved!
to swizzle_interleaved_from_slice!
.The headline feature is that the GIF decoder is now of production quality. There is now API for overall metadata (e.g. ICCP color profiles) and to recreate each frame (width, height, BGRA pixels, timing, etc.) of a GIF animation, instead of version 0.1's proof-of-concept GIF decoder API, which just gave you a one-dimensional stream of palette indexes. It also now accepts a variety of GIF images that are invalid, when strictly following the GIF specifiction, but are nonetheless accepted by other real world GIF implementations. The Wuffs GIF decoder has also been optimized to be about 1.5x faster than Wuffs version 0.1 and about 2x faster than giflib (the C library).
The Wuffs GIF decoder is being trialled by Skia, the 2-D graphics library used by both the Android operating system and the Chromium web browser.
Work also proceeds on the NIE and RAC file formats, but both are still experimental and may change later in backwards incompatible ways.
The dot points below probably aren‘t of interest unless you’re upgrading from Wuffs version 0.1.
skipgendeps
flag.nullptr
literal and nptr T
type.io_bind
and io_limit
keywords.use
keyword.yield
keyword.return
value mandatory; added ok
literal.var
statements to the top of functions.= RHS
out of var x T = RHS
.in
variable to args
.coroutine_resumed
variable.std/adler32
, std/crc32
and std/gzip
.std/gif
quirks.std/lzw
out of std/gif
.std/zlib
out of std/flate
.std/gzip
and std/zlib
decoder ignore checksums.std/flate
to std/deflate
.!=
to <>
; !
is now only for impure functions.~+
to ~mod+
; added ~mod-
, ~sat+
and ~sat-
.&^
.$(etc)
to [etc]
.[i..j]
to [i ..= j]
, consistent with Rust syntax.[i:j]
to [i .. j]
, consistent with Rust syntax.x T
to x: T
, consistent with Rust syntax.[N] T
and [] T
types to array[N] T
and slice T
.while:label
to while.label
.u32
, buf1
, etc to base.u32
, base.io_buffer
, etc.unread_u8?
to undo_byte!
; added can_undo_byte
.decode?
methods to decode_io_writer?
.= try foo
with =? foo
.{frame,image,pixel}_config
and pixel_buffer
types.reset
method.peek_uxx
, skip_fast
and write_fast_uxx
methods.read_uxx
methods as read_uxx_as_uyy
.io_buffer
/ io_reader
distinction in C and Wuffs.error "foo"
to "#foo"
or base."#bar"
.const char *
, not an int32_t
.__double_underscore
prefixed names.WUFFS_CONFIG__MODULES
.WUFFS_CONFIG__STATIC_FUNCTIONS
.mimic_deflate_xxx
benchmarks.lang/base38
to lib/base38
.lib/interval
package.Updated on April 2023.