Controlling different ATEM versions from the same software

Ask software engineering and SDK questions for developers working on Mac OS X, Windows or Linux.
  • Author
  • Message
Offline

lanephillips

  • Posts: 7
  • Joined: Wed Dec 06, 2017 10:05 pm

Controlling different ATEM versions from the same software

PostTue Jan 12, 2021 10:16 pm

My company has its own software to control Blackmagic devices at customer locations. When we started using the ATEM SDK, 7.2 was the current version. Now that we're starting to use the Mini Pro at some locations, we've had to start building our software with the 8.5 SDK, no problem.

But now we're finding our software doesn't work for customers that have the older 7.* ATEM drivers and firmware installed. Although we send out automatic updates of our own software, we don't have a process in place to automatically update the ATEM software at dozens of customer locations. Is it possible to control ATEMs with different versions of the firmware from the same application?

I see there is a Legacy folder in the SDK that appears to have headers and code for every older version of the SDK. I looked in one of the header files and I see the the classes have names like "IBMDSwitcherKey_v7_2". So maybe I can include multiple versions of the SDK in my app and it should build fine without any name collisions.

So assuming I can control different ATEM versions the question now is: Is it possible to detect which version of ATEM software is installed on the computer, or which firmware version is on the ATEM? I think this is possible since the ATEM control panel can detect it. (Or maybe that's the ATEM Setup software I'm thinking of.)
Offline

lanephillips

  • Posts: 7
  • Joined: Wed Dec 06, 2017 10:05 pm

Re: Controlling different ATEM versions from the same softwa

PostThu Nov 03, 2022 7:41 pm

Replying to my own post to say that, yes, it is possible to control ATEMs on machines with different versions of the ATEM software installed. We just have to call the deprecated APIs using the name with the last supported version number in it (e.g. IBMDSwitcherKey_v7_2), while we can call the latest APIs using the undecorated name.

What we still haven't figured out is how to determine which version of the ATEM software is installed on the user's machine. We make an educated guess based on the firmware version that the ATEM publishes on mDNS, but this isn't 100% reliable since the ATEM could be on a different subnet from the user's machine.
Offline

Cameron Nichols

Blackmagic Design

  • Posts: 442
  • Joined: Mon Sep 04, 2017 4:05 am

Re: Controlling different ATEM versions from the same softwa

PostFri Nov 11, 2022 5:30 am

Hi Lane,

Although the versions are not exposed by the API, but it should be possible to write applications that can cover the different versions deployed. For example in the case of IBMDSwitcherKey:
Code: Select all
IBMDSwitcher* switcher
// Code to discover IBMDSwitcher* object

// Get legacy switcher key interface
IBMDSwitcherKey_v7_2* switcherKey_v7_2 = nullptr;
if (switcher->QueryInterface(IID_IBMDSwitcherKey_v7_2, (void**)&switcherKey_v7_2) != S_OK)
{
    // No IBMDSwitcherKey_v7_2 interface
    return;
}

// Check whether current key interface is available
IBMDSwitcherKey* switcherKey = nullptr;
if (switcherKey_v7_2->QueryInterface(IID_IBMDSwitcherKey, (void**)&switcherKey) == E_NOINTERFACE)
{
    // No IBMDSwitcherKey interface - use the legacy interface
    ...
}
Because the legacy interfaces continue to be defined in headers in later versions, you can use IUnknown::QueryInterface to query between current and legacy interfaces in both directions, but use HRESULT = E_NOINTERFACE return to determine whether the Switcher supports the later interface version.

Regards
Cameron

Return to Software Developers

Who is online

Users browsing this forum: No registered users and 20 guests