obs-frontend-api: Add frontend api functions for the virtual camera

This adds functions to the frontend api to start/stop the virtual
camera, to check if it is active and adds function to get the output
reference. It also adds api events for when the virtual camera is
started or stopped.
master
Clayton Groeneveld 2020-12-07 14:39:02 -06:00 committed by Jim
parent 96ef45cef5
commit 3bc4e8ecba
6 changed files with 99 additions and 0 deletions

View File

@ -23,6 +23,7 @@ extern volatile bool streaming_active;
extern volatile bool recording_active;
extern volatile bool recording_paused;
extern volatile bool replaybuf_active;
extern volatile bool virtualcam_active;
/* ------------------------------------------------------------------------- */
@ -548,6 +549,28 @@ struct OBSStudioAPI : obs_frontend_callbacks {
Q_ARG(OBSSource, OBSSource(source)));
}
obs_output_t *obs_frontend_get_virtualcam_output(void) override
{
OBSOutput output = main->outputHandler->virtualCam;
obs_output_addref(output);
return output;
}
void obs_frontend_start_virtualcam(void) override
{
QMetaObject::invokeMethod(main, "StartVirtualCam");
}
void obs_frontend_stop_virtualcam(void) override
{
QMetaObject::invokeMethod(main, "StopVirtualCam");
}
bool obs_frontend_virtualcam_active(void) override
{
return os_atomic_load_bool(&virtualcam_active);
}
void on_load(obs_data_t *settings) override
{
for (size_t i = saveCallbacks.size(); i > 0; i--) {

View File

@ -475,3 +475,27 @@ void obs_frontend_take_source_screenshot(obs_source_t *source)
if (callbacks_valid())
c->obs_frontend_take_source_screenshot(source);
}
obs_output_t *obs_frontend_get_virtualcam_output(void)
{
return !!callbacks_valid() ? c->obs_frontend_get_virtualcam_output()
: nullptr;
}
void obs_frontend_start_virtualcam(void)
{
if (callbacks_valid())
c->obs_frontend_start_virtualcam();
}
void obs_frontend_stop_virtualcam(void)
{
if (callbacks_valid())
c->obs_frontend_stop_virtualcam();
}
bool obs_frontend_virtualcam_active(void)
{
return !!callbacks_valid() ? c->obs_frontend_virtualcam_active()
: false;
}

View File

@ -50,6 +50,9 @@ enum obs_frontend_event {
OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED,
OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED,
OBS_FRONTEND_EVENT_VIRTUALCAM_STARTED,
OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED,
};
/* ------------------------------------------------------------------------- */
@ -198,6 +201,11 @@ EXPORT void obs_frontend_set_current_preview_scene(obs_source_t *scene);
EXPORT void obs_frontend_take_screenshot(void);
EXPORT void obs_frontend_take_source_screenshot(obs_source_t *source);
EXPORT obs_output_t *obs_frontend_get_virtualcam_output(void);
EXPORT void obs_frontend_start_virtualcam(void);
EXPORT void obs_frontend_stop_virtualcam(void);
EXPORT bool obs_frontend_virtualcam_active(void);
/* ------------------------------------------------------------------------- */
#ifdef __cplusplus

View File

@ -122,6 +122,11 @@ struct obs_frontend_callbacks {
virtual void obs_frontend_take_screenshot() = 0;
virtual void
obs_frontend_take_source_screenshot(obs_source_t *source) = 0;
virtual obs_output_t *obs_frontend_get_virtualcam_output(void) = 0;
virtual void obs_frontend_start_virtualcam(void) = 0;
virtual void obs_frontend_stop_virtualcam(void) = 0;
virtual bool obs_frontend_virtualcam_active(void) = 0;
};
EXPORT void

View File

@ -6300,6 +6300,9 @@ void OBSBasic::OnVirtualCamStart()
vcamButton->setText(QTStr("Basic.Main.StopVirtualCam"));
vcamButton->setChecked(true);
if (api)
api->on_event(OBS_FRONTEND_EVENT_VIRTUALCAM_STARTED);
OnActivate();
blog(LOG_INFO, VIRTUAL_CAM_START);
@ -6313,6 +6316,9 @@ void OBSBasic::OnVirtualCamStop(int)
vcamButton->setText(QTStr("Basic.Main.StartVirtualCam"));
vcamButton->setChecked(false);
if (api)
api->on_event(OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED);
blog(LOG_INFO, VIRTUAL_CAM_STOP);
OnDeactivate();

View File

@ -140,6 +140,15 @@ Structures/Enumerations
Triggered when the recording has been unpaused.
- **OBS_FRONTEND_EVENT_VIRTUALCAM_STARTED**
Triggered when the virtual camera is started.
- **OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED**
Triggered when the virtual camera is stopped.
.. type:: struct obs_frontend_source_list
- DARRAY(obs_source_t*) **sources**
@ -556,3 +565,27 @@ Functions
Takes a screenshot of the specified source.
:param source: The source to take screenshot of.
---------------------------------------
.. function:: obs_output_t *obs_frontend_get_virtualcam_output(void)
:return: A new reference to the current virtual camera output.
---------------------------------------
.. function:: void obs_frontend_start_virtualcam(void)
Starts the virtual camera.
---------------------------------------
.. function:: void obs_frontend_stop_virtualcam(void)
Stops the virtual camera.
---------------------------------------
.. function:: bool obs_frontend_virtualcam_active(void)
:return: *true* if virtual camera is active, *false* otherwise.