Pretty-Good-Video

A toy MPEG-like video codec

Encoding videos

Create pgv_rs::enc::Encoder, feed in frames & audio, and then write to file:

```rs use pgv_rs::enc::Encoder;

let mut enc = Encoder::new(width, height, framerate, samplerate, audio_channels);

// feed in frames as VideoFrames (1 keyframe every 15 frames) for (idx, frame) in &myframes.iter().enumerate() { if idx % 15 == 0 { enc.encodeiframe(frame); } else { enc.encode_pframe(frame); } }

// encode audio (one Vec audio buffer per channel) enc.encodeaudio(myaudio);

// write file to disk let mut outvideo = File::create("myvideo.pgv").unwrap(); enc.write(&mut out_video).unwrap(); ```

Decoding videos

Create pgvrs::dec::Decoder, call decodeframe to get next frame of video, & call decode_audio to get next chunk of audio:

```rs use pgv_rs::dec::Decoder;

let mut dec = Decoder::new(my_file).unwrap();

for _ in 0..dec.numframes { // returns Option. Note that returned U and V planes will be half the size of the Y plane in both dimensions! dec.decodeframe().unwrap(); }

// outputs audio into vector of Vec audio buffers (one buffer per channel). All buffers must have same length. dec.decodeaudio(myoutput_buffers).unwrap(); ```