aja: Static analysis bug fixes

* aja: Use inline const for header initializations

Avoids duplicating across compilation units. Detected by PVS Studio.

* aja: Avoid unnecessary type conversions

Detected by PVS Studio.

* aja: Remove duplicate assignments

Detected by PVS Studio.

* aja: Fix return value of aja_output_create

Detected by PVS Studio.

* aja: Remove unused variable

Detected by PVS Studio.

* aja: Fix compiler warning

* aja: Remove unreachable if branch in aja routing

* aja; Cleanup return in card manager

Co-authored-by: Colin Edwards <colin@recursivepenguin.com>
This commit is contained in:
Richard Stanway 2021-12-06 05:17:39 +01:00 committed by GitHub
parent 904083a259
commit fad299f99f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 1060 additions and 1069 deletions

View File

@ -181,15 +181,13 @@ bool CardEntry::ChannelReady(NTV2Channel chan, const std::string &owner) const
{
const std::lock_guard<std::mutex> lock(mMutex);
bool found = false;
for (const auto &pwn : mChannelPwnz) {
if (pwn.second & (1 << static_cast<int32_t>(chan))) {
return pwn.first == owner;
}
}
return !found;
return true;
}
bool CardEntry::AcquireChannel(NTV2Channel chan, NTV2Mode mode,

View File

@ -237,7 +237,6 @@ void AJAOutput::QueueVideoFrame(struct video_data *frame, size_t size)
vf.frame = *frame;
vf.frameNum = mVideoWriteFrames;
vf.size = size;
vf.frame = *frame;
if (mVideoQueue->size() > kVideoQueueMaxSize) {
auto &front = mVideoQueue->front();
@ -259,7 +258,6 @@ void AJAOutput::QueueAudioFrames(struct audio_data *frames, size_t size)
af.frames = *frames;
af.offset = 0;
af.size = size;
af.frames = *frames;
if (mAudioQueue->size() > kAudioQueueMaxSize) {
auto &front = mAudioQueue->front();
@ -374,8 +372,8 @@ void AJAOutput::DMAAudioFromQueue(NTV2AudioSystem audioSys)
"AJAOutput::DMAAudioFromQueue: Drop %d audio samples",
adjustSamples);
} else {
uint32_t samples =
sizeLeft / (kDefaultAudioSampleSize *
uint32_t samples = (uint32_t)sizeLeft /
(kDefaultAudioSampleSize *
kDefaultAudioChannels);
af.offset += sizeLeft;
sizeLeft = 0;
@ -915,7 +913,7 @@ static void *aja_output_create(obs_data_t *settings, obs_output_t *output)
const char *cardID = obs_data_get_string(settings, kUIPropDevice.id);
if (!cardID) {
blog(LOG_ERROR, "aja_output_create: Card ID is null!");
return false;
return nullptr;
}
const char *outputID =
obs_data_get_string(settings, kUIPropAJAOutputID.id);

View File

@ -91,7 +91,6 @@ bool Routing::ParseRouteString(const std::string &route,
* the route strings currently only come from a known set.
*/
NTV2StringList lines;
NTV2StringList tokens;
lines = aja::split(route_strip, ';');
if (lines.empty())
@ -338,7 +337,6 @@ void Routing::StartSourceAudio(const SourceProps &props, CNTV2Card *card)
// Fix for AJA NTV2 internal bug #11467
ULWord magicAudioBits = 0;
if (NTV2_INPUT_SOURCE_IS_HDMI(inputSrc)) {
magicAudioBits = 0x00100000;
switch (inputSrc) {
default:
case NTV2_INPUTSOURCE_HDMI1:
@ -407,13 +405,7 @@ SDIWireFormat GuessSDIWireFormat(NTV2VideoFormat vf, IOSelection io,
if (aja::IsSDIFourWireIOSelection(io)) {
swf = SDIWireFormat::UHD4K_ST292_Quad_1_5_Squares;
} else if (aja::IsSDITwoWireIOSelection(io)) {
if (t4k == SDI4KTransport::Squares) {
swf = SDIWireFormat::
UHD4K_ST292_Dual_1_5_Squares;
} else {
swf = SDIWireFormat::
UHD4K_ST425_Dual_3Gb_2SI;
}
swf = SDIWireFormat::UHD4K_ST292_Dual_1_5_Squares;
}
} else if (t4k == SDI4KTransport::TwoSampleInterleave) {
if (aja::IsSDIOneWireIOSelection(io)) {

View File

@ -50,7 +50,7 @@ struct RoutingConfig {
*/
using VPIDSpec = std::pair<RasterDefinition, VPIDStandard>;
static const std::map<VPIDSpec, SDIWireFormat> kSDIWireFormats = {
static inline const std::map<VPIDSpec, SDIWireFormat> kSDIWireFormats = {
{{RasterDefinition::SD, VPIDStandard_483_576}, SDIWireFormat::SD_ST352},
{{RasterDefinition::HD, VPIDStandard_720},
SDIWireFormat::HD_720p_ST292},

View File

@ -919,8 +919,7 @@ static void aja_source_update(void *data, obs_data_t *settings)
auto prevCardEntry = cardManager.GetCardEntry(currentCardID);
if (prevCardEntry) {
const std::string &ioSelectStr =
aja::IOSelectionToString(curr_props.ioSelect)
.c_str();
aja::IOSelectionToString(curr_props.ioSelect);
if (!prevCardEntry->ReleaseInputSelection(
curr_props.ioSelect, curr_props.deviceID,
ajaSource->GetName())) {
@ -985,7 +984,7 @@ static void aja_source_update(void *data, obs_data_t *settings)
// Release Channels if IOSelection changes
if (want_props.ioSelect != curr_props.ioSelect) {
const std::string &ioSelectStr =
aja::IOSelectionToString(curr_props.ioSelect).c_str();
aja::IOSelectionToString(curr_props.ioSelect);
if (!cardEntry->ReleaseInputSelection(curr_props.ioSelect,
curr_props.deviceID,
ajaSource->GetName())) {

View File

@ -2,21 +2,21 @@
#include "../aja-routing.hpp"
static const std::map<HDMIWireFormat, RoutingConfig> kHDMIRGBCaptureConfigs = {
{HDMIWireFormat::HD_RGB_LFR,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"hdmi[{ch1}][0]->fb[{ch1}][0];",
}}};
static inline const std::map<HDMIWireFormat, RoutingConfig>
kHDMIRGBCaptureConfigs = {{HDMIWireFormat::HD_RGB_LFR,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"hdmi[{ch1}][0]->fb[{ch1}][0];",
}}};

View File

@ -2,27 +2,28 @@
#include "../aja-routing.hpp"
static const std::map<HDMIWireFormat, RoutingConfig> kHDMIRGBDisplayConfigs = {
{HDMIWireFormat::HD_RGB_LFR,
{NTV2_MODE_DISPLAY, 1, 1, true, false, false, false, false, false,
false, false, false, false, "fb[{ch1}][0]->hdmi[0][0];"}},
{HDMIWireFormat::TTAP_PRO,
{
NTV2_MODE_DISPLAY,
1,
1,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];"
"fb[{ch1}][2]->hdmi[{ch1}][0];",
}}};
static inline const std::map<HDMIWireFormat, RoutingConfig>
kHDMIRGBDisplayConfigs = {{HDMIWireFormat::HD_RGB_LFR,
{NTV2_MODE_DISPLAY, 1, 1, true, false, false,
false, false, false, false, false, false,
false, "fb[{ch1}][0]->hdmi[0][0];"}},
{HDMIWireFormat::TTAP_PRO,
{
NTV2_MODE_DISPLAY,
1,
1,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];"
"fb[{ch1}][2]->hdmi[{ch1}][0];",
}}};

View File

@ -2,46 +2,47 @@
#include "../aja-routing.hpp"
static const std::map<HDMIWireFormat, RoutingConfig> kHDMIYCbCrCaptureConfigs = {
{HDMIWireFormat::HD_YCBCR_LFR,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"hdmi[{ch1}][0]->fb[{ch1}][0];",
}},
{HDMIWireFormat::UHD_4K_YCBCR_LFR,
{
NTV2_MODE_CAPTURE,
1,
2,
false,
false,
false,
false,
false,
false,
false,
false,
false,
true,
"hdmi[0][0]->tsi[{ch1}][0];"
"hdmi[0][1]->tsi[{ch1}][1];"
"hdmi[0][2]->tsi[{ch2}][0];"
"hdmi[0][3]->tsi[{ch2}][1];"
"tsi[{ch1}][0]->fb[{ch1}][0];"
"tsi[{ch1}][1]->fb[{ch1}][1];"
"tsi[{ch2}][0]->fb[{ch2}][0];"
"tsi[{ch2}][1]->fb[{ch2}][1];",
}},
static inline const std::map<HDMIWireFormat, RoutingConfig>
kHDMIYCbCrCaptureConfigs = {
{HDMIWireFormat::HD_YCBCR_LFR,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"hdmi[{ch1}][0]->fb[{ch1}][0];",
}},
{HDMIWireFormat::UHD_4K_YCBCR_LFR,
{
NTV2_MODE_CAPTURE,
1,
2,
false,
false,
false,
false,
false,
false,
false,
false,
false,
true,
"hdmi[0][0]->tsi[{ch1}][0];"
"hdmi[0][1]->tsi[{ch1}][1];"
"hdmi[0][2]->tsi[{ch2}][0];"
"hdmi[0][3]->tsi[{ch2}][1];"
"tsi[{ch1}][0]->fb[{ch1}][0];"
"tsi[{ch1}][1]->fb[{ch1}][1];"
"tsi[{ch2}][0]->fb[{ch2}][0];"
"tsi[{ch2}][1]->fb[{ch2}][1];",
}},
};

View File

@ -2,63 +2,63 @@
#include "../aja-routing.hpp"
static const std::map<HDMIWireFormat, RoutingConfig> kHDMIYCbCrDisplayConfigs = {
{HDMIWireFormat::HD_YCBCR_LFR,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][0]->hdmi[0][0];",
}},
{HDMIWireFormat::UHD_4K_YCBCR_LFR,
{
NTV2_MODE_DISPLAY,
1,
2,
false,
false,
false,
false,
false,
false,
false,
false,
false,
true,
"fb[{ch1}][0]->tsi[{ch1}][0];"
"fb[{ch1}][1]->tsi[{ch1}][1];"
"fb[{ch2}][0]->tsi[{ch2}][0];"
"fb[{ch2}][1]->tsi[{ch2}][1];"
"tsi[{ch1}][0]->hdmi[0][0];"
"tsi[{ch1}][1]->hdmi[0][1];"
"tsi[{ch2}][0]->hdmi[0][2];"
"tsi[{ch2}][1]->hdmi[0][3];",
}},
{HDMIWireFormat::TTAP_PRO,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][0]->sdi[{ch1}][0];"
"fb[{ch1}][0]->hdmi[{ch1}][0];",
}}};
static inline const std::map<HDMIWireFormat, RoutingConfig>
kHDMIYCbCrDisplayConfigs = {{HDMIWireFormat::HD_YCBCR_LFR,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][0]->hdmi[0][0];",
}},
{HDMIWireFormat::UHD_4K_YCBCR_LFR,
{
NTV2_MODE_DISPLAY,
1,
2,
false,
false,
false,
false,
false,
false,
false,
false,
false,
true,
"fb[{ch1}][0]->tsi[{ch1}][0];"
"fb[{ch1}][1]->tsi[{ch1}][1];"
"fb[{ch2}][0]->tsi[{ch2}][0];"
"fb[{ch2}][1]->tsi[{ch2}][1];"
"tsi[{ch1}][0]->hdmi[0][0];"
"tsi[{ch1}][1]->hdmi[0][1];"
"tsi[{ch2}][0]->hdmi[0][2];"
"tsi[{ch2}][1]->hdmi[0][3];",
}},
{HDMIWireFormat::TTAP_PRO,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][0]->sdi[{ch1}][0];"
"fb[{ch1}][0]->hdmi[{ch1}][0];",
}}};

View File

@ -2,465 +2,466 @@
#include "../aja-routing.hpp"
static const std::map<SDIWireFormat, RoutingConfig> kSDIRGBCaptureConfigs = {
{
SDIWireFormat::SD_ST352,
static inline const std::map<SDIWireFormat, RoutingConfig>
kSDIRGBCaptureConfigs = {
{
NTV2_MODE_CAPTURE, // i/o mode
1, // num wires
1, // num framestores
false, // enable 3G output?
false, // enable 6G output?
false, // enable 12G output?
false, // convert 3Gb -> 3Ga input?
false, // convert 3Ga -> 3Gb output?
false, // convert RGB 3Ga output?
false, // enable 3Gb output?
false, // enable 4K Square Division?
false, // enable 8K Square Division?
false, // enable two-sample-interleave?
"",
SDIWireFormat::SD_ST352,
{
NTV2_MODE_CAPTURE, // i/o mode
1, // num wires
1, // num framestores
false, // enable 3G output?
false, // enable 6G output?
false, // enable 12G output?
false, // convert 3Gb -> 3Ga input?
false, // convert 3Ga -> 3Gb output?
false, // convert RGB 3Ga output?
false, // enable 3Gb output?
false, // enable 4K Square Division?
false, // enable 8K Square Division?
false, // enable two-sample-interleave?
"",
},
},
},
{SDIWireFormat::HD_720p_ST292,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080_ST292,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080_ST372_Dual,
{
NTV2_MODE_CAPTURE,
2,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch2}][0]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_720p_ST425_3Ga,
{
NTV2_MODE_CAPTURE,
1,
1,
true,
false,
false,
false,
false,
true,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080p_ST425_3Ga,
{
NTV2_MODE_CAPTURE,
1,
1,
true,
false,
false,
false,
false,
true,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080p_ST425_3Gb_DL,
{
NTV2_MODE_CAPTURE,
1,
1,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_720p_ST425_3Gb,
{
NTV2_MODE_CAPTURE,
1,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080p_ST425_3Gb,
{
NTV2_MODE_CAPTURE,
1,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080p_ST425_Dual_3Ga,
{
NTV2_MODE_CAPTURE,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"",
}},
{SDIWireFormat::HD_1080p_ST425_Dual_3Gb,
{
NTV2_MODE_CAPTURE,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"",
}},
{SDIWireFormat::UHD4K_ST292_Quad_1_5_Squares,
{
NTV2_MODE_CAPTURE,
4,
4,
false,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Capture
"sdi[{ch1}][0]->fb[{ch1}][0];"
"sdi[{ch2}][0]->fb[{ch2}][0];"
"sdi[{ch3}][0]->fb[{ch3}][0];"
"sdi[{ch4}][0]->fb[{ch4}][0];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Ga_Squares,
{
NTV2_MODE_CAPTURE,
4,
4,
true,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Capture
"sdi[{ch1}][0]->fb[{ch1}][0];"
"sdi[{ch2}][0]->fb[{ch2}][0];"
"sdi[{ch3}][0]->fb[{ch3}][0];"
"sdi[{ch4}][0]->fb[{ch4}][0];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Gb_Squares,
{
NTV2_MODE_CAPTURE,
4,
4,
true,
false,
false,
false,
false,
false,
false,
true,
false,
false,
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
{SDIWireFormat::HD_720p_ST292,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080_ST292,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080_ST372_Dual,
{
NTV2_MODE_CAPTURE,
2,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch2}][0]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_720p_ST425_3Ga,
{
NTV2_MODE_CAPTURE,
1,
1,
true,
false,
false,
false,
false,
true,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080p_ST425_3Ga,
{
NTV2_MODE_CAPTURE,
1,
1,
true,
false,
false,
false,
false,
true,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080p_ST425_3Gb_DL,
{
NTV2_MODE_CAPTURE,
1,
1,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_720p_ST425_3Gb,
{
NTV2_MODE_CAPTURE,
1,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080p_ST425_3Gb,
{
NTV2_MODE_CAPTURE,
1,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Capture
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"dli[{ch1}][0]->fb[{ch1}][0];",
}},
{SDIWireFormat::HD_1080p_ST425_Dual_3Ga,
{
NTV2_MODE_CAPTURE,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"",
}},
{SDIWireFormat::HD_1080p_ST425_Dual_3Gb,
{
NTV2_MODE_CAPTURE,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"",
}},
{SDIWireFormat::UHD4K_ST292_Quad_1_5_Squares,
{
NTV2_MODE_CAPTURE,
4,
4,
false,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Capture
"sdi[{ch1}][0]->fb[{ch1}][0];"
"sdi[{ch2}][0]->fb[{ch2}][0];"
"sdi[{ch3}][0]->fb[{ch3}][0];"
"sdi[{ch4}][0]->fb[{ch4}][0];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Ga_Squares,
{
NTV2_MODE_CAPTURE,
4,
4,
true,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Capture
"sdi[{ch1}][0]->fb[{ch1}][0];"
"sdi[{ch2}][0]->fb[{ch2}][0];"
"sdi[{ch3}][0]->fb[{ch3}][0];"
"sdi[{ch4}][0]->fb[{ch4}][0];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Gb_Squares,
{
NTV2_MODE_CAPTURE,
4,
4,
true,
false,
false,
false,
false,
false,
false,
true,
false,
false,
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"sdi[{ch2}][0]->dli[{ch2}][0];"
"sdi[{ch2}][1]->dli[{ch2}][1];"
"sdi[{ch2}][0]->dli[{ch2}][0];"
"sdi[{ch2}][1]->dli[{ch2}][1];"
"sdi[{ch3}][0]->dli[{ch3}][0];"
"sdi[{ch3}][1]->dli[{ch3}][1];"
"sdi[{ch3}][0]->dli[{ch3}][0];"
"sdi[{ch3}][1]->dli[{ch3}][1];"
"sdi[{ch4}][0]->dli[{ch4}][0];"
"sdi[{ch4}][1]->dli[{ch4}][1];"
"sdi[{ch4}][0]->dli[{ch4}][0];"
"sdi[{ch4}][1]->dli[{ch4}][1];"
"dli[{ch1}][0]->fb[{ch1}][2];"
"dli[{ch2}][0]->fb[{ch2}][2];"
"dli[{ch3}][0]->fb[{ch3}][2];"
"dli[{ch4}][0]->fb[{ch4}][2];",
}},
{SDIWireFormat::UHD4K_ST425_Dual_3Gb_2SI,
{
NTV2_MODE_CAPTURE,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Ga_2SI,
{
NTV2_MODE_CAPTURE,
4,
4,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
// SDI 1-4 -> Dual-Link 1-4
// -> TSI Mux 1-2 -> Framestore 1-2
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"sdi[{ch2}][0]->dli[{ch2}][0];"
"sdi[{ch2}][1]->dli[{ch2}][1];"
"sdi[{ch3}][0]->dli[{ch3}][0];"
"sdi[{ch3}][1]->dli[{ch3}][1];"
"sdi[{ch4}][0]->dli[{ch4}][0];"
"sdi[{ch4}][1]->dli[{ch4}][1];"
"dli[{ch1}][0]->fb[{ch1}][2];"
"dli[{ch2}][0]->fb[{ch2}][2];"
"dli[{ch3}][0]->fb[{ch3}][2];"
"dli[{ch4}][0]->fb[{ch4}][2];",
}},
{SDIWireFormat::UHD4K_ST425_Dual_3Gb_2SI,
{
NTV2_MODE_CAPTURE,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Ga_2SI,
{
NTV2_MODE_CAPTURE,
4,
4,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
// SDI 1-4 -> Dual-Link 1-4
// -> TSI Mux 1-2 -> Framestore 1-2
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"sdi[{ch2}][0]->dli[{ch2}][0];"
"sdi[{ch2}][1]->dli[{ch2}][1];"
"sdi[{ch3}][0]->dli[{ch3}][0];"
"sdi[{ch3}][1]->dli[{ch3}][1];"
"sdi[{ch4}][0]->dli[{ch4}][0];"
"sdi[{ch4}][1]->dli[{ch4}][1];"
"dli[{ch1}][0]->tsi[{ch1}][0];"
"dli[{ch2}][0]->tsi[{ch1}][1];"
"dli[{ch3}][0]->tsi[{ch2}][0];"
"dli[{ch4}][0]->tsi[{ch2}][1];"
"dli[{ch1}][0]->tsi[{ch1}][0];"
"dli[{ch2}][0]->tsi[{ch1}][1];"
"dli[{ch3}][0]->tsi[{ch2}][0];"
"dli[{ch4}][0]->tsi[{ch2}][1];"
"tsi[{ch1}][0]->fb[{ch1}][0];"
"tsi[{ch1}][1]->fb[{ch1}][1];"
"tsi[{ch2}][0]->fb[{ch2}][0];"
"tsi[{ch2}][1]->fb[{ch2}][1];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Gb_2SI,
{
NTV2_MODE_CAPTURE,
4,
4,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
// SDI 1-4 -> Dual-Link 1-4
// -> TSI Mux 1-2 -> Framestore 1-2
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"sdi[{ch2}][0]->dli[{ch2}][0];"
"sdi[{ch2}][1]->dli[{ch2}][1];"
"sdi[{ch3}][0]->dli[{ch3}][0];"
"sdi[{ch3}][1]->dli[{ch3}][1];"
"sdi[{ch4}][0]->dli[{ch4}][0];"
"sdi[{ch4}][1]->dli[{ch4}][1];"
"tsi[{ch1}][0]->fb[{ch1}][0];"
"tsi[{ch1}][1]->fb[{ch1}][1];"
"tsi[{ch2}][0]->fb[{ch2}][0];"
"tsi[{ch2}][1]->fb[{ch2}][1];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Gb_2SI,
{
NTV2_MODE_CAPTURE,
4,
4,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
// SDI 1-4 -> Dual-Link 1-4
// -> TSI Mux 1-2 -> Framestore 1-2
"sdi[{ch1}][0]->dli[{ch1}][0];"
"sdi[{ch1}][1]->dli[{ch1}][1];"
"sdi[{ch2}][0]->dli[{ch2}][0];"
"sdi[{ch2}][1]->dli[{ch2}][1];"
"sdi[{ch3}][0]->dli[{ch3}][0];"
"sdi[{ch3}][1]->dli[{ch3}][1];"
"sdi[{ch4}][0]->dli[{ch4}][0];"
"sdi[{ch4}][1]->dli[{ch4}][1];"
"dli[{ch1}][0]->tsi[{ch1}][0];"
"dli[{ch2}][0]->tsi[{ch1}][1];"
"dli[{ch3}][0]->tsi[{ch2}][0];"
"dli[{ch4}][0]->tsi[{ch2}][1];"
"dli[{ch1}][0]->tsi[{ch1}][0];"
"dli[{ch2}][0]->tsi[{ch1}][1];"
"dli[{ch3}][0]->tsi[{ch2}][0];"
"dli[{ch4}][0]->tsi[{ch2}][1];"
"tsi[{ch1}][0]->fb[{ch1}][0];"
"tsi[{ch1}][1]->fb[{ch1}][1];"
"tsi[{ch2}][0]->fb[{ch2}][0];"
"tsi[{ch2}][1]->fb[{ch2}][1];",
}},
{SDIWireFormat::UHD4K_ST2018_6G_Squares_2SI,
{
NTV2_MODE_CAPTURE,
2,
2,
false,
true,
false,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD4K_ST2018_12G_Squares_2SI,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
true,
false,
false,
true,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_Dual_12G,
{
NTV2_MODE_CAPTURE,
2,
2,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_RGB_Dual_12G,
{
NTV2_MODE_CAPTURE,
2,
2,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_Quad_12G,
{
NTV2_MODE_CAPTURE,
4,
4,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
"tsi[{ch1}][0]->fb[{ch1}][0];"
"tsi[{ch1}][1]->fb[{ch1}][1];"
"tsi[{ch2}][0]->fb[{ch2}][0];"
"tsi[{ch2}][1]->fb[{ch2}][1];",
}},
{SDIWireFormat::UHD4K_ST2018_6G_Squares_2SI,
{
NTV2_MODE_CAPTURE,
2,
2,
false,
true,
false,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD4K_ST2018_12G_Squares_2SI,
{
NTV2_MODE_CAPTURE,
1,
1,
false,
false,
true,
false,
false,
true,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_Dual_12G,
{
NTV2_MODE_CAPTURE,
2,
2,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_RGB_Dual_12G,
{
NTV2_MODE_CAPTURE,
2,
2,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_Quad_12G,
{
NTV2_MODE_CAPTURE,
4,
4,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
};

View File

@ -2,467 +2,468 @@
#include "../aja-routing.hpp"
static const std::map<SDIWireFormat, RoutingConfig> kSDIRGBDisplayConfigs = {
{
SDIWireFormat::SD_ST352,
static inline const std::map<SDIWireFormat, RoutingConfig>
kSDIRGBDisplayConfigs = {
{
NTV2_MODE_DISPLAY,
1, // num wires
1, // num framestores
false, // enable 3G output?
false, // enable 6G output?
false, // enable 12G output?
false, // convert 3Gb -> 3Ga input?
false, // convert 3Ga -> 3Gb output?
false, // convert RGB 3Ga output?
false, // enable 3Gb output?
false, // enable 4K Square Division?
false, // enable 8K Square Division?
false, // enable two-sample-interleave?
"", // RGB Output Route
SDIWireFormat::SD_ST352,
{
NTV2_MODE_DISPLAY,
1, // num wires
1, // num framestores
false, // enable 3G output?
false, // enable 6G output?
false, // enable 12G output?
false, // convert 3Gb -> 3Ga input?
false, // convert 3Ga -> 3Gb output?
false, // convert RGB 3Ga output?
false, // enable 3Gb output?
false, // enable 4K Square Division?
false, // enable 8K Square Division?
false, // enable two-sample-interleave?
"", // RGB Output Route
},
},
},
{SDIWireFormat::HD_720p_ST292,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}[0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080_ST292,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}[0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080_ST372_Dual,
{
NTV2_MODE_DISPLAY,
2,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Playout
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}[0];"
"dlo[{ch1}][1]->sdi[{ch2}][0];",
}},
{SDIWireFormat::HD_720p_ST425_3Ga,
{
NTV2_MODE_DISPLAY,
1,
1,
true,
false,
false,
false,
false,
true,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080p_ST425_3Ga,
{
NTV2_MODE_DISPLAY,
1,
1,
true,
false,
false,
false,
false,
true,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080p_ST425_3Gb_DL,
{
NTV2_MODE_DISPLAY,
1,
1,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_720p_ST425_3Gb,
{
NTV2_MODE_DISPLAY,
1,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080p_ST425_3Gb,
{
NTV2_MODE_DISPLAY,
1,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080p_ST425_Dual_3Ga,
{
NTV2_MODE_DISPLAY,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"",
}},
{SDIWireFormat::HD_1080p_ST425_Dual_3Gb,
{
NTV2_MODE_DISPLAY,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"",
}},
{SDIWireFormat::UHD4K_ST292_Quad_1_5_Squares,
{
NTV2_MODE_DISPLAY,
4,
4,
false,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Playout
"fb[{ch1}][0]->sdi[{ch1}][0];"
"fb[{ch2}][0]->sdi[{ch2}][0];"
"fb[{ch3}][0]->sdi[{ch3}][0];"
"fb[{ch4}][0]->sdi[{ch4}][0];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Ga_Squares,
{
NTV2_MODE_DISPLAY,
4,
4,
true,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Playout
"fb[{ch1}][0]->sdi[{ch1}][0];"
"fb[{ch2}][0]->sdi[{ch2}][0];"
"fb[{ch3}][0]->sdi[{ch3}][0];"
"fb[{ch4}][0]->sdi[{ch4}][0];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Gb_Squares,
{
NTV2_MODE_DISPLAY,
4,
4,
true,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Framestores 1-4 -> Dual-Link 1-4 -> SDI 1-4
"fb[{ch1}][2]->dlo[{ch1}][0];"
"fb[{ch2}][2]->dlo[{ch2}][0];"
"fb[{ch3}][2]->dlo[{ch3}][0];"
"fb[{ch4}][2]->dlo[{ch4}][0];"
{SDIWireFormat::HD_720p_ST292,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}[0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080_ST292,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}[0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080_ST372_Dual,
{
NTV2_MODE_DISPLAY,
2,
1,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Playout
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}[0];"
"dlo[{ch1}][1]->sdi[{ch2}][0];",
}},
{SDIWireFormat::HD_720p_ST425_3Ga,
{
NTV2_MODE_DISPLAY,
1,
1,
true,
false,
false,
false,
false,
true,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080p_ST425_3Ga,
{
NTV2_MODE_DISPLAY,
1,
1,
true,
false,
false,
false,
false,
true,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080p_ST425_3Gb_DL,
{
NTV2_MODE_DISPLAY,
1,
1,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_720p_ST425_3Gb,
{
NTV2_MODE_DISPLAY,
1,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080p_ST425_3Gb,
{
NTV2_MODE_DISPLAY,
1,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
// Output
"fb[{ch1}][2]->dlo[{ch1}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];",
}},
{SDIWireFormat::HD_1080p_ST425_Dual_3Ga,
{
NTV2_MODE_DISPLAY,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"",
}},
{SDIWireFormat::HD_1080p_ST425_Dual_3Gb,
{
NTV2_MODE_DISPLAY,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
"",
}},
{SDIWireFormat::UHD4K_ST292_Quad_1_5_Squares,
{
NTV2_MODE_DISPLAY,
4,
4,
false,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Playout
"fb[{ch1}][0]->sdi[{ch1}][0];"
"fb[{ch2}][0]->sdi[{ch2}][0];"
"fb[{ch3}][0]->sdi[{ch3}][0];"
"fb[{ch4}][0]->sdi[{ch4}][0];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Ga_Squares,
{
NTV2_MODE_DISPLAY,
4,
4,
true,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Playout
"fb[{ch1}][0]->sdi[{ch1}][0];"
"fb[{ch2}][0]->sdi[{ch2}][0];"
"fb[{ch3}][0]->sdi[{ch3}][0];"
"fb[{ch4}][0]->sdi[{ch4}][0];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Gb_Squares,
{
NTV2_MODE_DISPLAY,
4,
4,
true,
false,
false,
false,
false,
false,
false,
true,
false,
false,
// Framestores 1-4 -> Dual-Link 1-4 -> SDI 1-4
"fb[{ch1}][2]->dlo[{ch1}][0];"
"fb[{ch2}][2]->dlo[{ch2}][0];"
"fb[{ch3}][2]->dlo[{ch3}][0];"
"fb[{ch4}][2]->dlo[{ch4}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];"
"dlo[{ch2}][0]->sdi[{ch2}][0];"
"dlo[{ch2}][1]->sdi[{ch2}][1];"
"dlo[{ch2}][0]->sdi[{ch2}][0];"
"dlo[{ch2}][1]->sdi[{ch2}][1];"
"dlo[{ch3}][0]->sdi[{ch3}][0];"
"dlo[{ch3}][1]->sdi[{ch3}][1];"
"dlo[{ch3}][0]->sdi[{ch3}][0];"
"dlo[{ch3}][1]->sdi[{ch3}][1];"
"dlo[{ch4}][0]->sdi[{ch4}][0];"
"dlo[{ch4}][1]->sdi[{ch4}][1];",
}},
{SDIWireFormat::UHD4K_ST425_Dual_3Gb_2SI,
{
NTV2_MODE_DISPLAY,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Ga_2SI,
{
NTV2_MODE_DISPLAY,
4,
4,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
// Framestores 1-2 -> TSI Mux 1-2
// -> Dual-Link 1-4 -> SDI 1-4
"fb[{ch1}][2]->tsi[{ch1}][0];"
"fb[{ch1}][3]->tsi[{ch1}][1];"
"dlo[{ch4}][0]->sdi[{ch4}][0];"
"dlo[{ch4}][1]->sdi[{ch4}][1];",
}},
{SDIWireFormat::UHD4K_ST425_Dual_3Gb_2SI,
{
NTV2_MODE_DISPLAY,
2,
2,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Ga_2SI,
{
NTV2_MODE_DISPLAY,
4,
4,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
// Framestores 1-2 -> TSI Mux 1-2
// -> Dual-Link 1-4 -> SDI 1-4
"fb[{ch1}][2]->tsi[{ch1}][0];"
"fb[{ch1}][3]->tsi[{ch1}][1];"
"fb[{ch2}][2]->tsi[{ch2}][0];"
"fb[{ch2}][3]->tsi[{ch2}][1];"
"fb[{ch2}][2]->tsi[{ch2}][0];"
"fb[{ch2}][3]->tsi[{ch2}][1];"
"tsi[{ch1}][2]->dlo[{ch1}][0];"
"tsi[{ch1}][3]->dlo[{ch2}][0];"
"tsi[{ch2}][2]->dlo[{ch3}][0];"
"tsi[{ch2}][3]->dlo[{ch4}][0];"
"tsi[{ch1}][2]->dlo[{ch1}][0];"
"tsi[{ch1}][3]->dlo[{ch2}][0];"
"tsi[{ch2}][2]->dlo[{ch3}][0];"
"tsi[{ch2}][3]->dlo[{ch4}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];"
"dlo[{ch2}][0]->sdi[{ch2}][0];"
"dlo[{ch2}][1]->sdi[{ch2}][1];"
"dlo[{ch3}][0]->sdi[{ch3}][0];"
"dlo[{ch3}][1]->sdi[{ch3}][1];"
"dlo[{ch4}][0]->sdi[{ch4}][0];"
"dlo[{ch4}][1]->sdi[{ch4}][1];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Gb_2SI,
{
NTV2_MODE_DISPLAY,
4,
4,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
// Framestores 1-2 -> TSI Mux 1-2
// -> Dual-Link 1-4 -> SDI 1-4
"fb[{ch1}][2]->tsi[{ch1}][0];"
"fb[{ch1}][3]->tsi[{ch1}][1];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];"
"dlo[{ch2}][0]->sdi[{ch2}][0];"
"dlo[{ch2}][1]->sdi[{ch2}][1];"
"dlo[{ch3}][0]->sdi[{ch3}][0];"
"dlo[{ch3}][1]->sdi[{ch3}][1];"
"dlo[{ch4}][0]->sdi[{ch4}][0];"
"dlo[{ch4}][1]->sdi[{ch4}][1];",
}},
{SDIWireFormat::UHD4K_ST425_Quad_3Gb_2SI,
{
NTV2_MODE_DISPLAY,
4,
4,
true,
false,
false,
false,
false,
false,
false,
false,
false,
true,
// Framestores 1-2 -> TSI Mux 1-2
// -> Dual-Link 1-4 -> SDI 1-4
"fb[{ch1}][2]->tsi[{ch1}][0];"
"fb[{ch1}][3]->tsi[{ch1}][1];"
"fb[{ch2}][2]->tsi[{ch2}][0];"
"fb[{ch2}][3]->tsi[{ch2}][1];"
"fb[{ch2}][2]->tsi[{ch2}][0];"
"fb[{ch2}][3]->tsi[{ch2}][1];"
"tsi[{ch1}][2]->dlo[{ch1}][0];"
"tsi[{ch1}][3]->dlo[{ch2}][0];"
"tsi[{ch2}][2]->dlo[{ch3}][0];"
"tsi[{ch2}][3]->dlo[{ch4}][0];"
"tsi[{ch1}][2]->dlo[{ch1}][0];"
"tsi[{ch1}][3]->dlo[{ch2}][0];"
"tsi[{ch2}][2]->dlo[{ch3}][0];"
"tsi[{ch2}][3]->dlo[{ch4}][0];"
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];"
"dlo[{ch2}][0]->sdi[{ch2}][0];"
"dlo[{ch2}][1]->sdi[{ch2}][1];"
"dlo[{ch3}][0]->sdi[{ch3}][0];"
"dlo[{ch3}][1]->sdi[{ch3}][1];"
"dlo[{ch4}][0]->sdi[{ch4}][0];"
"dlo[{ch4}][1]->sdi[{ch4}][1];",
}},
{SDIWireFormat::UHD4K_ST2018_6G_Squares_2SI,
{
NTV2_MODE_DISPLAY,
2,
2,
false,
true,
false,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD4K_ST2018_12G_Squares_2SI,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
true,
false,
false,
true,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_Dual_12G,
{
NTV2_MODE_DISPLAY,
2,
2,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_RGB_Dual_12G,
{
NTV2_MODE_DISPLAY,
2,
2,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_Quad_12G,
{
NTV2_MODE_DISPLAY,
4,
4,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
"dlo[{ch1}][0]->sdi[{ch1}][0];"
"dlo[{ch1}][1]->sdi[{ch1}][1];"
"dlo[{ch2}][0]->sdi[{ch2}][0];"
"dlo[{ch2}][1]->sdi[{ch2}][1];"
"dlo[{ch3}][0]->sdi[{ch3}][0];"
"dlo[{ch3}][1]->sdi[{ch3}][1];"
"dlo[{ch4}][0]->sdi[{ch4}][0];"
"dlo[{ch4}][1]->sdi[{ch4}][1];",
}},
{SDIWireFormat::UHD4K_ST2018_6G_Squares_2SI,
{
NTV2_MODE_DISPLAY,
2,
2,
false,
true,
false,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD4K_ST2018_12G_Squares_2SI,
{
NTV2_MODE_DISPLAY,
1,
1,
false,
false,
true,
false,
false,
true,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_Dual_12G,
{
NTV2_MODE_DISPLAY,
2,
2,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_RGB_Dual_12G,
{
NTV2_MODE_DISPLAY,
2,
2,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
{SDIWireFormat::UHD28K_ST2082_Quad_12G,
{
NTV2_MODE_DISPLAY,
4,
4,
false,
false,
true,
false,
false,
false,
false,
false,
false,
true,
"",
}},
};

View File

@ -2,7 +2,7 @@
#include "../aja-routing.hpp"
static const std::map<SDIWireFormat, RoutingConfig> kSDIYCbCrCaptureConfigs = {
static inline const std::map<SDIWireFormat, RoutingConfig> kSDIYCbCrCaptureConfigs = {
{
SDIWireFormat::SD_ST352,
{

View File

@ -2,7 +2,7 @@
#include "../aja-routing.hpp"
static const std::map<SDIWireFormat, RoutingConfig> kSDIYCbCrDisplayConfigs = {
static inline const std::map<SDIWireFormat, RoutingConfig> kSDIYCbCrDisplayConfigs = {
{
SDIWireFormat::SD_ST352,
{