diff --git a/UI/frontend-plugins/aja-output-ui/AJAOutputUI.cpp b/UI/frontend-plugins/aja-output-ui/AJAOutputUI.cpp index 4c2d83653..388bafdba 100644 --- a/UI/frontend-plugins/aja-output-ui/AJAOutputUI.cpp +++ b/UI/frontend-plugins/aja-output-ui/AJAOutputUI.cpp @@ -51,17 +51,16 @@ void AJAOutputUI::SetupPropertiesView() static_cast(IOSelection::Invalid)); obs_data_set_default_int( settings, kUIPropVideoFormatSelect.id, - static_cast(NTV2_FORMAT_720p_5994)); + static_cast(kDefaultAJAVideoFormat)); obs_data_set_default_int( settings, kUIPropPixelFormatSelect.id, - static_cast(NTV2_FBF_8BIT_YCBCR)); + static_cast(kDefaultAJAPixelFormat)); obs_data_set_default_int( settings, kUIPropSDITransport.id, - static_cast(SDITransport::SingleLink)); + static_cast(kDefaultAJASDITransport)); obs_data_set_default_int( settings, kUIPropSDITransport4K.id, - static_cast( - SDITransport4K::TwoSampleInterleave)); + static_cast(kDefaultAJASDITransport4K)); } // Assign an ID to the program output plugin instance for channel usage tracking @@ -109,17 +108,16 @@ void AJAOutputUI::SetupPreviewPropertiesView() static_cast(IOSelection::Invalid)); obs_data_set_default_int( settings, kUIPropVideoFormatSelect.id, - static_cast(NTV2_FORMAT_720p_5994)); + static_cast(kDefaultAJAVideoFormat)); obs_data_set_default_int( settings, kUIPropPixelFormatSelect.id, - static_cast(NTV2_FBF_8BIT_YCBCR)); + static_cast(kDefaultAJAPixelFormat)); obs_data_set_default_int( settings, kUIPropSDITransport.id, - static_cast(SDITransport::SingleLink)); + static_cast(kDefaultAJASDITransport)); obs_data_set_default_int( settings, kUIPropSDITransport4K.id, - static_cast( - SDITransport4K::TwoSampleInterleave)); + static_cast(kDefaultAJASDITransport4K)); } // Assign an ID to the program output plugin instance for channel usage tracking diff --git a/UI/frontend-plugins/aja-output-ui/aja-ui-main.cpp b/UI/frontend-plugins/aja-output-ui/aja-ui-main.cpp index c009addd1..cdee738ac 100644 --- a/UI/frontend-plugins/aja-output-ui/aja-ui-main.cpp +++ b/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) { const char *cardID = obs_data_get_string(settings, kUIPropDevice.id); - if (!cardID) + if (!cardID || !cardID[0]) return false; aja::CardManager *cardManager = (aja::CardManager *)data; if (!cardManager) @@ -305,7 +305,7 @@ bool on_multi_view_toggle(void *data, obs_properties_t *props, const int audioInputSource = obs_data_get_int(settings, kUIPropMultiViewAudioSource.id); const char *cardID = obs_data_get_string(settings, kUIPropDevice.id); - if (!cardID) + if (!cardID || !cardID[0]) return false; aja::CardManager *cardManager = (aja::CardManager *)data; if (!cardManager) diff --git a/plugins/aja/aja-common.cpp b/plugins/aja/aja-common.cpp index f13d876f4..d3c7dfb41 100644 --- a/plugins/aja/aja-common.cpp +++ b/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_add_int(list, obs_module_text(kUIPropIOSelect.text), + obs_property_list_add_int(list, + obs_module_text(kUIPropIOSelectNone.text), static_cast(IOSelection::Invalid)); for (auto i = 0; i < static_cast(IOSelection::NumIOSelections); @@ -118,7 +119,8 @@ void populate_io_selection_output_list(const std::string &cardID, { 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(IOSelection::Invalid)); if (deviceID == DEVICE_ID_TTAP_PRO) { diff --git a/plugins/aja/aja-common.hpp b/plugins/aja/aja-common.hpp index f2d931a4b..578e245bc 100644 --- a/plugins/aja/aja-common.hpp +++ b/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 kDefaultAudioSampleSize = 4; static const int kAutoDetect = -1; +static const NTV2VideoFormat kDefaultAJAVideoFormat = NTV2_FORMAT_720p_5994; 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 extern void filter_io_selection_input_list(const std::string &cardID, diff --git a/plugins/aja/aja-output.cpp b/plugins/aja/aja-output.cpp index b8695a2b3..1586490ee 100644 --- a/plugins/aja/aja-output.cpp +++ b/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); const char *cardID = obs_data_get_string(settings, kUIPropDevice.id); - if (!cardID) + if (!cardID || !cardID[0]) return false; 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..."); 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; - } + const char *outputID = 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.ioSelect = static_cast( 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( obs_data_get_int(settings, kUIPropVideoFormatSelect.id)); outputProps.pixelFormat = static_cast( @@ -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 = aja::IOSelectionToString(outputProps.ioSelect); @@ -1222,6 +1228,24 @@ static const char *aja_output_get_name(void *) 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(IOSelection::Invalid)); + obs_data_set_default_int( + settings, kUIPropVideoFormatSelect.id, + static_cast(kDefaultAJAVideoFormat)); + obs_data_set_default_int( + settings, kUIPropPixelFormatSelect.id, + static_cast(kDefaultAJAPixelFormat)); + obs_data_set_default_int( + settings, kUIPropSDITransport.id, + static_cast(kDefaultAJASDITransport)); + obs_data_set_default_int( + settings, kUIPropSDITransport4K.id, + static_cast(kDefaultAJASDITransport4K)); +} + struct obs_output_info create_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_audio = aja_output_raw_audio; aja_output_info.update = aja_output_update; + aja_output_info.get_defaults = aja_output_defaults; aja_output_info.get_properties = aja_output_get_properties; return aja_output_info; } diff --git a/plugins/aja/aja-source.cpp b/plugins/aja/aja-source.cpp index 01b0a2474..00e580256 100644 --- a/plugins/aja/aja-source.cpp +++ b/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); - if (!cardID) + if (!cardID || !cardID[0]) return false; 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); - if (!cardID) + if (!cardID || !cardID[0]) return false; 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); - if (!cardID) + if (!cardID || !cardID[0]) return; auto &cardManager = aja::CardManager::Instance(); diff --git a/plugins/aja/aja-ui-props.hpp b/plugins/aja/aja-ui-props.hpp index 5d5902bdb..1c47658ea 100644 --- a/plugins/aja/aja-ui-props.hpp +++ b/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 = { "ui_prop_sdi_transport",