Go to file
Jonas Dreßler 51bf7ec176 screencastService: Improve the gstreamer pipeline for recording
The current gstreamer pipeline performs quite bad on slower machines and
is dropping lots of frames, improve the pipeline by changing a few
things:

- Use threads for videoconvert and improve speed of videoconvert by
disabling some unneeded things
- Add a queue before the encoding step, this allows the encoder to work
at its own pace and will lead to a lot more stability
- Remove the fixed quantizer and only set a max quantizer, this helps
quite a bit with performance
- Change the deadline parameter of vp8enc to 1: This makes the encoder
go into real time mode, which will make it a lot faster
- Set cpu-used to 16, the maximum possible value.
- Set static-threshold to 1000, static-threshold is the motion detection
threshold, and while a value of 100 is recommended for screencasting in
the gstreamer documentation (see [1]), using 1000 appears to perform a
lot better and still outputs fairly good quality
- Set a larger buffer size than the default size, this seems to get a
bit more stability during high load scenarios

All in all, those changes make the pipeline drop no more frames when
recording at 30 FPS and 2K screen resolution. That was tested on a
fairly recent mobile core-i5 processor.

Also, because we now have two %T replacement strings for the number of
threads, we need to switch to replaceAll(). For that to work, we have to
put the %T matching expression into quotes.

[1] https://gstreamer.freedesktop.org/documentation/vpx/GstVPXEnc.html?gi-language=c#GstVPXEnc:static-threshold

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1633>
2021-05-04 13:45:57 +00:00
.gitlab/issue_templates Add a link to supported releases in the README and bug template 2021-03-03 14:47:20 +00:00
.gitlab-ci ci: Add commit rule to not end subject with punctuation 2021-02-26 14:59:07 +01:00
.settings Clean out some eclipse artefacts 2019-02-13 04:39:26 +01:00
data theme: Move :hover below :focus in %bubble_button 2021-05-01 20:31:34 +00:00
docs/reference docs: Unify on single DocBook version 2020-10-13 03:02:13 +02:00
js screencastService: Improve the gstreamer pipeline for recording 2021-05-04 13:45:57 +00:00
lint lint: Sync configuration with gjs 2020-11-16 18:04:23 +00:00
man man: Update options 2020-12-28 02:25:17 +01:00
meson theme: Pre-generate stylesheets as well 2020-12-29 00:40:47 +01:00
po Update Nepali translation 2021-05-01 11:11:13 +00:00
src st: Only use clutter_actor_invalidate_paint_volume() if the API exists 2021-04-26 12:18:52 +00:00
subprojects Post-release version bump 2021-03-20 13:40:49 +01:00
tests util: Add a GNOME version comparison function 2021-02-05 13:41:26 +00:00
tools *: Fix spelling mistakes found by codespell 2020-08-21 18:25:09 +00:00
.eslintrc.yml lint: Convert eslint JSON to YAML 2019-11-11 23:51:17 +00:00
.gitignore Add small gnome-shell-extension-prefs script 2020-04-28 00:06:19 +02:00
.gitlab-ci.yml ci: Update ci-fairy image 2021-03-03 20:29:22 +01:00
.gitmodules submodules: Replace non-functional git.gnome.org URL by GNOME Gitlab URL 2018-09-25 08:41:30 +02:00
config.h.meson Add check_cloexec_fds debug command 2018-07-30 23:11:41 +00:00
COPYING Changed obsolete FSF postal address. 2014-01-08 04:35:14 +07:00
gnome-shell.doap gnome-shell.doap: Make marge-bot a maintainer 2020-11-17 17:29:56 +00:00
HACKING.md *: Fix spelling mistakes found by codespell 2020-08-21 18:25:09 +00:00
meson_options.txt extensions-app: Move Extensions app to new subproject 2020-03-27 23:33:30 +00:00
meson.build st: Only use clutter_actor_invalidate_paint_volume() if the API exists 2021-04-26 12:18:52 +00:00
NEWS Tag release 40.0 2021-03-20 13:09:53 +01:00
README.md Add a link to supported releases in the README and bug template 2021-03-03 14:47:20 +00:00

GNOME Shell

GNOME Shell provides core user interface functions for the GNOME 3 desktop, like switching to windows and launching applications. GNOME Shell takes advantage of the capabilities of modern graphics hardware and introduces innovative user interface concepts to provide a visually attractive and easy to use experience.

For more information about GNOME Shell, including instructions on how to build GNOME Shell from source and how to get involved with the project, see the project wiki.

Bugs should be reported to the GNOME bug tracking system. Please refer to the Schedule wiki page to see the supported versions.

Contributing

To contribute, open merge requests at https://gitlab.gnome.org/GNOME/gnome-shell.

Commit messages should follow the GNOME commit message guidelines. We require an URL to either an issue or a merge request in each commit.

License

GNOME Shell is distributed under the terms of the GNU General Public License, version 2 or later. See the COPYING file for details.