To create a build system that only produces the core libraries required
for plugin development (libobs and obs-frontend-api), developers could
use the "ENABLE_PLUGINS" cache variable.
This variable was removed and replaced with "ENABLE_CORE_MODULES"
for the plugin manager feature, but disabling building of core modules
made it impossible to build libobs (as the required files were not
generated).
This commit adds temporary support for the deprecated "ENABLE_PLUGINS"
variable (with a deprecation warning) and also ensures that libobs can
be built successfully without any core modules enabled.
Remove the registry key check for the virtual camera module installer.
The regsvr32 will perform this check itself, so we don't need to if the
registration is already present. However, if we want to update the path,
simply checking that the key exists will prevent us from being able to
update the path in the future, and as necessary for OBS v33+. This also
corrects the incorrect file paths to the modules in the new core plugin
structure.
Follow-up to c3046ec172.
That commit completely replaced the various gs_image_file* structs and
functions, but this script was not updated. Use the new structs and
functions to fix the script.
This commit modifies the frontend-tools core module to disable scripting
when OBS is launched in Safe Mode. With the new plugin manager, the
frontend-tools module is loaded even in Safe Mode, but since scripts are
potentially unsafe, this commit checks at plugin load and disables
scripting if Safe Mode is active. The rest of the module will still
function properly.
Moves first-party runtime modules into the "core" directory rather than
the "obs-plugins" directory to better differentiate them from legacy
plugins as well as existing 3rd-party plugins.
This change also requires the existing plugin directory to be explicitly
added as a possible module search path by application logic, as libobs's
internal logic will not add this path anymore and thus third-party
plugins would not be discovered anymore.
Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
Core modules are main OBS Studio functionality implemented as runtime
modules, but are conceptually considered mandatory and the application
is incomplete without them.
This change also introduces a configure-time dependency of core modules
on "libobs" (already a generation-time dependency) and produces a
library target with the names of all core modules available at build
system generation.
Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
This provides the counterpart to the existing "target_disable" function,
which also allows the functionality to be factored out of existing
helper code that might run this implicitly.
Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
This updates the video FX SDK to 1.3.0, which enables arm64 support.
Backwards compatibility with SDK 0.7.6 has been kept.
Signed-off-by: pkv <pkv@obsproject.com>
Voice Activated Detection (VAD) does not work with the room echo removal
(dereverb) FX.
So we remove it from Properties.
Signed-off-by: pkv <pkv@obsproject.com>
SDK 3.0.0 brings compatibility with arm64. The DLL loading sequence has
been adjusted since the FX are now loaded in their own child DLL.
The DLL loader has been also cleaned up by removing unused symbols. This
allowed us to dodge a few ABI breaks from NVIDIA...
Signed-off-by: pkv <pkv@obsproject.com>
Existing registering of the save hotkey in obs-ffmpeg makes it
impossible for it to trigger a frontend event, and is inconsistent with
other existing output hotkeys.
This registers the save hotkey in the frontend and removes the
registration in obs-ffmpeg, and adds a "due to hotkey" log message,
like other output hotkeys.
Construct 3 games register a top-level window class named
"WindowsWebview2Wrapper" which does not contain "Chrome" or "Mozilla",
causing OBS automatic mode to use BitBlt instead of WGC, which results
in a black screen for Construct 3 games.
Add "WindowsWebview2Wrapper" to wgc_whole_match_classes and add
compatibility entries for window capture BitBlt and game capture
warnings.
Closes#13359
AVC and AV1 encoders in AMF that support B-frames were incrementing
`dts_offset` even when B-frames were set to 0. For AVC, adjust the
`dts_offset` only when B-frames are supported and are greater than 0,
and clamp to maximum supported.
For AV1, remove the dts_offset code completely because it is being
ignored anyway. AV1 handles B-frames and offsets differently; refer
to [1] for details.
[1]: https://github.com/obsproject/obs-studio/pull/10996
It's not that uncommon for apps on Windows to use a hacky method of
extending their windows 1-2px past the supported monitor resolution
to preserve "true" windowed fullscreen and circumvent some exclusive
fullscreen-related issues presented by their graphics library,
Windows itself, or both.
Therefore, the fullscreen detection technique has been relaxed
to properly identify windows slightly larger than the monitor's
viewport as fullscreen.
Windows also does something similar, evident by the fact that
the taskbar disappears, as it always does for fullscreen windows,
even when a window stretches slightly beyond the defined viewport.
I discovered while testing that the first split would always be one GOP
too long (e.g. 1m2s instead of 1m) due to the fact that b-frames and
negative start DTSes were not accounted for.
This is now fixed by setting the start_time to the nonzero negative DTS
produced for the first packet. Additionally, a small tolerance of 1 ms
was also added to account for rounding issues present in the first GOP.
Originally, before file splitting was introduced, I made the choice to
simply ignore the last frame in the packet queue of the muxer, because
frame N+1 is required to properly determine the duration and I figured
nobody would notice if their recording is one frame short.
However, when using frame splitting this would result in the last frame
before the split being dropped. To fix this, we can simply reuse the
previous sample's duration for the final sample in a file. Since OBS
only does CFR, they should all be identical anyway.