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 documenation
 * 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

