From 0aa9603a88e19e7fad02f3e734b8f14d8e70489a Mon Sep 17 00:00:00 2001 From: Colin Edwards Date: Sat, 27 Nov 2021 19:26:07 -0600 Subject: [PATCH] aja: Fix crash in output settings when no card present --- plugins/aja/aja-common.cpp | 17 ++++++++++++++++ plugins/aja/aja-output.cpp | 41 ++++++++++++++++++++++++++++++++++++-- plugins/aja/aja-source.cpp | 2 -- 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/plugins/aja/aja-common.cpp b/plugins/aja/aja-common.cpp index 9862bca40..b613a6b4a 100644 --- a/plugins/aja/aja-common.cpp +++ b/plugins/aja/aja-common.cpp @@ -226,6 +226,23 @@ bool aja_video_format_changed(obs_properties_t *props, obs_property_t *list, auto vid_fmt = static_cast( obs_data_get_int(settings, kUIPropVideoFormatSelect.id)); + size_t itemCount = obs_property_list_item_count(list); + bool itemFound = false; + + for (size_t i = 0; i < itemCount; i++) { + int itemFormat = obs_property_list_item_int(list, i); + if (itemFormat == vid_fmt) { + itemFound = true; + break; + } + } + + if (!itemFound) { + obs_property_list_insert_int(list, 0, "", vid_fmt); + obs_property_list_item_disable(list, 0, true); + return true; + } + obs_property_t *sdi_4k_trx = obs_properties_get(props, kUIPropSDI4KTransport.id); diff --git a/plugins/aja/aja-output.cpp b/plugins/aja/aja-output.cpp index 75b4cb8a0..f89bfdc5e 100644 --- a/plugins/aja/aja-output.cpp +++ b/plugins/aja/aja-output.cpp @@ -780,6 +780,24 @@ bool aja_output_device_changed(void *data, obs_properties_t *props, populate_output_device_list(list); const char *cardID = obs_data_get_string(settings, kUIPropDevice.id); + + size_t itemCount = obs_property_list_item_count(list); + bool itemFound = false; + + for (size_t i = 0; i < itemCount; i++) { + const char *itemCardID = obs_property_list_item_string(list, i); + if (strcmp(cardID, itemCardID) == 0) { + itemFound = true; + break; + } + } + + if (!itemFound) { + obs_property_list_insert_string(list, 0, cardID, cardID); + obs_property_list_item_disable(list, 0, true); + return true; + } + if (!cardID) { blog(LOG_ERROR, "aja_output_device_changed: Card ID is null!"); return false; @@ -845,14 +863,33 @@ bool aja_output_dest_changed(obs_properties_t *props, obs_property_t *list, blog(LOG_DEBUG, "AJA Output Dest Changed"); - auto &cardManager = aja::CardManager::Instance(); - cardManager.EnumerateCards(); + int dest = obs_data_get_int(settings, kUIPropOutput.id); + + size_t itemCount = obs_property_list_item_count(list); + bool itemFound = false; + + for (size_t i = 0; i < itemCount; i++) { + int itemDest = obs_property_list_item_int(list, i); + if (dest == itemDest) { + itemFound = true; + break; + } + } + + if (!itemFound) { + obs_property_list_insert_int(list, 0, "", dest); + obs_property_list_item_disable(list, 0, true); + return true; + } + const char *cardID = obs_data_get_string(settings, kUIPropDevice.id); if (!cardID) { blog(LOG_ERROR, "aja_output_dest_changed: Card ID is null!"); return false; } + auto &cardManager = aja::CardManager::Instance(); + cardManager.EnumerateCards(); auto cardEntry = cardManager.GetCardEntry(cardID); if (!cardEntry) { blog(LOG_ERROR, diff --git a/plugins/aja/aja-source.cpp b/plugins/aja/aja-source.cpp index c919bb6a9..acdd6ea21 100644 --- a/plugins/aja/aja-source.cpp +++ b/plugins/aja/aja-source.cpp @@ -854,8 +854,6 @@ static void aja_source_deactivate(void *data) static void aja_source_update(void *data, obs_data_t *settings) { - blog(LOG_INFO, "aja_source_update: Begin callback..."); - static bool initialized = false; auto ajaSource = (AJASource *)data;