274 Commits
Author SHA1 Message Date
Exeldro fc21c0f2f6 libobs: Fix scene and group load state 2025-09-03 14:14:49 -04:00
Sebastian Beckmann cdf4f672dd libobs: Remove unused code
I forgot to remove this when removing the only functions that used it.

Amends 163493d1e1.
Amends d283181c83.
2025-08-22 21:11:53 -04:00
pkv 50cdabbb5f libobs: Fix audio duplication
This fixes the following bug:
- a source might be copied into the same scene or through a nested scene.
The audio level will then increase by +6 dBFS.
An earlier fix [1] dealt with this bug at the scene audio rendering
level, which leaves some edge cases since the fix is not located
directly in the core audio callback.
The current fix consists in:
- tagging individual sources which appear several times in the audio
tree at each tick;
- promote them to root_nodes sources;
- bypass their mixing in scenes and transitions.
Due to being mixed as root_nodes, the audio of duplicated sources
appears only once in the final audio mix.

[1] https://github.com/obsproject/obs-studio/pull/10537

Signed-off-by: pkv <pkv@obsproject.com>
2025-08-22 16:01:13 -04:00
pkv f027f62f90 Revert libobs: Mix audio of each source in a scene only once
This reverts commit: 8a38e33 [1].
This also reverts commit: 72924ac [2].
(in favour of a fix in core audio pipeline, which allows to address
edge cases).

[1] libobs: Mix audio of each source in a scene only once
https://github.com/obsproject/obs-studio/commit/8a38e3375b63692b01e5088d37f531f36a5d39f9
[2] libobs: Deduplicate audio for nested scenes/groups if not
transitioning
https://github.com/obsproject/obs-studio/commit/72924ac1f3c4c55de038fe1f03a0e197a155d5e7

Signed-off-by: pkv <pkv@obsproject.com>
2025-08-22 16:01:13 -04:00
Sebastian Beckmann b7c399f6d8 libobs: Remove v1 scene item transform API
Deprecated since 4b138f674f (30.1).
2025-08-20 18:05:15 -04:00
Sebastian Beckmann d283181c83 libobs: Remove obs_scene_sceneitem_from_source
Use obs_scene_enum_items to find sources instead.

Deprecated since 4dd3cf6758 (31.0).
2025-08-20 18:05:15 -04:00
Dennis Sädtler 33734ef99c libobs: Fall back to main canvas dimensions if group canvas unset 2025-05-07 14:01:15 -04:00
Dennis Sädtler f1e44c122c libobs: Improve readability of scene duplication type 2025-05-05 15:19:31 -04:00
Ilya Melamed a19945b53a libobs: Fix setting non-0 order on only scene item 2025-04-28 13:50:01 -04:00
Dennis Sädtler dac0be2cbe libobs: Use UUIDs in scene undo/redo data
Since scenes now can have non-unique names by being part of different
canvases, use UUIDs instead.
2025-04-02 12:39:46 -04:00
Dennis Sädtler 3d57b1fd63 libobs: Introduce Canvases
This adds a new obs_canvas object that acts as a shareable
(reference-counted) owner of views, mixes, and (optionally) scenes.

This is a step towards faciliatating multi-canvas and multi-output
features in OBS Studio.

It solves a number of complications that exist with the manual approach
of using views, such as audio mixing, source active-state tracking, and
scenes not havinga  reliable way of identifying the actual available
canvas size.
2025-04-02 12:39:46 -04:00
Exeldro 5ca6e1effa libobs: Fix duplicating scene with custom size 2025-03-26 15:17:13 -04:00
derrod 10dc43b3cd libobs: Remove relative positioning functions
Revert "docs: Add new relative positioning scene functions"

This partially reverts commit 366cfdb963.

The addition of obs_sceneitem_(get/set)_info2 was not removed as that is
still valid.
2024-12-04 14:41:03 -05:00
derrod e9c6105f99 libobs: Fix scale calculation when applying new group transform 2024-12-03 15:33:36 -05:00
derrod e97d7c10c2 libobs: Fix items in groups using wrong scale reference 2024-10-16 12:24:18 -04:00
derrod bece05bbc6 libobs: Fix ungrouped transfom calculation in relative mode 2024-10-16 12:24:18 -04:00
Ryan Foster a1fbf1015f clang-format: Increase column limit from 80 to 120 2024-10-04 18:19:27 -04:00
derrod 92a38bcd40 libobs: Disable transform debug logging by default 2024-09-26 17:46:47 -04:00
derrod 5fea7d325e libobs: Fix crop values for new nested scene sources being incorrect 2024-09-26 16:08:42 -04:00
gxalpha 16b8e9c3fe libobs: Deselect scene item before removing
Makes sure that a scene item that gets removed is in the "not selected"
state, no matter whether it was selected before. This causes the
"item_deselect" signal to be sent if the item is selected while being
removed.
2024-09-16 18:10:12 -04: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
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 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 ddd586ae03 libobs: Allow scene items to use legacy absolute mode
This is to keep old collections running in relative mode until they
can be migrated.
2024-08-27 23:58:51 +02:00
derrod 1565ca8eb1 libobs: Change scene items to using relative coordinates 2024-08-27 23:58:51 +02:00
derrod a50320464a libobs: Force sceneitem transform update if scene dimensions change 2024-08-27 23:58:51 +02:00
derrod 72924ac1f3 libobs: Deduplicate audio for nested scenes/groups if not transitioning 2024-05-18 16:44:45 -07:00
derrod 8a38e3375b libobs: Mix audio of each source in a scene only once 2024-05-18 16:44:45 -07:00
Exeldro 806c72fc66 libobs: Save crop to bounds when saving transform states
(Lain note: Splitting parent commit. This was probably unintentionally
not taken into account in the origin crop_to_bounds PR.)
2024-02-20 21:18:51 -06:00
Exeldro f275080abb libobs: Fix crop to bounds ABI break 2024-02-20 21:18:51 -06:00
derrod 6fea91067f libobs: Pass parent pointer into signal_item_remove
With aaf8d8b38f changing the order
item->parent would be NULL thus resulting in a crash.
2024-01-07 02:28:53 +01:00
derrod aaf8d8b38f libobs: Send item_remove signal after detaching item 2024-01-06 17:48:37 -06:00
derrod f6c8fe7b64 libobs: Fix crop to bounding box not being duplicated with item 2024-01-03 22:03:16 +01:00
derrod 7e456d9dea libobs: Add automatic cropping to bounds for scene items 2023-12-16 18:00:11 -06:00
sora-blue 8fc0489e4a libobs: Fix scene_enum_sources skipping some active sources
If an item's show/hide transition was active the underlying source
would not previously not be enumerated, resulting in reference leaks by
the UI or other components waiting for the source to be deactivated to
release it.
2023-12-08 14:10:12 +01:00
tt2468 76f332a379 libobs: Consolidate scene item remove code
Removes the internal helper `remove_without_release()` and branches
`obs_sceneitem_remove()` into public and internal versions.

The `obs_sceneitem_set_transition()` calls were missing from the
`remove_without_release()` function, so this resolves that issue
implicitly. Code cleanup mentioned above is done to hopefully avoid
these mistakes again.
2023-11-18 17:30:11 -06:00
Norihiro Kamae 9391ab305e libobs: Fix memory leak when migrating from legacy scene item data
Before the commit 763dddbbaf, hotkeys to show and hide scene items are
distinguished by source name instead of ID. When migrating from the
legacy data structure, the pointer to the data was not released.
2023-11-16 16:27:23 -05:00
tt2468 3e6797ca5b libobs: Fix crash in obs_sceneitem_remove() when already removed
An already-removed item has a NULL `item->parent`, meaning that calling
`full_lock(scene)` results in undefined behavior. This makes the method
return earlier if the specified item is removed instead of attempting
to lock the scene.

No thread safety is changed, because it wasn't thread-safe to begin
with.
2023-11-13 22:37:42 -08:00
derrod 731da1be6b libobs: Fix hotkeys when reordering sceneitems into/out of groups 2023-10-08 02:00:46 +02:00
derrod 763dddbbaf libobs: Distinguish sceneitem hotkeys by id 2023-10-08 02:00:46 +02:00
derrod 4bb2365a62 libobs: Specify scene item IDs on creation 2023-10-08 02:00:46 +02:00
Penwywern 23ca4cf704 libobs: Fix flip calculations in bounding box
This fixes flipping behaviour when positional alignement inside the
bounding box is other than centered, bringing it in line with the
behaviour when centered, i.e. flip the item in-place in the bounding
box.
2023-07-25 16:01:04 -07:00
Penwywern 8789c43959 libobs: Fix flip not working with stretch to bounds 2023-07-08 16:42:15 -07:00
Norihiro Kamae 8169188f89 libobs: Define DARRAY macro types
To avoid passing `struct darray *` type, which cannot hold the type
information, this commit defines array types and uses that types on the
function parameters.
2023-07-01 00:39:13 -07:00
derrod 0cb812251c libobs: Add scene uuid to transform state data 2023-06-28 11:04:56 -07:00
Lain 106c7aa61f Update copyrights/names 2023-05-20 01:31:18 -07:00
Jim 38e5411490 libobs: Prevent setting invalid scene item scale values
Fixes obsproject/obs-studio#7962
2023-05-19 17:31:14 -07:00
cg2121 d291830d23 libobs: Copy private scene item data when duplicating scenes
For example, this makes sure scene item colors are copied when
duplicating a scene. This also removed the now redundant private data
variable.
2023-03-25 18:30:31 -07:00
Jim 6eace37e06 Merge pull request #8229 from derrod/hashed-tables
Hashtable Adventures
2023-03-19 00:34:44 -07:00
Norihiro Kamae 434bdc1768 libobs: Fix possible use-after-free of obs_scene_t
When creating a group, a newly allocated group `sub_scene` is released
just after calling `obs_scene_add_internal`.
If another thread released the scene-item, which is the sub_scene,
use-after-free might happen.
2023-03-18 15:34:47 -07:00