Commit graph

815 commits

Author SHA1 Message Date
Michael Fabian 'Xaymar' Dirks
5baf8524d5 plugin: Replace long descriptions with "Open Manual" button
While the long descriptions were useful, keeping the updated and translated is pretty much impossible. Technology moves fast and not everyone that translates the project knows a lot about technology.

Therefore the long descriptions have now been replaced with a button that opens the wiki page for the feature instead. This should drastically reduce the number of help cases, and improve the translation coverage at the same time.
2021-04-17 03:34:39 +02:00
Michael Fabian 'Xaymar' Dirks
e0e889287b plugin: Add function to open an URL 2021-04-17 03:34:39 +02:00
Michael Fabian 'Xaymar' Dirks
b0842e8927 filters/color-grading: Add proper suffixes to UI properties 2021-04-17 03:19:21 +02:00
Michael Fabian 'Xaymar' Dirks
b837d94d91 source/shader: Fix missing buffered draw requirement (#516)
Fixes #516
2021-04-14 13:41:52 +02:00
Michael Fabian 'Xaymar' Dirks
515f9c659e filters/color-grading: Adjust range for Lift and Gain (#515)
Fixes #515
2021-04-14 13:41:52 +02:00
Michael Fabian 'Xaymar' Dirks
a47d068012 transition/shader: Use direct rendering (#501) 2021-03-28 15:02:11 +02:00
Michael Fabian 'Xaymar' Dirks
8aba2bd2be source/shader: Use direct rendering (#501) 2021-03-28 15:02:11 +02:00
Michael Fabian 'Xaymar' Dirks
069061274b filter/shader: Use direct rendering (#501) 2021-03-28 15:02:11 +02:00
Michael Fabian 'Xaymar' Dirks
0fe913a94c gfx/shader: Allow specifying effect for direct rendering (#501) 2021-03-28 15:02:11 +02:00
Michael Fabian 'Xaymar' Dirks
78b91c9957 filter/dynamic-mask: Require buffered rendering 2021-03-28 15:02:11 +02:00
Michael Fabian 'Xaymar' Dirks
f9d4c48237 filter/displacement: Require buffered rendering 2021-03-28 15:02:11 +02:00
Michael Fabian 'Xaymar' Dirks
40bf73bc22 filter/color-grade: Add direct rendering support (#501) 2021-03-28 15:02:11 +02:00
Michael Fabian 'Xaymar' Dirks
dfec841054 filters/color-grade: Fix support for translucent Inputs
Additionally also document some of the code and enforce certain GPU states for rendering.
2021-03-28 10:43:35 +02:00
Michael Fabian 'Xaymar' Dirks
f9af350768 ffmpeg/tools: Fix incorrect transfer characteristics
Both Rec. 601 and sRGB looked extremely wrong before, resulting in weird or warped colors. Since it is very difficult to find up to date and accurate information on standards, we should simply go for what has the most widespread support.
2021-02-21 04:04:31 +01:00
Michael Fabian 'Xaymar' Dirks
612c2f5213 obs/gs/vertex: Don't include unused headers 2021-02-14 13:41:10 +01:00
Michael Fabian 'Xaymar' Dirks
31b7b06af1 nvidia/cuda: Use reinterpret_case instead of static_cast 2021-02-14 13:33:53 +01:00
Michael Fabian 'Xaymar' Dirks
e436d22367 filters/color-grade: Redesign for use with LUTs
There is hardly any reason for us to recalculate everything all the time. LUTs can cache the work once, and then re-use it every time necessary, drastically reducing the impact of Color Grading by almost 60% (on some GPUs even more). Additionally this fixes the negative gamma issue, which plagued the filter for a while.

In the future, once PR 4199 (https://github.com/obsproject/obs-studio/pull/4199) has been merged, we can cut away one intermediate rendering step currently required to make the effect work. Hopefully this will be with the 27.x release of OBS Studio.
2021-02-06 16:22:22 +01:00
Michael Fabian 'Xaymar' Dirks
f396f52054 gfx/lut: Add a simple but efficient LUT producer and consumer
For simple image and video editing, LUTs (Look-Up Tables) are vastly superior to running the entire editing operation on each pixel - especially if all the processing can be done inside a single shader.

Due to the post-processing requirements for our LUTs, we are limited to 8 bits per channel - though clever use of the unused Alpha channel may result in additional space. For our purposes however, this is definitely enough.
2021-02-06 16:22:22 +01:00
tytan652
1d80c0bef0 ui: Don't reference Updater if it's been disabled
Merges #446
2021-02-06 13:35:15 +01:00
Michael Fabian 'Xaymar' Dirks
239e01558d cmake: Refactor component and dependency system
A complete redesign of the component and dependency system is necessary in order to support additional platforms, such as MacOS and other Linux platforms. Additionally it results in a much cleaner code base, which is less confusing overall.

Eventually it might be necessary to push components of StreamFX into their own CMake projects, as it is getting kind of complex now. Especially with the push for a proper plugin manager, things get dicey for big plugins like StreamFX.
2021-02-02 11:53:32 +01:00
Michael Fabian 'Xaymar' Dirks
cd3f9d21c8 sources/mirror: Clamp minimum size to 1x1
This works around an issue in our code with asynchronous or delayed sources.
2021-01-31 19:54:03 +01:00
Michael Fabian 'Xaymar' Dirks
1a2f3962e0 ui: Fix additional Qt issues 2021-01-21 03:28:10 +01:00
Xaymar
0607529cc3
ui/updater: Don't require Qt interaction before OBS is ready (#427)
Fixes one of the launch freezes caused by StreamFX due to interaction with the Qt message loop.
2021-01-21 02:42:56 +01:00
Michael Fabian 'Xaymar' Dirks
b792e56608 source/mirror: Don't ignore data in initializer 2020-12-04 13:28:49 +01:00
Michael Fabian 'Xaymar' Dirks
0c3a8a1d56 filter/shader: Initialize with given data
Ignoring the data parameter during initialization results in duplication and some third party plugins not working as expected, so it's better to not ignore it.

Fixes #315
2020-12-04 13:19:30 +01:00
Michael Fabian 'Xaymar' Dirks
4f5f267451 gfx/shader: Correctly cache shader rendering result
Fixes #392
2020-12-04 13:07:26 +01:00
Michael Fabian 'Xaymar' Dirks
cbd75767fa encoders/ffmpeg: Implement AMF H.264 and H.265 handlers
Adds support for the AMD Advanced Media Framework H.264 and H.265 encoders via FFmpeg. The majority of settings are supported, and the UI/UX experience mimics that of the NVENC implementation. Various settings are left out due to their complexity and should be controlled via the custom parameters field.
2020-12-04 08:32:20 +01:00
Michael Fabian 'Xaymar' Dirks
f7cb14fd34 filter/dynamic-mask: Explicitly increase showing/active references
Fixes #384
2020-11-29 17:17:28 +01:00
Michael Fabian 'Xaymar' Dirks
74c478321c obs/tools: Add active_source and visible_source helpers
These classes help us manage active and showing references to a source, which seem to be necessary for filters.
2020-11-29 17:17:28 +01:00
Michael Fabian 'Xaymar' Dirks
3f92276c9e filter/blur: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
f10f235d43 filter/color-grade: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
73dfb580cb filter/displacement: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
9fb75fc4f2 filter/dynamic-mask: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
268a601bac filter/sdf-effects: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
790f0b32cf gfx/shader: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
b9e0278428 obs/gs/effect: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
97301b9882 obs/gs/mipmapper: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
93c44fe98a util/library: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
6494e8e2d5 gfx/blur: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
007974da54 configuration: Fix unicode support
Related: #359
2020-11-28 23:48:52 +01:00
Michael Fabian 'Xaymar' Dirks
a666e01506 plugin: Implement proper functions to get config and data files
Using the obs_module_file and obs_module_config_path macros works okay, but it comes with a slight overhead as well as additional requirements when passing it to C++ functions that expect certain rules to be fulfilled. By instead wrapping the actual functionality into our own functions and using those we can avoid most of the issues that come with the old approach.

Related: #359
2020-11-28 23:42:29 +01:00
Michael Fabian 'Xaymar' Dirks
a0ce296085 util/bitmask: Move bitmask functionality its own file 2020-11-08 03:39:40 +01:00
Michael Fabian 'Xaymar' Dirks
884138b04c util/library: Use string_view instead of string
Slightly improves performance and reduces memory impact, as string data is not duplicated.
2020-11-08 03:39:40 +01:00
Michael Fabian 'Xaymar' Dirks
3e15537f14 obs/source-factory: Skip broken filter rendering by default
Fixes a black screen issue if a filter happens to run into an unexpected issue which it considers unrecoverable.
2020-11-08 03:36:48 +01:00
Michael Fabian 'Xaymar' Dirks
9751b8fbb5 util/curl: Add missing include for vector 2020-11-02 04:14:50 +01:00
Michael Fabian 'Xaymar' Dirks
e42cf4f325 ui/updater: Set modal flag after hiding the dialog
This fixes a bug with older Qt versions which would not remove the modal window from the parent in the setModal() call, resulting in an unusable parent window.

Fixes #368
2020-11-02 00:54:48 +01:00
Michael Fabian 'Xaymar' Dirks
f6120c69be ui/updater: Always initialize members to zero 2020-11-01 12:59:04 +01:00
Daniel Molkentin
36450f2560
encoders/handlers/debug: Always return something in to_string (#354) 2020-10-09 20:28:11 +02:00
Daniel Molkentin
bb3dcf73ac
encoders/ffmpeg: Use correct parameter for log (#355) 2020-10-09 20:26:46 +02:00
Michael Fabian 'Xaymar' Dirks
dc311f5ce6 encoder/ffmpeg: Don't use hardware encoding for unsupported formats 2020-10-08 11:53:53 +02:00
Michael Fabian 'Xaymar' Dirks
e754a1edd0 encoders/ffmpeg: Don't overwrite already correct settings 2020-10-08 11:53:53 +02:00
Michael Fabian 'Xaymar' Dirks
1485e7a724 ffmpeg/tools: Set correct information when encoding
Improves the previous logic and makes it compatible with the new additions in 26.x, such as sRGB. This was previously broken as the focus was on existing features which could be tested without requiring a compiler to be installed.

Incorrect understanding of how sRGB works with RGB and YCC/YUV formats also caused sRGB to be treated as RGB when I444 was selected. This should also now be fixed, hopefully permanently.

Fixes #331
2020-10-08 11:53:53 +02:00
Michael Fabian 'Xaymar' Dirks
3dbf9c9dbc ui/updater: Apply workaround for OBS Studio checking for modals
In order to work around a bug in the OBS Studio UI code, we have to swap our modal status right before showing and right after hiding, so that the OBS Studio tray menu continuous working correctly. This is a bit of a weird solution, but it does work as expected.

Related: https://github.com/obsproject/obs-studio/issues/3518
2020-09-30 03:57:36 +02:00
Michael Fabian 'Xaymar' Dirks
8c99b56997 ui/about: Fix incorrect icon for YouTube URL
Fixes #329
2020-09-25 21:07:26 +02:00
Michael Fabian 'Xaymar' Dirks
81a970473f updater: Add functionality to check for updates
Implements a manual and automatic update checker with support for both release and testing update channels, allowing users to stay as up to date as possible. It is fully compliant with privacy regulations around the world, as it stays completely silent and inactive until the user gives the Ok to connect to GitHub for the latest releases.
2020-09-24 02:01:40 +02:00
Michael Fabian 'Xaymar' Dirks
34ae5dd64b util/curl: Add C++ wrapper for CURL 2020-09-24 02:01:40 +02:00
Michael Fabian 'Xaymar' Dirks
5ead6260bb ui: Fix support for disambiguation in translations 2020-09-10 10:14:05 +02:00
Michael Fabian 'Xaymar' Dirks
1509d73ef6 util/threadpool: Don't hold work endlessly after processing it 2020-09-10 10:02:06 +02:00
Michael Fabian 'Xaymar' Dirks
778fc7f3fe encoders/handlers/nvenc: Don't list encoders on unsupported systems
Removes the NVENC entry on systems without an NVIDIA GPU by checking if the library for it can be loaded. If it can't be loaded, it's likely that the user does not have a system with NVENC capabilities - and guaranteed that they can't use the encoder as FFmpeg relies on these libraries.
2020-08-10 20:39:08 +02:00
Michael Fabian 'Xaymar' Dirks
2010dc0a87 encoders/ffmpeg: Add function to get info object 2020-08-10 20:39:08 +02:00
Michael Fabian 'Xaymar' Dirks
53d3f1ae6c util/library: Cross-platform handler for library loading
Adds a utility class and functions to load libraries and symbols from libraries somewhat safely. Libraries are immediately unloaded when the last reference to them is lost, so the shared_ptr should be stored if the library is actually needed.
2020-08-10 20:39:08 +02:00
Michael Fabian 'Xaymar' Dirks
070fc41918 encoders/handlers/nvenc: Make code C++ standard compliant again 2020-08-10 19:51:21 +02:00
Michael Fabian 'Xaymar' Dirks
315b996ab3 encoders/ffmpeg: Support for FFmpeg versions older than 58.x 2020-08-10 19:51:21 +02:00
Michael Fabian 'Xaymar' Dirks
0c1a37a76c encoders/ffmpeg: Disable hardware path on Linux 2020-08-10 19:51:21 +02:00
Michael Fabian 'Xaymar' Dirks
284dec3a80 encoders/handlers/prores_aw: Fix override warning 2020-08-10 19:51:21 +02:00
Michael Fabian 'Xaymar' Dirks
805afd9064 encoders/codecs: Add missing includes 2020-08-10 19:51:21 +02:00
Michael Fabian 'Xaymar' Dirks
b4a727cb86 ffmpeg/tools: Fix compatibility with Ubuntu 18.04 2020-08-10 19:51:21 +02:00
Michael Fabian 'Xaymar' Dirks
a53518cdb9 project: Remove non-standard std:: prefix from types 2020-08-10 19:51:21 +02:00
Michael Fabian 'Xaymar' Dirks
9b98f5e756 templates: Add generated configuration file 2020-08-10 02:33:54 +02:00
Michael Fabian 'Xaymar' Dirks
5ba3d7e478 ffmpeg/tools: Ensure we aren't comparing against a nullptr 2020-07-30 07:52:42 +02:00
Michael Fabian 'Xaymar' Dirks
08cedfcadc project: Apply formatting 2020-07-30 07:32:22 +02:00
Michael Fabian 'Xaymar' Dirks
ad64314b37 obs/gs/effect: Use the actual shared_ptr, not a pointer to it
Fixes several warnings and potential memory corruptions that could happen. Also makes the entire thing easier to read.
2020-07-29 05:17:42 +02:00
Michael Fabian 'Xaymar' Dirks
d332007ae0 project: Code cleanup and reapply formatting
Changes applied:

* Moved utility files to /util/.
* Removed unused #includes.
* Removed unused ::ffmpeg::tools function.
* Removed unused variables.
* Fixed missing parentheses in the version macro.
* Fixed missing override on virtual function overrides and removed unnecessary virtual keyword from them.
* Disabled additional warning for ATL headers on MSVC only.
* Replaced direct printf parameters with their macro equivalent.
* Replaced C-style casts with C++-style casts.
* Applied clang-format again after an earlier change to the CMake file broke the integration for it.
2020-07-29 05:17:42 +02:00
Michael Fabian 'Xaymar' Dirks
6e02ee5fef util/threadpool: Show warnings for uncaught exceptions
Tasks should not leak exceptions, so it is better if we actually log them instead of silently ignoring them.
2020-07-29 02:13:02 +02:00
Michael Fabian 'Xaymar' Dirks
e84b44f8bf ui-about: Add new 'Thank You' entries 2020-07-29 01:47:27 +02:00
Michael Fabian 'Xaymar' Dirks
46b5928de1 encoders/handlers/nvenc: Remove 5.2 from H.264
The levels 5.2 and above were added in a newer FFmpeg version than OBS Studio is shipping with. Ideally we'd take these options directly from FFmpeg, but that is for a future commit.
2020-07-29 01:47:17 +02:00
Michael Fabian 'Xaymar' Dirks
eff661c5b2 encoders/handlers/nvenc: Fix incorrect values being logged
Fixes the issue where "high444p" shows as "high", and "high" shows as "main", caused by the internal option mapping never being correct across version changes. Instead of keeping our own copy of things that has to be adjusted for each FFmpeg version, it's easier to just use the FFmpeg values and names.
2020-07-29 01:47:04 +02:00
Michael Fabian 'Xaymar' Dirks
53d7c2c396 ffmpeg/tools: Add string value mapping to print_av_option 2020-07-29 01:47:04 +02:00
Michael Fabian 'Xaymar' Dirks
970801dce7 encoders/ffmpeg: Fix fallbacks, hide handler-less encoders and clean up
* Changes the encoder name to 'streamfx-{name}' from 'streamfx--{name}' as the latter is a typo, but adds a proxy to still support the latter in bad configurations.
* Some of the warning messages have been improved in order to better support end-users, and support for the new encoder error messages has been added.
* Adds support for the is_hw argument instead of blindly relying on obs_encoder_get_caps() which actually returns the wrong values due to rerouting.
* Fixed handler-less encoders showing up in the UI outside of debug builds.
2020-07-28 20:22:45 +02:00
Michael Fabian 'Xaymar' Dirks
fa76c2fbcd obs/encoder-factory: Fix encoder rerouting not working properly
Due to an oversight in the code, the fallback code would simply fail to work as the encoder was always the zero-copy version. This resulted in weird crashes and encoders not working that used to work before.

Fixes #295
2020-07-28 20:22:45 +02:00
Michael Fabian 'Xaymar' Dirks
bbfacbc30b obs/gs/vertexbuffer: Cleanup and add workaround for OBS Studio memory leak 2020-07-27 03:39:59 +02:00
Michael Fabian 'Xaymar' Dirks
b57c7975e3 obs/gs/helper: Throw exception if we aren't in a context 2020-07-27 03:39:59 +02:00
Michael Fabian 'Xaymar' Dirks
b2dd816ff2 utility: Don't crash on nullptr in free_aligned 2020-07-27 03:39:59 +02:00
Michael Fabian 'Xaymar' Dirks
69b925a3c8 plugin: Fix missing include 2020-07-27 03:39:36 +02:00
Michael Fabian 'Xaymar' Dirks
fd22746c98 common: Rename LOG_ to DLOG_ to avoid macro confusion 2020-07-26 21:02:32 +02:00
Michael Fabian 'Xaymar' Dirks
cfdc0754ea plugin: Fix problematic 'using namespace' code 2020-07-26 19:22:48 +02:00
Michael Fabian 'Xaymar' Dirks
d410b4296f obs/source-tracker: Don't leak pointers to sources 2020-07-26 19:22:35 +02:00
Michael Fabian 'Xaymar' Dirks
aad7f64800 configuration: Don't leak pointers and add messages to exceptions 2020-07-26 19:22:23 +02:00
Michael Fabian 'Xaymar' Dirks
f10258becb encoders/handlers/nvenc: Don't list 'each' mode for H.264 2020-07-06 01:28:30 +02:00
Michael Fabian 'Xaymar' Dirks
1ba3db5719 encoders/handlers/nvenc: Improve UI/UX for NVENC
* "Quality" Minimum/Maximum is actually QP Minimum/Maximum
* Bitrate Limits is now just Limits
* Buffer Size and Quality Target have been moved into "Limits".
2020-07-06 01:28:30 +02:00
Michael Fabian 'Xaymar' Dirks
b142f363db encoders/handlers/nvenc: Update names 2020-07-06 01:28:30 +02:00
Michael Fabian 'Xaymar' Dirks
82a1260ddc encoders/ffmpeg: Add support for settings migration 2020-07-06 01:27:34 +02:00
Michael Fabian 'Xaymar' Dirks
717b38f3f7 gfx/shader: Add Per-Instance/Activation/Frame Random values 2020-07-06 01:27:23 +02:00
Michael Fabian 'Xaymar' Dirks
3de7a87de6 filters/shader: Fix occasional invisibility problem 2020-07-06 01:27:09 +02:00
Michael Fabian 'Xaymar' Dirks
c9769637be sources/mirror: Retrieve source size on acquire 2020-07-06 01:20:00 +02:00
Michael Fabian 'Xaymar' Dirks
cc6a2a1b1a filters/shader: Don't use scaled size for input capture 2020-07-06 01:06:54 +02:00
Michael Fabian 'Xaymar' Dirks
dcf0bb49b8 gfx/shader: Increase size limit and function to get base size 2020-07-06 01:06:54 +02:00
Michael Fabian 'Xaymar' Dirks
d1fcb73435 obs/encoder-factory: Fix incorrect proxy registration 2020-07-06 01:03:58 +02:00
Michael Fabian 'Xaymar' Dirks
95f022feea project: Adjust object Ids and add proxies for compatibility 2020-06-21 19:28:10 +02:00
Michael Fabian 'Xaymar' Dirks
cf398d01da obs/source-factory: Add function to register proxy objects
Proxies allow for older configurations to work fine on newer versions, without having to manually adjust the scene collection to match the new ids at all. Thanks to the migration system we can freely support any number of old versions, as long as we write migration code.
2020-06-21 19:28:10 +02:00
Michael Fabian 'Xaymar' Dirks
7eaaab8630 nvidia/cuda/cuda: Convert to global Singleton 2020-06-21 19:27:58 +02:00
Michael Fabian 'Xaymar' Dirks
379d96044d nvidia/cuda: Remove 'cu_' prefix from types 2020-06-21 19:27:57 +02:00
Michael Fabian 'Xaymar' Dirks
b89281f320 strings: Add global id prefix 2020-06-21 19:27:57 +02:00
Michael Fabian 'Xaymar' Dirks
77bf25d8fb encoders/ffmpeg: Rename files to match naming scheme 2020-06-21 19:24:59 +02:00
Michael Fabian 'Xaymar' Dirks
6e0f85d3f7 encoders/ffmpeg: Rebase onto obs::encoder_factory 2020-06-21 19:24:58 +02:00
Michael Fabian 'Xaymar' Dirks
18980b8863 obs/encoder-factory: Factory to create encoder instances 2020-06-21 19:24:58 +02:00
Michael Fabian 'Xaymar' Dirks
2ba556d99e project: Apply formatting 2020-05-31 20:21:55 +02:00
Michael Fabian 'Xaymar' Dirks
88e5a12cb9 source/mirror: Fix rare out-of-order lock on source
Occasionally, mostly due to other sources rebuilding their UI, an out-of-order lock freeze can be observed with Source Mirror. This is unwanted, so we need to move the freezing logic into a place where freezing shouldn't happen.

Fixes #228
Actually fixes #61
2020-05-31 20:21:29 +02:00
Michael Fabian 'Xaymar' Dirks
8a8b0cf3fa ffmpeg/tools: Fix incorrect colors for sRGB 2020-05-31 17:20:58 +02:00
Michael Fabian 'Xaymar' Dirks
e3817bc087 encoders/ffmpeg: Assume source pixel format for empty support lists 2020-05-31 02:49:32 +02:00
Michael Fabian 'Xaymar' Dirks
85f2ebc7e7 configuration: Fix failed saving due to invalid path 2020-05-31 01:49:17 +02:00
Michael Fabian 'Xaymar' Dirks
c667b8a147 ui: Fix about dialog not being shown and move menu
Moves the menu for StreamFX to the primary menu, so that it is not hidden under tools. This makes it clearer to the user if their installation of StreamFX is working correctly, in addition to reducing the steps necessary to use the menu.

Also the 'About StreamFX' dialog now actually shows up for every update, as expected.
2020-05-31 01:46:38 +02:00
Michael Fabian 'Xaymar' Dirks
e1afa67e9c transitions/shader: Fix order of assignment 2020-05-31 01:41:07 +02:00
Michael Fabian 'Xaymar' Dirks
eaf89193fb gfx/shader/param/basic: Fix bool and suffixes, add enums and optimize
Adds support for enumerations, a different way of selecting how something should behave in a shader. Enumerations rely on a continuous list of values, and will automatically detect how many values there are in the enumeration. Only non-vector types are supported as enumeration entries, and array/vector parameters can have each member set to a different enumeration value.

Furthermore suffixes now are properly assigned, and 'bool' no longer causes shaders to stop rendering. Additionally by inlining some functions and using std::string_view we can achieve a slightly better performance than before.
2020-05-31 01:41:07 +02:00
Michael Fabian 'Xaymar' Dirks
7b8774b834 gfx/shader: Inlining, std::string_view and optimizations 2020-05-31 01:41:07 +02:00
Michael Fabian 'Xaymar' Dirks
7a9f1e9a5b obs/gs/effect-parameter: Use string_view over std::string
Using std::string_view over std::string (and const std::string&) has the advantage that we skip potential temporary std::string objects that are immediately thrown away, thus slowing down the code. It can also be implicitly cast to std::string, which makes it compatible with existing code that uses std::string.
2020-05-31 01:41:07 +02:00
Michael Fabian 'Xaymar' Dirks
bd00fd3836 ui/about: Add 'Thank You' images to the About dialog
Images were created by the talented Inga (https://twitter.com/IngaPotejto).
2020-05-31 01:40:44 +02:00
Michael Fabian 'Xaymar' Dirks
f111330f8e filters/nv-face-tracking: Improve tracking and remove high priority CUDA stream
The high priority CUDA stream causes libOBS to be at a lower priority than the tracking, which is not what we want. Instead we want tracking to be incomplete in those cases, rather than slowing down encoding and other things.

Geometry updates are also now done once per frame instead of one per tracking update, which should improve the smoothness without affecting performance too much. Additionally all tracking info is now in the 0..1 range, which drastically simplifies some math - especially with texture coordinates.

To deal with tracking and updates being asynchronous, a very simple approximation of movement velocity has been added. This is mostly wrong, but it can bridge the gap where tracking updates are slower, as the values are all filtered anyway.
2020-05-13 02:30:15 +02:00
Michael Fabian 'Xaymar' Dirks
ef283d219c nvicia/cuda-context: Don't modify the primary context
Doing so could potentially cause other CUDA implementations to suddenly fail.
2020-05-13 02:30:15 +02:00
Michael Fabian 'Xaymar' Dirks
1902df524c nvidia/cuda: Add cuCtxCreate, cuCtxSynchronize 2020-05-13 02:30:15 +02:00
Michael Fabian 'Xaymar' Dirks
a26827f614 ui/about: Add version information 2020-05-12 15:07:38 +02:00
Michael Fabian 'Xaymar' Dirks
54fc987f51 obs/gs-helper: Optimize performance with inline 2020-05-12 04:13:20 +02:00
Michael Fabian 'Xaymar' Dirks
5892f8a85c util/threadpool: Formatting and allow cancelling of tasks 2020-05-12 04:13:11 +02:00
Michael Fabian 'Xaymar' Dirks
920f35fcdf project: Optimize to use single fullscreen tri instead 2020-05-02 21:43:14 +02:00
Michael Fabian 'Xaymar' Dirks
2f853ac166 gs-helper: Only include debug markers if profiling is enabled 2020-05-01 11:37:24 +02:00
Michael Fabian 'Xaymar' Dirks
d72f6a3991 project: Improve performance profiling support
Adds a new CMake option "ENABLE_PROFILING" which enables all CPU and GPU performance profiling available in StreamFX for tracking what's actually causing things to be slow.
2020-05-01 11:37:24 +02:00
Michael Fabian 'Xaymar' Dirks
c2c31d1d70 ffmpeg-encoder/nvenc: Invert "no-scenecut" option for "Adaptive I-Frames"
Our "Adaptive I-Frames" is the inverse of the expected parameter to "no-scenecut" in FFmpegs NVENC.

Related #191
2020-04-26 00:35:03 +02:00
Michael Fabian 'Xaymar' Dirks
363bae9c78 ffmpeg-encoder/nvenc: Test for "h264_nvenc" in for "Adaptive B-Frames"
Fixes the bug where "Adaptive B-Frames" would not be applied in the way it was expected to be applied.

Related: #191
2020-04-26 00:35:03 +02:00
Michael Fabian 'Xaymar' Dirks
ca54fb4d6a gfx-blur-dual-filtering: Implement asynchronous rendering
Asynchronous rendering allows the GPU to perform work while the CPU performs other work, and is significantly faster than lockstep immediate rendering. By reusing existing render targets we can see a performance improvement of up to 500%, while still doing the same things.
2020-04-25 14:57:17 +02:00
Michael Fabian 'Xaymar' Dirks
fd799b458f filter-blur: Add debug markers for performance tracking 2020-04-25 11:57:22 +02:00
Michael Fabian 'Xaymar' Dirks
bc6a0c5281 gfx-blur-*: Add debug markers for performance tracking 2020-04-25 11:57:22 +02:00
Michael Fabian 'Xaymar' Dirks
28aca9ff15 gs-mipmapper: Update API usage, remove broken options and optimize
The new libOBS API allows us to directly access the underlying API instead of having to mess around in memory. By using it we can avoid crashing in case the compiler for it is different, or in case the actual back end structure changes.

Additionally the mostly unimplemented and unused options have also been removed, which streamlines the use of this class even further and reduces both shader and code complexity.

Finally by optimizing the use of the internal render target we can achieve a speed up of up to 3000% over the old way, allowing for many more mipmapped filters.
2020-04-25 08:40:06 +02:00
Michael Fabian 'Xaymar' Dirks
c88301cee2 gs-vertexbuffer: Initialize memory to 0 2020-04-25 08:40:06 +02:00
Michael Fabian 'Xaymar' Dirks
f8972f5667 ui: Fix incorrect namespace for Qt symbol
Q_INIT_RESOURCE and Q_CLEANUP_RESOURCE can't be called from within a namespace and instead have to be in outside of the namespace, so by moving them into small inline functions we can fulfill this restriction.

Related: #192 #155
2020-04-25 01:24:15 +02:00
Michael Fabian 'Xaymar' Dirks
d5eadbc148 gfx-shader: Actually fix the thing 93207d was supposed to fix 2020-04-24 08:53:25 +02:00
Michael Fabian 'Xaymar' Dirks
93207d4655 gfx-shader: Actually write alpha channel to render target 2020-04-24 06:18:12 +02:00
Michael Fabian 'Xaymar' Dirks
9f96c82e87 project: Fix virtual overrides not using the correct type 2020-04-24 05:13:58 +02:00
Michael Fabian 'Xaymar' Dirks
a0e5b6c080 util-profiler: Specify type for template 2020-04-24 05:13:58 +02:00
Michael Fabian 'Xaymar' Dirks
bd0d3e5baa util-profiler: Fix typo with in reparent() 2020-04-24 02:46:36 +02:00
Michael Fabian 'Xaymar' Dirks
fb46ae228d util-event: Fix unknown type 2020-04-24 02:46:36 +02:00
Michael Fabian 'Xaymar' Dirks
c6c8a66b6c gfx-shader: Add default path for file selection 2020-04-24 01:34:31 +02:00
Michael Fabian 'Xaymar' Dirks
7a929d6af4 locale: Add missing and remove unused strings 2020-04-23 09:14:31 +02:00
Michael Fabian 'Xaymar' Dirks
5291b193e2 gfx-shader: Fix rendering at unexpected sizes and fix performance
Fixes rendering at unexpected sizes by first rendering to a render target and then rendering the contents of that render target to the frame buffer instead. This also prevent rendering twice or more, which might cause severe FPS impact.
2020-04-23 08:10:01 +02:00
Michael Fabian 'Xaymar' Dirks
f58ce9f421 project: Implement a brand new UI with fancy windows
Implements support for various new UI features that weren't possible up until now, such as an 'About StreamFX' window with a thank you to everyone that supported the project up until now.
2020-04-23 01:09:02 +02:00
Michael Fabian 'Xaymar' Dirks
d0941895ad project: Refactor into namespace streamfx 2020-04-23 00:50:39 +02:00
Michael Fabian 'Xaymar' Dirks
2ab8949ba5 cmake: Place Windows exclusive functionality into own file 2020-04-22 23:32:22 +02:00
Michael Fabian 'Xaymar' Dirks
9ddc9051c7 configuration: Add global configuration handler 2020-04-22 23:15:32 +02:00
Michael Fabian 'Xaymar' Dirks
6cbfee4579 obs-tools: Add OBS data deleter 2020-04-22 23:15:32 +02:00
Michael Fabian 'Xaymar' Dirks
ce74d2f7cd common: Undefine the unsafe 'strtoll' define from libobs 2020-04-22 23:11:30 +02:00
Michael Fabian 'Xaymar' Dirks
04ac0a640f filter-nv-face-tracking: Improve performance with asynchronous tracking
Through converting the code to a threaded asynchronous approach, the libOBS video renderer no longer has to wait on our tracking code to run, and we can enjoy a little bit of extra calculation time before we actually have to do anything.

However due to the remaining synchronization with the Direct3D11/OpenGL context, it is not entirely safe to spend a full frame tracking as libOBS will then start skipped/dropping frames. Even though the priority of the stream is now increased, this still means that we can't just sit around and have to quickly finish all work.

Related #150
2020-04-17 11:44:37 +02:00