1 unstable release

0.2.0 Feb 2, 2024

#790 in Audio


Used in toniefile

MIT/Apache

13KB
314 lines

Safe Rust Bindings for libogg

CI

Simple bindings for libogg.

In most cases it should be preferable to use the ogg crate. However, their README states that the encoder is not well tested. It does at the time of writing not offer some options (e.g. setting a stream id). Still, you are probably better off using ogg unless it's a very special case.

These bindings are not zero-copy! The functions producing a page don't return a reference as modeling their invalidation would make the API more complicated.

Simple Example

extern crate libogg;
use libogg::{Packet, Stream};

fn main() {
    let mut stream = Stream::new(1234); // provide a unique stream id

    // This loop puts data into the stream until a page is returned
    loop {
        match stream.pageout() {
            Some(page) => {
                // `page` holds a header and body, write them to a file
                println!("header: {:?}/body {:?}", page.header, page.body);
                break;
            },
            None => {
                let mut vec = Vec::new();
                for x in 0..255 {
                    vec.push(x);
                }
                // Push in new data
                let mut pkt = Packet::new(&mut vec);
                stream.packetin(&mut pkt)
            }
        }
    }
}

Documentation

This crate has some sporadic documentation, check out the libogg docs for details.

Dependencies

~0.1–1.4MB
~21K SLoC