Commit Graph
100 Commits
Author SHA1 Message Date
Jim 1ea5917973 image-source: Add slide_changed signal
Allows a plugin or script to know when a slide has changed, and which
index/file it's switched to
2023-03-20 11:31:21 -07:00
JimandGitHub e9ef38e3d3 Merge pull request #7978 from jpark37/dxgi-display-sdr-on-hdr
libobs-d3d11,win-capture: Add Force SDR for DXGI duplicator
2023-03-20 01:43:14 -07:00
JimandGitHub 0a9ed4569b Merge pull request #7814 from jpark37/decklink-preview-rescale
decklink: Move preview output rescaling to GPU
2023-03-20 01:42:36 -07:00
JimandGitHub 48293629b6 Merge pull request #8095 from tytan652/service_get_info
RFC 45-6: Enable more connection info in Services API
2023-03-19 19:25:20 -07:00
JimandGitHub 6eace37e06 Merge pull request #8229 from derrod/hashed-tables
Hashtable Adventures
2023-03-19 00:34:44 -07:00
Jimandderrod f4a8814998 libobs: Use uthash for obs data objects
Co-authored-by: Rodney <dennis@obsproject.com>
2023-03-18 10:47:49 +01:00
jp9000andderrod 619edf5e7d libobs: Add pointer to obs_data_item name
Rather than have to look up the string each time, just add a pointer to
the string. Still all stored in the same memory though.
2023-03-18 10:46:28 +01:00
Jim 4bf14d09b4 obs-transitions: Add option to preload stinger video to RAM
Stingers -- and especially track matte stingers -- are currently subject
to real time decoding, which can be detrimental in a production
environment where a stinger video may not be able to decode in a timely
fashion.

To remedy this, this change adds an option to fully decode stingers
immediately and cache the decoded video/audio in RAM for playback to
greatly improve stinger performance.
2023-02-25 18:13:11 -08:00
Jim 4488202247 obs-ffmpeg: Remove unused variables 2023-02-05 02:55:24 -08:00
Jim 1f469e4f7c libobs/media-io: Add get_total_audio_size()
get_audio_size() gets the size of individual planes.
get_total_audio_size() gets the size if you include all planes.
2023-02-05 02:55:24 -08:00
jp9000 2ff210acfd libobs: Update version to 29.0.2 2023-02-04 02:17:49 -08:00
Jim 5d3943ab48 libobs: Update version to 29.0.1 2023-01-31 22:58:37 -08:00
jp9000 301fb48449 libobs: Update version to 29.0.0 2023-01-06 09:42:38 -08:00
jp9000 122e864c38 obs-ffmpeg, obs-qsv11: Ensure adapter order in encoder tests
On systems with multiple graphics adapters, one card can be configured
as power saving, and another card can be configured as performance.
Sometimes, OBS and the encoder test subprocesses will not be configured
the same way, so it's necessary to provide adapter order to the encoder
test subprocesses.

This change ensures the adapter order by passing the LUIDs to the test
subprocesses. The adapter indexes will then be updated accordingly.
2022-12-19 12:17:30 -08:00
jp9000 2396c4a01c obs-ffmpeg: Remove EnumOutputs from encoder tests
This call will fail on multi-adapter systems, and isn't used anyway, so
just remove it. Not sure why it was called in the first place; pretty
sure it was unintended and was likely just copied over from the D3D11
subsystem code.
2022-12-19 12:03:01 -08:00
jp9000 78f3389d17 libobs: Add funcs to get windows video adapter LUIDs
Useful for providing adapter order to encoder test subprocesses
2022-12-19 11:59:44 -08:00
Jim c84fae52e8 obs-ffmpeg: Fix AMF default CQP value
Was 7 for some reason, was supposed to be 20
2022-12-10 19:03:15 -08:00
Jim ddba05c36c obs-ffmpeg: Use enum for av1 encoders
Allows us to add rav1e later
2022-12-05 19:19:20 -08:00
Jim ee88776c7e obs-qsv11: Set subprocess timeout to 10 sec
(Jim note: Apparently my laptop with two intel GPUs actually took too
long, so I'm giving it another 2 seconds max)
2022-12-01 18:34:40 -08:00
jp9000 5496802182 obs-qsv11: Fix QSV detection
When this detection helper was originally written, it incorrectly set
the hardware implementation value. This fixes it to use the correct one
based upon the index.
2022-11-30 13:26:16 -08:00
Jim 5c0773e128 obs-qsv11: Fix encoder capping resolution on dgpus 2022-11-28 08:36:46 -08:00
Jim 9435458c46 Revert "obs-qsv11: Don't set to low power mode if AV1"
This reverts commit eaa85ca8b3.

(Jim note: I misunderstood the situation)
2022-11-28 08:04:20 -08:00
Jim 0aa12088b3 obs-qsv11: Fix HDR not working with AV1
Neither the mfxExtMasteringDisplayColourVolumme and
mfxExtContentLightLevelInfo structures appear to be supported when using
AV1, so if using AV1, do not include these structures.

It's unknown as to why AV1 fails to initialize when using either of
these extended structures as part of its configuration parameters.
Either they're completely unsupported or there's a member variable that
causes initialization to fail.
2022-11-27 14:19:22 -08:00
Jim eaa85ca8b3 obs-qsv11: Don't set to low power mode if AV1
If AV1 is being used, this code path doesn't make sense because it's
meant for older devices. If the encoder is AV1, it's a newer device.
2022-11-27 14:17:38 -08:00
Jim e72aa91a6d obs-qsv11: Keep ExtParam value around
This wasn't meant to be freed in InitParams
2022-11-26 08:44:16 -08:00
jp9000 dd61943ddf obs-qsv11: Remove statics, fix buffer misuse
This whole "array of pointers" thing is very dumb and dangerous.
2022-11-22 17:27:10 -08:00
Jim 37a8835895 obs-qsv11: Don't declare vars in switch w/o braces 2022-11-22 05:56:25 -08:00
Jim 84565000f7 obs-qsv11: Remove unused function 2022-11-22 05:54:22 -08:00
Jim 0870a23d6c obs-qsv11: Fix profile default for AV1
"high" profile is not supported by AV1
2022-11-22 05:44:29 -08:00
Jim 5b11cfd04d obs-qsv11: Remove unused function declaration 2022-11-22 05:23:15 -08:00
Jim 00078a6a73 UI: Add QSV AV1 to simple output mode 2022-11-21 19:08:02 -08:00
Jim 3c4f9f18c7 obs-qsv11: Simplify CQP
Uses the same QP value for B, P, and I frames to simplify the settings
2022-11-21 19:08:02 -08:00
Jim eaf243bca7 obs-qsv11: Add startup process to test QSV support
This simplifies encoder initialization and prevents it from requiring
any sort of unnecessary Direct3D or encoder initiazation tests while OBS
is actually running.
2022-11-21 19:08:02 -08:00
Jim 02d20e9f36 libobs: Fix adapter index not getting applied to resets 2022-11-21 17:56:45 -08:00
Jim e62759a3fa libobs-d3d11: Make sure libobs knows the new adapter index
Because Intel has wonderful code which forces it to run on the iGPU if
there are both an Intel iGPU and an Intel dGPU on the same system, the
adapter index OBS is set to internally will no longer be valid, thus if
anyone calls `obs_get_video_info()` to try to find out what adapter
index OBS is running on, it will be invalid on those computers.
Wonderful.

So, basically, this code here just fixe it so if you want to call
`obs_get_video_info()`, it'll actually have a valid adapter index now,
that way we can reference the adapter index when determining what GPU
we're actually running on without having to like, do anything super
complicated and silly like comparing adapter GUIDs just to figure out
what adapter OBS is actually runing on. I don't want the code to be a
mess anymore.

(I like how in any other situation on the face of the planet, there's no
need to force OBS to run on an integrated adapter. *Normally* OBS
*should* run on the dedicated adapter, that way it can actually capture
games properly. You can probably guess as to why they're forcing it to
run on the integrated adapter rather than the dedicated adapter. But you
know what? Whatever. I don't really care anymore I guess. Just...
whatever. Here we are I guess. Also I was in a bad mood while writing
this just as a disclaimer.)

(I hate that this commit exist. I hate that the commit c83eaaa51c exists
even more.)
2022-11-21 08:47:36 -08:00
JimandGitHub 572407a928 Merge pull request #7809 from obsproject/amf-av1-rebased
Add Hardware AMD AV1 Encoder
2022-11-19 15:52:16 -08:00
Jim 8806738a04 obs-ffmpeg: Change default nvenc preset to P5
P6 seems to invoke lookahead, which causes lag for some older GPUs and
interferes with game performance. So let's just use P5 by default for
now. Shouldn't really affect recording anyway.
2022-11-18 12:38:54 -08:00
Jim 6693f39288 Revert "virtualcam-module: Don't send frames on initial pause"
This reverts commit bcb73cb599.

Annoyingly, this breaks WebEx, likely due to their own bug. This only
breaks Discord under very specific circumstances due to their own bug,
so if I'm going to choose between Discord breaking under very specific
circumstances that rarely occur versus choosing WebEx not working at
all, I'm going to just let Discord be broken under specific/rare
circumstances.

I hate DirectShow.
2022-11-18 05:47:14 -08:00
Jim 9116ceab6e obs-ffmpeg: Use compatibility options on nvnenc init fail
This fixes an issue where older nvidia video cards weren't able to
initialize nvenc due to not having (or having limited) multipass support
2022-11-17 10:55:06 -08:00
Jim 301730f40c obs-outputs: Shorten dynamic bitrate increment timeout
The dynamic increment timeout does not need to be 30 seconds. Change it
to 4 seconds instead to make dynamic bitrate something that people
actually want to use.
2022-11-15 09:37:45 -08:00
Jim 6bd4b854f7 libobs: Update to 28.1.2 2022-11-05 06:33:04 -07:00
Jim 8e2ad8c3c1 obs-filters: Add a simple 3-band equalizer 2022-11-03 23:50:46 -07:00
jp9000 929a68bdff Revert "obs-ffmpeg: Check nvenc max bframe count"
This reverts commit a793748743.

Not necessary, there's a better fix with 77fbfbe5c6.
2022-11-01 15:26:42 -07:00
jp9000 808c8105cc libobs: Update version to 28.1.1 2022-11-01 00:51:42 -07:00
jp9000 a793748743 obs-ffmpeg: Check nvenc max bframe count
Checks to make sure that the bframe count is equal to or below the
maximum number of bframes that the encoder for the codec supports.

Fixes a bug where setting bframes higher than what the encoder supports
would cause the encoder to not start up properly.
2022-11-01 00:45:30 -07:00
jp9000 da6bf3ffba libobs: Update version to 28.1.0 2022-10-31 14:28:33 -07:00
Jim 1fc6c50b62 UI/obs-frontend-api: Return allocated strings for new funcs
8dda8d3500 added a few functions to get the last
recording/replay/screenshot path, but it should return allocations
because it's possible for the data to be modified at a later point.
2022-10-30 20:35:36 -07:00
Jim dd26fe4f8a obs-ffmpeg: Fix FFmpeg NVENC presets on Ubuntu 20.04
Ubuntu 20.04 and 22.04 both have the same FFmpeg versions, but FFmpeg on
20.04 was built with version 9 of NVENC headers, whereas 22.04 was built
with 11.

Unfortunately, that means we have to revert back to the old presets when
Ubuntu 20.04 is detected. The way this detection is done is a bit hacky,
but it's the only way to preserve startup performance. Otherwise we'd
have to write yet another startup subprocess test program to detect
whether the FFmpeg being used was built with older or newer NVENC, which
is both slow to start up and annoying to write. So instead, just get the
distro name/version strings and detect Ubuntu 20.04 that way.
2022-10-27 14:35:51 -07:00
Jim 4cc06ebdaa obs-filters: Fix comment typo 2022-10-27 00:49:32 -07:00
Jim 56cfaf792d obs-filters: Refactor expander filter expansion code
Things were a bit unoptimal and were squished together, making the code
much more difficult to work with. Instead, separate the code for
processing individual samples into its own function.
2022-10-27 00:44:59 -07:00
Jim 89006716b4 obs-filters: Use snake_case for expander variables 2022-10-27 00:44:59 -07:00
jp9000 556ef40529 obs-ffmpeg: Fix NVENC "mq" to use P6 rather than P4 2022-10-19 17:52:30 -07:00
jp9000 70c5f6c24a UI: Change "hq" to use P5 when upgrading NVENC 2022-10-19 17:51:07 -07:00
jp9000 feda64e9c6 virtualcam-module: Fix crash on resolution change
Certain programs can start the virtualcam filter, then they may choose
to call `Stop()` on the filter, call `SetFormat()` to change the
resolution, then call `Run()` again to start the filter again. The
Windows virtual camera filter did not account for this, thus if the
resolution was different, it had potential to cause a crash.

To fix this, store the last filter resolution, then check the resolution
every frame, and if it changes, reset the scaling information.

(Author note: This code is unclean. What we need to do with the virtual
camera filter is make it only create the thread on `Run()`, then join
the thread on `Stop()`. It's currently a bit complicated to make it do
that at the moment, so this code is a kind of an annoying stopgap for
now.)
2022-10-15 01:42:07 -07:00
jp9000 bc9ed5062d virtualcam-module: Clarify resolution variables
The `cx`/`cy`/`interval` variables specifically specify the
OBS/placeholder resolution/interval. The resolution may not be the same
as the filter's resolution (when scaling is used).

Instead, prefix these variables with `obs_` to improve clarity.
2022-10-15 01:29:05 -07:00
jp9000 e18acb57af obs-ffmpeg: Clarify name of NVENC preset 2022-10-14 16:25:22 -07:00
jp9000 bcb73cb599 virtualcam-module: Don't send frames on initial pause
Sending frames on initial pause seems to cause an odd crash on
subsequent frame calls.

(Note by author: I do not know why the crash happened because code
beyond OBS is a proprietary black box. I suspect it's just a bug in
WebRTC or something, but I can't know for sure. This is incredibly
frustrating. But at least this particular crash seems to be fixed.
...for now.)
2022-10-14 00:14:54 -07:00
jp9000 3dfcdb8c07 Revert "libobs: Update version to 28.1.0"
This reverts commit 9baf7f4a8f.
2022-10-11 19:37:32 -07:00
jp9000 9baf7f4a8f libobs: Update version to 28.1.0 2022-10-11 17:11:47 -07:00
jp9000 614bf960d9 UI: Add NVENC AV1 to simple output mode 2022-10-07 14:34:39 -07:00
jp9000 53f4627b0c obs-ffmpeg: Add NVENC AV1 support 2022-10-07 14:34:39 -07:00
jp9000 77b11c16f1 libobs: Update version to 28.0.3 2022-10-01 17:39:24 -07:00
jp9000 843fec57be obs-ffmpeg: Fix unpause causing certain encoders to fail
Due to the timeout detection, we need to factor in the current pause
offset to prevent pause from affecting the timeout.

Closes obsproject/obs-studio#7313
2022-09-30 13:09:29 -07:00
jp9000 4741a9aa50 libobs: Add function to get encoder pause offset 2022-09-30 13:07:19 -07:00
jp9000 3df0c61c8c obs-ffmpeg: Fix when NVENC retries without psycho aq
In obsproject/obs-studio#6963, a crash was fixed when retrying NVENC
without psycho aq. Unfortunately, the code forgot to reinitialize the
session, and thus the retry always failed. This reinitializes the
session as it was likely meant to.
2022-09-22 02:42:32 -07:00
jp9000 3b7f15a046 obs-ffmpeg: Show detailed NVENC error messages 2022-09-22 02:42:32 -07:00
jp9000 6c474fecab obs-ffmpeg: use NvEncGetSequenceParams for NVENC header
The NvEncGetSequenceParams is the function used for extracting the
header, so let's use that rather than manually splitting the packet.
2022-09-22 02:42:32 -07:00
jp9000 b9f562729a obs-ffmpeg: Refactor NVENC defaults/properties
Removes unnecessarily duplicated code
2022-09-22 02:42:32 -07:00
jp9000 d7c7180a8c obs-ffmpeg: Update NVENC to new presets
(This commit also modifies the UI)
2022-09-22 02:42:32 -07:00
jp9000 5c9e620315 obs-ffmpeg: Refactor NVENC
There's a lot of duplicated code, so refactor it
2022-09-22 02:42:32 -07:00
Jim 646d47aacb UI: Fix non-Windows vstrprintf
vsnprintf is called twice; one call must use args, and one must use
args2 (which is how it was supposed to be from the beginning). Each call
"consumes" its va_list parameter, so they each need to use a separate
copy. Fixes potential corruption and/or crashing when calling vsnprintf.
2022-09-09 23:25:31 -07:00
jp9000 4563413d15 libobs: Update version to 28.0.1 2022-09-02 19:06:23 -07:00
jp9000 76c9b2b297 win-dshow: Update libdshowcapture 2022-09-02 18:00:26 -07:00
jp9000 bfa2053b08 Revert "win-dshow: Save and restore video device config props"
This reverts commit a36b5bee99.

After this commit was merged, apparently devices were not functioning
correctly for some people. Especially regarding their internal settings.
Just revert it for now.
2022-09-02 17:35:58 -07:00
jp9000 2f8d28f7fa decklink: Keep deckLinkConfiguration while in use
Apparently this annoying, stupid variable was leaking before the ComPtr
was added, which ironically was necessary to ensure devices worked.
After that ComPtr commit some devices stopped capturing properly.
Basically, it implies that this pointer needs to stick around while the
device is in use.

(Jim note: This was one of the most painful things I've ever had to
debug)
2022-09-02 17:09:12 -07:00
jp9000 9176348176 decklink: Remove unnecessary AddRef
Caused leaking memory
2022-09-02 17:09:12 -07:00
jp9000 7396c211be UI/updater: Fix files with similar hashes clashing
Do to multithreading the update process, files of the same hash can
sometimes collide due to race. Ensure the filenames are all unique by
appending an incremented value for each file.
2022-08-31 20:51:21 -07:00
jp9000 e87a97eb8c UI/updater: Fix silent failure on auto-update 2022-08-31 20:19:11 -07:00
jp9000 09da3ac439 win-dshow: Fix avermedia HDR tonemapping 2022-08-31 12:05:07 -07:00
jp9000 361eebc6f3 UI: Fix scene list crash
The original change in obsproject/obs-studio#7200 seems to have been
based upon the idea that if the "selected" parameter has no values, then
the "deselected" parameter must have values, which is clearly an unsafe
assumption to have make given that it causes an assert crash in Qt when
both parameters have 0 values contained within them.
2022-08-31 10:43:53 -07:00
jp9000 3cde5dd48a libobs: Update version to 28.0.0 2022-08-30 20:17:35 -07:00
jp9000 7c8995c20f UI: Remove individual sources (for now) from vcam config
Individual sources cannot be used as vcam outputs (yet) due to the fact
that they cannot currnetly scale. If a source is not exactly the same
dimensions as the canvas, there will be blackness on the right and/or
bottom of the source. It's just not currently usable as-is.

Scenes are a much better fit for this because users can transform
sources within scenes as they please to fit the canvas.

At a later point, we'll likely reintroduce this feature as long as
they're automatically transformed or something.
2022-08-30 17:31:22 -07:00
jp9000 21da0b0462 obs-ffmpeg: NVENC "(new)" begone
It's about time to get rid of this being labeled as "(new)".

Also rename the FFmpeg variant. And make it more explicit when the
FFmpeg encoder is being used in the log file.
2022-08-30 17:05:36 -07:00
jp9000 07df6548fd libobs: Increase texture encode buffering
Seems to solve lag encountered on the new AMF encoder. The SubmitInput
call in the AMF encoder can occasionally stall for quite a long amount
of time, but most take microseconds, so we can compensate by simply
increasing the buffering (3 to 10 textures).
2022-08-27 14:29:28 -07:00
Jim 2e5f900fe6 obs-ffmpeg: In AMF, use bframe count + 1 as DTS offset
Recommended by Mikhail. Seems to work fine. Should also fix the DTS
regression.
2022-08-27 09:39:46 -07:00
Jim 4c3e671819 obs-ffmpeg: Set max AMF consecutive bframes to 3 by default
The AMF documentation states that this value is recommended to be 3 if
the bframe picture pattern property is a non-zero value.
2022-08-27 09:32:38 -07:00
jp9000 896de392cd UI: Copy va_list in strprintf on non-Windows
On operating systems other than Windows, va_list has to be copied when
you pass it to a new function otherwise it becomes corrupted
2022-08-24 20:23:13 -07:00
JimandGitHub 2ca0e7cc1a Merge pull request #7112 from GeorgesStavracas/gbsneto/more-yami-consistency
More Yami consistency and cleanups
2022-08-24 08:31:18 -07:00
jp9000 7b3ae0b03c UI: Fix fields not growing in FFmpeg output settings
Wasn't consistent with how it is with the rest of the user interface

Fixes obsproject/obs-studio#7147
2022-08-22 14:40:59 -07:00
jp9000 b4b01e2054 UI: Use bigger default size for button dock
Due to the new virtual camera button set being ridiculously large, the
main window needs a larger default dock size for the button dock.
Annoyingly.
2022-08-22 14:07:00 -07:00
jp9000 6dc8897e79 obs-ffmpeg: Fix AMF encoder lockup with older AMD cards
This goes back to a slightly older variant of the
SubmitInput/QueryOutput handling that doesn't use AMF's timeout
property. Older devices do not like it when you change the query timeout
on the fly and will lock up. So instead, wait one millisecond when the
AMF input is full, which appears to fix the issue according to testers.

Also adds a loop timeout in case it goes in an infinite loop (which it
shouldn't anymore, but still)

Big thanks to Flaeri for testing the old code, and Yukari for patiently
testing a whole bunch of builds.
2022-08-22 11:20:51 -07:00
Jim a6c2bb1294 obs-ffmpeg: Use AMD example PTS/DTS offset
All this does is it uses the same exact code AMD uses with their own
example FFmpeg muxer code. Although instead of adding to the PTS, it
subtracts from the DTS.
2022-08-22 11:15:23 -07:00
Jim 9b087d15fc ffmpeg-mux: Do not output error if non-fatal error
Fixes a case where stderr can fill up and cause a freeze on Windows
2022-08-22 03:30:10 -07:00
Jim d95ebc6294 Revert "ffmpeg-mux: Disable stdout/stderr on Windows"
This reverts commit 332dd00089.
2022-08-22 03:28:38 -07:00
Jim 332dd00089 ffmpeg-mux: Disable stdout/stderr on Windows
These server no purpose unless the ENABLE_FFMPEG_MUX_DEBUG flag is
enabled, and will ultimately just cause problems.
2022-08-22 02:50:17 -07:00
jp9000 6abf89af21 Revert "libobs: Correctly set texture size"
This reverts commit 90a409fe58.

Reverts #7077 for now. This really shouldn't be done so close to
release. This crash technically only happens under very niche scenarios,
and the fix seems to have some other potential issues. Prematurely
merged by Jim.
2022-08-18 11:04:11 -07:00
jp9000 3ae1c1470f Revert "UI: Don't set theme if it didn't change"
This reverts commit b4a2eacba7.
2022-08-18 03:21:49 -07:00
Jim 7b76619c43 UI: Fix increment check for what's new (again)
Increment checks for the what's new file were not working as intended;
old stored increments would unintentionally pass to newer versions if
the newer versions did not explicitly start up with a whatsnew.json file
that had their version. The previous attempt to fix made it so that it
used a completely separate global.ini entry when a matching entry was
found. However, this entry did not take into account the beta or release
candidate number of the current build. This fixes it to bake in the
beta/rc number into the entry.
2022-08-14 01:06:53 -07:00
Jim c63d2f9852 UI: Remove #if expression for what's new message
This #if test was intended to not show messages for new users, but
instead just made it so messages wouldn't show at all if the entry
wasn't previously set. Plus the expression was bad anyway.

This was causing betas and release candidates to not show what's new
messages when they should have been.

Just remove this code as it's silly to have at this point anyway. All
users should see what's new messages if they open the program, even if
for the first time.
2022-08-14 01:06:53 -07:00
jp9000 b763777a4b enc-amf: Mark as deprecated 2022-08-10 02:57:14 -07:00