screencastService: Add gstreamer pipeline for h264 encoding on hardware

Try h264 on intel and AMD hardware using VA-API, using vapostproc
to do the color conversion using specialized hardware. We're not adding
a vaapi pipeline using the color conversion GL shader here, as vapostproc
color conversion should be better suited for anything needed by vaapi
based encoders/decoders.

A capsfilter is used to enforce the use of DMAbuf (memory:DMABuf) with
the new explicit modifier API (format=DMA_DRM).

Also, we're using the new va* gst elements instead of the vaapi* ones
here, as the vaapi* elements are deprecated, while the va* elements are
actively maintained.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2080>
This commit is contained in:
Jonas Dreßler 2023-01-22 19:29:23 +01:00 committed by Marge Bot
parent 90f69dcd25
commit ac2ed42de5

View File

@ -31,6 +31,17 @@ const DEFAULT_DRAW_CURSOR = true;
const PIPELINE_BLOCKLIST_FILENAME = 'gnome-shell-screencast-pipeline-blocklist';
const PIPELINES = [
{
id: 'hwenc-dmabuf-h264-vaapi',
fileExtension: 'mp4',
pipelineString:
'capsfilter caps=video/x-raw(memory:DMABuf),format=DMA_DRM,max-framerate=%F/1 ! \
vapostproc ! \
vah264enc ! \
queue ! \
h264parse ! \
mp4mux fragment-duration=500 fragment-mode=first-moov-then-finalise',
},
{
id: 'swenc-dmabuf-h264-openh264',
fileExtension: 'mp4',