Handle the case where x264 preset/tune values were set to NSNull from the default compressor migration.
Properly save width/height in compressors.
Fixed issue where editing a in-use compressor would replace it with a copy. Because NSDictionaryController does weird shit
Redirect all stderr to a log window (finally!)
Reworked output attaching so 1) it is handled only inside of OutputDestination and 2) if you edit the destination and deactive/reactive the output, the changes are picked up.
Change AVFoundation available video list so it is driven by device connected/disconnected notifications. This fixes some dumb stuff with the new Blackmagic drivers.
The FPS value in the UI now changes to reflect changes in the capture source preferences (AVfoundation format/fps etc)
Frame acquisition timing loop should use less CPU now (sleeps fast instead of spins in some places)
Completely rewrote audio and video acquisition. Audio is now buffered and sent along with the frame after compression. I’m not 100% sure this even matters, but it may allow more flexibility in the future.
Consolidated ‘did the stream start’ functions in the main newFrame loop, there were race conditions before that would cause outputs to not get initialized. Hopefully this squashes the ‘nothing happens when I hit stream’ bug
A bunch of other changes that I’ve probably forgotten.
Added Image input type. Advanced settings panel is used to choose a directory. All images in this directory show up as sources.
Change properties on VTCompressionSession and VTPixelTransferSession to letterbox instead of stretch.
Defer captureSetup until resolution is determined on first frame arrival.
captureFPS no longer bound to videoCaptureSession.videoCaptureFPS. Which means it doesn’t reset when the source is changed.
Fixed an issue with videoCaptureSession deallocation not happening. This means the AVFoundation type will release the camera when it is no longer active.
Added internal API for saving/restoring values. Used for Image capture saving the source directory.
Audio sample rate is now a drop down.
Stopped using a dispatch timer for the frame timer, instead using a loop and a target time to sleep until.
Don’t use libswscale to scale/pixel format convert, use VTPixelTransferSession. Seems to be faster? Maybe this should be pushed into OpenGL?
All the above combined seem to have fixed audio sync issues on twitch.
Changed PTS calculations for audio and video. The old way for audio was completely wrong and I’m shocked it ever resulted in synced audio. This fixes streaming issues with the newest TwitchTV player.
Syphon capture now auto-reconnects if the syphon server goes away and then comes back. Syphon server list also auto-changes as servers go away/appear.