decklink-ui-main.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include <obs-module.h>
  2. #include <obs-frontend-api.h>
  3. #include <QMainWindow>
  4. #include <QAction>
  5. #include <util/util.hpp>
  6. #include <util/platform.h>
  7. #include "DecklinkOutputUI.h"
  8. OBS_DECLARE_MODULE()
  9. OBS_MODULE_USE_DEFAULT_LOCALE("decklink-output-ui", "en-US")
  10. DecklinkOutputUI *doUI;
  11. bool main_output_running = false;
  12. obs_output_t *output;
  13. OBSData load_settings()
  14. {
  15. BPtr<char> path = obs_module_get_config_path(obs_current_module(),
  16. "decklinkOutputProps.json");
  17. BPtr<char> jsonData = os_quick_read_utf8_file(path);
  18. if (!!jsonData) {
  19. obs_data_t *data = obs_data_create_from_json(jsonData);
  20. OBSData dataRet(data);
  21. obs_data_release(data);
  22. return dataRet;
  23. }
  24. return nullptr;
  25. }
  26. void output_start()
  27. {
  28. if (!main_output_running) {
  29. OBSData settings = load_settings();
  30. if (settings != nullptr) {
  31. output = obs_output_create("decklink_output",
  32. "decklink_output", settings, NULL);
  33. obs_output_start(output);
  34. obs_data_release(settings);
  35. main_output_running = true;
  36. }
  37. }
  38. }
  39. void output_stop()
  40. {
  41. if (main_output_running) {
  42. obs_output_stop(output);
  43. obs_output_release(output);
  44. main_output_running = false;
  45. }
  46. }
  47. void addOutputUI(void)
  48. {
  49. QAction *action = (QAction*)obs_frontend_add_tools_menu_qaction(
  50. obs_module_text("Decklink Output"));
  51. QMainWindow *window = (QMainWindow*)obs_frontend_get_main_window();
  52. doUI = new DecklinkOutputUI(window);
  53. auto cb = []() {
  54. doUI->ShowHideDialog();
  55. };
  56. action->connect(action, &QAction::triggered, cb);
  57. }
  58. static void OBSEvent(enum obs_frontend_event event, void *)
  59. {
  60. if (event == OBS_FRONTEND_EVENT_FINISHED_LOADING) {
  61. OBSData settings = load_settings();
  62. if (settings && obs_data_get_bool(settings, "auto_start"))
  63. output_start();
  64. }
  65. }
  66. bool obs_module_load(void)
  67. {
  68. addOutputUI();
  69. obs_frontend_add_event_callback(OBSEvent, nullptr);
  70. return true;
  71. }