120 Commits

Author SHA1 Message Date
jp9000
bfa2053b08 Revert "win-dshow: Save and restore video device config props"
This reverts commit a36b5bee99a03a22af50c1c5ed0d8f321d9c129c.

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
Norihiro Kamae
7e3656ab33 plugins: Cleanup unused-parameters
- Remove unnecessary UNUSED_PARAMETER
- Add OBS_UNUSED attribute to unused parameters
- Also removes unused variables
2022-07-19 11:01:00 -04:00
Exeldro
e52018f210 win-dshow: Save and restore video device config props 2022-06-15 12:30:09 -07:00
jpark37
fa8f1c33e9 win-dshow: Removed used UNUSED_PARAMETER 2022-05-27 14:56:47 -07:00
jpark37
7e8b1d90e9 win-dshow: Support HEVC decode 2022-04-28 08:59:53 -07:00
jpark37
3eb85c548f win-dshow: Add reactivation callback 2022-04-17 03:18:38 -07:00
jpark37
14b1d34a06 win-dshow: Use Rec. 2100 (PQ) by default for P010 2022-04-12 12:02:43 -07:00
jpark37
a63d353463 win-dshow: Add Rec. 2020 HLG support
Also rename "Partial" range to "Limited" range for consistency.
2022-04-10 12:55:02 -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
jpark37
848e128435 libobs,plugins: Replace video matrix function
video_format_get_parameters_for_format provides a more accurate matrix
than video_format_get_parameters.
2022-04-07 19:28:51 -07:00
jpark37
a00d53eccf win-dshow: Add HDR support 2022-04-03 00:03:34 -07:00
jpark37
2e1d9e8e64 win-dshow: Add hardware decode status to log 2022-02-27 02:40:09 -08:00
jpark37
42fad9b2b4 win-dshow: Add hardware decode toggle
Off by default because it can be buggy, or overburden the GPU.
2022-02-26 15:31:48 -08:00
Chris
306e23292d win-dshow: Log buffered state 2022-01-29 15:14:58 -08:00
jpark37
9f41531541 win-dshow: Use OBS_SOURCE_FRAME_LINEAR_ALPHA
This flag leads to a cheaper technique, "Draw" instead of
"DrawNonlinearAlpha", and all the paths are opaque anyway.
2022-01-29 15:10:53 -08:00
Thomas Schnitzler
22f5e68121 win-dshow: Don't buffer Elgato Facecam device by default
Buffering should be disabled for Elgato Facecam in "Auto-detect" mode to
prevent latency changes over time
2021-09-20 18:42:36 -07:00
Richard Stanway
4bf81e9bf6 win-dshow: Avoid redundant string conversions
We were going from wstring -> wchar_t * -> wstring. Issue detected by
PVS Studio.
2021-08-18 23:45:11 +02:00
Richard Stanway
486380e2c3 win-dshow: Use constant references for resolution check
Avoids unnecessary creation of a new VideoDevice. Issue detected by
PVS Studio.
2021-08-18 23:45:08 +02:00
Andrés Barreiro
c83273cc72 win-dshow: Add autorotation toggle 2021-02-07 21:12:48 -08:00
jp9000
072a886453 win-dshow: Add "activate" proc to proc handler 2020-09-07 16:12:50 -07:00
jpark37
b6afaceeae Update VIDEO_CS_DEFAULT to mean 709 instead of 601
Consistent with modified default UI setting.
2020-09-06 20:51:28 -07:00
jp9000
40817331d3 win-dshow: Fix rotation not working in all cases 2020-03-07 06:48:07 -08:00
jp9000
07089873fc win-dshow: Add support for devices that relay rotation
Adds support for devices that can relay rotation, such as the Logitech
StreamCam.
2020-03-01 03:42:46 -08:00
jpark37
9eeef48b5a win-dshow: Fix upside-down RGB DIBs
Fix regression to RGB DIB orientation according to MSDN.
2020-01-13 21:50:54 -08:00
Jim
c36e3fbc92
Merge pull request #2196 from jpark37/ffmpeg-mjpeg-spam
win-dshow: Suppress MJPEG error spam
2019-11-29 20:48:40 -08:00
jpark37
f685322a0f win-dshow: Suppress MJPEG error spam
Only print the first message for this known benign error.
2019-11-24 23:59:27 -08:00
Clayton Groeneveld
82ffcdc827 UI: Add source icons 2019-11-24 20:50:42 -08:00
jpark37
f896c773e8 win-dshow: Support bottom-up DIBs
The biHeight field can be negative, leading to crashes on some cards
like VisionRGB-E1S. Adding flip support is fairly straightforward.

There also appears to be a hack to automatically flip for RGB formats,
but I wish to remove it because it seems to fight with this change. We
already have a separate vertical flip checkbox to deal with non
compliant behavior.
2019-11-12 17:59:59 -08:00
wanhongqing
9b4d9c6788 win-dshow: Fix format switching issue
If the format was one encoded format and changes to another encoded
format, it could cause it to continue to treat it as the old format.
2019-11-12 14:37:32 -08:00
jpark37
f60b820fee win-dshow: Fix color range when using FFmpeg decode
Full color range seems to be active when decoding video with FFMmpeg
even when partial is explicitly selected. This should keep the range
synchronized.
2019-09-14 17:12:29 -07:00
jp9000
deaeb5e632 win-dshow: Use unbuffered by default for MJPEG
Due to the recent change of using FFmpeg to decode MJPEG, MJPEG was
getting included in the delayed device check.  This fixes that so that
it doesn't.  MJPEG can decode in real time.
2019-07-29 20:34:13 -07:00
jp9000
cd6e9e34b8 win-dshow: Clarify function name/purpose
IsEncoded is meant to be used to indicated delayed devices, such as
older Elgato devices, or Hauppauge device.  Devices that use H264 and
have a 800+ millisecond latency.  This changes the function name to
better indicate that.
2019-07-29 20:34:13 -07:00
jp9000
a3fface27f win-dshow, obs-ffmpeg: Add hardware decoding support
Fixes hardware decoding support and updates it to FFmpeg 4.0.
2019-07-29 20:34:13 -07:00
James Park
0e7eec8f2d win-dshow: Use FFmpeg for MJPEG decompression
Measured lower CPU usage and latency than default DirectShow filter.
Tested with Logitech BRIO camera at 4K, 30 FPS.
2019-07-25 20:11:44 -07:00
Jim
ffcfe4c9d9
Merge pull request #1951 from jpark37/audio-buffering
Fix audio buffering for devices like GV-USB2
2019-07-20 17:05:27 -07:00
jpark37
1fc0a357d2 win-dshow: Add "Default" color range setting
VIDEO_RANGE_DEFAULT uses partial range for YUV and full range for RGB.
Previous default was always partial.
2019-07-10 23:40:53 -07:00
James Park
534c553b23 win-dshow: Decouple audio from video
If a device produces video and audio timestamps atdifferent rates,
this divergence can cause massive buffering on the audio side, leading
to a capped audio buffer, and total sound loss. This change allows a
hardcoded list of devices to use the existing decoupling logic. For
now, only "GV-USB2" has been added.

When combined with another fix, 5+ hours of stable audio without any
buffering on my GV-USB2 where it used to drop sound completely after
an hour or so.

Partially fixes https://obsproject.com/mantis/view.php?id=1269
2019-07-05 09:12:57 -07:00
jp9000
f53df7da64 clang-format: Apply formatting
Code submissions have continually suffered from formatting
inconsistencies that constantly have to be addressed.  Using
clang-format simplifies this by making code formatting more consistent,
and allows automation of the code formatting so that maintainers can
focus more on the code itself instead of code formatting.
2019-06-23 23:49:10 -07:00
jp9000
7d136c3ce1 decklink, win-dshow: Use obs_source_output_video2
Allows the ability to override and use partial range RGB with the
DirectShow and Decklink device sources when partial range RGB is
implemented.  Fixes certain cases where devices could capture RGB in
limited range via HDMI (per the HDMI specs).
2019-04-25 15:12:33 -07:00
James Park
b3c2e74d0f win-dshow: Fix "Highest FPS" algorithm
MatcherClosestFrameRateSelector updates best_match as a side effect of
visiting every VideoInfo instance, but CapsMatch uses std::any_of,
which will stop iterating prematurely on first match. This means that
the highest FPS is not selected.

This change switches to a for loop that doesn't exit early.
2019-03-03 10:05:09 -08:00
Ilya Melamed
db06a1c12a win-dshow: Allow synchronous create/update
Allows the ability to (optionally) synchronously create/update a
directshow device source rather than always asynchronously update the
device.  This is useful if creating/destroying scenes/sources very
quickly, and helps minimize the risk of creating new directshow sources
that use the same device, yet may not activate because an existing
source may already exist.  To use, set "synchronous_activate" to true in
its settings when updating or creating.  Note that this setting will be
erased after it's used, and will not be saved to user settings, so it
must be set each time in order to be used.

Closes obsproject/obs-studio#1228
2018-05-05 11:44:14 -07:00
pkviet
67e48ecc2c libobs/media-io: Replace quad with 4.0
(also obs, deps/media-playback, libobs/audio-monitoring, decklink,
linux-alsa, linux-pulseaudio, mac-capture, obs-ffmpeg, win-dshow,
win-wasapi)

Default channel layout for 4 channels is 4.0 in FFmpeg.
Replacing quad with 4.0 will improve compatibility since FFmpeg has
better support of its default channel layouts.
2018-01-05 09:48:52 -08:00
jp9000
0d6204c8af Fix a number of MSVC warnings
Fixes a number of warnings with all modules
2017-12-05 13:53:44 -08:00
Thomas Schnitzler
09e79aba08 win-dshow: Improve automatic Elgato audio device selection
Implement automatic audio device selection for devices that use two
separate DirectShow filters for audio and video instead of having a
single filter with audio and video output pins.

Please note that this fix is currently only active for Elgato USB and
PCIe devices (e.g. Cam Link, HD60 S, HD60 Pro, 4K60 Pro) to avoid
unintentionally changing the behavior for any other devices (e.g.
webcams).

(Jim edit: This fixes an issue with newer Elgato devices where the
devices would not automatically have their audio coupled with the video;
users would have to manually select the audio device in order to get
audio functioning.)

Closes jp9000/obs-studio#1081
2017-11-29 04:04:53 -08:00
pkviet
bbac3280c1 libobs: Add surround sound audio support
(This commit also modifies the following modules: UI,
deps/media-playback, coreaudio-encoder, decklink, linux-alsa,
linux-pulseaudio, mac-capture, obs-ffmpeg, obs-filters, obs-libfdk,
obs-outputs, win-dshow, and win-wasapi)

Adds surround sound audio support to the core, core plugins, and user
interface.

Compatible streaming services: Twitch, FB 360 live
Compatible protocols: rtmp / mpeg-ts tcp udp
Compatible file formats: mkv mp4 ts  (others untested)
Compatible codecs: ffmpeg aac, fdk_aac, CoreAudio aac,
		   opus, vorbis, pcm (others untested).
Tested streaming servers: wowza, nginx
	 HLS, mpeg-dash : surround passthrough
Html5 players tested with live surround:
	 videojs, mediaelement, viblast (hls+dash), hls.js
Decklink: on win32, swap channels order for 5.1 7.1
         (due to different channel mapping on wav, mpeg, ffmpeg)
Audio filters: surround working.
Monitoring: surround working (win macOs linux (pulse-audio)).
VST:	 stereo plugins keep in general only the first two channels.
	 surround plugins should work (e.g. mcfx does).
OS: win, macOs, linux (alsa, pulse-audio).
Misc: larger audio bitrates unlocked to accommodate more channels
NB: mf-aac only supports mono and stereo + 5.1 on win 10
         (not implemented due to lack of usefulness)

Closes jp9000/obs-studio#968
2017-11-26 03:41:53 -08:00
jp9000
a0e8c7a5c1 win-dshow: Fix video playback when default format is MJPEG
Video playback doesn't work if the default format is MJPEG and there are
other formats to use; this is because the useDefaultConfig variable is
still set to true, which overrides the format value that would normally
tell it to convert to RGB.
2017-10-04 15:58:06 -07:00
jp9000
d13fa96851 libobs: Don't use source flags for async buffering
(This commit also modifies the decklink, linux-v4l2, mac-avcapture,
obs-ffmpeg, and win-dshow modules)

Originally, async buffering for sources was supposed to be a
user-controllable flag.  However, that turned out to be less than ideal
because sources (such as the win-dshow plugin) were programmed with
automatic control over their buffering (such as automatically detecting
USB 2.0 capture devices and then enabling in those cases).

The fact that it was a flag caused a design flaw to where buffering
values would be overwritten when a source is loaded from save data.

Because of that, this flag is being deprecated and replaced with a
specific function to enable unbuffered mode instead.
2017-05-13 23:32:40 -07:00
jp9000
c422d84d6e win-dshow: Fix issue with activating when not set to
When the windows video device source source is set to only activate when
showing, it would still activate on first startup of the program even if
it was in another scene and not showing anywhere to the user.  This
fixes that issue.
2017-03-26 05:45:42 -07:00
jp9000
a8d7419732 win-dshow: Actually fix LGP issue
The LGP issue is caused by the device drivers returning two or more
packets in a single segment of audio data.  This fixes it by detecting
that and decoding subsequent packets.

When the FFmpeg audio decoder returns, it returns how many bytes of data
was decoded.  To have it decode multiple packets in a single segment,
just subtract the return value from the expected size, and if that size
is still larger than zero, then there are more packets in the segment to
decode.  Otherwise, stop.
2017-03-03 17:02:06 -08:00
jp9000
084e9daf88 Revert "win-dshow: Add LGP timestamp fix"
This reverts commit 32f60d07a3dc359d97873ca4f24d8400a5fc251f.
2017-03-03 17:02:05 -08:00