The GetTempPath and GetTempFileName functions weren't being used
correctly, GetTempFileName always create a temporary file, and was
creating a temporary file in the root directory of the hard drive
unintentionally.
OBS Browser Source uses command line arguments for flags. Exiting on
command line arguments that are unknown to OBS prevent's that
functionality from working.
Due to the default value assigned to AMF.H264.VBVBuffer.Strictness and AMF.H264.Version, the config upgrade code ran every time someone tried to use simple mode. That caused the AMF.H264.VBVBuffer.Strictness value to always be stuck at 100, which is wrong for streaming and recording.
Currently if you have a scene, "Scene" for example, and you create a new
scene, the dialog will pop up with a default name, but it'll start with
"Scene 1" instead of "Scene 2". Same thing occurs with sources. This
fixes that to start from 2 instead.
This changes the logic to show all encoders in the Recording tab but
only show selected supported codecs in the Streaming tab (at least with
Advanced Output Mode). The only (to my knowledge) streaming format that
supports other formats than H264 is WebRTC, which in theory should
support H264, VP8, VP9 and HEVC. However I don't know about any ingest
server that works well with it yet.
Closesjp9000/obs-studio#794
This is mainly to give visual feedback to those affected by NVENC not
working with older driver versions. Currenlty obs fails silently which
could go unnoticed for users who are using hotkeys as well as confuse
users who are not trained to read their logs when issues occur.
Closesjp9000/obs-studio#788
When the OBS signal is triggered for these widgets, the invokeMethod
could cause the thread to stall, which could make it wait much longer
than necessary to output audio data. When that happens, it causes audio
monitoring to get backed up and get unnecessarily delayed, as well as
cause general audio buffering in libobs to increase unnecessarily.
A simple fix both in terms of preventing that stall and improving UI
performance is to not call invokeMethod to update the widget each time,
and then instead have those widgets update themselves via a timer at a
specific interval.