Bladeren bron

aja: Filter 6G/12G SDI Transport depending device/plugin type

Paul Hindt 3 jaren geleden
bovenliggende
commit
a4c0996d59
4 gewijzigde bestanden met toevoegingen van 34 en 5 verwijderingen
  1. 14 1
      plugins/aja/aja-common.cpp
  2. 3 1
      plugins/aja/aja-common.hpp
  3. 16 2
      plugins/aja/aja-output.cpp
  4. 1 1
      plugins/aja/aja-source.cpp

+ 14 - 1
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<SDITransport>(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<long long>(sdi_trx));

+ 3 - 1
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,

+ 16 - 2
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<IOSelection>(
 		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));
 

+ 1 - 1
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);