The past week I’ve been working on two things: A redesign for this website and DataPath, a high performance IPC solution. And today I’d like to present to you what DataPath is and how it can benefit you (even as an end-user).
What is DataPath?
DataPath is an Inter-Process Communication (IPC) solution written in C++, with the primary goal of abstracting away the difficult parts of IPC so that it is simple to use, but still be fast enough for use in high performance situations. It uses the Event Model in combination with the Task Model to be relatively easy to use.
Why is DataPath?
In the earlier OBS AMD Encoder days, OBS Studio used to repeatedly crash on launch due to malfunctioning AMD Drivers. Jim (aka @WizardOfOBS) put in a lot of work to detach the initial test from the OBS Studio process by launching another process and moving it there. However, that only solved the crashes during launch. There were a bunch of crashes that happened during encoding, or even just when querying the driver for the proper limits on settings.
That brought up the question of how to solve them. Relying on AMD wasn’t going to work out, as their Drivers often did not keep backwards compatibility, so people had to downgrade drivers in order to play older games correctly. And there’s also the problem of people not being able to upgrade, or just not upgrading for other reasons.
And that is where the idea for DataPath spawned, but the execution of this idea took over two years until I learned how to deal with the APIs enough to make a proper solution
Where is DataPath?
The source code is public on GitHub and licensed under the AGPLv3. The license is a bit restrictive, but it is definitely one of the better options in my opinion. An alternative was GPLv3, but that would not have restrictions apply over network – which is exactly what IPC actually is classified as.
Source Code: DataPath on GitHub
Note: A previous version said that AGPLv3 was an alternative, while already licensed under AGPLv3. This has been corrected to say that GPLv3 was an alternative.