All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Bumped MSRV to 1.82 due to refactors to use methods like
Box::new_uninit
. - Reduced size of the autogenerated C bindings code by dropping layout tests, which were expected to fail on non-Linux platforms anyway due to platform-specific code generation differences.
- Removed a hacky Cargo directive in the
aotuv_lancer_vorbis_sys
build script for linking tolibogg
in favor of letting the compiler to carry it over fromogg_next_sys
by adding aextern crate ogg_next_sys
statement, which is cleaner. - Updated dependencies.
- Resolved an issue with undefined behavior in
VorbisEncoder
caused by C code potentially violating ownership and/or aliasing assumptions made by Rust code for boxed structs. (#22, thanks @jasonyu1996)
0.5.4 - 2023-12-10
- Added
documentation
metadata to the project workspace packages to make the documentation slightly more discoverable oncrates.io
.
- Fixed
libvorbis
patch errata corrections not applying due toaotuv_lancer_vorbis_sys
not being bumped in concert withvorbis_rs
.aotuv_lancer_vorbis_sys
andogg_next_sys
had their version bumped to apply this patch and other project README and metadata changes.
0.5.3 - 2023-12-10
- Added a logo for
vorbis-rs
in the project README.
- Added a section to the
VorbisEncoder::encode_audio_block
documentation explaining important details about sample block size and encoding performance. - Added a remark to the
VorbisEncoder::encode_audio_block
documentation about the usual numeric range of the input sample values. - Bumped MSRV to 1.64 due to the new usage of workspace property inheritance features introduced in that Rust version.
- Corrected another errata in the
libvorbis
patch for the stack overflow fix of 0.5.1.
0.5.2 - 2023-11-25
- Corrected an errata in the
libvorbis
patch for the stack overflow fix of 0.5.1.
0.5.1 - 2023-11-25
VorbisEncoder::encode_audio_block
no longer causes a stack overflow in practical scenarios when encoding a large sample buffer. This overflow occurred when the available stack space was too small to handle the buffer, and usually caused segmentation faults. (#17, thanks @emoon)
- Corrected some minor pedantic Clippy lints.
- Slightly reduced heap allocations when decoding signals with more than two audio channels.
- Unified some minor cosmetic details of this changelog.
0.5.0 - 2023-08-06
- The
VorbisEncoderBuilder::build
method now has a mutable reference receiver, making its usage more ergonomic and enabling more use cases. (#11) - Due to the above change,
VorbisEncoderBuilder
now automatically marks the stream serials it uses to build encoders for renewal, triggering their automatic replacement with different ones whenVorbisEncoderBuilder::build
is called. This behavior is meant to provide a reasonable default when using the same builder to build multiple encoders, but it can be customized by callingVorbisEncoderBuilder::stream_serial
method beforeVorbisEncoderBuilder::build
.
0.4.0 - 2023-07-29
- The
VorbisEncoderBuilder
struct was added for more ergonomicVorbisEncoder
instantiation. The now obsoleteVorbisEncoder::new
method was removed. - When the new default feature
stream-serial-rng
is enabled,VorbisEncoderBuilder
can now automatically generate a random Ogg stream serial. VorbisBitrateManagementStrategy
now has aDefault
implementation that targets a medium, usually transparent audio quality.
- Removed unnecessary internal allocation in
VorbisDecoder
.
0.3.0 - 2023-04-14
VorbisEncoder::finish
now returns the sink it was created with. (#8, thanks @algesten)- Updated author contact metadata for every crate in the repository.
0.2.0 - 2023-02-08
-
Prevented
VorbisDecoder
from acceptingRead
implementations that borrow data that may be dropped whileVorbisDecoder
is referenced. NowVorbisDecoder
behaves as if it owned theRead
object. Previously, code that could cause undefined behavior was accepted, such as:let vorbis_data = /* Create some Vec<u8> */; // VorbisDecoder::new borrows vorbis_data for the duration of the function invocation let mut decoder = VorbisDecoder::new::<&[u8], _>(&*vorbis_data).unwrap(); // The Vorbis data buffer used as a source for decoding may be freed later... drop(vorbis_data); // ... but safe code still can read from a deallocated buffer! while let Ok(Some(_)) = decoder.decode_audio_block() { eprintln!("Undefined behavior!"); }
-
Fixed a memory leak that occurred when
VorbisDecoder::new
returned unsuccessfully.
- More idiomatic Rust representation of C library errors by using enums. (#7)
- Optimized
VorbisDecoder
implementation to get rid of double indirection for the Vorbis stream source across the FFI boundary. - Removed unnecessary reference to Minecraft in a rustdoc comment.
- Explicitly document the audio block format expected by the
encode_audio_block
method. - Document I/O side effects of
Vorbis{Decoder,Encoder}::new
.
0.1.0 - 2022-10-21
- First public release.