UI: Free virtual cam memory on shutdown
This commit is contained in:
parent
57a24c540f
commit
590fa1ffe6
@ -2731,6 +2731,8 @@ OBSBasic::~OBSBasic()
|
||||
delete cef;
|
||||
cef = nullptr;
|
||||
#endif
|
||||
|
||||
OBSBasicVCamConfig::DestroyView();
|
||||
}
|
||||
|
||||
void OBSBasic::SaveProjectNow()
|
||||
|
@ -180,12 +180,14 @@ static void EventCallback(enum obs_frontend_event event, void *)
|
||||
OBSBasicVCamConfig::UpdateOutputSource();
|
||||
}
|
||||
|
||||
static auto staticConfig = VCamConfig{};
|
||||
|
||||
void OBSBasicVCamConfig::Init()
|
||||
{
|
||||
if (vCamConfig)
|
||||
return;
|
||||
|
||||
vCamConfig = new VCamConfig;
|
||||
vCamConfig = &staticConfig;
|
||||
|
||||
obs_frontend_add_save_callback(SaveCallback, nullptr);
|
||||
obs_frontend_add_event_callback(EventCallback, nullptr);
|
||||
@ -196,25 +198,30 @@ static video_t *video = nullptr;
|
||||
|
||||
video_t *OBSBasicVCamConfig::StartVideo()
|
||||
{
|
||||
if (!video) {
|
||||
if (!view)
|
||||
view = obs_view_create();
|
||||
video = obs_view_add(view);
|
||||
}
|
||||
|
||||
UpdateOutputSource();
|
||||
|
||||
if (!video)
|
||||
video = obs_view_add(view);
|
||||
return video;
|
||||
}
|
||||
|
||||
void OBSBasicVCamConfig::StopVideo()
|
||||
{
|
||||
if (view) {
|
||||
obs_view_remove(view);
|
||||
obs_view_set_source(view, 0, nullptr);
|
||||
obs_view_destroy(view);
|
||||
view = nullptr;
|
||||
}
|
||||
obs_view_remove(view);
|
||||
obs_view_set_source(view, 0, nullptr);
|
||||
video = nullptr;
|
||||
}
|
||||
|
||||
void OBSBasicVCamConfig::DestroyView()
|
||||
{
|
||||
StopVideo();
|
||||
obs_view_destroy(view);
|
||||
view = nullptr;
|
||||
}
|
||||
|
||||
void OBSBasicVCamConfig::UpdateOutputSource()
|
||||
{
|
||||
if (!view)
|
||||
|
@ -14,6 +14,8 @@ public:
|
||||
|
||||
static video_t *StartVideo();
|
||||
static void StopVideo();
|
||||
static void DestroyView();
|
||||
|
||||
static void UpdateOutputSource();
|
||||
|
||||
explicit OBSBasicVCamConfig(QWidget *parent = 0);
|
||||
|
@ -162,6 +162,9 @@ static inline void set_main_mix()
|
||||
|
||||
video_t *obs_view_add(obs_view_t *view)
|
||||
{
|
||||
if (!view)
|
||||
return NULL;
|
||||
|
||||
struct obs_core_video_mix *mix = obs_create_video_mix(&obs->video.ovi);
|
||||
if (!mix) {
|
||||
return NULL;
|
||||
@ -178,6 +181,9 @@ video_t *obs_view_add(obs_view_t *view)
|
||||
|
||||
void obs_view_remove(obs_view_t *view)
|
||||
{
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
pthread_mutex_lock(&obs->video.mixes_mutex);
|
||||
size_t idx = find_mix_for_view(view);
|
||||
if (idx != DARRAY_INVALID)
|
||||
|
Loading…
x
Reference in New Issue
Block a user