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/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/cbor.std/json.std/nie.std/png.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-9,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 January 2020.