Commit graph

1203 commits

Author SHA1 Message Date
Zakk
ae02cd7d16 Add random repeat option to ffmpeg movie player
Fix pause/play state tracking bugs in ffmpeg movie player config dialog.
Properly reset the "is_ready" flag when closing a ffmpeg movie item
Fix potential div0 error in Downmixer
Provide default needsSetup method for compressors
2020-04-11 18:22:17 -04:00
Zakk
55c111f92e Use CIImage.CGImage to get bitmap data instead of rendering into a transient CIContext
On 10.15 use a CIColorCubeWithColorspace and use generic device RGB space
2020-04-10 03:42:52 -04:00
Zakk
d9715fd5c7 Bump version 2.1.13 2020-04-09 19:50:23 -04:00
Zakk
16564b3780 Use a single queue for all text file/file watch operations. Prevents different async queues from running over one another 2020-04-09 19:13:58 -04:00
Zakk
3615c209ef Add LUT CIFilter 2020-04-09 18:25:01 -04:00
Zakk
c5bbb1b48a Convert all compressors to use a producer/consumer thread model (VTCompressionSessions sometimes block!)
When restoring an NDI source, asynchronously wait for the stored source name to appear on the network; the underlying framework doesn't populate the available list immediately on program start.
Don't double-restore live layout on launch.
If a input is designated as 'allowDedup' do not cache it unless the user explicitly checks the cache setting to on
2020-04-07 18:26:13 -04:00
Zakk
b4ad6f56d0 Add channel layout to formats used to create PCM players from plugins 2020-03-02 00:52:27 -05:00
Zakk
a1414f249f Downmixer no longer does audio unit uniit/reinit on input format change; base node class handles that now.
When a PCMPlayer input is disconnected, stop the pending buffer timer from firing and drain the pending queue.
2020-03-01 23:16:27 -05:00
Zakk
387972bc12 Cleanup some unused variables 2020-03-01 20:12:27 -05:00
Zakk
59676688ff Add tooltip to sample rate dropdown 2020-03-01 02:49:53 -05:00
Zakk
d9f5bff5fe Always uninitialize nodes when doing connections.
Guard some graph functions with @synchronized()

Changing sample rate doesn't rebuild the graph; now requires a restart. (Can't reliably be done with encoders/streams active)
2020-03-01 00:40:01 -05:00
Zakk
d14db2b8f0 Restore audio inputs from save 2020-02-29 18:40:05 -05:00
Zakk
92546d324b Matrix detail view now shows input audio levels for each input channel 2020-02-24 18:44:08 -05:00
Zakk
d1ffac94ec Fix base audio node class not setting effectsHead and headNode after creation (fixes effect chain addition to stream output).
Change audio metering yet again.........
Uninit/reInit effects and down mixer nodes when input/output formats are set. Without doing this connecting non-stereo inputs fails. It's possible to be smarter about this by comparing the channel counts, but that's probably not worth it?
2020-02-24 01:53:36 -05:00
Zakk
8cbac8a54a Layoutrecorders now add audio tracks to their map dynamically as they are created. This fixes the main layout recorder not seeing new tracks since it is active from program start now. 2020-02-23 23:18:40 -05:00
Zakk
805fef9159 Add support for asynchronous out-of-process loading of AuV3 extensions 2020-02-23 01:01:33 -05:00
Zakk
639c53003c Remove dependency on AUGraph API 2020-02-22 23:33:49 -05:00
Zakk
1e966d5730 Properly return inputFormat for file input.
No longer rely on AUGraphInteractions to find next input/output elements, use CAMultiAudioGraph connection info
2020-02-22 21:22:36 -05:00
Zakk
f2c879b99b Change order and method of build effect chains for inputs: input -> converter -> delayX5 -> effects -> downmixer 2020-02-22 03:13:05 -05:00
Zakk
6931cc3aa2 Convert PCM player free loop to a background dispatch_timer
Track input->outputTrack associations via a custom object.
More cleanup
2020-02-22 02:06:27 -05:00
Zakk
3d2c0d2fd8 FFMpeg movie player uses AVAudioFormat internally.
FFMpeg movie player now resamples audio to 44.1khz (likely more common than 48khz)
Fixed inability to set inputFormat property on CAMultiAudioInput
2020-02-21 19:27:14 -05:00
Zakk
51e4356993 Initial work on clean/modernization of the audio engine.
Audio Graph now keeps track of connections via connection objects.
Connecting nodes now requires an AudioFormat, and the format is set on both ends of the connection. No more explicit setting of stream formats.
CAMultAudioPCM is now based on AVAudioPCMBuffer
Most instances of AudioStreamBasicDescription are replaced with AVAudioFormat
2020-02-21 08:55:40 -05:00
Zakk
4226e7facc Update TPCircularBuffer to get rid of deprecation warnings
Fix some warnings
2020-02-03 03:24:09 -05:00
Zakk
200611c911 version 2.1.12 2020-01-22 17:01:39 -05:00
Zakk
e4568c6126 Fix typo in Debug menu target method name 2020-01-22 17:01:01 -05:00
Zakk
4ef4b269ef Always commit the CATransaction when bailing out of the open GL renderer 2020-01-22 16:57:47 -05:00
Zakk
c1662f957a Update sparkle for notarization 2020-01-20 18:15:20 -05:00
Zakk
ec9e3ab52c Limit window capture sources to desktop windows (no menu bar elements etc) 2019-12-18 11:17:17 -05:00
Zakk
bc386b2828 Bump to version 2.1.11 2019-12-09 04:42:20 -05:00
Zakk
690b5bbc29 Change stream/record button enable logic: stream button is active if ANY output is flagged stream, not if any output is EXCLUSIVELY stream enabled 2019-12-09 04:34:37 -05:00
Zakk
e71240fc85 Fix a bunch of deprecations that came along with deploy target 10.12
When a new audio device connects don't force add every device to the audio engine.
Implement layout delete event in layout capture
Various fixes for some multithread access issues
2019-12-07 22:26:28 -05:00
Zakk
07b26b99ea Let VTCompressionSession do the pixel transfer so it happens on a background thread instead of during the main render/recorder loop
Properly flag keyFrames from VTCompressionSession
2019-11-03 06:25:10 -05:00
Zakk
9021929c56 Don't autofit/direct size a zero rectangle frame, doing so generates a runtime exception.
Protect audio graph node list from multithread access
2019-11-02 21:08:31 -04:00
Zakk
6255c32992 Don't place a 'live' pointer to output tracks in a CAMultiAudioInput's save data dictionary; copy it instead.
Text file source now supports all file types that NSAttributedString does (html, RTF/RTFD, DOC, XML etc).
Added a font size adjustment option to text file source.
2019-11-02 18:28:33 -04:00
Zakk
1b2209f12a Use MKV container for live record buffer: better compatibility with various codecs. (fragmented mp4 can't contain ProRes????)
Some fixes to layout editing window
Up bitrate of built in hardware h264 encoder for live recording.
Properly restore muted status of default system input
2019-11-02 03:27:30 -04:00
Zakk
2822956358 Control-clicking instant record button now brings up a menu of various durations of live buffer to write to a recording.
AppleScript instantRecord command now takes integer argument of duration. Defaults to the configured buffer length if unset
2019-10-31 09:16:16 -04:00
Zakk
6fd1223bdc Removed 'force format' from global output settings; individual plugins are responsible for specifying output formats and allowing users to change them.
Support segmentation for file output. This is based on libavformat's segment muxer. May move it to a custom internal file rotator in the future.
Changed instant record buffer to a rotating disk based buffer. Saving a live recording now just remuxes a time range of the on-disk buffer to a new file.
2019-10-30 04:30:36 -04:00
Zakk
414ab28774 Set deployment target to 10.12
Don't save default system audio input in the system audio uuid maps; it gets added automatically and doesn't need restoring on launch
2019-10-24 20:51:31 -04:00
Zakk
de9605ad1a Don't call InputSource commonInit twice: this causes double KVO of constraints and leads to...bad things 2019-10-23 17:28:33 -04:00
Zakk
0d35f3516c Don't call displayIfNeeded, instead call setNeedsDisplay and let Core Animation update on the normal cycle.
Update midi code to reflect recent changes in live/staging handling
2019-10-23 01:59:01 -04:00
Zakk
24f5d7e6c0 Change internal handling of staging and live views to improve consistency and reduce side-effects/order dependencies when loading and saving. 2019-10-22 14:54:16 -04:00
Zakk
9f1ad626f4 Allow multiple instances of the same hardware audio input so they can be attached to different output tracks with separate volume/effects etc.
Added a flag to audio inputs (in layouts) that toggles if they cause a new instance of a hardware input to be created, or use one that already exists (if it does)
2019-10-20 20:42:34 -04:00
Zakk
d08893309e Create multiple audio instances for layout sources: one for each output track 2019-10-17 14:33:46 -04:00
Zakk
abb0e07c19 When creating temporary/clone audio engines, mirror the system output tracks into them.
Change layout renderer back to CARenderer: SceneKit now does complex colorspace/gamma and not all capture sources provide the proper formatting to look correct.
Change layout capture source so it pretends to an OutputDestination attached to a Passthrough compressor.
Added default Passthrough compressor with noCopy set.
2019-10-16 13:21:43 -04:00
Zakk
9e7091ecae When a layout audio source is deallocated, use the audioNode's engine to remove it. Fixes audio inputs not removing themselves from the mixer if you delete them manually from a layout 2019-10-01 05:04:06 -04:00
Zakk
9a7805833c Fix a rare(-ish) crash in the source list UI due to race conditions when the layout's source list is being updated
Some changes to how audio inputs are removed so they're properly released instead of just dangling unattached to an audio graph.
2019-10-01 03:39:23 -04:00
Zakk
53da8ccce6 Don't set default duration on input based transitions; this way the global duration gets used.
For de-dupable sources, set the cache when the unique id is mapped to a device, so caching works when the device list is delayed/async
2019-09-28 01:14:39 -04:00
Zakk
b02687862d File text source: bounce all file writing through an async queue
Rework auto fitting so it functions on sources that don't call frame updates regularly. (example: static images)
2019-09-27 04:31:36 -04:00
Zakk
795091c2fc Improve process detection of SyphonInject captures
File based text input can now handle HTML formatted files. You need to set a style in the file for font/font size.
2019-09-26 01:32:55 -04:00
Zakk
a1cad1d7a7 Use an NSPanel for the desktop capture region selection: allows it to float over fullscreen windows in alternate spaces 2019-09-20 18:33:29 -04:00