Skip to content

Commit 1ecea56

Browse files
dsaedtlerRytoEX
authored andcommitted
libobs: Properly fix canvas video reset/restore
1 parent 8fb81ca commit 1ecea56

3 files changed

Lines changed: 13 additions & 5 deletions

File tree

libobs/obs-canvas.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,13 +294,18 @@ void obs_free_canvas_mixes(void)
294294
pthread_mutex_unlock(&obs->data.canvases_mutex);
295295
}
296296

297+
bool obs_canvas_has_valid_video_info(obs_canvas_t *canvas)
298+
{
299+
struct obs_video_info *ovi = &canvas->ovi;
300+
return ovi->base_width && ovi->base_height && ovi->output_width && ovi->output_height &&
301+
ovi->output_format != VIDEO_FORMAT_NONE;
302+
}
303+
297304
bool obs_canvas_reset_video_internal(obs_canvas_t *canvas, struct obs_video_info *ovi)
298305
{
299306
obs_canvas_clear_mix(canvas);
300307

301-
if (ovi)
302-
canvas->ovi = *ovi;
303-
308+
canvas->ovi = *ovi;
304309
canvas->mix = obs_create_video_mix(&canvas->ovi);
305310
if (canvas->mix) {
306311
canvas->mix->view = &canvas->view;
@@ -398,7 +403,7 @@ void obs_canvas_rename_source(obs_source_t *source, const char *name)
398403

399404
bool obs_canvas_reset_video(obs_canvas_t *canvas, struct obs_video_info *ovi)
400405
{
401-
if (canvas->flags & MAIN || obs_video_active())
406+
if (!ovi || canvas->flags & MAIN || obs_video_active())
402407
return false;
403408

404409
return obs_canvas_reset_video_internal(canvas, ovi);

libobs/obs-internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,7 @@ extern obs_canvas_t *obs_create_main_canvas(void);
740740
extern void obs_canvas_destroy(obs_canvas_t *canvas);
741741
extern void obs_canvas_clear_mix(obs_canvas_t *canvas);
742742
extern void obs_free_canvas_mixes(void);
743+
extern bool obs_canvas_has_valid_video_info(obs_canvas_t *canvas);
743744
extern bool obs_canvas_reset_video_internal(obs_canvas_t *canvas, struct obs_video_info *ovi);
744745
extern void obs_canvas_insert_source(obs_canvas_t *canvas, obs_source_t *source);
745746
extern void obs_canvas_remove_source(obs_source_t *source);

libobs/obs.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,8 +675,10 @@ static bool restore_canvases(void)
675675
obs_canvas_t *canvas = (obs_canvas_t *)ctx;
676676
if (canvas->flags & MAIN)
677677
continue;
678+
if (!obs_canvas_has_valid_video_info(canvas))
679+
continue;
678680

679-
if (!obs_canvas_reset_video_internal(canvas, NULL)) {
681+
if (!obs_canvas_reset_video_internal(canvas, &canvas->ovi)) {
680682
blog(LOG_ERROR, "Failed restoring video mix for canvas '%s'", canvas->context.name);
681683
success = false;
682684
}

0 commit comments

Comments
 (0)