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.
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.
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.
This simplifies encoder initialization and prevents it from requiring
any sort of unnecessary Direct3D or encoder initiazation tests while OBS
is actually running.
Users with AMD CPUs and Intel dGPUs (Arc) would find that QSV is
restricted to 1200p and missing features due to to this check failing.
Once the encoder gets rewritten for AV1 support we will fix this
properly.
This commit rounds the timestamp to the integer multiple of fps_den.
Prior to this change, since the timestamp in MFX is defined in units of
90 kHz, timestamps for 60000/1001 fps is not accurately expressed. Also
the encoder sometimes returns the decode time stamp slightly off.
Hence, the timestamp in OBS becomes not a multiple of fps_den after
converting back from the timestamp in MFX.
Status output related to OBS configuration is prefixed with the string
"OBS" and added padding for enabled and disabled features. This padding
was not aligned between platforms.
By moving the padding and prefix decoration into its own function,
both elements are controlled in a single place. CMake scripts were
changed to use this new function `obs_status` instead of using CMake's
`message` function directly.
_dx9_simple_free already frees this pointer. I don't think this code
path is currently reachable, but it should probably still be fixed.
Detected by Coverity Scan.
As Intel continues to add discrete graphics cards, maintaining a long
list of discrete device IDs to check against isn't wise. When i+I
platforms are detected, default to integrated graphics.
Intel committed an NDA disclaimer on each source file. The stated
intention was that the NDA "added to OBS doesn't apply to open source
code once it's been accepted by the community. You can remove it for
your modifications". This quote is from an email chain involving
Intel's legal team and developers. The NDA in the source files
mistakenly triggers source code scanners that look for license
violations. I have removed the comments that contain the NDA.
Unfortunately these encoders tend to crash or freeze after after
multiple bitrate changes. Users with dynamic bitrate enabled
experience a random encoder freeze which manifests as OBS dropping to
0kb/sec and disconnecting and it's not at all obvious that dynamic
bitrate is the cause. Disable it for now until we can figure out if
there is any workaround or bug on our end.