plugin-main.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include <obs-module.h>
  2. #include "decklink-devices.hpp"
  3. OBS_DECLARE_MODULE()
  4. OBS_MODULE_USE_DEFAULT_LOCALE("decklink", "en-US")
  5. MODULE_EXPORT const char *obs_module_description(void)
  6. {
  7. return "Blackmagic DeckLink source";
  8. }
  9. extern struct obs_source_info create_decklink_source_info();
  10. struct obs_source_info decklink_source_info;
  11. extern struct obs_output_info create_decklink_output_info();
  12. struct obs_output_info decklink_output_info;
  13. bool log_sdk_version()
  14. {
  15. ComPtr<IDeckLinkIterator> deckLinkIterator;
  16. ComPtr<IDeckLinkAPIInformation> deckLinkAPIInformation;
  17. HRESULT result;
  18. deckLinkIterator = CreateDeckLinkIteratorInstance();
  19. if (deckLinkIterator == NULL) {
  20. blog(LOG_WARNING,
  21. "A DeckLink iterator could not be created. The DeckLink drivers may not be installed");
  22. return false;
  23. }
  24. result = deckLinkIterator->QueryInterface(
  25. IID_IDeckLinkAPIInformation, (void **)&deckLinkAPIInformation);
  26. if (result == S_OK) {
  27. decklink_string_t deckLinkVersion;
  28. deckLinkAPIInformation->GetString(BMDDeckLinkAPIVersion,
  29. &deckLinkVersion);
  30. blog(LOG_INFO, "Decklink API Compiled version %s",
  31. BLACKMAGIC_DECKLINK_API_VERSION_STRING);
  32. std::string versionString;
  33. DeckLinkStringToStdString(deckLinkVersion, versionString);
  34. blog(LOG_INFO, "Decklink API Installed version %s",
  35. versionString.c_str());
  36. }
  37. return true;
  38. }
  39. bool obs_module_load(void)
  40. {
  41. if (!log_sdk_version())
  42. return false;
  43. deviceEnum = new DeckLinkDeviceDiscovery();
  44. if (!deviceEnum->Init())
  45. return false;
  46. decklink_source_info = create_decklink_source_info();
  47. obs_register_source(&decklink_source_info);
  48. decklink_output_info = create_decklink_output_info();
  49. obs_register_output(&decklink_output_info);
  50. return true;
  51. }
  52. void obs_module_unload(void)
  53. {
  54. delete deviceEnum;
  55. }