Xpra-org / xpra

Persistent remote applications for X11; screen sharing for X11, MacOS and MSWindows.
https://xpra.org/
GNU General Public License v2.0
1.96k stars 169 forks source link

svt-vp9 / svt-hevc encoder #2152

Open totaam opened 5 years ago

totaam commented 5 years ago

Issue migrated from trac ticket # 2152

component: encodings | priority: major

2019-02-18 02:37:30: antoine created the issue


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

totaam commented 5 years ago

The AV1 encoder is getting faster: SVT-AV1 Can Now Achieve 1080p @ 60 FPS AV1 Video Encoding On Select Configurations

totaam commented 5 years ago

2019-04-07 07:22:52: antoine uploaded file svt-vp9.patch (32.5 KiB)

stub encoder

totaam commented 5 years ago

2019-04-08 11:09:37: antoine uploaded file svt-vp9-v2.patch (36.6 KiB)

updated patch

totaam commented 5 years ago

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.

totaam commented 5 years ago

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..

totaam commented 5 years ago

2019-04-09 12:13:07: antoine uploaded file svt-vp9-v3.patch (36.6 KiB)

patch with image leak

totaam commented 5 years ago

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
totaam commented 5 years ago

As per the answer here: low latency usage, this isn't ready yet.

totaam commented 4 years ago

Still not ready.