5 releases

new 0.1.11 Jan 25, 2025
0.1.10 May 11, 2024
0.1.9 Apr 19, 2024
0.1.8 Apr 16, 2024
0.1.7 Apr 16, 2024

#351 in Compression

Download history 9/week @ 2024-12-10 94/week @ 2025-01-21

94 downloads per month

Zlib license

32KB
608 lines

GV Video Decoder for Rust

Crates.io Docs.rs License

Port of GV video (Extreme Gpu Friendly Video Format) https://github.com/Ushio/ofxExtremeGpuVideo#binary-file-format-gv decoder for Rust.

GV video format is nutshell LZ4 compressed GPU textures with stored address tables.

This crate provides both:

  • LZ4 decompressor (using lz4_flex crate)
  • BC1(DXT1)/BC2(DXT3)/BC3(DXT5)/BC7 decoder (using texture2ddecoder crate)

But recommended NOT to use BC1/BC2/BC3/BC7 decoder because it's CPU processing (slow).
Instead, you should pass (LZ4 decompressed) GPU texture directly to game engine or rendering engine.

  • You can get LZ4 decompressed (not BC decoded) frame with read_frame_compressed(index) and read_frame_compressed_at(time) methods. (fastest way for GPU texture upload)
  • You can get both LZ4 decompressed and BC decoded frame with read_frame(index) and read_frame_at(time) methods. (easy for BGRA texture checking and CPU processing)

This crate is ...

binary file format (gv)

0: uint32_t width
4: uint32_t height
8: uint32_t frame count
12: float fps
16: uint32_t format (DXT1 = 1, DXT3 = 3, DXT5 = 5, BC7 = 7)
20: uint32_t frame bytes
24: raw frame storage (lz4 compressed)
eof - (frame count) * 16: [(uint64_t, uint64_t)..<frame count] (address, size) of lz4, address is zero based from file head

Credits

Dependencies

~630KB
~13K SLoC