提交 a65b3697 编写于 作者: A Alex Anderson

decklink: Add deactivate when not showing option to decklink

Adds a deactivate when not showing checkbox to decklink sources.
上级 a032bcc7
......@@ -17,3 +17,4 @@ ChannelFormat.4_0ch="4ch"
ChannelFormat.4_1ch="4.1ch"
ChannelFormat.5_1ch="5.1ch"
ChannelFormat.7_1ch="7.1ch"
DeactivateWhenNotShowing="Deactivate when not showing"
......@@ -75,6 +75,7 @@ bool DeckLink::Activate(DeckLinkDevice *device, long long modeId)
if (isActive)
instance->StopCapture();
isCapturing = false;
if (!same)
instance.Set(new DeckLinkDeviceInstance(this, device));
......@@ -94,6 +95,8 @@ bool DeckLink::Activate(DeckLinkDevice *device, long long modeId)
os_atomic_inc_long(&activateRefs);
SaveSettings();
id = modeId;
isCapturing = true;
return true;
}
......@@ -102,11 +105,17 @@ void DeckLink::Deactivate(void)
std::lock_guard<std::recursive_mutex> lock(deviceMutex);
if (instance)
instance->StopCapture();
isCapturing = false;
instance = nullptr;
os_atomic_dec_long(&activateRefs);
}
bool DeckLink::Capturing(void)
{
return isCapturing;
}
void DeckLink::SaveSettings()
{
if (!instance)
......
......@@ -62,6 +62,10 @@ public:
bool Activate(DeckLinkDevice *device, long long modeId);
void Deactivate();
bool Capturing();
bool buffering = false;
bool dwns = false;
std::string hash;
long long id;
};
......@@ -16,6 +16,7 @@ OBS_MODULE_USE_DEFAULT_LOCALE("decklink", "en-US")
#define COLOR_SPACE "color_space"
#define COLOR_RANGE "color_range"
#define BUFFERING "buffering"
#define DEACTIVATE_WNS "deactivate_when_not_showing"
#define TEXT_DEVICE obs_module_text("Device")
#define TEXT_MODE obs_module_text("Mode")
......@@ -35,6 +36,7 @@ OBS_MODULE_USE_DEFAULT_LOCALE("decklink", "en-US")
#define TEXT_CHANNEL_FORMAT_5_1CH obs_module_text("ChannelFormat.5_1ch")
#define TEXT_CHANNEL_FORMAT_7_1CH obs_module_text("ChannelFormat.7_1ch")
#define TEXT_BUFFERING obs_module_text("Buffering")
#define TEXT_DWNS obs_module_text("DeactivateWhenNotShowing")
static DeckLinkDeviceDiscovery *deviceEnum = nullptr;
......@@ -45,6 +47,11 @@ static void decklink_enable_buffering(DeckLink *decklink, bool enabled)
decklink->buffering = enabled;
}
static void decklink_deactivate_when_not_showing(DeckLink *decklink, bool dwns)
{
decklink->dwns = dwns;
}
static void *decklink_create(obs_data_t *settings, obs_source_t *source)
{
DeckLink *decklink = new DeckLink(source, deviceEnum);
......@@ -87,6 +94,9 @@ static void decklink_update(void *data, obs_data_t *settings)
decklink_enable_buffering(decklink,
obs_data_get_bool(settings, BUFFERING));
decklink_deactivate_when_not_showing(decklink,
obs_data_get_bool(settings, DEACTIVATE_WNS));
ComPtr<DeckLinkDevice> device;
device.Set(deviceEnum->FindByHash(hash));
......@@ -95,6 +105,30 @@ static void decklink_update(void *data, obs_data_t *settings)
decklink->SetColorRange(colorRange);
decklink->SetChannelFormat(channelFormat);
decklink->Activate(device, id);
decklink->hash = std::string(hash);
}
static void decklink_show(void *data)
{
DeckLink *decklink = (DeckLink *)data;
obs_source_t *source = decklink->GetSource();
bool showing = obs_source_showing(source);
if (decklink->dwns && showing && !decklink->Capturing()) {
ComPtr<DeckLinkDevice> device;
device.Set(deviceEnum->FindByHash(decklink->hash.c_str()));
decklink->Activate(device, decklink->id);
}
}
static void decklink_hide(void *data)
{
DeckLink *decklink = (DeckLink *)data;
obs_source_t *source = decklink->GetSource();
bool showing = obs_source_showing(source);
if (decklink->dwns && showing)
decklink->Deactivate();
}
static void decklink_get_defaults(obs_data_t *settings)
......@@ -279,6 +313,8 @@ static obs_properties_t *decklink_get_properties(void *data)
obs_properties_add_bool(props, BUFFERING, TEXT_BUFFERING);
obs_properties_add_bool(props, DEACTIVATE_WNS, TEXT_DWNS);
UNUSED_PARAMETER(data);
return props;
}
......@@ -300,6 +336,8 @@ bool obs_module_load(void)
info.get_name = decklink_get_name;
info.get_properties = decklink_get_properties;
info.update = decklink_update;
info.show = decklink_show;
info.hide = decklink_hide;
obs_register_source(&info);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册