Version 1.3.5 (2020 June 3)

 * Fix unsigned typedef problem on macOS.
 * Fix overflow check in ogg_sync_buffer.
 * Clean up cmake and autotools build files.
 * Remove Symbian and Apple XCode build files.
 * Fix documentation cross-reference links.

Version 1.3.4 (2019 August 30)

* Faster slice-by-8 CRC32 implementation.
  see https://lwn.net/Articles/453931/ for motivation.
* Add CMake build.
* Deprecate Visual Studio project files in favor of CMake.
* configure --disable-crc option for fuzzing.
* Various build fixes.
* Documentation and example code fixes.

Version 1.3.3 (2017 November 7)

 * Fix an issue with corrupt continued packet handling.
 * Update Windows projects and build settings.
 * Remove Mac OS 9 build support.

Version 1.3.2 (2014 May 27)

 * Fix an bug in oggpack_writecopy().

Version 1.3.1 (2013 May 12)

* Guard against very large packets.
* Respect the configure --docdir override.
* Documentation fixes.
* More Windows build fixes.

Version 1.3.0 (2011 August 4)

* Add ogg_stream_flush_fill() call
  This produces longer packets on flush, similar to
  what ogg_stream_pageout_fill() does for single pages.
* Windows build fixes

Version 1.2.2 (2010 December 07)

* Build fix (types correction) for Mac OS X
* Update win32 project files to Visual Studio 2008
* ogg_stream_pageout_fill documentation fix

Version 1.2.1 (2010 November 01)

* Various build updates (see SVN)
* Add ogg_stream_pageout_fill() to API to allow applications
  greater explicit flexibility in page sizing.
* Documentation updates including multiplexing description,
  terminology and API (incl. ogg_packet_clear(),
  ogg_stream_pageout_fill())
* Correct possible buffer overwrite in stream encoding on 32 bit
  when a single packet exceed 250MB.
* Correct read-buffer overrun [without side effects] under
  similar circumstances.
* Update unit testing to work properly with new page spill
  heuristic.

Version 1.2.0 (2010 March 25)

* Alter default flushing behavior to span less often and use larger page
  sizes when packet sizes are large.
* Build fixes for additional compilers
* Documentation updates

Version 1.1.4 (2009 June 24)

* New async error reporting mechanism. Calls made after a fatal error are
  now safely handled in the event an error code is ignored
* Added allocation checks useful to some embedded applications
* fix possible read past end of buffer when reading 0 bits
* Updates to API documentation
* Build fixes

Version 1.1.3 (2005 November 27)

 * Correct a bug in the granulepos field of pages where no packet ends
 * New VS2003 and XCode builds, minor fixes to other builds
 * documentation fixes and cleanup

Version 1.1.2 (2004 September 23)

 * fix a bug with multipage packet assembly after seek

Version 1.1.1 (2004 September 12)

 * various bugfixes
 * important bugfix for 64-bit platforms
 * various portability fixes
 * autotools cleanup from Thomas Vander Stichele
 * Symbian OS build support from Colin Ward at CSIRO
 * new multiplexed Ogg stream documentation

Version 1.1 (2003 November 17)

 * big-endian bitpacker routines for Theora
 * various portability fixes
 * improved API documentation
 * RFC 3533 documentation of the format by Silvia Pfeiffer at CSIRO
 * RFC 3534 documentation of the application/ogg mime-type by Linus Walleij

Version 1.0 (2002 July 19)

 * First stable release
 * little-endian bitpacker routines for Vorbis
 * basic Ogg bitstream sync and coding support

