Commit Graph

651 Commits

Author SHA1 Message Date
Chris
c4a8364b8c obs-ffmpeg: Disable VBAQ for HEVC CQP rate control
Check rate control, if cqp (0), dont use vbaq
2022-11-22 04:13:56 -08:00
Matt Gajownik
0716e8b482 obs-ffmpeg: Fix building without HEVC on Windows 2022-11-21 18:54:09 +11:00
tt2468
24d7bea41f obs-ffmpeg: Improve RIST/SRT log messages
Overall improvements to match behavior of other log sources.
2022-11-19 18:16:05 -08:00
Chris
a463326e37 ffmpeg: fix cqp rate control on svtav1
global_quality does not get respected. Specifying via priv_data does
work however
2022-11-19 20:55:42 -05:00
Chris
777a8f8c47 ffmpeg: fix "cqp" mode for libaom
change from global_quality to setting crf via priv_data, as
global_quality does not get respect. There is no cqp param in
ffmpeg 5.0.1
2022-11-19 20:55:42 -05:00
tytan652
74b245431c obs-ffmpeg: Use Libva in FFmpeg VA-API
Libva is directly used to check if DRI devices support H264 encoding.
2022-11-20 11:30:40 +11:00
Jim
572407a928 Merge pull request #7809 from obsproject/amf-av1-rebased
Add Hardware AMD AV1 Encoder
2022-11-19 15:52:16 -08:00
Ryan Foster
46e17a1160 obs-ffmpeg: Fix SVT-AV1 rate control mode selection
In updated versions of FFmpeg (5.1.x) and SVT-AV1 (1.2.0/1.3.0), the
rate contol mode selection mechanism has changed, causing CBR to throw
an "Invalid Parameter" error and the encoder will fail to start. This
appears to be caused by us specifying rc_max_rate, which will also fail
on FFmpeg CLI. Adjust how we manage rate control methods, appropriately
version-gated, to work with both our current dependency versions and the
versions that we'd like to use.
2022-11-19 15:44:12 -08:00
Roman Huts
341f288b57 obs-ffmpeg: Fix encoder preset quality fallbacks for AVC/HEVC/AV1
(Jim note: The missing description of this commit is that basically, the
CAP_MAX_THROUGHPUT value returns a different result based upon what the
other settings are currently set to. It didn't operate the way it was
originally programmed.)
2022-11-18 18:18:08 -08:00
Roman Huts
49e5f7783f obs-ffmpeg: Suggest docs to reference for AMF/FFmpeg options 2022-11-18 18:18:08 -08:00
Roman Huts
927733240c obs-ffmpeg: Add AMF AV1 encoder 2022-11-18 18:18:08 -08:00
Roman Huts
a8fc9226f8 obs-ffmpeg: Use codec enum for AMF texture encode check 2022-11-18 18:18:08 -08:00
Roman Huts
8b386a6417 obs-ffmpeg: Make AMF AVC encoder name consistent w/ others 2022-11-18 18:18:08 -08:00
Roman Huts
ef1a9c46e3 obs-ffmpeg: Only show b-frames AMF property for AVC 2022-11-18 18:18:08 -08:00
Roman Huts
1948ddf2fa obs-ffmpeg: Only allow AMF high/baseline profiles for AVC 2022-11-18 18:18:08 -08:00
Roman Huts
535ced04d5 obs-ffmpeg: Allow 0-51 for CQP property
0-51 makes it consistent with other encoder implementations (At least
for AVC/HEVC)
2022-11-18 18:18:08 -08:00
Roman Huts
21d079fdcc obs-ffmpeg: Use codec enum for amf_properties_internal 2022-11-18 18:18:08 -08:00
Roman Huts
acfad45ead obs-ffmpeg: Fix transcoding API typo 2022-11-18 18:18:08 -08:00
Roman Huts
48b5fd5a3b obs-ffmpeg: Update AMF SDK for AV1 support 2022-11-18 18:18:08 -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
tytan652
c8a01f92ee obs-ffmpeg: Fix SRT error type comparison (#7802) 2022-11-18 03:17:54 -06:00
pkv
fcb6df1f63 obs-ffmpeg: Direct setting of encryption & auth for SRT & RIST
Also modifies UI.

This allows the direct use of passphrase (SRT & RIST) used for
encryption, user + password (RIST) as well as streamid (SRT).
Previously, these parameters had to be set in the URL in the form:
URL?option1=value1&option2=value2.
They still can but there is also the option to set them in the stream
key and username/password fields.
SRT:
- the stream_id is set in the stream key (more info on it: [1]);
- the encryption passphrase is set in the password auth field.
RIST:
- the encryption passphrase is set in the stream key;
- the srp_username and srp_password are set in the user/password auth
fields [2].

Additionally, some error logging has been added when there's a
disconnect caused by a wrong password.
Lastly, this solves a bug when auto-reconnect is set and a wrong
passphrase is provided for srt; the output would keep trying to
reconnect. With this commit, an OBS_OUTPUT_INVALID_STREAM signal is
emitted and the stream is immediately stopped.

[1] https://github.com/Haivision/srt/blob/master/docs/features/access-control.md
[2] https://code.videolan.org/rist/librist/-/wikis/Authentication-and-the-ristsrppasswd-Utility

Signed-off-by: pkv <pkv@obsproject.com>
2022-11-17 21:56:38 -05: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
PatTheMav
d87467666b obs-ffmpeg: Replace invocations of sprintf with snprintf
Fixes deprecation warnings in Xcode 14/clang on macOS and reduces
chance of buffer overflows.
2022-11-11 19:51:28 +01:00
pkv
ce2d1ffab7 obs-ffmpeg: Fix deprecation of channels member of several structs
This fixes deprecation warnings since the channels member of
AVCodecContext is marked as deprecated [1], as well as the channels
member of AVFrame [2].
In all instances where a warning appear, a switch to the new API is
done.
[1] lavc: switch to the new channel layout API
FFmpeg/FFmpeg@548aeb9
[2] Bump minor versions after the channel layout changes
FFmpeg/FFmpeg@cdba98bb80

Signed-off-by: pkv <pkv@obsproject.com>
2022-11-10 19:37:07 -05:00
pkv
ce63c5b057 obs-ffmpeg: Update mpegts to channel 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 obs-ffmpeg-mpegts.

[1] Bump minor versions after the channel layout changes
FFmpeg/FFmpeg@cdba98b
[2] lavc: switch to the new channel layout API
FFmpeg/FFmpeg@548aeb9
[3] avutil/channel_layout: Add a new channel layout API
FFmpeg/FFmpeg@086a804
[4] avframe: switch to the new channel layout API db6efa18
FFmpeg/FFmpeg@db6efa1

Signed-off-by: pkv <pkv@obsproject.com>
2022-11-10 19:37:07 -05:00
Developer-Ecosystem-Engineering
641ec29a00 obs-ffmpeg: Add codec-tag support to ffmpeg-mux
By default, ffmpeg-mux is guessing at the codec format of submitted data.
This change allows encoders to suggest a particular codec.
2022-11-02 22:44:20 +01: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
Ryan Foster
77fbfbe5c6 obs-ffmpeg: Cap NVENC Max B-frames according to GPU caps
Erroring out of NVENC init early if the Max B-frames setting was higher
than the encoder's capability causes an encoder failure on NVIDIA Pascal
(10-series) and earlier GPUs due to an unfortunate interaction between
Simple Output Mode, HEVC, and our default B-frames setting of 2. Since
we already check the Max B-frames capability of the encoder, cap at that
value instead of erroring out.

Fixes #7698.
2022-11-01 15:26:23 -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
Ryan Foster
0ddba5d644 obs-ffmpeg: Split NVENC preset migrations by codec
This commit also modifies UI.
2022-10-31 17:02:51 -04:00
Ryan Foster
891e3b0f49 obs-ffmpeg: Align NVENC preset migrations to NVIDIA guidelines
Bring our NVENC preset migrations closer in line with NVIDIA guidelines.

https://docs.nvidia.com/video-technologies/video-codec-sdk/nvenc-preset-migration-guide/

This commit also modifies UI.
2022-10-31 17:02:51 -04:00
Ryan Foster
254dc4081c obs-ffmpeg: Add NVENC preset mapping for old Default preset
The old NVENC preset "Default", labeled in OBS as "Performance", maps to
the new P3 preset when not using multipass. Since we previously only
enabled multipass/two-pass on "Max Quality", we can map this to P3 in
all cases.

This commit also modifies UI.
2022-10-31 17:02:51 -04:00
Ryan Foster
08f7a3778d obs-ffmpeg: Swap hq and mq preset order
This is for consistency with b2ff22a587.
Max Quality (mq) is "higher" than Quality (hq), and it's helpful for the
code order to reflect that.
2022-10-31 17:02:51 -04:00
derrod
85d561cad1 obs-ffmpeg: Fix Ubuntu 20.04 detection 2022-10-27 16:47:37 -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
Translation Updater
f065f20ce1 Update translations from Crowdin 2022-10-25 22:32:14 +00:00
jp9000
556ef40529 obs-ffmpeg: Fix NVENC "mq" to use P6 rather than P4 2022-10-19 17:52:30 -07:00
jp9000
e18acb57af obs-ffmpeg: Clarify name of NVENC preset 2022-10-14 16:25:22 -07:00
jp9000
53f4627b0c obs-ffmpeg: Add NVENC AV1 support 2022-10-07 14:34:39 -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
shinji3
9d7a6e7e8c obs-ffmpeg: Fix m3u8 recording in AMF 2022-09-29 15:47:26 -07:00
Ryan Foster
c5f1446ab3 obs-ffmpeg: Cap AMF encoder at 100 Mbps
The AMF docs specify that the maximum value for TARGET_BITRATE and
PEAK_BITRATE is 100,000,000 bit/s. Trying to set values above this
maximum value results in AMF choosing from its defaults instead of
capping at the maximum value. Let's cap at 100,000 Kbps in the UI to
prevent users from running in to this.

Fixes GitHub Issue obsproject/obs-studio#7423.
2022-09-24 16:38:17 -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
pkv
d0366671e4 obs-ffmpeg: Fix memory leak with mpegts
Fixes #7305.
Some copied data was not freed and also not all paths freed AVPackets.

Signed-off-by: pkv <pkv@obsproject.com>
2022-09-10 15:31:07 -07:00