Skip to content
Minimalistic H264/SVC encoder single header library
C Assembly Shell
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
asm make asm functions visible to QEMU for profiling Oct 3, 2018
images
scripts
vectors add x264 sample to compare Sep 22, 2018
.gitignore initial code Sep 21, 2018
.travis.yml travis: update gcc Dec 24, 2019
LICENSE initial Sep 20, 2018
README.md
minih264e.h
minih264e_test.c +fix aligned_alloc size argument (asan warning) Dec 24, 2019
system.c fix warnings Sep 28, 2018
system.h fix warnings Sep 28, 2018

README.md

minih264

Build Status

Small, but yet reasonably fast H264/SVC encoder single-header library with SSE/NEON optimizations. Decoder can be popped up in future.

Disclaimer: code highly experimental.

Comparison with x264

Rough comparison with x264 on an i7-6700K:

x264 -I 30 --profile baseline --preset veryfast --tune zerolatency -b 0 -r 1 --qp 33 --ipratio 1.0 --qcomp 1.0 -o x264.264 --fps 30 vectors/foreman.cif --input-res 352x288 --slices 1 --threads 1

vs

./h264enc_x64 vectors/foreman.cif

x264 minih264
source: ~4.6mb 409kb
binary: 1.2mb 100kb
time: 0,282s 0,503s
out size: 320kb 391kb

PSNR:

x264:     PSNR y:32.774824 u:38.874450 v:39.926132 average:34.084281 min:31.842667 max:36.630286
minih264: PSNR y:33.321686 u:38.858879 v:39.955914 average:34.574459 min:32.389171 max:37.174073

First intra frame screenshot (left-to-right: original 152064, minih264 5067, x264 5297 bytes):

Intra screenshot

You can compare results in motion using ffplay/mpv players on vectors/out_ref.264 and vectors/x264.264 .

Usage

TBD

SVC

Minih264 supports both spatial and temporal layers. Spatial layers are almost same as encode 2 independent AVC streams except for Intra frames prediction. Following diagram shows minih264 SVC scheme for two spatial layers:

SVC diargam

That's because P frames spatial prediction are almost useless in practice. But for Intra frames there is a ~20% benefit in full resolution frame size. Note that decoder must have both base layer I frame and full resolution SVC I frame to decode whole sequence of next P frames in full resolution.

Limitations

The following major features are not supported compared to x264 (baseline):

  • Trellis quantization.
  • Select prediction mode using Sum of Absolute Transform Differences (SATD).
  • 4x4 motion compensation.

Interesting links

You can’t perform that action at this time.