Created bmd_option type that is basically a variant (tagged union) to
encapsulate possible configuration values and also special values for
default and keep. Having this previously in int is cumbersome because
the special values as were defined (0, -1) collide with the default
semantics of bool.
It actually sets `profile=1dfd`. This is a complement to already
existing `half-duplex` option (that has on the other hand more more
complex semantic - it chooses the profile tailored for the device, since
the right one differs for eg. 8K Pro /4dhd/ and Duo/Quad 2 /2dhd/).
Also the commit message was incorrect - if single device is specified,
request either separate 3D tiles or the merged buffer (this is the new
DISPLAY_PROPERTY_VIDEO_SEPARATE_3D mode).
Set 1-subdevice-full-duplex for 3D mode as it seems to be the only
supported (1 device half-duplex would work as well but it doesn't seem
to support 2 streams while full-duplex supports at least 2 streams in
the opposite direction, at least for 8K Pro).
- removed `needs_mainloop` attribute and deduce if mainloop is needed
from the presence of _run callback (the information is now redundant
only displays needing/running mainloop should announce _run callback)
- run the custom mainloop (currently only Syphon!) only when display
doesn't run its mainloop. This allows running Syphon and GL/SDL
display because it connects to the display mainloop.
Frame scheduling is clearly non-blocking but even the sync calls are
non-blocking - for video, next video frame is replaced, for audio, the
samples are written to ring buffer (with possible overflow). So the
numbers are almost everytime near zero.
Return a macro ((void *) 1) from modules returning pointer to signalize
that help was printed (for correct UG return value). This replaces the
old behavior when module class specific value (eg. &display_init_noerr)
was returned.
Replace blocking/nonblock/discard flags with numerical timeout for
fine-grainer control of latency.
The original flags are kept as convenience macros so the API changes is
only small as long as non-block (default) or blocking is used.
Use name (MOD_NAME) provided by module rather than name given from
command-line. Those 2 may not match - in command-line it is
case-insensitive so ("gl" or even "gL" would be printed inestead of
expected "GL"). Also there may be input/output module of the same name
(eg. decklink) for which we may want to distinguish.
- use 16 bytes to be safe (compiler incorrectly warns)
- allocate temporary variable on heap
- improved asserts for assumed numeric ranges (counting with leap
seconds)
* Added soxr 0.1.3 as an external dependency (for the resampling code)
* Removed resampler quality parameter
* The decklink drift fixing class has been changed to be disabled by default. The help for the decklink has also been updated to include details about the dynamic resampling process.
* Stopped the dynamic resampler spamming the verbose log too much