window-basic-main-outputs.hpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #pragma once
  2. #include <string>
  3. class OBSBasic;
  4. struct BasicOutputHandler {
  5. OBSOutputAutoRelease fileOutput;
  6. OBSOutputAutoRelease streamOutput;
  7. OBSOutputAutoRelease replayBuffer;
  8. OBSOutputAutoRelease virtualCam;
  9. bool streamingActive = false;
  10. bool recordingActive = false;
  11. bool delayActive = false;
  12. bool replayBufferActive = false;
  13. bool virtualCamActive = false;
  14. OBSBasic *main;
  15. obs_view_t *virtualCamView = nullptr;
  16. video_t *virtualCamVideo = nullptr;
  17. obs_scene_t *vCamSourceScene = nullptr;
  18. obs_sceneitem_t *vCamSourceSceneItem = nullptr;
  19. std::string outputType;
  20. std::string lastError;
  21. std::string lastRecordingPath;
  22. OBSSignal startRecording;
  23. OBSSignal stopRecording;
  24. OBSSignal startReplayBuffer;
  25. OBSSignal stopReplayBuffer;
  26. OBSSignal startStreaming;
  27. OBSSignal stopStreaming;
  28. OBSSignal startVirtualCam;
  29. OBSSignal stopVirtualCam;
  30. OBSSignal streamDelayStarting;
  31. OBSSignal streamStopping;
  32. OBSSignal recordStopping;
  33. OBSSignal recordFileChanged;
  34. OBSSignal replayBufferStopping;
  35. OBSSignal replayBufferSaved;
  36. inline BasicOutputHandler(OBSBasic *main_);
  37. virtual ~BasicOutputHandler(){};
  38. virtual bool SetupStreaming(obs_service_t *service) = 0;
  39. virtual bool StartStreaming(obs_service_t *service) = 0;
  40. virtual bool StartRecording() = 0;
  41. virtual bool StartReplayBuffer() { return false; }
  42. virtual bool StartVirtualCam();
  43. virtual void StopStreaming(bool force = false) = 0;
  44. virtual void StopRecording(bool force = false) = 0;
  45. virtual void StopReplayBuffer(bool force = false) { (void)force; }
  46. virtual void StopVirtualCam();
  47. virtual bool StreamingActive() const = 0;
  48. virtual bool RecordingActive() const = 0;
  49. virtual bool ReplayBufferActive() const { return false; }
  50. virtual bool VirtualCamActive() const;
  51. virtual void Update() = 0;
  52. virtual void SetupOutputs() = 0;
  53. virtual void UpdateVirtualCamOutputSource();
  54. virtual void DestroyVirtualCamView();
  55. virtual void DestroyVirtualCameraScene();
  56. inline bool Active() const
  57. {
  58. return streamingActive || recordingActive || delayActive ||
  59. replayBufferActive || virtualCamActive;
  60. }
  61. protected:
  62. void SetupAutoRemux(const char *&container);
  63. std::string GetRecordingFilename(const char *path,
  64. const char *container, bool noSpace,
  65. bool overwrite, const char *format,
  66. bool ffmpeg);
  67. };
  68. BasicOutputHandler *CreateSimpleOutputHandler(OBSBasic *main);
  69. BasicOutputHandler *CreateAdvancedOutputHandler(OBSBasic *main);