xpra icon
Bug tracker and wiki

Opened 3 months ago

Last modified 6 weeks ago

#2152 assigned enhancement

svt-vp9 / svt-hevc encoder

Reported by: Antoine Martin Owned by: Antoine Martin
Priority: major Milestone: 3.0
Component: encodings Version: 2.4.x
Keywords: Cc:

Description (last modified by Antoine Martin)

The SVT-VP9 Encoder development is a work-in-progress targeting performance levels applicable to both VOD and Live encoding/transcoding video applications.

It's a lot faster than the libvpx reference implementation (#2132).
See SVT-VP9 Is Intel's Latest Open-Source Video Encoder Yielding High Performance VP9
Encoding tracker ticket: #1793

Attachments (3)

svt-vp9.patch (32.5 KB) - added by Antoine Martin 6 weeks ago.
stub encoder
svt-vp9-v2.patch (36.6 KB) - added by Antoine Martin 6 weeks ago.
updated patch
svt-vp9-v3.patch (36.6 KB) - added by Antoine Martin 6 weeks ago.
patch with image leak

Download all attachments as: .zip

Change History (9)

comment:1 Changed 3 months ago by Antoine Martin

Description: modified (diff)
Status: newassigned

comment:2 Changed 2 months ago by Antoine Martin

Milestone: 3.14.0

Milestone renamed

Changed 6 weeks ago by Antoine Martin

Attachment: svt-vp9.patch added

stub encoder

Changed 6 weeks ago by Antoine Martin

Attachment: svt-vp9-v2.patch added

updated patch

comment:4 Changed 6 weeks ago by Antoine Martin

Milestone: 4.03.0

The patch above actually does compress something now, but there is too much buffering happening inside the svt-vp9 library: SVT-VP9 issue 26: low latency usage.

comment:5 Changed 6 weeks ago by Antoine Martin

With the latest patch (see below), I can at least try to use it:

LD_LIBRARY_PATH=/usr/local/lib/ gdb --args /usr/bin/python3 /usr/bin/xpra \
    start --no-daemon :20 --start=glxgears --video-encoders=svt_vp9

Since svt uses threads and signals, we need to tell gdb to ignore SIG32:

handle SIG32 pass nostop noprint

Then, we can attach a client:

xpra attach --no-mmap --encodings="rgb,vp9"

The server crashes pretty quickly:

python3: /SVT-VP9/Source/Lib/VPX/vp9_loopfilter.c:871: vp9_adjust_mask: Assertion `!(lfm->above_y[TX_16X16] & lfm->above_y[TX_8X8])' failed.
Thread 117 "python3" received signal SIGABRT, Aborted.
(gdb) bt
#0  0x00007ffff78c557f in raise () at /lib64/libc.so.6
#1  0x00007ffff78af895 in abort () at /lib64/libc.so.6
#2  0x00007ffff78af769 in _nl_load_domain.cold.0 () at /lib64/libc.so.6
#3  0x00007ffff78bda26 in .annobin_assert.c_end () at /lib64/libc.so.6
#4  0x00007fffe83b97a5 in enc_dec_kernel () at /usr/local/lib/libSvtVp9Enc.so.1
#5  0x00007ffff7bea58e in start_thread () at /lib64/libpthread.so.0
#6  0x00007ffff798a683 in clone () at /lib64/libc.so.6

We can't turn off threading, and I have no idea what causes this corruption..

Last edited 6 weeks ago by Antoine Martin (previous) (diff)

Changed 6 weeks ago by Antoine Martin

Attachment: svt-vp9-v3.patch added

patch with image leak

comment:6 Changed 6 weeks ago by Antoine Martin

Got a different backtrace after forcing the image wrapper to freeze the pixel data before calling the encoder (just adding image.freeze() in compress_image()):

Thread 99 "python3" received signal SIGSEGV, Segmentation fault.
bt
#0  0x00007fffe83f903b in tokenize_b.lto_priv () at /usr/local/lib/libSvtVp9Enc.so.1
#1  0x00007fffe843168f in entropy_coding_kernel () at /usr/local/lib/libSvtVp9Enc.so.1
#2  0x00007ffff7bea58e in start_thread () at /lib64/libpthread.so.0
#3  0x00007ffff798a683 in clone () at /lib64/libc.so.6
Note: See TracTickets for help on using tickets.