aja: Fix for invalid default settings and empty cardID string

master
Paul Hindt 2022-01-12 18:19:04 -08:00 committed by Colin Edwards
parent cdb5b6e812
commit 8f8b522ca7
7 changed files with 58 additions and 28 deletions

View File

@ -51,17 +51,16 @@ void AJAOutputUI::SetupPropertiesView()
static_cast<long long>(IOSelection::Invalid));
obs_data_set_default_int(
settings, kUIPropVideoFormatSelect.id,
static_cast<long long>(NTV2_FORMAT_720p_5994));
static_cast<long long>(kDefaultAJAVideoFormat));
obs_data_set_default_int(
settings, kUIPropPixelFormatSelect.id,
static_cast<long long>(NTV2_FBF_8BIT_YCBCR));
static_cast<long long>(kDefaultAJAPixelFormat));
obs_data_set_default_int(
settings, kUIPropSDITransport.id,
static_cast<long long>(SDITransport::SingleLink));
static_cast<long long>(kDefaultAJASDITransport));
obs_data_set_default_int(
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
@ -109,17 +108,16 @@ void AJAOutputUI::SetupPreviewPropertiesView()
static_cast<long long>(IOSelection::Invalid));
obs_data_set_default_int(
settings, kUIPropVideoFormatSelect.id,
static_cast<long long>(NTV2_FORMAT_720p_5994));
static_cast<long long>(kDefaultAJAVideoFormat));
obs_data_set_default_int(
settings, kUIPropPixelFormatSelect.id,
static_cast<long long>(NTV2_FBF_8BIT_YCBCR));
static_cast<long long>(kDefaultAJAPixelFormat));
obs_data_set_default_int(
settings, kUIPropSDITransport.id,
static_cast<long long>(SDITransport::SingleLink));
static_cast<long long>(kDefaultAJASDITransport));
obs_data_set_default_int(
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

View File

@ -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)

View File

@ -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<long long>(IOSelection::Invalid));
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_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));
if (deviceID == DEVICE_ID_TTAP_PRO) {

View File

@ -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,

View File

@ -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<IOSelection>(
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>(
obs_data_get_int(settings, kUIPropVideoFormatSelect.id));
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 =
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<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 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;
}

View File

@ -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();

View File

@ -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",