From 6abf89af21e9708c9c6ac971f05a1030caf91922 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 18 Aug 2022 11:00:13 -0700 Subject: [PATCH] Revert "libobs: Correctly set texture size" This reverts commit 90a409fe586daf7b3430ea3be9581efc93998cc1. Reverts #7077 for now. This really shouldn't be done so close to release. This crash technically only happens under very niche scenarios, and the fix seems to have some other potential issues. Prematurely merged by Jim. --- libobs/obs-internal.h | 1 + libobs/obs-source.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index d0077c1e7..9e6c5a76d 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -744,6 +744,7 @@ struct obs_source { bool async_flip; bool async_linear_alpha; bool async_active; + bool async_update_texture; bool async_unbuffered; bool async_decoupled; struct obs_source_frame *async_preload_frame; diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 4416e7101..832fef6fb 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -1206,6 +1206,10 @@ static void async_tick(obs_source_t *source) source->last_sys_timestamp = sys_time; pthread_mutex_unlock(&source->async_mutex); + + if (source->cur_async_frame) + source->async_update_texture = + set_async_texture_size(source, source->cur_async_frame); } void obs_source_video_tick(obs_source_t *source, float seconds) @@ -1971,6 +1975,9 @@ static inline bool init_gpu_conversion(struct obs_source *source, bool set_async_texture_size(struct obs_source *source, const struct obs_source_frame *frame) { + enum convert_type cur = + get_convert_type(frame->format, frame->full_range, frame->trc); + if (source->async_width == frame->width && source->async_height == frame->height && source->async_format == frame->format && @@ -2000,9 +2007,7 @@ bool set_async_texture_size(struct obs_source *source, const enum gs_color_format format = convert_video_format(frame->format, frame->trc); - const enum convert_type type = - get_convert_type(frame->format, frame->full_range, frame->trc); - const bool async_gpu_conversion = (type != CONVERT_NONE) && + const bool async_gpu_conversion = (cur != CONVERT_NONE) && init_gpu_conversion(source, frame); source->async_gpu_conversion = async_gpu_conversion; if (async_gpu_conversion) { @@ -2377,9 +2382,6 @@ static void obs_source_update_async_video(obs_source_t *source) source->async_rendered = true; if (frame) { - const bool async_update_texture = - set_async_texture_size(source, frame); - check_to_swap_bgrx_bgra(source, frame); if (!source->async_decoupled || @@ -2389,10 +2391,11 @@ static void obs_source_update_async_video(obs_source_t *source) source->timing_set = true; } - if (async_update_texture) { + if (source->async_update_texture) { update_async_textures(source, frame, source->async_textures, source->async_texrender); + source->async_update_texture = false; } obs_source_release_frame(source, frame);