mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-19 09:41:32 +08:00
UI: Add virtual camera to UI
Adds a virtual camera button to the main user interface. If virtual camera is not installed, it will not add the button. On Windows, it detects whether the virtual camera filters are properly registered, and will only add the button if the virtual camera filter is confirmed registered. Also adds a virtual camera option to the auto-configuration wizard, which will just simply set the user's resolution/scale to 1920x1080 at 30 FPS.
This commit is contained in:
@@ -14,6 +14,7 @@ volatile bool streaming_active = false;
|
||||
volatile bool recording_active = false;
|
||||
volatile bool recording_paused = false;
|
||||
volatile bool replaybuf_active = false;
|
||||
volatile bool virtualcam_active = false;
|
||||
|
||||
#define RTMP_PROTOCOL "rtmp"
|
||||
|
||||
@@ -139,6 +140,30 @@ static void OBSReplayBufferStopping(void *data, calldata_t *params)
|
||||
UNUSED_PARAMETER(params);
|
||||
}
|
||||
|
||||
static void OBSStartVirtualCam(void *data, calldata_t *params)
|
||||
{
|
||||
BasicOutputHandler *output = static_cast<BasicOutputHandler *>(data);
|
||||
|
||||
output->virtualCamActive = true;
|
||||
os_atomic_set_bool(&virtualcam_active, true);
|
||||
QMetaObject::invokeMethod(output->main, "OnVirtualCamStart");
|
||||
|
||||
UNUSED_PARAMETER(params);
|
||||
}
|
||||
|
||||
static void OBSStopVirtualCam(void *data, calldata_t *params)
|
||||
{
|
||||
BasicOutputHandler *output = static_cast<BasicOutputHandler *>(data);
|
||||
int code = (int)calldata_int(params, "code");
|
||||
|
||||
output->virtualCamActive = false;
|
||||
os_atomic_set_bool(&virtualcam_active, false);
|
||||
QMetaObject::invokeMethod(output->main, "OnVirtualCamStop",
|
||||
Q_ARG(int, code));
|
||||
|
||||
UNUSED_PARAMETER(params);
|
||||
}
|
||||
|
||||
static void FindBestFilename(string &strPath, bool noSpace)
|
||||
{
|
||||
int num = 2;
|
||||
@@ -197,6 +222,49 @@ static bool CreateAACEncoder(OBSEncoder &res, string &id, int bitrate,
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
inline BasicOutputHandler::BasicOutputHandler(OBSBasic *main_) : main(main_)
|
||||
{
|
||||
if (main->vcamEnabled) {
|
||||
virtualCam = obs_output_create("virtualcam_output",
|
||||
"virtualcam_output", nullptr,
|
||||
nullptr);
|
||||
obs_output_release(virtualCam);
|
||||
|
||||
signal_handler_t *signal =
|
||||
obs_output_get_signal_handler(virtualCam);
|
||||
startVirtualCam.Connect(signal, "start", OBSStartVirtualCam,
|
||||
this);
|
||||
stopVirtualCam.Connect(signal, "stop", OBSStopVirtualCam, this);
|
||||
}
|
||||
}
|
||||
|
||||
bool BasicOutputHandler::StartVirtualCam()
|
||||
{
|
||||
if (main->vcamEnabled) {
|
||||
obs_output_set_media(virtualCam, obs_get_video(),
|
||||
obs_get_audio());
|
||||
return obs_output_start(virtualCam);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void BasicOutputHandler::StopVirtualCam()
|
||||
{
|
||||
if (main->vcamEnabled) {
|
||||
obs_output_stop(virtualCam);
|
||||
}
|
||||
}
|
||||
|
||||
bool BasicOutputHandler::VirtualCamActive() const
|
||||
{
|
||||
if (main->vcamEnabled) {
|
||||
return obs_output_active(virtualCam);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
struct SimpleOutput : BasicOutputHandler {
|
||||
OBSEncoder aacStreaming;
|
||||
OBSEncoder h264Streaming;
|
||||
|
||||
Reference in New Issue
Block a user