AJA NTV2 SDK  18.0.0.2122
NTV2 SDK 18.0.0.2122
Widget Signal Routing

NTV2 device FPGA firmware implements several types of Widgets for receiving, processing and transmitting video data. These can be classified as follows:

Most widgets typically have one or more registers associated with them for reporting status, or to control their operation. Rather than calling CNTV2Card::ReadRegister or CNTV2Card::WriteRegister, client applications should use the appropriate widget-related API calls in the CNTV2Card class to inquire about and/or control the widget of interest.


End-to-End (E-E) Routing

There are two demonstration applications that incorporate some E-E operation, but they’re not “pure” E-E applications — i.e., they both involve the Mixer/Keyer (see Mixer/Keyer Operation):

SD/HD YCbCr SDI End-to-End Pass-Through

This is very easy to do with AJA NTV2 devices and the SDK. Simply connect the primary (Data Stream 1) output crosspoint of the SDI Input widget to the primary (DS1) input crosspoint of the SDI Output widget.

// Example: Route SDI 1 (input) directly to SDI 3 (output)
const NTV2Channel sdiIn1(NTV2_CHANNEL1), sdiOut3(NTV2_CHANNEL3);
theDevice.Connect (NTV2_XptSDIOut3Input, NTV2_XptSDIIn1); // SDIOut3 <== SDIIn1
// Or, more generically...
const NTV2Channel sdiIn1(::GetNTV2ChannelForIndex(0)), sdiOut3(::GetNTV2ChannelForIndex(2));
theDevice.Connect (::GetSDIOutputInputXpt(sdiOut3), ::GetSDIInputOutputXptFromChannel(sdiIn1)); // SDIOut3 <== FB3
// Or, using NTV2XptConnection...
const NTV2XptConnection sdiInToSdiOut (::GetSDIOutputInputXpt(sdiOut3), ::GetSDIInputOutputXptFromChannel(sdiIn1));
theDevice.Connect (sdiInToSdiOut);

For E-E mode to work, other steps may need to be taken:


Routing for Capture

Please see the Capture Demos for examples of how to route for video input:


Routing for Playout

Please see the Playout Demos for examples of how to route for video output:

SD/HD YCbCr Playout From YCbCr Frame Buffer

// Example: Set up FrameStore3 for RGB playout, route to SDI 3...
theDevice.Connect (NTV2_XptSDIOut3Input, NTV2_XptFrameBuffer3YUV); // SDIOut3 <== FB3
// Or, more generically...
theDevice.SetFrameBufferFormat (chan, fbf);
theDevice.SetMode (chan, NTV2_MODE_OUTPUT);
theDevice.Connect (::GetSDIOutputInputXpt(chan), ::GetFrameBufferOutputXptFromChannel(chan, NTV2_IS_FBF_RGB(fbf))); // SDIOut3 <== FB3

SD/HD YCbCr Playout From RGB Frame Buffer

// Example: Set up FrameStore3 for RGB playout, route to SDI 3...
theDevice.Connect (NTV2_XptCSC3VidInput, NTV2_XptFrameBuffer3RGB); // CSC3 <== FB3RGB
theDevice.Connect (NTV2_XptSDIOut3Input, NTV2_XptCSC3VidRGB); // SDIOut3 <== CSC3RGB
// Or, more generically...
theDevice.SetFrameBufferFormat (chan, fbf);
theDevice.SetMode (chan, NTV2_MODE_OUTPUT);
theDevice.Connect (::GetCSCInputXptFromChannel(chan), ::GetFrameBufferOutputXptFromChannel(chan, NTV2_IS_FBF_RGB(fbf))); // CSC3 <== FB3RGB
theDevice.Connect (::GetSDIOutputInputXpt(chan), ::GetCSCOutputXptFromChannel(chan)); // SDIOut3 <== CSC3RGB

HD RGB Playout Over 1 × 3G Dual-Link SDI From RGB Frame Buffer

// Example: Set up FrameStore3 for RGB playout, route to SDI 3...
theDevice.Connect (NTV2_XptDualLinkOut3Input, NTV2_XptFrameBuffer3RGB); // DLOut3 <== FB3RGB
theDevice.Connect (NTV2_XptSDIOut3Input, NTV2_XptDuallinkOut3); // SDIOut3 <== DLOut3
theDevice.Connect (NTV2_XptSDIOut3InputDS2, NTV2_XptDuallinkOut3DS2); // SDIOut3DS <== DLOut3DS
// Or, more generically...
theDevice.SetFrameBufferFormat (chan, fbf);
theDevice.SetMode (chan, NTV2_MODE_OUTPUT);
theDevice.Connect (::GetDLOutInputXptFromChannel(chan), ::GetFrameBufferOutputXptFromChannel(chan, NTV2_IS_FBF_RGB(fbf))); // DLOut3 <== FB3RGB
theDevice.Connect (::GetSDIOutputInputXpt(chan, false), ::GetDLOutOutputXptFromChannel(chan, false)); // SDIOut3 <== DLOut3
theDevice.Connect (::GetSDIOutputInputXpt(chan, true), ::GetDLOutOutputXptFromChannel(chan, true)); // SDIOut3DS <== DLOut3DS