#include "VideoIOBackendFactory.h" #include "VideoIOTypes.h" #include namespace { int gFailures = 0; void Expect(bool condition, const char* message) { if (condition) return; std::cerr << "FAIL: " << message << "\n"; ++gFailures; } } int main() { const std::vector backends = ListVideoIOBackendDescriptors(); Expect(!backends.empty(), "backend registry is not empty"); Expect(backends.front().backendId == VideoIOBackendId::DeckLink, "decklink is registered"); Expect(std::string(backends.front().backendName) == "decklink", "decklink registry name is stable"); const VideoIOBackendDescriptor* descriptor = GetVideoIOBackendDescriptor(VideoIOBackendId::DeckLink); Expect(descriptor != nullptr, "decklink descriptor can be looked up"); Expect(descriptor != nullptr && std::string(descriptor->displayName) == "Blackmagic DeckLink", "decklink descriptor exposes display name"); Expect(descriptor != nullptr && std::string(descriptor->unavailableTitle) == "This application requires the selected video I/O drivers installed.", "decklink descriptor exposes unavailable title"); Expect(IsVideoIOBackendUnavailableError(VideoIOBackendId::DeckLink, "Please install the Blackmagic DeckLink drivers to use the features of this application."), "decklink unavailable message is recognized"); Expect(!IsVideoIOBackendUnavailableError(VideoIOBackendId::DeckLink, "some other error"), "non-driver errors are not treated as backend unavailable"); std::string error; std::unique_ptr device = CreateVideoIODevice(VideoIOBackendId::DeckLink, error); Expect(device != nullptr, "decklink backend factory returns a device"); Expect(!device || device->BackendId() == VideoIOBackendId::DeckLink, "decklink backend reports decklink id"); Expect(error.empty(), "supported backend does not produce an error"); error.clear(); device = CreateVideoIODevice(static_cast(999), error); Expect(device == nullptr, "unknown backend id is rejected"); Expect(!error.empty(), "unknown backend reports an error"); if (gFailures != 0) { std::cerr << gFailures << " VideoIO backend factory test failure(s).\n"; return 1; } std::cout << "VideoIO backend factory tests passed.\n"; return 0; }