From ac2ed42de587eaa7e35b25b72f87c995bea09a82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Sun, 22 Jan 2023 19:29:23 +0100 Subject: [PATCH] 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: --- js/dbusServices/screencast/screencastService.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/js/dbusServices/screencast/screencastService.js b/js/dbusServices/screencast/screencastService.js index 0645811fa..c01aa830f 100644 --- a/js/dbusServices/screencast/screencastService.js +++ b/js/dbusServices/screencast/screencastService.js @@ -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',