revc 0.2.0

Rust Essential Video Coding (MPEG-5 EVC)
Documentation

revc Actions Status

The fastest and safest EVC encoder and decoder

Overview

MPEG-5 Essential Video Coding (EVC) baseline profile is royalty-free, which includes only technologies that are more than 20 years old or that were submitted with a royalty-free declaration. Compared to H.264/AVC (JM19.0), MPEG-5 EVC (ETM baseline) provides about 30% BD-rate reduction with comparable computation complexity.

REVC is a Rust-based EVC (baseline) video codec implementation.

Features

  • Coding Structure
    • Quad-tree based coding structure up to 64x64 block size
  • Intra Prediction
    • DC, horizontal (H), vertical (V), diagonal left (DL), diagonal right (DR) for intra prediction
  • Inter Prediction
    • Un-directional and Bi-directional inter prediction
    • Temporal direct mode
    • Three spatial neighbouring motion vectors and one temporally co-located motion vector
    • 1/2 and 1/4-pel interpolation
  • Transform and Quantization
    • 4x4 to 64x64 DCT
    • QP range: 0 to 51
    • Run/level symbols with zig-zag scan
  • Loop Filter
    • Deblocking filter in H.263 Annex J
  • Entropy Coding
    • Binary arithmetic coding scheme in JPEG Annex D

Roadmap

  • 0.1 Translation:
    • Translate ETM baseline decoder from C to Rust
    • Translate ETM baseline encoder from C to Rust
  • 0.2 Optimization:
    • profiling and benchmarking
    • rust safe code optimization
    • assembly optimization
      • armeabi-v7a
      • arm64-v8a
      • x86
      • x86_64
    • multi-threading optimization
  • 0.3 Modernization
    • rate control
    • practical usecases: RTC, Live Streaming, VOD, etc

Usage

Compressing video

Input videos can be in raw yuv (I420) format or y4m format. The monochrome color format is not supported yet.

cargo run --release --bin revce -- -i tools/foreman_qcif8.yuv -w 176 -h 144 -z 30 -f 8 -q 27 -r tools/tmp/rec.yuv --keyint 8 --ref_pic_gap_length 8 --skip 0 --disable_dbf --inter_slice_type 1 -o tools/tmp/test_ld_p.evc -v
cargo run --release --bin revce -- -i tools/foreman_qcif8.y4m                          -q 27 -r tools/tmp/rec.y4m --keyint 8 --ref_pic_gap_length 8 --skip 0               --inter_slice_type 0 -o tools/tmp/test_ld_b.evc -v

Decompressing video

Decoder only supports MPEG-5 EVC baseline profile. Output videos can be in raw yuv (I420) format or y4m format

cargo run --release --bin revcd -- -i tools/tmp/test_ld_p.evc -o tools/tmp/test.yuv -v
cargo run --release --bin revcd -- -i tools/tmp/test_ld_b.evc -o tools/tmp/test.y4m -v

Contributing

Contributors or Pull Requests are Welcome!!!