Appendix C. Indigo2 IMPACT Video Nodes and Their Controls
Prev |  | Next

## Appendix C. Indigo2 IMPACT Video Nodes and Their Controls

This appendix describes the nodes available to Indigo2 IMPACT Video. It lists the ports and controls associated with each node, as well as special considerations involved in node usage.

In the tables that summarize the control set for a node, the columns are as follows:

Default |  | The default value for the control. If the value is Dynamic, the default value depends on the value of other controls. For example, frame size is dependent on device timing. The default value is described in the verbose description of the control. If the value is Persistent, the default value is initially obtained from the defaults file, but is never reset. Many controls available through the video control panel `vcp` (for example, the default video input) fall into this category. For this value, changes made by `vlSetControl()` are persistent across paths, even if the node goes into an unused state. If the default is a specific value or is Dynamic, the control is reinitialized to the default value when the node is no longer in use, that is, when all application paths have been destroyed and the only applications remaining are supervisory. At present, the `vcp` is the only supervisory application. Some controls, such as VL_WINDOW, have a default value of None. This value means that the control must be set before a transfer can be started on a path containing the node.
Type |  | The member of the VLControlValue union used to set or get the value of the control.
Access |  | Access is one or more of the following: G: The value can be retrieved through `vlGetControl().` S: The value can be set through `vlSetControl()` while the path is not transferring. T: The value can be set through `vlSetControl()` while the path is transferring.

The nodes are as follows:

- VL_DEVICE

- VL_BLENDER

- VL_CSC: color-space conversion node for optional color-space conversion hardware

- VL_FB: internal framebuffer node for freezing video

- VL_MEM: region of workstation memory

- VL_SCREEN: workstation screen

- VL_TEXTURE: texture node

- VL_VIDEO: connection to a video device; for example, a video tape deck or camera

Chapters in this guide explain these specific nodes:

- VL_BLENDER: Chapter 7, “Blending, Keying, and Transitions”

- VL_CSC: Chapter 8, “Using Optional Color-Space Conversion”

- VL_TEX: Chapter 9, “Using Optional Video Texture Mapping”

## VL_DEVICE

The device node (digital video source node) provides controls that affect the operation of the Indigo2 IMPACT Video device as a whole. These controls include global parameters such as timing, as well as default information such as the default source or drain.

For device nodes:

- type is VL_DEVICE

- kind is 0

- number is 0

- port is none

Table C-1 lists device node controls. For all these controls, access is GST, except VL_MGV_TRIGGER_WAIT, which is G only.

Table C-1. Device Node Controls

Control | Default | Type | Use
--- | --- | --- | ---
VL_DEFAULT_DRAIN | Persistent | intVal | The VL_DEFAULT_DRAIN control determines the drain node the Video Library selects when a node is acquired with `vlGetNode`(VL_DRAIN, VL_VIDEO, VL_ANY). The value of the control is a video drain node number, as reported by `vlGetDeviceList()`. Once a path is set up, the node number is fixed for the lifetime of the path. Consequently, changing this control does not change paths previously set up using a default drain node. Paths can register for the VLDefaultDrain event to be notified when this control's value is changed.
VL_DEFAULT_SOURCE | Persistent | intVal | The VL_DEFAULT_SOURCE control determines the source node the Video Library selects when a node is acquired with `vlGetNode`(VL_SRC, VL_VIDEO, VL_ANY). The value of the control is a video source node number, as reported by `vlGetDeviceList()`. Once a path is set up, the node number is fixed for the lifetime of the path. Consequently, changing this control does not change paths previously set up using a default source node. Paths can register for the VLDefaultSource event to be notified when this control's value is changed using `vlSelectEvents()`.
VL_SYNC | Persistent | intVal | The Indigo2 IMPACT Video device can derive timing from an external source or use an internal free-running clock. If VL_SYNC is set to VL_SYNC_INTERNAL, the internal timing source is used. When VL_SYNC is set to VL_SYNC_GENLOCK, timing is derived from an external clock selected by the VL_SYNC_SOURCE control.
VL_SYNC_SOURCE | Persistent | intVal | When the VL_SYNC control is set to VL_SYNC_GENLOCK, this control selects the source of synchronization for the Indigo2 IMPACT Video device. The device can accept external timing from GEN_PORT analog reference input GEN_DIN1 serial digital input 1 GEN_DIN2 serial digital input 2
VL_TIMING | Persistent | intVal | This control selects the input timing for the Indigo2 IMPACT Video device and affects the timing for all nodes. The device supports the following modes: VL_TIMING_525_SQ_PIX: NTSC, 525-line square pixel timing VL_TIMING_525_CCIR601: CCIR 601, 525-line non-square pixel timing VL_TIMING_625_SQ_PIX: PAL, 625-line square pixel timing VL_TIMING_625_CCIR601: CCIR 601, 625-line non-square pixel timing Square pixel modes are used with the Indigo2 IMPACT Compression option only.
VL_MGV_AUTOPHASE | Persistent | intVal | Autophasing allows the video inputs to be locked to each other if, on input, their phase differences are not too great. This control selects whether input autophasing is enabled and, if enabled, the type of autophasing performed. The options for this control are as follows: VL_MGV_AUTOPHASE_NORMAL: This mode synchronizes the video inputs to the reference input. It can accommodate a vertical interval switch with a maximum deviation of +/- 1/2 line from the reference. VL_MGV_AUTOPHASE_EXTENDED: This extended autophase mode allows frequency-locked inputs to be +/- 4 lines relative to the reference input. VL_MGV_AUTOPHASE_VARIABLE: The variable mode allows the two inputs to be nonsynchronous with the reference and can accommodate inputs that are offset by up to +/- 4 lines. Variable autophasing uses the clock from the “last” input as the clock for both video channels. The last input is determined by monitoring the field (F) bit of channel 1 and 2. If channel 2 is already in the odd field when channel 1 enters the odd field, channel 1 is assumed to be the latest input. VL_MGV_AUTOPHASE_OFF: Autophasing is disabled; signals are passed through with their original timing.
VL_MGV_INPUT _ALPHA_LUT_SELECT | VL_MGV _ALPHA_LUT _CCIR601 | intVal | This control selects the type of LUT to be used when video data is routed into the crosspoint mux (see “Getting Connections” in Chapter 5) to a blender alpha input. The LUT is generally used to expand limited-range data to full-range value for use as alpha. The following LUTs are available: VL_MGV_ALPHA_LUT_PASS: A pass-through LUT for use when the input is video (not alpha). Values 2-253 are passed unmodified. Input values 254 and 1 are mapped to 255 and 0, respectively. VL_MGV_ALPHA_LUT_CCIR601: Used to expand CCIR-range input to full-range input. Values >=235 are mapped to 255, values <=16 are mapped to 0, and values 17-234 are mapped to 1-254. VL_MGV_ALPHA_LUT_SUPERBLACK: Used for inputs that have been quantized with setup and the key extends into the blanking level. Values >=235 are mapped to 255, value 1 to 0, and values 2-234 to 1-254. VL_MGV_ALPHA_LUT_REDUCED_RANGE: Used for input keys that do not extend the full range. Values >=224 are mapped to 255, values <=32 to 0, and values 32-221 to 1-254. This control takes effect only when video is fed from the VBAR mux to the blender alpha input; when video is fed into a pixel input, then VL_MGV_ALPHA_LUT_PASS is always selected.
VL_MGV_OUTPUT _ALPHA_LUT_SELECT | VL_MGV _ALPHA_LUT _CCIR601 | intVal | This control selects the LUT to use when alpha data is routed from the blender out of the crosspoint mux. Its function is to map the full-range alpha values to CCIR or other range values. The values for this control are the same as for VL_MGV_INPUT_ALPHA_LUT_SELECT, with the inverse mappings applied.
VL_MGV_TRIGGER _LINE | Persistent | intVal | This control reports the line on which the GPI trigger input is sampled. The Indigo2 IMPACT Video device samples the trigger on a per-field basis at lines 4 and 266 for NTSC (reported as line 4 by `vlGetControl()`) and lines 1 and 313 for PAL (reported as 1 by `vlGetControl()`).
VL_MGV_TRIGGER _POLARITY | Persistent | intVal | This control selects the polarity, indicating that the GPI trigger has gone off. Valid values are as follows: POLAR_NEG: The GPI trigger input has become negative. POLAR_POS: The GPI trigger input has become positive.
VL_MGV_TRIGGER _WAIT Default: none | None | boolVal | Allows a client to “sniff” the GPI trigger. A `vlGetControl()` call with VL_MGV_TRIGGER_WAIT blocks the client application until the trigger goes off. While the application is blocked, events received from the video daemon are queued on the client's connection to the daemon. For an application to be notified when the trigger fires, it must be registered for VLDeviceEvent. Using the event mechanism has the advantage that the client application can continue to interact with the Video Library or perform local processing while waiting for the event. VL_MGV_TRIGGER_WAIT is provided for applications that require a faster response to the trigger than can be provided with VLDeviceEvent.

## VL_BLENDER

The blender node provides two-layer blending and keying. The foreground pixel input (PIXEL_DRN_A) can be used as an input to the keyer to provide for chroma and luma key generation. The blender can also be used with external pixel and alpha sources to perform user-defined blend operations. For the blender node:

- type is VL_INTERNAL

- kind is VL_BLENDER

- number is VL_MGV_NODE_NUMBER_BLENDER

- ports are

  - VL_IMPACT_PORT_PIXEL_DRN_A, foreground pixel input

  - VL_IMPACT_PORT_ALPHA_DRN_A, foreground pixel input

  - VL_IMPACT_PORT_PIXEL_DRN_B, background pixel input

  - VL_IMPACT_PORT_ALPHA_DRN_B, background pixel input

  - VL_IMPACT_PORT_PIXEL_SRC_A, pixel output

  - VL_IMPACT_PORT_ALPHA_SRC_B, alpha output

The blender is the only node that can use the screen node alpha information. To use the screen alpha you must route the screen pixel data to blender alpha inputs. The blender alpha output can then be sent to the video outputs or memory.

| Note: The blender operates only on YUV:4:2:2 8 bit video. When sending the blender output to video, it is best to blank the chroma.

The Indigo2 IMPACT Video blender is a Porter-Duff style blender; see “Setting Normalization” in Chapter 7 for more information.

The blender does not stop you from doing special-effects blends. The output is clipped into the standard range. For a nice effect, try looping the output of the blender through a framebuffer back to the input of the blender in various modes.

| Note: For more information on blending and keying, see Chapter 7.

Table C-2 lists blender controls. Access for all controls is GST. For more information on blender node controls, see Chapter 7

Table C-2. Blender Node Controls

Control | Default | Type | Use
--- | --- | --- | ---
VL_BLEND_A_FCN | VL_BLDFCN_MINUS _A_ALPHA | intVal | Sets blend function that controls mixing of foreground signals.
VL_BLEND_B_FCN | VL_BLDFCN_ONE | intVal | Sets blend function that controls mixing of background signals.
VL_BLEND_A | Dynamic | intVal | Sets input source for foreground image.
VL_BLEND_B | Dynamic | intVal | Sets input source for background image.
VL_BLEND_A_ALPHA | Dynamic | intVal | Sets input source for foreground alpha.
VL_BLEND_B_ALPHA | Dynamic | intVal | Sets input source for background alpha.
VL_BLEND_A_NORMALIZE | TRUE | boolVal | Sets normalization; off is not supported by Indigo2 IMPACT Video.
VL_BLEND_B_NORMALIZE | TRUE | boolVal | Sets normalization, following Porter-Duff model (background pixels premultiplied by their corresponding alphas before blending).
VL_MGV_KEYER_MODE | Persistent | intVal | Selects “master” keyer control that determines the type of keying performed (luma, chroma, or spatial).
VL_MGV_KEYER_DETAIL | Persistent | intVal | Sets sharpness of transition between foreground and background allowing blurring of edges. The value -8 yields the most gradual transition, +7 the sharpest.
VL_MGV_KEYER_FG_OPACITY | Persistent | intVal | Sets opacity of the foreground, thus limiting the value of foreground alpha at any point.
VL_MGV_KEYER_VALUE_LUMA | Persistent | intVal | Sets central luma value. This control sets the luma value at which the background shows through the foreground.
VL_MGV_KEYER_RANGE _LUMA | Persistent | intVal | Sets one-sided range of the center value. This control determines the range of luma values where the background shows through the foreground.
VL_MGV_KEYER_VALUE _CHROMA_U | Persistent | intVal | Sets central U value at which the background shows through the foreground.
VL_MGV_KEYER_RANGE _CHROMA_U | Persistent | intVal | Sets one-sided range of U where the background shows through the foreground.
VL_MGV_KEYER_VALUE _CHROMA_V | Persistent | intVal | Sets central V value at which the background shows through the foreground.
VL_MGV_KEYER_RANGE _CHROMA_V | Persistent | intVal | Sets one-sided range of V where the background shows through the foreground.
VL_MGV_WIPE_SYMMETRY | FALSE | intVal | Sets wipe symmetry (on or off) so that wipe proceeds in both directions at once from the center line. Effect depends on type of wipe: no effect for fades or tiling; enables VL_MGV_WIPE_CENT for single, double, and corner wipes; enables VL_MGV_WIPE_CENT_PERP control for double and corner wipes.
VL_MGV_WIPE_INVERT | FALSE | intVal | Reverses foreground and background regions of a wipe. When set to 0, wipes proceed from foreground (position = minimum) to background (position = maximum). When set to 1, wipes proceed from background (position = minimum) to foreground (position = maximum). This value is buffered (does not go into effect) until another blending control is set.
VL_MGV_WIPE | Persistent | intVal | Sets autowiper on.
VL_MGV_WIPE_TYPE | Persistent | intVal | Selects type of blending (wipe) performed.
VL_MGV_WIPE_ANGLE VL_MGV_WIPE_DIRECTION | Persistent | intVal | Sets wipe vector direction, that is, the direction in which the wipe appears to be proceeding as its position increases. Note that VL_MGV_WIPEANGLE_N and VL_MGV_WIPEANGLE_S do not work for the wipe types VL_MGV_WIPETYPE_DOUBLE and VL_MGV_WIPETYPE_CORNER.
VL_MGV_WIPE_SHARPNESS | Persistent | intVal | Sets sharpness of wipe transition band. As for VL_MGV_KEYER_DETAIL, -8 is most gradual, +7 is sharpest.
VL_MGV_WIPE_FUZZ | Persistent | intVal | Same as VL_MGV_WIPE_SHARPNESS.
VL_MGV_WIPE_SPEED | Persistent | intVal | Sets speed at which the autowiper sweeps the wipe. The value is the speed of the wipe in units of number of fields for each wipe position change.
VL_MGV_WIPE_POSN | Persistent | fractVal | Sets amount of progress of wipe, from none (numerator = 0) to full (numerator = 1000).
VL_MGV_WIPE_POSN_PERP | Persistent | fractVal | Sets amount of progress of wipe, from none (numerator = 0) to full (numerator = 1000), along a direction perpendicular to normal wipe position VL_MGV_WIPE_POSN.
VL_MGV_WIPE_CENT | Persistent | intVal | Sets offset that is center of a symmetrical wipe along wipe position. 0 means center is where VL_MGV_WIPE_POSN is 0, and 1000 means center is where VL_MGV_WIPE_POSN is 1000. For this control to work for single, double, and corner wipes, VL_MGV_WIPE_SYMMETRY must be on.
VL_MGV_WIPE_CENT_PERP | Persistent | intVal | Sets offset that is center of a symmetrical wipe along a perpendicular wipe position. 0 means center is where VL_WIPE_POSN_PERP is 0, and 1000 means center is where VL_WIPE_POSN_PERP is 1000. VL_WIPE_SYMMETRY must be on for this control to work for double and corner wipes.
VL_MGV_WIPE_REPT | Persistent | intVal | Sets number of repetitions of pattern in direction of wipe, usually louvers on single, corner, or double wipe, and length of one side of rectangles for a tile wipe. This control does not apply to fades.
VL_MGV_WIPE_REPT_PERP | Persistent | intVal | Sets number of repetitions perpendicular to wipe direction for single, double, and corner wipes, and length of other side of rectangles for tile wipe.
VL_MGV_WIPE_EXT_TRIG | FALSE | boolVal | If set to TRUE, causes the trigger to initiate an automatic wipe (autowipe).
VL_MGV_WIPE_SPEED | 10 | intVal | Sets duration of an autowipe in tenths of a second.
VL_MGV_BLEND_B_FLAT | Persistent | intVal | Sets flat-background generator on, so that background pixel source is used for pixel timing only and live video from pixel source B goes to the blender.
VL_MGV_BLEND_B_Y | Persistent | intVal | Sets value of background Y.
VL_MGV_BLEND_B_U | Persistent | intVal | Sets value of background U.
VL_MGV_BLEND_B_V | Persistent | intVal | Sets value of background V.
VL_MGV_BLEND_SHADOW_ON | Persistent | boolVal | Activates shadow hardware. See “Adding Shadows” in Chapter 7 for information.
VL_MGV_BLEND_SHADOW _GAIN | Persistent | intVal | Sets value shift for shadow.
VL_MGV_BLEND_SHADOW _OFFSET | Persistent | intVal | Adds to shadow value. Note that darkening a very light shadow can result in noise.
VL_MGV_BLEND_H_FILT | Persistent | boolVal | Sets horizontal smoothing filter that filters pixel information before the alpha extraction and smooths the alpha output of the key generator.

## VL_CSC

The color-space converter (CSC) node controls the optional hardware color-space converter hardware. The CSC hardware can perform many image-processing operations on a video path, allowing VL control over the conversion process.

The CSC hardware can be used in two ways: standard conversions, or nonstandard conversions with fine control over the color-space hardware. In many cases, the standard conversions are sufficient. For example, the standard controls can set up a conversion from YCrCbA (CCIR range) to RGBA in a few calls.

For application developers who wish to use VL_CSC as an image processing device capable of posterization, solarization, or color correction, or for nonstandard conversions, nonstandard control commands are provided. To use these controls, you must understand how the hardware works and how color-space conversion is performed. See Appendix D, “Indigo2 IMPACT Video Color-Space Conversions.”

Chapter 8, “Using Optional Color-Space Conversion,” provides information on using this node. For the color-space conversion node VL_CSC:

- type is VL_INTERNAL

- kind is VL_CSC

- number is VL_MGV_NODE_NUMBER_CSC

See Chapter 8 for video formats, ports, ranges, and packings for VL_CSC.

Table C-3 summarizes controls for standard color-space conversion. Access for all controls is GS.

Table C-3. Controls for Standard Color-Space Conversion

Control | Default | Type | Use
--- | --- | --- | ---
VL_MGV_CSC_IN_PACKING VL_MGV_CSC_OUT_PACKING | VL_PACKING_YVYU _422_10 | intVal | Sets the packing for the color-space converter node's input or output, respectively.
VL_MGV_CSC_IN_RANGE VL_MGV_CSC_OUT_RANGE | VL_FORMAT_DIGITAL _COMPONENT_SERIAL | intVal | Sets the input range (RP-175, CCIR, or full) associated with the input or output video, respectively.
VL_MGV_CSC_CONST_HUE | TRUE | boolVal | Enables or disables constant-hue algorithm.
VL_MGV_CSC_ALPHA _CORRECTION | FALSE | boolVal | When VL_MGV_CSC_CONST_HUE is enabled, this control saves the constant hue correction factor (TRUE) or retains alpha input data (FALSE).

Table C-4 summarizes image-processing (nonstandard) controls. Access for all these controls is GST.

Table C-4. Image-Processing Controls

Control | Default | Type | Use
--- | --- | --- | ---
VL_MGV_CSC_COEF | Multiplier operates in pass-through mode | extendedVal; data type MGV_CSC_COEF | Specifies the matrix multiplier coefficients
VL_MGV_CSC_LUT_IN_PAGE VL_MGV_CSC_LUT_ALPHA_PAGE | 0 | intVal | Selects the active LUT
VL_MGV_CSC_LUT_IN_YG VL_MGV_CSC_LUT_IN_UB VL_MGV_CSC_LUT_IN_VR VL_MGV_CSC_LUT_ALPHA | Pass-through (1:1 mapping) | extendedVal; data type MGV_CSC_LUT_INPUT _AND_ALPHA | Specifies the contents of the input or alpha lookup tables
VL_MGV_CSC_LUT_OUT_YG VL_MGV_CSC_LUT_OUT_UB VL_MGV_CSC_LUT_OUT_VR | Pass-through (1:1 mapping) | extendedVal data type MGV_CSC_LUT_OUTPUT | Specifies the contents of the output lookup tables

## VL_FB

The framebuffer node provides a mechanism for freezing a video stream. This node is most useful when it is used with the video source nodes, which lack freeze capability. It is also suitable when a snapshot of a video stream is required and the application cannot freeze the input because the live feed is used elsewhere.

Note that the memory and screen source nodes have inherent freeze capability. For the framebuffer node:

- type is VL_INTERNAL

- kind is VL_FB

- number is VL_MGV_NODE_NUMBER_FB

- ports are

  - VL_IMPACT_PORT_PIXEL_SRC_A, 8-bit single-link output

  - VL_IMPACT_PORT_PIXEL_DRN_A, 8-bit single-link input

The framebuffer node imposes a one-frame delay on the video stream.

The framebuffer element is shared between this node and the CC1 memory source node. Consequently, only one of the two can be in use at a time. Attempts to set up both on a path with stream usage VL_SHARE or VL_LOCK result in the first path being preempted. If the framebuffer node and the CC1 memory source node are set up on the same path, an error is returned.

The framebuffer node is internal to the crosspoint mux. Consequently, to avoid consuming the (scarce) VBAR-crosspoint connectors, ensure that its use is required in the path. For example, this node is usually not needed to freeze the video output, since the video drain nodes have freeze capability.

The default control for this node is VL_FREEZE. If set to TRUE, this control freezes the video stream passing through the framebuffer. If set to FALSE, live video resumes. For this control, the default is FALSE, type is boolVal, access is GST.

## VL_MEM

This discussion divides the VL_MEM nodes into their manifestations as source and drain.

### VL_MEM Source

Indigo2 IMPACT Video supports four memory source nodes: VGI1 1,
VGI1 2, VGI1 DL, and CC1. The VGI1 memory sources provide real-time single- and dual-link paths from main memory to Indigo2 IMPACT Video. For the memory source node:

- type for all four memory source nodes is VL_SRC

- kind for all four memory source nodes is VL_MEM

- number is VL_MGV_NODE_NUMBER_VGI_1, VL_MGV_NODE_NUMBER__VGI_2, and VL_MGV_NODE_NUMBER__VGI_DL, and VL_MGV_NODE_NUMBER__CC, respectively

- ports are

  - memory source nodes VGI1 1 and VGI1 2: VL_PORT_PIXEL_SRC_A: single-link 8- or 10-bit video stream capable of real-time operation

  - dual-link video source node: VL_PORT_DUALLINK_SRC_A: dual-link 8- or 10-bit video stream capable of real-time operation

  - memory source node CC1:
    VL_PORT_PIXEL_SRC_A: single-link 8-bit video stream, no 10-bit support, does not guarantee real-time operation, but has attached framebuffer

    The CC1 node is used mostly to support alpha for the blender. If the blender uses an image from this framebuffer, the Y value is interpreted as alpha and the blender uses it accurately. Data in this buffer allows you to put a nonrectangular shape (for example, a heart or an irregularly shaped logo) as a matte around an image.

    The CC1 memory source node is also useful for slide shows or other static-image situations in which video input changes only every 10 or 20 seconds and real-time performance is not critical. Because the CC1 node has its own framebuffer, there is no CPU overhead.

Table C-5 lists memory source node controls. For all these controls, access is GS.

Table C-5. Memory Source Node Controls

Control | Default | Type | Use
--- | --- | --- | ---
VL_CAP_TYPE | CAP_TYPE _INTERLEAVED | intVal | Specifies the type of video units—fields or frames—that the application obtains from the ring buffer. Valid capture types are VL_CAPTURE_NONINTERLEAVED, VL_CAPTURE_INTERLEAVED, VL_CAPTURE_EVEN_FIELDS, VL_CAPTURE_ODD_FIELDS, and VL_CAPTURE_FIELDS. See “Using VL_CAP_TYPE and VL_RATE” in Chapter 2 for information on capture types.
VL_FORMAT | VL_FORMAT_DIGITAL _COMPONENT_SERIAL | intVal | Specifies the type of video format to be produced. See “Using VL_FORMAT” in Chapter 2 for formats and explanations.
VL_PACKING | Single link: VL_PACKING_YVYU _422_8 Dual link: VL_PACKING_YUVA _4444_8 | intVal | Specifies the bit order in which the video components are stored in memory. The native packings supported by VL_MGV_NODE_NUMBER_VGI_[1,2] are VL_PACKING_YVYU_422_8 and VL_PACKING_YVYU_422_10. Supported non-native single link packings (implemented automatically in software) are VL_PACKING_Y_8_P, VL_PACKING_RGB_332_P, and VL_PACKING_RGB_8. The native packings supported by VL_MGV_NODE_NUMBER_VGI_DL are VL_PACKING_YUVA_4444_8, VL_PACKING_YUVA_4444_10, VL_PACKING_AUYV_4444_8, VL_PACKING_AUYV_4444_10, VL_PACKING_RGBA_8, VL_PACKING_RGBA_10, VL_PACKING_ABGR_8, VL_PACKING_ABGR_10, and VL_PACKING_AYU_AYV_10. See “Using VL_PACKING” in Chapter 2 for the specifications of each packing.
VL_OFFSET | (0,0) | xyVal | Specifies the upper left corner of a video region to be output. The coordinates are offsets of the upper left corner of the active video and take precedence over the size. Therefore, in order to accommodate the given offset, the size may be changed. A VLControlChanged event is generated to inform interested parties of any change in size.
VL_RATE | Dynamic; depends on timing and capture type | fractVal | Specifies the rate at which the hardware extracts video units (fields or frames, depending on the capture type) from the ring buffer. The video unit is repeated, or black is output, to achieve the video output rate of 60 fields per second (NTSC) or 50 fields per second (PAL). The VGI1 memory source nodes can consume video units from system memory at any rate up to the video standard rate. For VL_CAPTURE_NONINTERLEAVED and VL_CAPTURE FIELDS, valid ranges are as follows: NTSC: 1 through 60 units per second (must be multiple of fields per frame for noninterleaved) PAL: 1 through 50 units per second (must be multiple of fields per frame for noninterleaved) For VL_CAPTURE_INTERLEAVED, VL_CAPTURE_EVEN_FIELDS, or VL_CAPTURE_ODD_FIELDS, valid ranges are 1 through 30 units per second for NTSC and 1 through 25 units per second for PAL.
VL_SIZE | Dynamic; depends on timing and capture type | xyVal | Specifies the width (pixels) and height (lines) of the video data contained within each ring buffer entry. These values, along with VL_PACKING, determine the size in bytes of each ring buffer entry and thus the transfer size. The width must be a multiple of four pixels. The length must be a minimum of one line for field capture types and two lines for frames. The specified size is constrained by the maximum allowable (as dictated by the device timing) and by the current offset position (VL_OFFSET). If the size is too large, it is reduced. The offset is not changed. It is recommended that VL_OFFSET be set before VL_SIZE.
VL_TIMING | Dynamic; from device node | intVal | Retrieves the current device-wide video timing value. See “VL_DEVICE” in this chapter for more details. Setting this control on any other node type has no effect.
VL_ZOOM | 1.0 | fractVal | Specifies the amount of scaling to be applied to the video before it is transferred to memory. The VGI1 memory source nodes have no scaling ability. The only legal value is 1.0.
VL_MGV _DOMINANCE _FIELD | VL_MGV_DOMINANCE _F1 | intVal | Sets the field dominance mode, which determines the order in which the fields are read from memory. This control applies only to the frame-oriented capture types (VL_CAPTURE_INTERLEAVED and VL_CAPTURE_NONINTERLEAVED). For VL_CAPTURE_INTERLEAVED, values are as follows: VL_MGV_DOMINANCE_F1: For video timings VL_TIMING_525_CCIR601 and VL_TIMING_525_SQ_PIX, F1 (also known as odd) dominance dictates that data for the F1 field resides in memory after that for F2. For VL_TIMING_625_CCIR601 and VL_TIMING_625_SQ_PIX, the data for F1 resides in memory before that of F2. VL_MGV_DOMINANCE_F2: For VL_TIMING_525_CCIR601 and VL_TIMING_525_SQ_PIX, F2 (also known as even timings), dominance dictates that data for the F1 field resides in memory before that for F2. For VL_TIMING_625_CCIR601 and VL_TIMING_625_SQ_PIX, the data for F1 resides in memory after that of F2. The meaning of before and after depends on the capture type. For interleaved frames, before indicates that the data that compose the first line of the designated field begins at the first byte of the buffer. In this format, the lines of F1 and F2 are interleaved within the one ring buffer; thus the second line of the buffer belongs to the other field, and so forth. For noninterleaved frames, before indicates that the dominant field is in a buffer preceding the buffer(s) containing nondominant fields. For VL_CAPTURE_NONINTERLEAVED, values are as follows: VL_MGV_DOMINANCE_F1: The F1 field is in the first buffer of the pair, and the F2 field in the second. VL_MGV_DOMINANCE_F2: The F2 field is in the first buffer of the pair, the F1 field in the second.
VL_MGV_BUFFER _QUANTUM | 1 | intVal | The granularity, or quantum, of data transfer required by the application. The video data is padded at the end so that the size of a field/frame is a multiple of VL_MGV_BUFFER_QUANTUM. This control is intended for applications that do I/O directly from the ring buffer, and may consequently require the frame or field size to be a multiple of the device block size. Direct I/O, for example, usually requires that 512 bytes of data be transferred at a time.
VL_MGV_DMA _ERROR_RESTART | VL_MGV_DMA_RESTART _ON | intVal | If enabled (VL_MGV_DMA_RESTART_ON), a video transfer continues when an error is encountered. Otherwise (VL_MGV_DMA_RESTART_OFF), the video transfer is aborted. This control covers three types of errors: The reference video timing is not clean, resulting in short/long lines, fields, or both. These errors are with respect to the programmed size and offset. The system GIO bus bandwidth was insufficient to transfer video from system memory at video rates. The video clock was interrupted.
VL_MGV_DMA _VOUT_EXPAND | VL_MGV_DMA_EXPD _OFF | intVal | Specifies whether or not 8-bit data read from memory is expanded to 10-bit data before being output by the DMA channel to the VBAR mux. If enabled (VL_MGV_DMA_EXPD_ON), then zeroes are inserted into the least significant two bits; otherwise (VL_MGV_DMA_EXPD_OFF), all 10 bits are output unmodified.
VL_MGV_DMA _VOUT _STARVATION | VL_MGV_DMA_VO _STARV_RPT | intVal | Sets the video output policy to use when the memory node underflows the ring buffer (that is, the application has not filled the ring buffer at the rate that the memory node consumes it). An application can choose between two starvation policies. In each case, video output from system memory resumes when the application places the next field/frame in the ring buffer via `vlPutValid()`. VL_MGV_DMA_VO_STARV_BLK: Outputs black fields or frames. This choice does not involve further access to memory until a new buffer becomes available. VL_MGV_DMA_VO_STARV_FLD: Causes the last field output to be repeated. VL_MGV_DMA_VO_STARV_RPT: Repeats the last unit (field or frame) that was transferred from main memory. The repetition is performed by continuing to transfer the same field/frame from memory to video until a new buffer becomes available or the transfer is ended. This results in system bus bandwidth continuing to be consumed. Caution: In order to maintain compatibility with the behavior of the CC1 memory source node as well as the earlier Galileo Video™ products, where a framebuffer is incorporated, the default value for this control is VL_MGV_DMA_VO_STARV_RPT. Therefore the ring buffer used in the transfer must contain a minimum of two buffer entries (four for VL_CAPTURE_NONINTERLEAVED), so that one buffer can be repeated by the system while the application is filling the second. If only one buffer is used, then the first buffer output is repeated indefinitely and `vlGetNextFree()` never returns a free buffer.

### VL_MEM Drain

Indigo2 IMPACT Video supports three memory drain nodes: VGI1 1, VGI1 2, and VGI1 DL. The VGI1 memory drains provide real-time single- and dual-link paths from the Indigo2 IMPACT Video device to ring buffers. For the memory drain:

- type for all three memory drain nodes is VL_DRN

- kind for all three memory drain nodes is VL_MEM

- number is VL_MGV_NODE_NUMBER_VGI1_1, VL_MGV_NODE_NUMBER__VGI1_2, and VL_MGV_NODE_NUMBER__VGI1_DL, respectively

- ports are as follows:

  - memory drain nodes VGI1 1 and VGI 2: VL_PORT_PIXEL_DRN_A: single-link source for 8- or 10-bit video stream capable of real-time operation

  - dual-link video drain node: VL_PORT_DUALLINK_DRN_A: dual-link source for 8- or 10-bit video stream capable of real-time operation

With the VL_MGV_DMA_VIN_ROUND control enabled, the components of the 10-bit video signal applied to the VGI1 memory drain are rounded to 8 bits; otherwise all 10 bits are passed through and written to memory.

With rounding disabled, setting an 8-bit packing while capturing 10-bit data truncates the data to 8 bits.

Figure C-1 shows the bit relationships for the CCIR 601 8- and 10-bit video format components

Figure C-1. Rounding for Memory Drain

When rounding is enabled, 10-bit data is converted to 8-bit data depending on the rounding type and the randomized rounding mode. In simple rounding, if bit 1 is set, then the value is rounded up (one is added to bit 2), otherwise it is rounded down.

Randomized rounding involves using a 22-bit shift register to generate two pseudo-random bits to be added to bits 1 and 0 of the 10-bit component, which may or may not result in a carry to bit 2.

The behavior of the shift register is dictated by the randomized rounding mode. With repeated randomized rounding, the shift register is initialized to the same value at the start of each odd (F1) field. Thus, the same pseudo-random sequence will be used for each frame. However, in free-wheel mode, the shift register is never reset and the sequence becomes totally random. The shift register is guaranteed never to become stuck at zero.

Rounding occurs only on active lines and during the digital active line between, and not including, SAV and EAV. The digital blanking data is not modified.

Table C-6 lists memory drain node controls. For all these controls, access is GS.

Table C-6. Memory Drain Node Controls

Control | Default | Type | Use
--- | --- | --- | ---
VL_CAP_TYPE | CAP_TYPE_ INTERLEAVED | intVal | Specifies the type of video units—fields or frames—that the application obtains from the ring buffer by the application. Valid capture types are VL_CAPTURE_NONINTERLEAVED, VL_CAPTURE_INTERLEAVED, VL_CAPTURE_EVEN_FIELDS, VL_CAPTURE_ODD_FIELDS, and VL_CAPTURE_FIELDS. (See “Using VL_CAP_TYPE and VL_RATE” in Chapter 2 for information on capture types.)
VL_FORMAT | Dynamic | intVal | Specifies the type of video format to be produced. (See “Using VL_FORMAT” in Chapter 2 for formats and explanations.)
VL_PACKING | Single link: VL_PACKING_YVYU _422_8 Dual link: VL_PACKING_YUVA _4444_8 | intVal | Specifies the bit order in which the video components are stored in memory. The native packings supported by VL_MGV_NODE_NUMBER_VGI_[1,2] are VL_PACKING_YVYU_422_8 and VL_PACKING_YVYU_422_10. Supported non-native single link packings (implemented automatically in software) are VL_PACKING_Y_8_P, VL_PACKING_RGB_332_P, and VL_PACKING_RGB_8. The native packings supported by VL_MGV_NODE_NUMBER_VGI_DL are VL_PACKING_YUVA_4444_8, VL_PACKING_YUVA_4444_10, VL_PACKING_AUYV_4444_8, VL_PACKING_AUYV_4444_10, VL_PACKING_RGBA_8, VL_PACKING_RGBA_10, VL_PACKING_ABGR_8, VL_PACKING_ABGR_10, and VL_PACKING_AYU_AYV_10. See “Using VL_PACKING” in Chapter 2 for the specifications of each packing.
VL_OFFSET | (0,0) | xyVal | Specifies the upper left corner of a video region to be output. The coordinates are offsets of the upper left corner of the active video and take precedence over the size. Therefore, in order to accommodate the given offset, the size may be changed. A VLControlChanged event is generated to inform interested parties of any change in size.
VL_RATE | Dynamic; depends on timing and capture type | fractVal | Specifies the rate at which video units (fields or frames depending on capture type) are extracted from the ring buffer. The video unit is repeated, or black is output, to achieve the video output rate of 60 fields per second (NTSC) or 50 fields per second (PAL). The VGI1 memory source nodes can consume video units from system memory at any rate up to the video standard rate. For VL_CAPTURE_NONINTERLEAVED and VL_CAPTURE FIELDS, valid rates are as follows: NTSC: 1 through 60 units per second (must be multiple of fields per frame for noninterleaved) PAL: 1 through 50 units per second (must be multiple of fields per frame for noninterleaved) For VL_CAPTURE_INTERLEAVED, VL_CAPTURE_EVEN_FIELDS, or VL_CAPTURE_ODD_FIELDS, valid ranges are 1 through 30 units per second for NTSC and 1 through 25 units per second for PAL.
VL_SIZE | Dynamic; depends on timing and capture type | xyVal | Specifies the width (pixels) and height (lines) of the video data contained within each ring buffer entry which—along with VL_PACKING—determines the size in bytes of each ring buffer entry and thus the transfer size. The width must be a multiple of four pixels. The length must be a minimum of one line for field capture types, and two lines for frames. The specified size is constrained by both the maximum allowable (as dictated by the device timing and capture type) as well as the current offset position (VL_OFFSET). If the size is too large, it is reduced. The offset is not changed. It is recommended that VL_OFFSET be set before VL_SIZE.
VL_TIMING | Dynamic; from device node | intVal | Retrieves the current device-wide video timing value. See “VL_DEVICE” in this chapter for more details. Setting this control on any other node type has no effect.
VL_ZOOM | 1.0 | fractVal | Specifies the amount of scaling to be applied to the video before it is transferred to memory. The VGI1 memory drain nodes have no scaling ability. The only legal value is 1.0.
VL_MGV_BUFFER _QUANTUM | 1 | intVal | The granularity, or quantum, of data transfer required by the application. The video data is padded at the end so that the size of a field/frame is a multiple of VL_MGV_BUFFER_QUANTUM. This control is intended for applications that do I/O directly from the ring buffer, and may consequently require the frame or field size to be a multiple of the device block size. Direct I/O, for example, usually requires that 512 bytes of data be transferred at a time.
VL_MGV _DOMINANCE _FIELD | VL_MGV_DOMINANCE _F1 | intVal | Sets the field dominance mode, determining the order in which the fields are read from memory. This control applies only to the frame-oriented capture types (VL_CAPTURE_INTERLEAVED and VL_CAPTURE_NONINTERLEAVED). See the discussion of VL_MGV_DOMINANCE_FIELD in Table C-5 earlier in this appendix for more details.
VL_MGV_DMA _ERROR_RESTART | VL_MGV_DMA _ERROR_RESTART_OFF | intVal | If enabled (VL_MGV_DMA_RESTART_ON), a video transfer continues when an error is encountered. Otherwise (VL_MGV_DMA_RESTART_OFF), the video transfer is aborted. This control covers three types of errors: The reference video timing is not clean, resulting in short/long lines, fields, or both. These errors are with respect to the programmed size and offset. The system GIO bus bandwidth was insufficient to transfer video from system memory at video rates. The video clock was interrupted.
VL_MGV_DMA _ROUND_TYPE | VL_MGV_DMA_RND _SMPLE | intVal | Specifies type of rounding algorithm to be used. The simple rounding method (VL_MGV_DMA_RND_SMPLE) rounds up if bit 1 is one or rounds down if bit 1 is zero. The randomized rounding method (VL_MGV_DMA_RND_RAND) makes the decision whether or not to round up based on comparing the two least-significant bits to a random sequence.
VL_MGV_DMA _RAND_ROUND _MODE | VL_MGV_DMA _RND_RAND _RPT | intVal | Determines whether or not the random sequence used for randomized rounding is repeated. If the sequence is to be repeated (VL_MGV_DMA_RND_RAND_RPT), then a shift register is seeded to a fixed value at the start of each odd field. Otherwise, the shift register free-wheels.
VL_MGV_DMA _VIN_ROUND | VL_MGV_DMA_RND_OFF | intVal | Enables (VL_MGV_DMA_RND_ON) or disables (VL_MGV_DMA_RND_OFF) rounding of 10-bit video data to 8 bits per component. Only the active area data is rounded.

## VL_SCREEN

This discussion divides the VL_SCREEN nodes into their manifestations as source and drain.

### VL_SCREEN Source

Indigo2 IMPACT Video supports two screen source nodes: A and B.

The screen source nodes provide a means of using the graphics screen as a source of video data. Both pixel and alpha information can be extracted from the screen source area (although note that the alpha data can be sent only to the blender node's alpha inputs). For screen nodes:

- type for both screen drain nodes is VL_SRC

- kind for both screen drain nodes is VL_SCREEN

- number is VL_MGV_NODE_NUMBER_SCREEN_A andVL_MGV_NODE_NUMBER_SCREEN_B, respectively

- ports are as follows:

  - VL_IMPACT_PORT_ALPHA_SRC_[A,B], single-link 8-bit CCIR pixel stream derived from a graphics window's alpha contents

  - VL_IMPACT_PORT_PIXEL_SRC_[A,B], single-link 8-bit CCIR pixel stream derived from a graphics window's pixel contents

Certain constraints apply to window positioning. If an application attempts to place the window in an illegal location, the node attempts to place the window at a valid location. The size of the window can also be changed. If either the position or size is changed, the application is notified by a VLValueChanged event. If the window cannot be placed anywhere on the screen, `vlSetControl()` returns VLBadValue.

Make sure your application meets these constraints:

- Windows A and B must not overlap vertically.

- The vertical distance between windows A and B must be greater than 12 pixels.

Table C-7 lists screen source node controls. For all these controls, access is GST.

Table C-7. Screen Source Node Controls

Control | Default | Type | Use
--- | --- | --- | ---
VL_FREEZE | FALSE | boolVal | When set to TRUE, this control freezes the contents of the screen drain. Updates to the graphics framebuffer continue to be displayed on the graphics display but are not reflected on the video output. If set to FALSE, live output resumes.
VL_OFFSET | (0, 0) | xyVal | Specifies the upper left corner of a subregion of the graphics area used to produce the video output. The offset is relative to VL_ORIGIN. See also VL_SIZE, which defines the size of the subregion.
VL_ORIGIN | (0, 0) | xyVal | Specifies the upper left corner of a frame-size graphics area used to produce the video. The origin is specified in X Window root-window coordinates. VL_OFFSET and VL_SIZE can be used to specify a subregion of this area.
VL_SIZE | CCIR 601 525: 720x486 CCIR 601 625: 768x576 NTSC: 640x486 PAL: 768x576 | xyVal | Specifies the size of a subregion of the graphics area used to produce the video output. See also VL_OFFSET, which specifies the location of the subregion, and VL_ORIGIN, which maps a graphics window area to a frame. This control is applied before VL_ZOOM.
VL_ZOOM | 1.0 | fractVal | Sets the amount of zoom that is applied to the graphics area before it is converted to video. Valid values are 1 and 1/2. Note: The 1/2 zoom value selects full-screen video output and should be used only when the Indigo2 IMPACT Video device is operating on square-pixel timing (used with the Indigo2 IMPACT Compression option only).
VL_MGV_ DEINTERLAC E | TRUE | boolVal | Specifies how the video fields are generated from the frame-size graphics area with origin VL_ORIGIN. If this control is set to TRUE, a video field line is produced by averaging the corresponding graphics frame lines. If set to FALSE, the corresponding graphics line is selected depending on the field dominance and is output verbatim.

### VL_SCREEN Drain

Indigo2 IMPACT Video supports three screen drain nodes: A, B, and C.

The screen drain nodes provide a means of displaying video data in a graphics window. The Indigo2 IMPACT Video device displays the video over a specified window, obscuring any graphics contents that may have been there. Note that the Indigo2 IMPACT Video device does not place the video data into the framebuffer, but instead injects data directly into the raster. Consequently, an `lrectwrite()` operation returns the contents that were drawn into the window, not the video data. For the screen drain:

- type for all three screen drain nodes is VL_DRN

- kind for all three screen drain nodes is VL_SCREEN

- number is VL_MGV_NODE_NUMBER_SCREEN_A, VL_MGV_NODE_NUMBER_SCREEN_B, and VL_MGV_NODE_NUMBER_SCREEN_C, respectively

- port is VL_IMPACT_PORT_PIXEL_DRN_[A,B,C], single-link 8-bit drain of CCIR-601 range video for display in a graphics window

To display live video using the graphics framebuffer, video frames should be captured using one of the VGI1 memory drain nodes, and then drawn using GL or OpenGL functions.

Screen drains B and C share the same physical framebuffer. When only drain B is used, the framebuffer is 24 bits deep. When drains B and C are used, or when only C is used, the framebuffer is split into two 12-bit logical framebuffers.

A 12- to 24-bit dithering is applied to produce the output of each window. While windows B and C can accept data from different sources, the following controls affect both nodes when applied to either:

- VL_SIZE

- VL_ZOOM

- VL_FREEZE

Window positioning has certain constraints. If an application attempts to place the window in an illegal location, the node attempts to place the window at a valid location. The size of the window can also be changed. If either the position or size is changed, the application is notified by a VLValueChanged event. If the window cannot be placed anywhere on the screen, `vlSetControl()` returns VLBadValue.

Make sure your application meets these constraints:

- Window A must not overlap B or C vertically, although it can overlap them horizontally.

- Windows B and C must not overlap horizontally, although they can overlap vertically.

- Window C must be to the right of window B by at least 45 pixels.

- The top of window C must be level with or below window B.

- The bottom of window B must be level with or higher than the bottom of window C.

- The vertical distance between window A and window B or C must be greater than 12 pixels.

Table C-8 lists screen drain node controls. For all these controls, access is GST, except VL_MGV_DEINTERLACE and VL_WINDOW, which are GS.

Table C-8. Screen Drain Node Controls

Control | Default | Type | Use
--- | --- | --- | ---
VL_FREEZE | FALSE | boolVal | If set to TRUE, this control freezes the contents of the screen drain. If set to FALSE, live video display resumes.
VL_OFFSET | (0, 0) | xyVal | Specifies the upper left corner of a subregion of the video frame to be displayed. See also VL_SIZE, which specifies the size of the subregion. When used with VL_ZOOM, VL_OFFSET is applied after VL_ZOOM.
VL_ORIGIN | (0, 0) | xyVal | Specifies the location on the screen where the video is displayed. The window coordinates are X-Server window coordinates.
VL_SIZE | CCIR 601 525: 720 x 486 CCIR 601 625: 768 x 576 NTSC: 640 x 486 PAL: 768 x 576 | xyVal | Specifies the size of a subregion of the video frame to be displayed. See also VL_OFFSET, which specifies the location of the subregion. When used with VL_ZOOM, VL_SIZE is applied after VL_ZOOM.
VL_WINDOW | None | intVal | Specifies the window in which the video is displayed. The value set is the X Server window ID, as returned by `XtWindow()`, for example. The window ID cannot be changed while a screen drain is transferring.
VL_ZOOM | 1.0 | fractVal | Sets the amount of zoom applied to the video data before it is displayed. Valid values are 7/1, 6/1, 5/1, 4/1, 3/1, 2/1, 1/1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, and 1/8. Zoom is applied before offset (pan) and size.
VL_MGV_ALPHA _NOT_PIXEL | TRUE | boolVal | Specifies whether the screen drain should take pixel or alpha data from the source node. The preferred mechanism for specifying this information is to use `vlSetConnection()`; this function overrides the value of this control. If VL_MGV_ALPHA_NOT_PIXEL is set to TRUE, the screen drain takes input from the source's alpha port. Otherwise, it takes input from the source's pixel port. If the source node has no alpha port, then the pixel port is used.
VL_MGV _DEINTERLACE | FALSE | boolVal | Sets deinterlacing method. Converting video (which is interlaced) to graphics (which is progressive scan) requires deinterlacing the image: that is, replacing the missing lines with something. Two types of deinterlace methods are available: replacing the missing lines with black lines (the simplest method) or interpolating missing lines by simple filtering of adjacent lines. If set to TRUE, then the average of the adjacent lines is used to produce a full-brightness deinterlaced screen. If set to FALSE, then the lines contain black, producing a half-brightness window but with the same interlacing as video.

## VL_TEXTURE

The texture drain node enables you to use video as a graphics texture source. The texture drain node can automatically generate mipmaps for use by the texture engine.

The texture node has two forms:

- single-link: VL_TEXTURE__NODE_NUMBER_TEXTURE

- dual-link: VL_TEXTURE_NODE_NUMBER_TEXTURE_DL

Chapter 9 provides information on using this node. For the texture drain node:

- type is VL_TEXTURE

- kind is VL_DRN

- number is VL_MGV_NODE_NUMBER_TEXTURE or VL_MGV_NODE_NUMBER_TEXTURE_DL

For the texture drain node VL_TEXTURE__NODE_NUMBER_TEXTURE, ports are VL_IMPACT_PORT_PIXEL_DRN_A and VL_IMPACT_PORT_PIXEL_DRN_B, which are single-link pixel drains feeding the graphics texture engine.

For the texture drain node VL_TEXTURE__NODE_NUMBER_TEXTURE_DL, ports are

- VL_IMPACT_PORT_DUALLINK_DRN_A: dual-link pixel drain feeding the graphics texture engine

- VL_IMPACT_PORT_PIXEL_DRN_A: single-link pixel drain feeding the graphics texture engine

- VL_IMPACT_PORT_ALPHA_DRN_A: single-link alpha drain feeding the graphics texture engine

Table C-9 summarizes controls for texture mapping. Access for all controls is GST.

Table C-9. Controls for Video Texture Mapping

Control | Default | Type | Use
--- | --- | --- | ---
VL_CAP_TYPE | VL_CAPTURE_FIELDS | intVal | Specifies type of field to capture. Valid capture types are VL_CAPTURE_NONINTERLEAVED, VL_CAPTURE_EVEN_FIELDS, VL_CAPTURE_ODD_FIELDS, and VL_CAPTURE_FIELDS. Note that texture nodes do not use VL_CAPTURE_INTERLEAVED. See “Using VL_CAP_TYPE and VL_RATE” in Chapter 2 for information on capture types.
VL_OFFSET | (0, 0) | xyVal | Specifies upper left corner of a subregion of the active video region used to generate the texture. Offset is relative to the upper left corner of the active video region. The subregion is defined by VL_OFFSET and VL_SIZE.
VL_PACKING | Single-link: VL_PACKING_RGB_8 Dual-link: VL_PACKING_RGBA_8 | intVal | Specifies packing format for texture node. Valid values for single-link transfers are VL_PACKING_RGB_8 and VL_PACKING_RGBA_8. The only valid value for dual-link transfers is the default value
VL_RATE | NTSC: 60 fields/second PAL: 50 fields/second | fractVal | Specifies number of textures generated per second. This value is always equal to the maximum number of textures that can be generated per second based on the current value of VL_CAP_TYPE.
VL_SIZE | Dynamic | xyVal | Specifies size of subregion of active video region used to generate the texture. The location of the subregion is specified by VL_OFFSET.
VL_ZOOM | 1.0 | fractVal | Specifies scaling (for texture nodes, decimation only) applied to the video subregion used as a texture source. The video subregion is defined by VL_OFFSET and VL_SIZE. The scale factor along each axis of the subregion is a product of the zoom value and the aspect value for that axis.
VL_MGV_DOMINANCE _FIELD | VL_MGV _DOMINANCE_F1 | intVal | Specifies field dominance when VL_CAP_TYPE is VL_CAPTURE_NONINTERLEAVED. Valid values are VL_MGV_DOMINANCE_F1 and VL_MGV_DOMINANCE_F2.
VL_MGV_HASPECT | 1.0 | fractVal | Specifies scaling applied to the video subregion along the horizontal axis. The overall scale factor horizontally is the product of this value and the VL_ZOOM value.
VL_MGV_VASPECT | 1.0 | fractVal | Specifies scaling applied to the video subregion along the vertical axis. The overall scale factor vertically is the product of this value and the VL_ZOOM value.
VL_MGV_TEXTURE _ROUND_MODE | VL_MGV_TEXTURE _ROUND_8BIT | intVal | Specifies the type of rounding to use to convert from 10- to 8-bit input. Valid values are VL_MGV_TEXTURE_ROUND_8BIT, VL_MGV_TEXTURE_ROUND_RNG, and VL_MGV_TEXTURE_ROUND_RNGFRM.
VL_MGV_TEXTURE _MIPMAP_MODE | VL_MGV_TEXTURE _MIPMAP_OFF | intVal | Specifies whether mipmap mode is enabled or not. Valid values are VL_MGV_TEXTURE_MIPMAP_OFF and VL_MGV_TEXTURE_MIPMAP_ON.
VL_MGV_TEXTURE_INPUT _LINK | VL_MGV_TEXTURE _INPUT_LINK_A | intVal | Specifies which input link sends pixel data to the texture engine. This command is available only in single-link mode when autoswapping is off. Valid values are VL_MGV_TEXTURE_INPUT_LINK_A and VL_MGV_TEXTURE_INPUT_LINK_B.
VL_MGV_TEXTURE _AUTOSWAP | VL_MGV_TEXTURE _AUTOSWAP_OFF | intVal | Specifies whether to swap the input automatically to the texture engine. When autoswapping is enabled, the input to the texture engine alternates between the two texture drain ports after each capture into texture memory. If VL_CAP_TYPE is set to VL_CAPTURE_NONINTERLEAVED, swapping occurs after frame transfers. This control is available only in single-link mode. Valid values are VL_MGV_TEXTURE_AUTOSWAP_OFF and VL_MGV_TEXTURE_AUTOSWAP_ON.

## VL_VIDEO

This discussion divides the VL_VIDEO node into its manifestations as source and drain.

### VL_VIDEO Source

Indigo2 IMPACT Video supports three digital video source nodes: 1, 2, and dual-link.

The video source nodes correspond to two video input connectors available on the Indigo2 IMPACT Video device. These connectors can be used separately to feed CCIR-601 video to Indigo2 IMPACT Video, or as a dual link to supply RP-175 RGB or YUV 4:4:4:4 or 4:2:2:4 video. When used in dual-link mode, the connector labelled 1 is used for pixel input while the connector labelled 2 is used for alpha input.

The uses of the connectors in single- or dual-link modes are mutually exclusive. When either of the single-linked nodes are in use, the dual-linked node is unavailable. Similarly, if the dual-link node is in use, both single-linked nodes are considered to be in use. Mutual exclusion takes place when paths are set up with stream usage VL_SHARE or VL_LOCK. Mutual exclusion conditions are not applied to paths with stream usage VL_READ_ONLY. For the video source:

- type for all three screen drain nodes is VL_SRC

- kind for all three screen drain nodes is VL_VIDEO

- number is VL_MGV_NODE_NUMBER_VIDEO_1 VL_MGV_NODE_NUMBER_VIDEO_2, and VL_MGV_NODE_NUMBER_VIDEO_DL, respectively

- ports are as follows:

  - video source nodes 1 and 2: VL_IMPACT_PORT_PIXEL_SRC_A. single-link serial digital video input

  - dual-link video source node: VL_IMPACT_PORT_DUALLINK_SRC_A - RP-175 style RGB or YUV dual-link serial digital video

Table C-10 lists video source node controls. For all these controls, access is GST, except VL_FORMAT, which is GS.

Table C-10. Video Source Node Controls

Control | Default | Type | Use
--- | --- | --- | ---
VL_FREEZE | FALSE | boolVal | Freezes the input video stream. Because the Indigo2 IMPACT Video device does not support frozen inputs, this control can be set only to FALSE.
VL_FORMAT | VL_FORMAT_DIGITAL_ COMPONENT_SERIAL (single-link) VL_FORMAT_DIGITAL_ COMPONENT_DUAL_ SERIAL (dual-link) | intVal | Specifies the format of the incoming video. Valid values for the single-link nodes are VL_FORMAT_DIGITAL_COMPONENT_SERIAL and VL_FORMAT_RAW_DATA. Valid values for the dual-link node are VL_FORMAT_DIGITAL_COMPONENT_DUAL_SERIAL and VL_FORMAT_DIGITAL_COMPONENT_RGB_SERIAL. (See “Using VL_FORMAT” in Chapter 2 for format explanations.)
VL_OFFSET | (0, 0) | xyVal | Pans within the video. The Indigo2 IMPACT Video source nodes support an offset of (0, 0) only.
VL_SIZE | Dynamic | xyVal | Reports the width and height of the active video region. The values are fixed for each timing mode: CCIR 525: 720 x 486 CCIR 625: 720 x 576 NTSC square pixel: 640 x 486 PAL square pixel: 768 x 576 Square pixel modes are used with the Indigo2 IMPACT Compression option only. Timing is specified through the VL_TIMING control on the device node.
VL_MGV_INPUT _8BIT | FALSE | boolVal | Enables 10-bit to 8-bit truncating when 10-bit video input is supplied. Internally, Indigo2 IMPACT Video treats all video streams as 10-bit. As a result, when this control is set to TRUE, the lower two bits are forced to zero. If set to FALSE, the input stream passes unmodified. If the input video contains 8-bit data, then it is left-shifted two bits to produce a 10-bit value. The lower two bits contain zeros.

### VL_VIDEO Drain

Indigo2 IMPACT Video supports three digital video drain nodes: 0, 1, and 2.

The video drain nodes correspond to two video output connectors available on the Indigo2 IMPACT Video device. These connectors can be used separately to output CCIR-601 video from Indigo2 IMPACT Video, or as a dual link to output RP-175 RGB or YUV 4:4:4:4 or 4:2:2:4 video. When used in dual-link mode, the connector labelled 1 is used for pixel output while the connector labelled 2 is used for alpha output.

The uses of the connectors in single or dual-link modes are mutually exclusive. When either of the single-linked nodes are in use, the dual-linked node is unavailable. Similarly, if the dual-link node is in use, both single-linked nodes are considered to be in use. Mutual exclusion takes place when paths are set up with stream usage VL_SHARE or VL_LOCK. Mutual exclusion conditions are not applied to paths with stream usage VL_READ_ONLY. For the video drain:

- type for all three video drain nodes: VL_DRN

- kind for all three video drain nodes: VL_VIDEO

- number: VL_MGV_NODE_NUMBER_VIDEO_1 VL_MGV_NODE_NUMBER_VIDEO_2, and VL_MGV_NODE_NUMBER_VIDEO_DL, respectively

- ports:

  - video source nodes 1 and 2: VL_IMPACT_PORT_PIXEL_SRC_A: single-link serial digital video input

  - dual-link video source node: VL_IMPACT_PORT_DUALLINK_SRC_A: RP-175 style RGB or YUV dual-link serial digital video

Table C-11 lists video drain node controls. For all these controls, access is GST, except VL_FORMAT, which is GS.

Table C-11. Video Drain Node Controls

Control | Default | Type | Use
--- | --- | --- | ---
VL_FREEZE | FALSE | boolVal | If set to TRUE, the output of the drain node is frozen. For dual-link, both outputs are frozen simultaneously. Use the VL_MGV_OUTPUT_DL_SELECT_FREEZE control to freeze specific links of the dual-link nodes. Note that VL_MGV_OUTPUT_FSYNC must be set to TRUE in order for the video to freeze.
VL_FORMAT | VL_FORMAT_DIGITAL_ COMPONENT_SERIAL (single-link) VL_FORMAT_DIGITAL_ COMPONENT_DUAL_ SERIAL (dual-link) | intVal | Specifies the format of the incoming video. Valid values for the single-link nodes are VL_FORMAT_DIGITAL_COMPONENT_SERIAL and VL_FORMAT_RAW_DATA (arbitrary 8-bit data). Valid values for the dual-link node are VL_FORMAT_DIGITAL_COMPONENT_DUAL_SERIAL and VL_FORMAT_DIGITAL_COMPONENT_RGB_SERIAL.
VL_OFFSET | (0, 0) | xyVal | Sets offset; the Indigo2 IMPACT Video drain nodes support an offset of (0, 0) only.
VL_SIZE | Dynamic | xyVal | Reports the width and height of the active video region. The values are fixed for each timing mode: CCIR 525: 720 x 486 CCIR 625: 72 0x 576 NTSC square pixel: 640 x 486 PAL square pixel: 768 x 576 Square pixel modes are used with the Indigo2 IMPACT Compression option only. Timing is specified through the VL_TIMING control on the device node.
VL_MGV_ALPHA _NOT_PIXEL | FALSE | boolVal | If the node supplying the video drain node has both pixel and alpha outputs, this control selects whether the alpha (TRUE) or pixel (FALSE) channel is selected. This control is provided only for compatibility with Galileo Video applications. It is recommended that the application use `vlSetConnection()` to specify the output port.
VL_MGV_OUTPUT _BLANK | Persistent | boolVal | If this control is set to TRUE, the video output is blanked; that is, video black is output on the serial digital port. If set to FALSE, live video is displayed. VL_MGV_OUTPUT_FSYNC must be set to TRUE for this control to have any effect.
VL_MGV_OUTPUT _CHROMA | Persistent | boolVal | If set to TRUE, the chroma portion of a video stream is passed through. If set to FALSE, chroma is blanked. VL_MGV_OUTPUT_FSYNC must be set to TRUE for this control to have any effect.
VL_MGV_OUTPUT _FSYNC | Persistent | boolVal | If set to TRUE, this control enables the output synchronization hardware. The output synchronizer must be enabled for the VL_FREEZE, VL_MGV_OUTPUT_BLANK, VL_MGV_OUTPUT_HPHASE, or VL_MGV_OUTPUT_CHROMA controls to have any effect.
VL_MGV_OUTPUT _HPHASE | 0xC00 | intVal | Specifies the horizontal phase of the video output with respect to the video input. It is a 12-bit unsigned integer that increments in steps of the pixel clock (typically 74 nsec). The output occurs later in time as the value of this control increases. This control has a range of 1 to 0xFFF, which can advance the output by slightly more than three lines or delay the output by slightly more than one line. The default value 0xC00 makes the output match the timing of the video input. The value 0 is illegal. VL_MGV_OUTPUT_FSYNC must be set to TRUE for this control to have any effect.
VL_MGV_DL _SELECT_BLANK | VL_MGV_DL_SELECT _ALL | intVal | Selects the channels (pixel, alpha, both) on the dual-link node to blank. Valid values are VL_MGV_DL_SELECT ALPHAL (alpha channel only), VL_MGV_DL_SELECT_PIXEL (pixel channel only), and VL_MGV_DL_SELECT_AL (pixel and alpha channels).
VL_MGV_OUTPUT _DL_SELECT _CHROMA | VL_MGV_DL_SELECT _ALL | intVal | Selects the channels (pixel, alpha, both) on the dual-link node on which chroma should be blanked. Valid values are the same as for VL_MGV_OUTPUT_DL_SELECT_BLANK.
VL_MGV_OUTPUT _DL_SELECT _FREEZE | VL_MGV_DL_SELECT _ALL | intVal | Selects the channels (pixel, alpha, both) on the dual-link node to freeze. If both channels are selected, the freeze is performed atomically on both channels. Valid values are the same as for VL_MGV_OUTPUT_DL_SELECT_BLANK.
VL_MGV_OUTPUT _DL_SELECT _FSYNC | VL_MGV_DL_SELECT _ALL | intVal | Selects the output on the dual-link node synchronizers to enable or disable. Valid values are the same as for VL_MGV_OUTPUT_DL_SELECT_BLANK.

Prev | Table of Contents | Next
Appendix B. Return Codes |  | Appendix D. Indigo2 IMPACT Video Color-Space Conversions