0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-19 20:32:15 +02:00
Commit Graph

14485 Commits

Author SHA1 Message Date
Norihiro Kamae
e3265fd3e6 CI: Enable diagnostics color on CI build on Ubuntu 2024-09-10 14:30:17 -04:00
Norihiro Kamae
14aaaa325b cmake/linux: Move color diagnostics setting to preset for ubuntu-ci
This also removes color diagnostics setting for cmake < 3.24.
2024-09-10 14:30:17 -04:00
Gale, Thy-Lan
9f4f2e9754 obs-qsv11: Fix CBR Spike 2024-09-10 14:13:29 -04:00
tytan652
129d4f2f3f cmake: Avoid breaking ABI through major version bump on Linux
Freeze SOVERSION to 30, this number is to be incremented when a clean
break is wanted.
2024-09-10 00:41:26 -04:00
Scott Cooper
dfe6151465 win-capture: Fix segfault when calling data.free()
data.free should be checked before calling.
2024-09-07 16:09:03 -07:00
Ryan Foster
df742ed032 CI: Pin actions/upload-artifact to v4.3.5 for windows-patches
Work around a bug with too many open files in versions before v4.3.5 and
also in v4.3.6 due to a revert. The relevant error message is:

Error: EMFILE: too many open files

We applied the same workaround to release/30.2.
2024-09-06 14:49:07 -04:00
Alex Luccisano
e11d206da8 rtmp-services: Refactor Twitch/Amazon IVS support
Separate the commonly used functions into service-ingest.c/h.
Split the Amazon IVS support out of the Twitch specific files
and into the new amazon-ivs.c/h files. This allows for clean
usage of `struct ingest` between the two services.
2024-09-06 13:40:07 -04:00
Ruwen Hahn
adcaf539c9 UI: Add Amazon IVS auto config QoL changes
This doesn't generally make the speedtest work for Amazon IVS, since
most Amazon IVS channels will be disconnected if the bitrate being
sent exceeds the upper limit for that channel.
2024-09-06 13:40:07 -04:00
Ruwen Hahn
fc60ca63dc rtmp-services: Add Amazon IVS auto server entries 2024-09-06 13:40:07 -04:00
Ruwen Hahn
6fbb06d1c2 rtmp-services: Load Twitch/Amazon IVS rtmps URLs when refreshing 2024-09-06 13:40:07 -04:00
Ruwen Hahn
6440a60d1d rtmp-services: Add Amazon IVS ingest refresh infrastructure 2024-09-06 13:40:07 -04:00
Ruwen Hahn
717161f246 rtmp-services: Extract Twitch specific info from ingest update code 2024-09-06 13:40:07 -04:00
Ruwen Hahn
b029ebfdc2 rtmp-services: Add more granular Amazon IVS service servers 2024-09-06 13:40:07 -04:00
tytan652
8963d25dd2 build-aux: Update Flatpak modules
* Update SVT-AV1 to 2.2.1
* Update FFmpeg to 7.0.2
* Update LuaJIT to 2.1 f725e44cda
* Update Asio to 1.31.0
* Update qrcodegen-cmake to v1.8.0-cmake3
2024-09-05 23:56:00 -04:00
Ryan Foster
6bd2fdd717 CI: Update deps to 2024-09-05 release
Notable changes:
 * deps.windows: Disable x86 build slice for dependencies
 * deps.qt: Disable x86 build slice for Qt6
 * CI: Remove Windows x86 slices for Qt6 and FFmpeg builds
 * deps.ffmpeg: Disable Windows x86 build slice for FFmpeg dependencies
 * deps.ffmpeg: Update libvpx to v1.14.1
 * deps.ffmpeg: Update SVT-AV1 to 2.2.1
 * deps.ffmpeg: Update aom to 3.9.1
 * deps.ffmpeg: Update AMF to 1.4.34
 * deps.ffmpeg: Update FFmpeg to 7.0.2
 * deps.macos: Update LuaJIT to 2.1 f725e44cda
 * deps.macos: Update FreeType to 2.13.3
 * deps.macos: Update Asio to 1.31.0
 * deps.macos: Update qrcodegen-cmake to v1.8.0-cmake3
 * deps.macos: Update Sparkle to 2.6.4
 * deps.qt: Update Qt to 6.7.2 for macOS
 * deps.qt: Update Qt to 6.7.2 for Windows
 * deps.windows: Update FreeType to 2.13.3
 * deps.windows: Update curl to 8.9.1
 * deps.windows: Update LuaJIT to 2.1 f725e44cda
 * deps.windows: Update Asio to 1.31.0
 * deps.windows: Update qrcodegen-cmake to v1.8.0-cmake3
 * deps.windows: Update WIL to v1.0.240803.1
 * deps.ffmpeg: Remove MbedTLS CMake files from macOS FFmpeg package

Also update Sparkle to match the obs-deps version.
2024-09-05 23:32:34 -04:00
Alex Luccisano
ea9e033d26 UI: Enable BPM for multitrack video 2024-09-05 16:38:58 -04:00
Alex Luccisano
07d504e5c7 shared/bpm: Add BPM (Broadcast Performance Metrics)
Introduce support for delivering BPM (Broadcast
Performance Metrics) over SEI (for AVC/H.264 and
HEVC/H.265) and OBU (for AV1) unregistered messages.
Metrics being sent are the session frame counters,
per-rendition frame counters, and RFC3339-based
timestamping information to support end-to-end
latency measurement.

SEI/OBU messages are generated and sent with each IDR
frame, and the frame counters are diff-based, meaning
the counts reflect the diff between IDRs, not the running
totals.

BPM documentation is available at [1].

BPM relies on the recently introduced encoder packet timing
support and the packet callback mechanism.

BPM injection is enabled for an output by registering
the `bpm_inject()` callback via `obs_output_add_packet_callback()`
function. The callback must be unregistered using
`obs_output_remove_packet_callback()` and `bpm_destroy()`
must be used by the caller to release the BPM structures.

It is important to measure the number of frames successfully
encoded by the obs_encoder_t instances, particularly for
renditions where the encoded frame rate differs from the
canvas frame rate. The encoded_frames counter and
`obs_encoder_get_encoded_frames()` API is introduced
to measure and report this in the encoded rendition
metrics message.

[1] https://d50yg09cghihd.cloudfront.net/other/20240718-MultitrackVideoIntegrationGuide.pdf
2024-09-05 16:38:58 -04:00
Alex Luccisano
0a36ed1164 libobs: Add a packet callback mechanism
Packet callbacks are invoked in `send_interleaved()` and
are useful for any plugin to extend functionality at the
packet processing level without needing to modify code in
libobs. Closed caption support is one candidate that is
suitable for migration to a packet callback.

The packet callback also supports the new encoder packet
timing feature. This means a registered callback will have
access to both the compressed encoder packet and the associated
encoder packet timing information.
2024-09-05 16:38:58 -04:00
Alex Luccisano
6a53b8928f libobs: Add encoder packet timing support
Introduce support for the `encoder_packet_time` struct
to capture timing information for each frame, starting
from the composition of each frame, through the encoder,
to the queueing of the frame data to each output_t.

Timestamps for each of the following events are based on
`os_gettime_ns()`:

CTS: Composition time stamp (in the encoder render threads)
FER: Frame encode request
FERC: Frame encoder request completely
PIR: Packet interleave request (`send_interleaved()`)

Frame times are forwarded through encoder callbacks in the
context that runs on the relevant encoder thread, ensuring
no race conditions with accessing per encoder array happen.
All per-output processing happens on data that is owned by
the output.

Co-authored-by: Ruwen Hahn <haruwenz@twitch.tv>
2024-09-05 16:38:58 -04:00
Ruwen Hahn
26b7b4511c libobs/util: Add os_nstime_to_timespec 2024-09-05 16:38:58 -04:00
Ryan Foster
f5646c6aaf obs-websocket: Update version to 5.5.3
Changes:
- Remove legacy CMake
- Fix various build issues

Changelog:
a73c92788d
2024-09-05 15:45:31 -04:00
Lain
a1db1e8482 win-capture: Fix display capture capturing on create
Prevents Display capture from capturing the first display on creation.
This issue is due to the properties view combo box automatically
selecting the first item in the list by default, but this needs explicit
text anyway to indicate display, so this adds a "[Select a display]"
item that will prevent that from happening and tell the user to select a
display.
2024-09-03 13:28:29 -07:00
Lain
e9c8e10729 win-capture: Fix window capture capturing random windows
This is due to the property view widget not having an item to select, so
it selects the first one, but we want to have specific text for this
anyway, so changing it here is still appropriate. (I don't want to touch
the properties view widget right now for the sake of my sanity)
2024-09-03 13:28:29 -07:00
Lain
9107b90fb3 linux-capture: Fix xshm capturing first display on creation
Like xcomposite, this was programmed to select the first display by
default. Change it to not capture any display unless explicitly selected
by the user.
2024-09-03 13:28:18 -07:00
Lain
dd64fef084 linux-capture: Fix xcomp capturing random windows
There are two situations where xcomposite window capture will capture
random windows: on first creation, and when going to the properties when
the current window is invalid. The first happens because for whatever
reason someone decided to just make it capture the first top-level
window if there is no set value. The second happens because the
properties widget cannot find the value it's looking for and defaults to
the first one when the properties are opened, thus selecting and
capturing the first window in the list (which is probably something we
should fix in the properties view at some point but I don't want to dive
into code that's even *more* cursed than xcomposite code right now)

I think that this was a major oversight and that whoever wrote it
however many countless years ago did not realize that this is something
that maybe users don't want to have happen.

So instead, this diff makes it so that on first creation, it creates a
value that says "[Select a window to capture]" that keeps the capture
inactive until a user actually chooses a window rather than the
top-level window. It also makes it so that if the user has a window that
is no longer valid, it will keep that window in the list and as the
currently selected value, which prevents it from automatically selecting
the first window in the list when properties are opened.

(Have I mentioned xcomposite is cursed? Trying to debug xcomposite code
in a debugger freezes my window compositor and forces me to do a hard
restart of my entire computer, so I was forced to use printf debugging.
Absolute nightmare-inducing code in here.)
2024-09-03 13:28:18 -07:00
Lain
c36575774b linux-capture: Add xcomp func for comparing encoded window IDs
This is cursed. Window ID storage for xcomposite capture is absolutely
cursed. It should not be storing the window handle with this. I'm pretty
sure that whoever wrote it at the time decided to store the god-forsaken
window handle (which does not persist after the window closes) as part
of the ID because they were afraid it might capture the wrong window if
they close OBS and open it up again while the window still exists.

Again, xcomposite capture is absolutely cursed.
2024-09-03 13:28:18 -07:00
Lain
74e49272ba linux-capture: Fix potential null pointer dereference
I'm not happy.
2024-09-03 13:28:18 -07:00
Lain
4d7bc233d7 linux-capture: Move xcomp window ID decoding to its own func
Moves the window handle/name/class decoding code out of the
xcb_find_window() function and into its own dedicated function so it can
be used elsewhere. This s*** is cursed.
2024-09-03 13:28:18 -07:00
Lain
c837d3b533 linux-capture: Set xcomposite capture retry interval to 2sec
Half a second was a bit too often and was spamming the debug logging
when a window wasn't found.
2024-09-03 13:28:18 -07:00
derrod
c521b23619 libobs: Always set initial scene item pos to top-left corner
In relative mode (0, 0) is the center of the screen, so in order to
maintain previous behaviour we need to convert the value here.
2024-09-02 20:39:18 +02:00
tytan652
34735be094 UI: Fix Qt UIC warning in settings UI 2024-08-31 12:06:38 -04:00
gxalpha
7b0e154245 UI: Replace remaining SIGNAL/SLOT macros 2024-08-31 11:39:08 -04:00
gxalpha
296a2b8631 cmake: Exclude macOS .DS_Store from resources 2024-08-31 10:39:11 -04:00
gxalpha
efa291b140 shared/qt: Remove unused graphics include from qt-wrappers 2024-08-30 23:55:45 -04:00
gxalpha
213e0f1396 shared/qt: Unlink slider-ignorewheel from libobs
As the obs.hpp include is unused and can get removed, the entire linkage
to libobs is unnecessary.
2024-08-30 23:55:45 -04:00
tytan652
b7dbaf4eee build-aux: Update Flatpak CEF from 103/5060 to 127/6533
The CEF module is also modified to:
- Use the pre-built wrapper included in the tarball
- Preserve debug symbols inside its binaries
  - The copy done later by OBS Studio build-system will be split from
    its debug symbols
2024-08-30 23:05:05 -04:00
Ryan Foster
3559fdad0f CI: Update CEF from 103/5060 to 127/6533 2024-08-30 22:38:35 -04:00
Ryan Foster
16011f7c29 obs-browser: Update version to 2.24.2
98d94a4 - Enable Qt message loop on Linux
8e2b31f - Set the right Ozone platform on Linux
6451941 - Wait on shutdown for docks to close on Linux
174e6a8 - Remove CMake legacy code path
e4e523d - Update version to 2.24.2
2024-08-30 18:29:57 -04:00
Ryan Foster
9925345eb6 CI: Update flatpak-builder and flat-manager actions
This should remove some warnings on CI about deprecated GitHub Actions
versions.
2024-08-29 13:31:39 -04:00
gxalpha
f1f89a4864 shared/properties-view: Remove Qt 6.2 cmake code 2024-08-28 23:21:06 -04:00
gxalpha
270cebe581 shared/properties-view: Use IconLabel for help icon
Changes the icon rendering for the properties view "question mark" icon
from Qt label HTML to use the IconLabel widget. This makes the label
high DPI.
Unfortunately the properties view code is a complete nightmare and in a
way, this PR makes this worse by adding the "leftWidget" widget as a
placeholder for what the "normal" label used to be, but you can't easily
replace that label with the icon label (while retaining prior
modifications from other nightmare code) so here we are. The entire
thing needs to be burnt to the ground and be rebuilt from the ground up
but that's a task for another day.
2024-08-28 19:42:10 -04:00
gxalpha
7840c53eff shared/qt: Add IconLabel widget 2024-08-28 19:42:10 -04:00
derrod
22fc29c5b4 docs,libobs: Remove deprecated service APIs
Deprecated in 29.1
2024-08-28 19:10:27 -04:00
derrod
b7553b5883 docs,libobs: Remove master volume functions
Never implemented, deprecated in 29.0.
2024-08-28 19:10:27 -04:00
derrod
8729cebce7 docs,libobs: Remove deprecated scene item transition functions
Deprecated in 28.0, documentation erroneously states 27.2.

The following functions were erroneously not marked as deprecated in
the header:
- obs_sceneitem_set_show_transition()
- obs_sceneitem_set_show_transition_duration()
2024-08-28 19:10:27 -04:00
derrod
75cde08e8d libobs: Rename OBS_NIX_PLATFORM_X11_GLX to OBS_NIX_PLATFORM_INVALID
Deprecated in 28.0.
Renamed so that the values of non-deprecated members stay the same.
2024-08-28 19:10:27 -04:00
derrod
84d462c31c libobs: Remove obs_hotkey_enable_strict_modifiers()
Deprecated in 28.0.
2024-08-28 19:10:27 -04:00
derrod
03fbe28717 libobs: Remove base_set_allocator()
Deprecated in 28.0.
2024-08-28 19:10:27 -04:00
derrod
71d49b0ef2 docs,libobs: Remove/internalize deprecated addref functions
These have been deprecated for external users since 27.2 (early 2022)
and only two are still in use internally.
2024-08-28 19:10:27 -04:00
derrod
78bc3300c0 libobs: Remove obs_volmeter_{get,set}_update_interval()
Deprecated in 27.2.
2024-08-28 19:10:27 -04:00