Commit Graph
536 Commits
Author SHA1 Message Date
PatTheMav 62c6a6d223 obs_ffmpeg: Explicitly mark variables as unused 2022-07-10 09:59:55 +10:00
PatTheMav 3f2aad12cd obs-ffmpeg: Disable compiler warnings about non-exhaustive switch cases 2022-07-10 09:59:55 +10:00
pkv b9237aed29 obs-ffmpeg: Fix srt/rist not working
This fixes a bug where the new circular buffer code is hit by protocols
such as rist or srt although the buffer was meant for files.

Signed-off-by: pkv <pkv@obsproject.com>
2022-07-09 16:29:04 -07:00
MagicBear f54f8ee714 obs-ffmpeg: Add NVIDIA Tesla NVENC support 2022-07-09 15:49:26 -07:00
mvji 16f5fe5ee2 obs-ffmpeg: Add m4v extension to open file dialog 2022-07-09 13:45:29 -04:00
Richard Stanway 17c39ccb07 obs-ffmpeg, obs-outputs: Check return of obs_encoder_get_extra_data
A race condition can occur in obs-outputs where the send_thread is in
the process of (re)connecting but the encoder was shut down in the
meantime. This causes the expected header data to be garbage, resulting
in a crash.
2022-06-25 16:03:12 -07:00
tytan652 6cc7cf3d55 obs-ffmpeg: Remove codec property from VAAPI encoder
Encoders have only one codec so this property is not needed.

Also rename the encoder to "FFMPEG VAAPI H.264".
2022-06-11 16:09:11 -07:00
Richard Stanway 898256d416 obs-ffmpeg: Add a circlebuf to buffer output in ffmpeg-mux
This adds a circular buffer to ffmpeg-mux when writing to a file.
Output from ffmpeg is buffered so that slow disk I/O does not block
ffmpeg writes, as this causes the pipe to become full and OBS stops
sending frames with a misleading "Encoding overloaded!" warning. The
buffer may grow to 256 MB depending on the rate of data coming in and
out, if the buffer is full OBS will start waiting in ffmpeg writes.

A separate I/O thread is responsible for processing the contents of
the buffer and writing them to the output file. It tries to process 1 MB
at a time to minimize small I/O.

Complicating things considerably, some formats in ffmpeg require seeking
on the output, so we can't just treat everything as a stream of bytes.
To handle this, we record offsets of each write and try to buffer as
many contiguous writes as possible. This unfortunately makes the code
quite complicated, but hopefully well commented.
2022-05-30 10:06:09 -07:00
jpark37 f1e0844a58 obs-ffmpeg: Use period for localized sentences 2022-05-28 18:31:55 -04:00
jpark37 f21ea744f8 obs-ffmpeg: Localize NVENC error dialog messages
Localize messages for lack of 10-bit support, and exceeding the hardware
B-frame limit.
2022-05-28 08:36:18 -07:00
jpark37 699e89d859 obs-ffmpeg: Improve dialog text for NVENC errors
Add dialog messages for lack of 10-bit support, and exceeding the
hardware B-frame limit. Also move code around to test these just once.
2022-05-28 06:48:27 -07:00
gxalpha bfa7f1a88e obs-ffmpeg: Remove duplicate "FFmpeg Options" locale 2022-05-21 15:45:17 -07:00
Torge Matthies 5ac6c03a8a obs-ffmpeg: Initialize mapped_res field in nv_texture_init
Otherwise it might never be initialized and nv_texture_free might unmap
a non-existant resource.
2022-05-19 16:36:14 -07:00
Torge Matthies fe776a83eb obs-ffmpeg: Reserve jim-nvenc textures buffer space
Textures dynamic array buffer space was not reserved.
2022-05-19 16:36:14 -07:00
Matt Gajownik 73e6df5d09 obs-ffmpeg: Fix memory leak 2022-05-17 23:13:17 +10:00
jpark37 d70c6b9dfb obs-ffmpeg: Set 1000 nits for HLG metadata 2022-05-17 05:18:46 -07: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] https://github.com/obsproject/obs-studio/commit/67e48ecc2ca033020210f3aae05617195d37e248

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
https://github.com/FFmpeg/FFmpeg/commit/cdba98bb80e2ab73d34659c610771b020afc6a77
[2] lavc: switch to the new channel layout API
https://github.com/FFmpeg/FFmpeg/commit/548aeb93834b8425c86d1ce60fddc1d41805724d
[3] avutil/channel_layout: Add a new channel layout API
https://github.com/FFmpeg/FFmpeg/commit/086a8048061bf9fb4c63943f6962db48175f655c
[4] avframe: switch to the new channel layout API db6efa18
https://github.com/FFmpeg/FFmpeg/commit/db6efa1815e217ed76f39aee8b15ee5c64698537

Signed-off-by: pkv <pkv@obsproject.com>
2022-05-16 16:17:32 -04:00
stopforumspam 035ac5e3b7 obs-ffmpeg: Allow setting FFmpeg options for media sources 2022-05-16 15:17:13 -04:00
tytan652 0c33069772 obs-ffmpeg: Fix HEVC include in jim-nvenc 2022-05-07 16:13:21 -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 e513d1cb6b obs-ffmpeg: Fix NVENC HEVC fallback being H.264 2022-05-04 23:54:53 -07:00
Jim 952988d9ec Merge pull request #6231 from mvji/prores_pix_fmt
Add support for GPU conversion of YUV422P10LE, YUV444P12LE, YUVA444P12LE
2022-05-04 02:01:27 -07:00
tytan652 ce62240530 obs-ffmpeg: Fix compiler warnings
* obs-ffmpeg: Fix format-overflow warning

* obs-ffmpeg: Fix unused-parameter warnings
2022-05-04 01:37:10 -07:00
jpark37 80f6cff742 obs-ffmpeg: Add content light levels for HDR
YouTube wants it, and more metadata can only improve compatibility.
2022-04-30 16:05:01 -07:00
jpark37 9677ad1876 obs-ffmpeg: Add I010/P010 as formats for old NVENC
Avoids fallback to NV12, crushing 10-bit into 8-bit.
2022-04-29 12:34:56 -07:00
jpark37 01a806cb53 obs-ffmpeg: Add HEVC support to NVENC 2022-04-28 08:59:53 -07:00
Jim 3883c9e120 cmake: Add option to build hardware HEVC encoders
Allows the ability to enable HEVC encoders whenever we add them.
Disabled by default for now for obvious reasons.
2022-04-22 17:39:43 -07:00
jp9000 c5e328e359 obs-ffmpeg: Refactor FFmpeg video encoders
This reduces code duplication between the different FFmpeg-based video
encoder implementations
2022-04-22 12:51:38 -07:00
mvji 93490da4c2 obs-ffmpeg: Use YVYU for FFmpeg pix fmt YVYU422
This commit also modifies deps/media-playback and libobs.
2022-04-19 19:39:22 +02:00
mvji ae94c35152 obs-ffmpeg: Add support for YUV422P10LE, YUV444P12LE, YUVA444P12LE
This commit also modifies deps/media-playback
2022-04-19 19:38:28 +02:00
Richard Stanway 4c96feafab obs-ffmpeg: Fix compiler warning 2022-04-19 03:23:53 +02:00
jpark37 2e8ea0acdc obs-ffmpeg: Set P3-D65 metadata for HDR
Want to avoid receiver gamut remapping from Rec. 2100 to P3.

Fix min luminance appearing as NaN by switching from 0/0 to 0/1.

Also set max luminance for HLG because why not.
2022-04-17 13:44:32 -07:00
jpark37 0d72c314d4 obs-ffmpeg: Add max luminance metadata for PQ
Necessary for video player to remap display ranges.
2022-04-16 16:26:01 -07:00
jp9000 a4c215869f obs-ffmpeg/ffmpeg-mux: Fix splitting hang on Windows
stdout on Windows from a subprocess requires that something read the
stdout buffer, and currently we don't do that. Due to newly introduced
printf/fprintf calls, the stdout buffer eventually fills up because
nothing is emptying it, thus the muxer locks up on an fprintf/printf
call and causes OBS itself to hang.
2022-04-13 14:11:20 -07:00
mvji 19defbcf04 obs-ffmpeg: Add mxf extension to open file dialog 2022-04-12 12:11:44 -04:00
Jim b745a100a3 Merge pull request #5371 from norihiro/automatic-file-splitting
Automatic file splitting
2022-04-10 16:49:37 -07:00
jpark37 59dbc3eb81 libobs: Rename Rec. 2020 to Rec. 2100
Rec. 2020 is really an SDR spec, but I think HDR10 made it okay to slap
PQ on it, call it an HDR spec. Rec. 2100 came along after and formally
allowed the use of PQ/HLG, so we should use 2100 instead.
2022-04-10 00:13:52 -07:00
wangshaohui db8145e8a2 obs-ffmpeg, win-dshow, deps/media-playback: Use recommended API for AVCodecContext 2022-04-07 01:59:30 -07:00
jpark37 4c2aa58dbe obs-ffmpeg: Support Rec. 2020, I010/P010 formats
Also remove unused function, ffmpeg_to_obs_video_format.
2022-04-03 00:03:34 -07:00
Norihiro Kamae ba68eda590 obs-ffmpeg: Use av_packet_alloc instead of av_init_packet
sizeof(AVPacket) being a part of the public ABI is deprecated. once
av_init_packet() is removed, new packets will only be able to be
allocated with av_packet_alloc().
In ffmpeg-mux, ffmpeg-vaapi, and obs-ffmpeg-nvenc, AVPacket is allocated
at the initialization to avoid frequent allocation of AVPacket.

Includes changes to win-dshow.
2022-03-24 17:19:40 -07:00
PatTheMav 49e9d49943 plugins: Update CMakeLists.txt for included plugins 2022-03-16 23:11:08 +01:00
Florian Zwoch 8886091793 obs-ffmpeg: add NVENC blacklist check for Linux
Similar to the Windows counter part. Check the PCI bus for
installed cards. When found at least one VGA compatible adapter
from NVIDIA that is not in the blacklist we pass the check.
2022-03-08 12:16:07 -08:00
Ryan Foster ebc514e8db obs-ffmpeg: Update nv-codec-header files
Update the in-tree nv-codec-header files (nvEncodeAPI.h and
dynlink_cuda.h) to n11.1.5.1, which is the version currently used in the
OBS Studio dependencies, to keep the in-tree version in sync with the
version in our dependencies.
2022-02-26 15:08:03 -08:00
pkv 5b0c09a9f4 obs-ffmpeg: Force mpegts format & disable restart on activate for srt & rist
This fixes crashes in media Source when :
- the user forgets to set the input format for srt or rist URLs;
- disabling / enabling / disabling etc Media source with a rist URL.

Signed-off-by: pkv <pkv@obsproject.com>
2022-02-19 15:17:19 -08:00
jp9000 109b54fd66 obs-ffmpeg: Fix svt-av1 rate control settings
For SVT-AV1, rate control is explicitly set via an "rc" option, so set
those options manually for SVT-AV1. CBR doesn't seem to be fully
supported, but it's sort of supported via CVBR (constrained variable
bitrate), which seems to be specific to each GOP size, which is about as
close to CBR as we can get.
2022-02-07 13:11:34 -08:00
Translation Updater ac8dbf67be Update translations from Crowdin 2022-02-06 02:24:08 +00:00