diff --git a/plugins/aja/aja-common.cpp b/plugins/aja/aja-common.cpp index d8e191086..eb7b6fb24 100644 --- a/plugins/aja/aja-common.cpp +++ b/plugins/aja/aja-common.cpp @@ -203,10 +203,23 @@ void populate_pixel_format_list(NTV2DeviceID deviceID, obs_property_t *list) } } -void populate_sdi_transport_list(obs_property_t *list, IOSelection io) +void populate_sdi_transport_list(obs_property_t *list, IOSelection io, + NTV2DeviceID deviceID, bool capture) { + if (capture) { + obs_property_list_add_int(list, obs_module_text("Auto"), + kAutoDetect); + } for (int i = 0; i < (int)SDITransport::Unknown; i++) { SDITransport sdi_trx = static_cast(i); + if (sdi_trx == SDITransport::SDI6G || + sdi_trx == SDITransport::SDI12G) { + if (!NTV2DeviceCanDo12GSDI(deviceID)) + continue; + } + // Disabling 12G in Output plugin until AJA 4K HFR bug is fixed + if (!capture && sdi_trx == SDITransport::SDI12G) + continue; obs_property_list_add_int( list, aja::SDITransportToString(sdi_trx).c_str(), static_cast(sdi_trx)); diff --git a/plugins/aja/aja-common.hpp b/plugins/aja/aja-common.hpp index 8fecd3063..b5d800152 100644 --- a/plugins/aja/aja-common.hpp +++ b/plugins/aja/aja-common.hpp @@ -45,7 +45,9 @@ populate_video_format_list(NTV2DeviceID deviceID, obs_property_t *list, bool want4KHFR = false); extern void populate_pixel_format_list(NTV2DeviceID deviceID, obs_property_t *list); -extern void populate_sdi_transport_list(obs_property_t *list, IOSelection io); +extern void populate_sdi_transport_list(obs_property_t *list, IOSelection io, + NTV2DeviceID deviceID, + bool capture = false); extern void populate_sdi_4k_transport_list(obs_property_t *list); extern bool aja_video_format_changed(obs_properties_t *props, obs_property_t *list, diff --git a/plugins/aja/aja-output.cpp b/plugins/aja/aja-output.cpp index 83e8bb8bd..26ed0f2a6 100644 --- a/plugins/aja/aja-output.cpp +++ b/plugins/aja/aja-output.cpp @@ -836,7 +836,7 @@ bool aja_output_device_changed(void *data, obs_properties_t *props, IOSelection io_select = static_cast( obs_data_get_int(settings, kUIPropOutput.id)); obs_property_list_clear(sdi_trx_list); - populate_sdi_transport_list(sdi_trx_list, io_select); + populate_sdi_transport_list(sdi_trx_list, io_select, deviceID); obs_property_list_clear(sdi_4k_list); populate_sdi_4k_transport_list(sdi_4k_list); @@ -851,6 +851,19 @@ bool aja_output_dest_changed(obs_properties_t *props, obs_property_t *list, blog(LOG_DEBUG, "AJA Output Dest Changed"); + const char *cardID = obs_data_get_string(settings, kUIPropDevice.id); + if (!cardID || !cardID[0]) + return false; + + auto &cardManager = aja::CardManager::Instance(); + auto cardEntry = cardManager.GetCardEntry(cardID); + if (!cardEntry) { + blog(LOG_DEBUG, + "aja_output_dest_changed: Card Entry not found for %s", + cardID); + return false; + } + bool itemFound = false; int dest = obs_data_get_int(settings, kUIPropOutput.id); size_t itemCount = obs_property_list_item_count(list); @@ -888,7 +901,8 @@ bool aja_output_dest_changed(obs_properties_t *props, obs_property_t *list, obs_property_t *sdi_trx_list = obs_properties_get(props, kUIPropSDITransport.id); obs_property_list_clear(sdi_trx_list); - populate_sdi_transport_list(sdi_trx_list, io_select); + populate_sdi_transport_list(sdi_trx_list, io_select, + cardEntry->GetDeviceID()); obs_property_set_visible(sdi_trx_list, aja::IsIOSelectionSDI(io_select)); diff --git a/plugins/aja/aja-source.cpp b/plugins/aja/aja-source.cpp index 301b069f2..b9c3cc758 100644 --- a/plugins/aja/aja-source.cpp +++ b/plugins/aja/aja-source.cpp @@ -678,7 +678,7 @@ bool aja_source_device_changed(void *data, obs_properties_t *props, obs_property_list_clear(sdi_trx_list); obs_property_list_add_int(sdi_trx_list, obs_module_text("Auto"), kAutoDetect); - populate_sdi_transport_list(sdi_trx_list, io_select); + populate_sdi_transport_list(sdi_trx_list, io_select, deviceID, true); obs_property_list_clear(sdi_4k_list); populate_sdi_4k_transport_list(sdi_4k_list);