mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-08-24 10:14:13 -05:00
libobs: Properly fix canvas video reset/restore
This commit is contained in:
committed by
Ryan Foster
parent
8fb81caf0a
commit
1ecea56817
+8
-3
@@ -294,13 +294,18 @@ void obs_free_canvas_mixes(void)
|
||||
pthread_mutex_unlock(&obs->data.canvases_mutex);
|
||||
}
|
||||
|
||||
bool obs_canvas_has_valid_video_info(obs_canvas_t *canvas)
|
||||
{
|
||||
struct obs_video_info *ovi = &canvas->ovi;
|
||||
return ovi->base_width && ovi->base_height && ovi->output_width && ovi->output_height &&
|
||||
ovi->output_format != VIDEO_FORMAT_NONE;
|
||||
}
|
||||
|
||||
bool obs_canvas_reset_video_internal(obs_canvas_t *canvas, struct obs_video_info *ovi)
|
||||
{
|
||||
obs_canvas_clear_mix(canvas);
|
||||
|
||||
if (ovi)
|
||||
canvas->ovi = *ovi;
|
||||
|
||||
canvas->mix = obs_create_video_mix(&canvas->ovi);
|
||||
if (canvas->mix) {
|
||||
canvas->mix->view = &canvas->view;
|
||||
@@ -398,7 +403,7 @@ void obs_canvas_rename_source(obs_source_t *source, const char *name)
|
||||
|
||||
bool obs_canvas_reset_video(obs_canvas_t *canvas, struct obs_video_info *ovi)
|
||||
{
|
||||
if (canvas->flags & MAIN || obs_video_active())
|
||||
if (!ovi || canvas->flags & MAIN || obs_video_active())
|
||||
return false;
|
||||
|
||||
return obs_canvas_reset_video_internal(canvas, ovi);
|
||||
|
||||
@@ -740,6 +740,7 @@ extern obs_canvas_t *obs_create_main_canvas(void);
|
||||
extern void obs_canvas_destroy(obs_canvas_t *canvas);
|
||||
extern void obs_canvas_clear_mix(obs_canvas_t *canvas);
|
||||
extern void obs_free_canvas_mixes(void);
|
||||
extern bool obs_canvas_has_valid_video_info(obs_canvas_t *canvas);
|
||||
extern bool obs_canvas_reset_video_internal(obs_canvas_t *canvas, struct obs_video_info *ovi);
|
||||
extern void obs_canvas_insert_source(obs_canvas_t *canvas, obs_source_t *source);
|
||||
extern void obs_canvas_remove_source(obs_source_t *source);
|
||||
|
||||
+3
-1
@@ -675,8 +675,10 @@ static bool restore_canvases(void)
|
||||
obs_canvas_t *canvas = (obs_canvas_t *)ctx;
|
||||
if (canvas->flags & MAIN)
|
||||
continue;
|
||||
if (!obs_canvas_has_valid_video_info(canvas))
|
||||
continue;
|
||||
|
||||
if (!obs_canvas_reset_video_internal(canvas, NULL)) {
|
||||
if (!obs_canvas_reset_video_internal(canvas, &canvas->ovi)) {
|
||||
blog(LOG_ERROR, "Failed restoring video mix for canvas '%s'", canvas->context.name);
|
||||
success = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user