10855 Commits

Author SHA1 Message Date
Ryan Foster
dbdf82da80 UI: Fix memory leak with Manage Broadcast dialog
When OBS has been connected to a YouTube account, the Manage Broadcast
dialog becomes available. Opening and closing this dialog leaks about
2-3 MB of memory each time. This happens because the dialog is never
deleted, and a new object is created every time the dialog opens.

If we set Qt::WA_DeleteOnClose on the dialog, then the dialog->exec()
call would call delete this. However, if the dialog->Valid() call
returned false (this should currently be impossible), then exec is never
called, so it would not clean up.

To fix this, make the dialog stack-allocated instead of using new and
delete.

Detected by clang-analyzer.
2022-05-16 22:46:50 +02:00
pkv
12d1f1c335 obs-ffmpeg: Fix 4 channel layout in ffmpeg-mux
Previously SPEAKER_4POINT0 was assigned to AV_CH_LAYOUT_QUAD, but later
was changed to AV_CH_LAYOUT_4POINT0 [1]. The change was forgotten in
obs-ffmpeg-mux. This is remedied here.
[1] 67e48ecc2c

Signed-off-by: pkv <pkv@obsproject.com>
2022-05-16 16:17:32 -04:00
pkv
5b6cc73c24 obs-ffmpeg: Fix for channel layout API change
The channel_layout API was overhauled by FFmpeg [1-4]. The previous
bitmask channel_layout is replaced by a struct ch_layout which combines
the number of channels, a bitmask and other infos. This struct must now
be supplied to AVframes since avutil >= 57.24.100 and to
AVCodecContext since avcodec 59.24.100 per (1].
This commit provides the required info to ffmpeg-mux,
obs-ffmpeg-output & to obs-ffmpeg-audio-encoders.

[1] Bump minor versions after the channel layout changes
cdba98bb80
[2] lavc: switch to the new channel layout API
548aeb9383
[3] avutil/channel_layout: Add a new channel layout API
086a804806
[4] avframe: switch to the new channel layout API db6efa18
db6efa1815

Signed-off-by: pkv <pkv@obsproject.com>
2022-05-16 16:17:32 -04:00
pkv
e66542075d libobs: Fix missing include due to FFmpeg 5 changes
Since [1], avcodec/version.h is not included anymore in codec.h and
therefore is not included any more  in avformat.h.
As a result, LIBAVCODEC_VERSION_INT is no longer defined. This commit
fixes the include.
Since obviously we can't ifdef the avcodec include by referring to an
avcodec version, we ifdef it with the avformat version which was bumped
at the same time [2].

[1] libavcodec: Split version.h
f2da2e1458
[2] doc: Add an entry to APIchanges about changes to version.h and
 version_major.h
f3a0e2ee2b

Signed-off-by: pkv <pkv@obsproject.com>
2022-05-16 16:17:32 -04:00
Richard Stanway
377af35016
UI: Move scene import dialog to the stack
Changed for consistency as almost every other dialog in the application
is stack-allocated.
2022-05-16 21:51:01 +02:00
stopforumspam
035ac5e3b7 obs-ffmpeg: Allow setting FFmpeg options for media sources 2022-05-16 15:17:13 -04:00
stopforumspam
3215189c97 deps/media-playback: Add support for FFmpeg options for media playback 2022-05-16 15:17:13 -04:00
Grzegorz Godlewski
b98ce32670 linux-v4l2: Fix camera reconnecting issue
Unable to add device after OBS start. Function device_added is never
called. HAVE_UDEV is not set correctly by cmake.
2022-05-16 13:29:52 -04:00
Kurt Kartaltepe
9b6d39299e linux-capture: Add EGL support for xcomposite
When running on EGL we can use the new create_texture_from_pixmap
functions to implement xcomposite capture.

This removes the texture indirection previously implemented for GLX due
to not using the spriting functionality in the built in shaders. Now
that we texture directly from the pixmap we can remove the red/blue swap
workarounds.
2022-05-15 09:08:53 -03:00
Kurt Kartaltepe
d78b27961c libobs-opengl: Add create_texture_from_pixmap for EGL
create_texture_from_pixmap is only implemented for X11/EGL where it will
bind the provided X11 pixmap to a texture with glEGLImageTargetTexture2DOES
2022-05-15 09:08:53 -03:00
Kurt Kartaltepe
f4a820a4ea deps/glad: update Glad for EGL with new extensions
This updates glad for EGL and adds in several extensions.

EGL_EXT_platform_base
EGL_EXT_platform_xcb
EGL_KHR_image_base
EGL_KHR_image_pixmap

The xcb platform extension is unused but good to include if we want to
try removing more Xlib dependencies. platform_base is included for good
measure as other platform extensions technically build on it. image_base
and image_pixmap are for upcoming xcomposite over EGL support.

It also drops the unused create_context_no_error extensions.
2022-05-15 09:08:53 -03:00
Norihiro Kamae
d044231bfc libobs/media-io: Sleep to next audio time accurately
Prior to this change, the audio thread roughly waits the time of
`AUDIO_OUTPUT_FRAMES`, and consecutively processes twice or more if the
latency is accumulated. This behavior causes fluctuation of timing to
output audio packets. This change introduces `os_sleepto_ns_fast` so
that the audio packets will be periodically output.
2022-05-15 02:31:31 -07:00
Norihiro Kamae
c491594a51 libobs/util: Add os_sleepto_ns_fast
The function `os_sleepto_ns` has a spin loop so it will consume CPU
resource. The new function has same interface but consumes less CPU
resource with a drawback of less precision.
2022-05-15 02:31:31 -07:00
jpark37
8909e44870 libobs: Cap HLG video at 1000 nits 2022-05-14 16:41:03 -07:00
jpark37
d7fb4361a5 libobs: Lock scene to video color space
Fixes studio mode preview on SDR monitor for HDR canvas rendering SDR
source into SDR swap chain. Needs to render SDR source into HDR render
target, and then tonemap into SDR swap chain for preview.
2022-05-14 16:40:28 -07:00
cg2121
8dc91ce5e1 UI: Add rename signal to adv audio dialog
The names wouldn't be updated in the advanced audio dialog
when the source is renamed.
2022-05-14 16:36:00 -07:00
gxalpha
252918a7c4 UI: Put program on top in vertical studio mode
Co-Authored-By: Elias Thompson <email@eliasthompson.com>
2022-05-14 16:15:04 -07:00
gxalpha
15874f9037 UI: Use Shift instead of Alt for Copy/Paste Transform
For Keyboard shortcuts with Ctrl as the primary modifier, the secondary
modifier should be Shift, not Alt. Alt could be used as a tertiary in
the future if really necessary, but generally it should be avoided.
2022-05-14 16:11:07 -07:00
PatTheMav
8d0131c519 obs-scripting: Fix macro redefinition warning
In Python 3.9+, `PyCFunction_New` and `PyCFunction_NewEx` are themselves
macros around `PyMethod_New`. To fix the warning, both macros need to
be untouched for those Python versions, instead the actual function
`PyMethod_New` needs to be imported and aliased.

This commit:

- Adds the import of the `PyCMethod_New` symbol
- Adds the function definition for `Import_PyCMethod_New`
- Adds the `PyCMethod_New` function alias
2022-05-14 16:10:11 -07:00
PatTheMav
a0923c9b6e obs-scripting: Fix loading of scripting libraries with runtime lookup
macOS uses runtime lookup for symbols in obs-scripting. While this guard
fixes a compiler warning, it also leads to the `_PyCMethod_New` symbol
being undefined.

In turn any library linking with obs-scripting will then fail to load
because of that undefined symbol. Removing this guard fixes that issue.
2022-05-14 16:10:11 -07:00
Kurt Kartaltepe
1604400e48 linux-capture: Rewrite xcomposite
Generally moves all the plugin code into xcomposite-input.cpp and
removes all C++ dependencies.

Migrate as much as possible to xcb from Xlib to enable us to handle
errors and attribute them to the correct callers. This caused many other
knock on issues such as wrongly attributed errors and cleanup code
working incorrectly.

That allows us to use the xcursor-xcb implementation and delete the pure
Xlib implementation. We also add the missing functionality from the Xlib
implementation to the xcb implementation.

Capture glXCreatePixmap errors which occur most commonly on
nvidia+gnome due to nvidia's driver being unable to allocate more than 1
pixmap per window and gnome being the only compositor to read window
data via glx pixmaps.

Fix cleanup after failed glXCreatePixmap that might have leaked pixmaps
and prevented later captures on nvidia drivers for the same reason.
2022-05-14 17:01:08 -03:00
Jim
f2ea473373
Merge pull request #6436 from jpark37/jxr-wic
libobs,image-source,UI: Add JXR support on Windows
2022-05-12 16:09:53 -07:00
Ryan Foster
069f35a75c UI: Find Qt WinExtras only in Qt 5
WinExtras does not exist in Qt 6. Only try to find it and link against
it if using Qt 5.
2022-05-11 23:37:41 -07:00
vfernandes-sympla
f516b4c9d9 rtmp-services: Add sympla service 2022-05-11 23:37:13 -07:00
Norihiro Kamae
dd43635e78 libobs: Fix reserved word in variable names
The use of the reserved name caused initialization failure on Linux.
2022-05-11 11:28:20 -04:00
jpark37
0f53dc28bb libobs: Reduce PQ shader math 2022-05-11 03:38:07 -07:00
jpark37
475d8432cb UI: Support JXR image dropEvent on Windows 2022-05-08 15:25:43 -07:00
jpark37
23f3b1da9f image-source: Support JXR on Windows 2022-05-08 15:25:43 -07:00
jpark37
4af20cf080 libobs/graphics: Add color space and WIC support
Only add support for PQ and CCCS JXR images, e.g. Xbox Series X, and
Xbox Game Bar screenshots on Windows.
2022-05-08 15:25:01 -07:00
jpark37
23396e21e5 libobs: Allow transitions to mix CCCS sources
Wasn't sure if CCCS sources should be allowed, but it fits image source.
2022-05-08 14:25:33 -07:00
jpark37
2a0d8d1c9c libobs: Add support for reading I420 PQ
Not normally a valid combination, but Xbox writes 8-bit HDR videos.
2022-05-08 14:12:41 -07:00
jpark37
ed835810b4 libobs: Use tabs in format_conversion.effect 2022-05-08 14:12:41 -07:00
jpark37
e646eb4828 UI: Restore portable mode on Windows 2022-05-08 06:47:09 +02:00
Dossy Shiobara
4405072e29 mac-capture: Improve window capture performance
Replaces the current implementation of Window Capture, which uses Core
Graphics to render a bitmap raster, with one that accesses the window's
CGImage bitmap directly, blits it, and hands that off as a frame to OBS
instead.

Co-Authored-By: Sebastian Beckmann <beckmann.sebastian@outlook.de>
2022-05-07 16:21:25 -07:00
tytan652
ed486b00e1 cmake: Fix headers installation
- Headers are now installed per default on Linux.
- `obs-hevc.h` is not installed if HEVC is disabled.
- OS exclusive headers are no longer installed on the wrong OS.
2022-05-07 16:13:21 -07:00
tytan652
7ed5415a2b libobs: Include HEVC files only if enabled 2022-05-07 16:13:21 -07:00
tytan652
0c33069772 obs-ffmpeg: Fix HEVC include in jim-nvenc 2022-05-07 16:13:21 -07:00
Paul Mc Galey
59bdac1569 vlc-video: Fix video rotation and aspect ratio
Fixes #5250 and #3843.
Gets dimensions, aspect ratio and orientation/rotation from source video track.
2022-05-07 16:03:24 -07:00
Richard Stanway
8bd4ef61a0
obs-ffmpeg: Change types to avoid unnecessary casts 2022-05-07 16:01:48 +02:00
jpark37
5ee5a8e1d4 obs-ffmpeg: Log/fail NVENC for B-frame maximum
Check NV_ENC_CAPS_NUM_MAX_BFRAMES to avoid exceeding the GPU limit.
2022-05-07 01:33:05 -07:00
jpark37
e74dc0dfe3 obs-ffmpeg: Default NVENC HEVC Max B-frames to 0
All NVENC cards support H.264 B-frames, but Turing is the first
generation to support HEVC B-frames.
2022-05-07 01:33:05 -07:00
jpark37
79059153e8 obs-ffmpeg: Fix old NVENC ignoring Max B-frames 2022-05-07 01:33:05 -07:00
jpark37
f6589b12ae UI: Redo encoder names now that H.264 isn't alone
The old names were simple_h264_recording, simple_h264_stream,
recording_h264, and streaming_h264.

The new names are simple_video_recording, simple_video_stream,
advanced_video_recording, and advanced_video_stream.
2022-05-06 20:58:09 -07:00
jpark37
4e35e3402b obs-x264: Restore video encoder name to log 2022-05-06 20:41:15 -07:00
jpark37
2f3c25b544 obs-x264: Disallow HDR attempts gracefully
Replace crash with standard recording failure dialog, and log message.
2022-05-06 14:41:39 -07:00
pkv
5e4081e563 vlc-source: Fix surround sound not properly downmixed
This fixes issue https://github.com/obsproject/obs-studio/issues/6295 .
libvlc does some downmixing/upmixing when the number of channels
requested is less than the number of channels of the source.
We take advantage of that feature to avoid doing it with swresample
because we're missing info that libvlc is not giving (the exact channel
layout of the source).

Signed-off-by: pkv <pkv@obsproject.com>
2022-05-06 12:34:14 -04:00
jpark37
1dc3da4163 UI: Add "H.264" to simple hardware encoders
Hopefully stops people from assuming other video compression standards
are usable from these settings.
2022-05-06 06:11:25 -07:00
jpark37
e513d1cb6b obs-ffmpeg: Fix NVENC HEVC fallback being H.264 2022-05-04 23:54:53 -07:00
PatTheMav
4ac3299575 vlc-video: Fix compiler warnings 2022-05-04 12:09:04 -04:00
PatTheMav
a97f8b7128 mac-vth264: Fix compiler warnings 2022-05-04 12:09:04 -04:00