Browse Source

aja: Fix for invalid default settings and empty cardID string

Paul Hindt 3 years ago
parent
commit
8f8b522ca7

+ 8 - 10
UI/frontend-plugins/aja-output-ui/AJAOutputUI.cpp

@@ -51,17 +51,16 @@ void AJAOutputUI::SetupPropertiesView()
 			static_cast<long long>(IOSelection::Invalid));
 			static_cast<long long>(IOSelection::Invalid));
 		obs_data_set_default_int(
 		obs_data_set_default_int(
 			settings, kUIPropVideoFormatSelect.id,
 			settings, kUIPropVideoFormatSelect.id,
-			static_cast<long long>(NTV2_FORMAT_720p_5994));
+			static_cast<long long>(kDefaultAJAVideoFormat));
 		obs_data_set_default_int(
 		obs_data_set_default_int(
 			settings, kUIPropPixelFormatSelect.id,
 			settings, kUIPropPixelFormatSelect.id,
-			static_cast<long long>(NTV2_FBF_8BIT_YCBCR));
+			static_cast<long long>(kDefaultAJAPixelFormat));
 		obs_data_set_default_int(
 		obs_data_set_default_int(
 			settings, kUIPropSDITransport.id,
 			settings, kUIPropSDITransport.id,
-			static_cast<long long>(SDITransport::SingleLink));
+			static_cast<long long>(kDefaultAJASDITransport));
 		obs_data_set_default_int(
 		obs_data_set_default_int(
 			settings, kUIPropSDITransport4K.id,
 			settings, kUIPropSDITransport4K.id,
-			static_cast<long long>(
-				SDITransport4K::TwoSampleInterleave));
+			static_cast<long long>(kDefaultAJASDITransport4K));
 	}
 	}
 
 
 	// Assign an ID to the program output plugin instance for channel usage tracking
 	// Assign an ID to the program output plugin instance for channel usage tracking
@@ -109,17 +108,16 @@ void AJAOutputUI::SetupPreviewPropertiesView()
 			static_cast<long long>(IOSelection::Invalid));
 			static_cast<long long>(IOSelection::Invalid));
 		obs_data_set_default_int(
 		obs_data_set_default_int(
 			settings, kUIPropVideoFormatSelect.id,
 			settings, kUIPropVideoFormatSelect.id,
-			static_cast<long long>(NTV2_FORMAT_720p_5994));
+			static_cast<long long>(kDefaultAJAVideoFormat));
 		obs_data_set_default_int(
 		obs_data_set_default_int(
 			settings, kUIPropPixelFormatSelect.id,
 			settings, kUIPropPixelFormatSelect.id,
-			static_cast<long long>(NTV2_FBF_8BIT_YCBCR));
+			static_cast<long long>(kDefaultAJAPixelFormat));
 		obs_data_set_default_int(
 		obs_data_set_default_int(
 			settings, kUIPropSDITransport.id,
 			settings, kUIPropSDITransport.id,
-			static_cast<long long>(SDITransport::SingleLink));
+			static_cast<long long>(kDefaultAJASDITransport));
 		obs_data_set_default_int(
 		obs_data_set_default_int(
 			settings, kUIPropSDITransport4K.id,
 			settings, kUIPropSDITransport4K.id,
-			static_cast<long long>(
-				SDITransport4K::TwoSampleInterleave));
+			static_cast<long long>(kDefaultAJASDITransport4K));
 	}
 	}
 
 
 	// Assign an ID to the program output plugin instance for channel usage tracking
 	// Assign an ID to the program output plugin instance for channel usage tracking

+ 2 - 2
UI/frontend-plugins/aja-output-ui/aja-ui-main.cpp

@@ -224,7 +224,7 @@ bool on_misc_device_selected(void *data, obs_properties_t *props,
 			     obs_property_t *list, obs_data_t *settings)
 			     obs_property_t *list, obs_data_t *settings)
 {
 {
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
-	if (!cardID)
+	if (!cardID || !cardID[0])
 		return false;
 		return false;
 	aja::CardManager *cardManager = (aja::CardManager *)data;
 	aja::CardManager *cardManager = (aja::CardManager *)data;
 	if (!cardManager)
 	if (!cardManager)
@@ -305,7 +305,7 @@ bool on_multi_view_toggle(void *data, obs_properties_t *props,
 	const int audioInputSource =
 	const int audioInputSource =
 		obs_data_get_int(settings, kUIPropMultiViewAudioSource.id);
 		obs_data_get_int(settings, kUIPropMultiViewAudioSource.id);
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
-	if (!cardID)
+	if (!cardID || !cardID[0])
 		return false;
 		return false;
 	aja::CardManager *cardManager = (aja::CardManager *)data;
 	aja::CardManager *cardManager = (aja::CardManager *)data;
 	if (!cardManager)
 	if (!cardManager)

+ 4 - 2
plugins/aja/aja-common.cpp

@@ -90,7 +90,8 @@ void populate_io_selection_input_list(const std::string &cardID,
 {
 {
 	obs_property_list_clear(list);
 	obs_property_list_clear(list);
 
 
-	obs_property_list_add_int(list, obs_module_text(kUIPropIOSelect.text),
+	obs_property_list_add_int(list,
+				  obs_module_text(kUIPropIOSelectNone.text),
 				  static_cast<long long>(IOSelection::Invalid));
 				  static_cast<long long>(IOSelection::Invalid));
 
 
 	for (auto i = 0; i < static_cast<int32_t>(IOSelection::NumIOSelections);
 	for (auto i = 0; i < static_cast<int32_t>(IOSelection::NumIOSelections);
@@ -118,7 +119,8 @@ void populate_io_selection_output_list(const std::string &cardID,
 {
 {
 	obs_property_list_clear(list);
 	obs_property_list_clear(list);
 
 
-	obs_property_list_add_int(list, obs_module_text(kUIPropIOSelect.text),
+	obs_property_list_add_int(list,
+				  obs_module_text(kUIPropIOSelectNone.text),
 				  static_cast<long long>(IOSelection::Invalid));
 				  static_cast<long long>(IOSelection::Invalid));
 
 
 	if (deviceID == DEVICE_ID_TTAP_PRO) {
 	if (deviceID == DEVICE_ID_TTAP_PRO) {

+ 4 - 0
plugins/aja/aja-common.hpp

@@ -18,7 +18,11 @@ static const uint32_t kDefaultAudioChannels = 8;
 static const uint32_t kDefaultAudioSampleRate = 48000;
 static const uint32_t kDefaultAudioSampleRate = 48000;
 static const uint32_t kDefaultAudioSampleSize = 4;
 static const uint32_t kDefaultAudioSampleSize = 4;
 static const int kAutoDetect = -1;
 static const int kAutoDetect = -1;
+static const NTV2VideoFormat kDefaultAJAVideoFormat = NTV2_FORMAT_720p_5994;
 static const NTV2PixelFormat kDefaultAJAPixelFormat = NTV2_FBF_8BIT_YCBCR;
 static const NTV2PixelFormat kDefaultAJAPixelFormat = NTV2_FBF_8BIT_YCBCR;
+static const SDITransport kDefaultAJASDITransport = SDITransport::SingleLink;
+static const SDITransport4K kDefaultAJASDITransport4K =
+	SDITransport4K::TwoSampleInterleave;
 
 
 // Common OBS property helpers used by both the capture and output plugins
 // Common OBS property helpers used by both the capture and output plugins
 extern void filter_io_selection_input_list(const std::string &cardID,
 extern void filter_io_selection_input_list(const std::string &cardID,

+ 34 - 9
plugins/aja/aja-output.cpp

@@ -765,7 +765,7 @@ bool aja_output_device_changed(void *data, obs_properties_t *props,
 	populate_output_device_list(list);
 	populate_output_device_list(list);
 
 
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
-	if (!cardID)
+	if (!cardID || !cardID[0])
 		return false;
 		return false;
 
 
 	const char *outputID =
 	const char *outputID =
@@ -908,10 +908,9 @@ static void *aja_output_create(obs_data_t *settings, obs_output_t *output)
 	blog(LOG_INFO, "Creating AJA Output...");
 	blog(LOG_INFO, "Creating AJA Output...");
 
 
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
-	if (!cardID) {
-		blog(LOG_ERROR, "aja_output_create: Card ID is null!");
+	if (!cardID || !cardID[0])
 		return nullptr;
 		return nullptr;
-	}
+
 	const char *outputID =
 	const char *outputID =
 		obs_data_get_string(settings, kUIPropAJAOutputID.id);
 		obs_data_get_string(settings, kUIPropAJAOutputID.id);
 
 
@@ -934,11 +933,6 @@ static void *aja_output_create(obs_data_t *settings, obs_output_t *output)
 	OutputProps outputProps(deviceID);
 	OutputProps outputProps(deviceID);
 	outputProps.ioSelect = static_cast<IOSelection>(
 	outputProps.ioSelect = static_cast<IOSelection>(
 		obs_data_get_int(settings, kUIPropOutput.id));
 		obs_data_get_int(settings, kUIPropOutput.id));
-	if (outputProps.ioSelect == IOSelection::Invalid) {
-		blog(LOG_DEBUG,
-		     "aja_output_create: Select a valid AJA Output IOSelection!");
-		return nullptr;
-	}
 	outputProps.videoFormat = static_cast<NTV2VideoFormat>(
 	outputProps.videoFormat = static_cast<NTV2VideoFormat>(
 		obs_data_get_int(settings, kUIPropVideoFormatSelect.id));
 		obs_data_get_int(settings, kUIPropVideoFormatSelect.id));
 	outputProps.pixelFormat = static_cast<NTV2PixelFormat>(
 	outputProps.pixelFormat = static_cast<NTV2PixelFormat>(
@@ -959,6 +953,18 @@ static void *aja_output_create(obs_data_t *settings, obs_output_t *output)
 		}
 		}
 	}
 	}
 
 
+	if (outputProps.ioSelect == IOSelection::Invalid) {
+		blog(LOG_DEBUG,
+		     "aja_output_create: Select a valid AJA Output IOSelection!");
+		return nullptr;
+	}
+	if (outputProps.videoFormat == NTV2_FORMAT_UNKNOWN ||
+	    outputProps.pixelFormat == NTV2_FBF_INVALID) {
+		blog(LOG_ERROR,
+		     "aja_output_create: Select a valid video and/or pixel format!");
+		return nullptr;
+	}
+
 	const std::string &ioSelectStr =
 	const std::string &ioSelectStr =
 		aja::IOSelectionToString(outputProps.ioSelect);
 		aja::IOSelectionToString(outputProps.ioSelect);
 
 
@@ -1222,6 +1228,24 @@ static const char *aja_output_get_name(void *)
 	return obs_module_text(kUIPropOutputModule.text);
 	return obs_module_text(kUIPropOutputModule.text);
 }
 }
 
 
+static void aja_output_defaults(obs_data_t *settings)
+{
+	obs_data_set_default_int(settings, kUIPropOutput.id,
+				 static_cast<long long>(IOSelection::Invalid));
+	obs_data_set_default_int(
+		settings, kUIPropVideoFormatSelect.id,
+		static_cast<long long>(kDefaultAJAVideoFormat));
+	obs_data_set_default_int(
+		settings, kUIPropPixelFormatSelect.id,
+		static_cast<long long>(kDefaultAJAPixelFormat));
+	obs_data_set_default_int(
+		settings, kUIPropSDITransport.id,
+		static_cast<long long>(kDefaultAJASDITransport));
+	obs_data_set_default_int(
+		settings, kUIPropSDITransport4K.id,
+		static_cast<long long>(kDefaultAJASDITransport4K));
+}
+
 struct obs_output_info create_aja_output_info()
 struct obs_output_info create_aja_output_info()
 {
 {
 	struct obs_output_info aja_output_info = {};
 	struct obs_output_info aja_output_info = {};
@@ -1236,6 +1260,7 @@ struct obs_output_info create_aja_output_info()
 	aja_output_info.raw_video = aja_output_raw_video;
 	aja_output_info.raw_video = aja_output_raw_video;
 	aja_output_info.raw_audio = aja_output_raw_audio;
 	aja_output_info.raw_audio = aja_output_raw_audio;
 	aja_output_info.update = aja_output_update;
 	aja_output_info.update = aja_output_update;
+	aja_output_info.get_defaults = aja_output_defaults;
 	aja_output_info.get_properties = aja_output_get_properties;
 	aja_output_info.get_properties = aja_output_get_properties;
 	return aja_output_info;
 	return aja_output_info;
 }
 }

+ 3 - 3
plugins/aja/aja-source.cpp

@@ -602,7 +602,7 @@ bool aja_source_device_changed(void *data, obs_properties_t *props,
 	}
 	}
 
 
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
-	if (!cardID)
+	if (!cardID || !cardID[0])
 		return false;
 		return false;
 
 
 	auto &cardManager = aja::CardManager::Instance();
 	auto &cardManager = aja::CardManager::Instance();
@@ -696,7 +696,7 @@ bool aja_io_selection_changed(void *data, obs_properties_t *props,
 	}
 	}
 
 
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
-	if (!cardID)
+	if (!cardID || !cardID[0])
 		return false;
 		return false;
 
 
 	auto &cardManager = aja::CardManager::Instance();
 	auto &cardManager = aja::CardManager::Instance();
@@ -1100,7 +1100,7 @@ void aja_source_save(void *data, obs_data_t *settings)
 	}
 	}
 
 
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
 	const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
-	if (!cardID)
+	if (!cardID || !cardID[0])
 		return;
 		return;
 
 
 	auto &cardManager = aja::CardManager::Instance();
 	auto &cardManager = aja::CardManager::Instance();

+ 3 - 2
plugins/aja/aja-ui-props.hpp

@@ -51,8 +51,9 @@ static const UIProperty kUIPropInput = {
 	"",
 	"",
 };
 };
 
 
-static const UIProperty kUIPropIOSelect = {"ui_prop_select_input", "IOSelect",
-					   ""};
+// Used for showing "Select..." item in Input/Output selection drop-downs
+static const UIProperty kUIPropIOSelectNone = {"ui_prop_select_input",
+					       "IOSelect", ""};
 
 
 static const UIProperty kUIPropSDITransport = {
 static const UIProperty kUIPropSDITransport = {
 	"ui_prop_sdi_transport",
 	"ui_prop_sdi_transport",