Viz Engine

Version 3.9.1 | Published February 12, 2018 ©

Timed Command Execution

In order to achieve frame accurate output at a certain time, Viz Engine takes advantage of a time code reader board and special commands.

Viz Engine will record certain commands and executes them exactly at the time the time code reader board will hit this timestamp.

Here, you find the following:

Field Accurate Timed Command Execution in combination with graphics, live and clip playback require at least version 3.9.1.
Earlier versions can only guarantee Field Accurate Timed Command Execution on the Matrox X.mio2, X.mio2+ and X.mio3 (as X.mio2+) boards.

Time code related commands

TC*TC_INFO GET
Gives you all available time codes in the system. The return is a list of indexes and strings. Therefore every time code source is identified by a unique index.

TC*TC_ACTIVE GET
Gives all time codes which have been updated in the last 2 fields
TC*TC GET <index>
Returns the time code for the index. TC*TC_COMMAND SET <index> <HH> <MM> <SS> <FF> "Command String" <Count>
Queues a Command for execution on a specific Time.

<index> : Index of the Timecode
<HH> <MM> <SS> <FF>: The timecode in Hours,Minutes,Seconds,Fields "Command String": The Command in quotes.
<Count>: The command will be executed Count times. If Count is smaller than 1 the command will be executed always when the time code is read on the source.

TC*TC CLEAR <index>
Clears all queued commands for the time code source with index <index>

Prerequisites

The following prerequisites need to be done:

  • The system must be equipped with a Plura TC Reader board. This needs to be enabled in the Viz Config File by setting TCReaderUsage = 1

  • The correct TC source must be set by using TCReaderSource

Viz Engine supports LTC, VITC, ATC_LTC, ATC_VITC, HANC_LTC, HANC_VITC.
To specify multiple sources the format would be:
TCReaderSource = LTC | VITC

  • Commands need to be sent with a timecode.

For example: TC*TC_COMMAND SET_TC 1 "12:00:00:00" "-1 RENDERER*MAIN_LAYER SET_OBJECT SCENE*<9968FF26-35B0-4C01-AE5A4F8D11D1543B>

  • Ringbuffer should be turned on

This will make sure that the command to load the given scene will be executed exactly at the given timecode. (12:00:00:00).The fillsize of the ringbuffer will be considered.

To verify this, make sure the final output device (Recorder, Monitor) can display the same timecode as attached to the Viz Engine.

Configuration

To configure a correct field accurate timeout, a few parameters need to be set. Three important values are responsible for a proper playout of Graphics, DVE Live sources and DVE Clips:

Timed Command Bias:

Command: TC*TC_BIAS SET n (in fields)
Config Setting: delayed_command_bias = n

This presents the overall delay in fields the commands will be sent if the time code hits the timestamp. This affects Graphics and any DVE source. For instance, if your graphics appear 2 frames too late, you need to use delayed_command_bias= -2.

The Command TC*TC_BIAS SET n will immediately take effect without restarting Viz Engine.

VideoIn[n]DelayDVE:

If you also need to show DVE Live effects in a frame accurate environment, there is also the need to configure the delay of the LiveInput DVE. This is done by setting

Matrox0.VideoIn1.VideoDelayDVE = n

in the config file. This is the number of fields, the DVE signal is delayed until it is shown on the video output. This value can not be negative, the minimum is 1 (0 also represents 1). If your graphics + DVE is still too late, you need to decrease the Timed command bias and adjust the VideoInDelay accordingly.

ClipIn[n]DelayDVE:

Additionally if also clips need to be played exactly at the given timecode and additional parameter comes in play:

ClipIn1.VideoDelayDVE = n

This controls how many fields a clip is being delayed until it shows up on the Video Output.

Note: Clips need always to be cued as the need some time be read from the hard drive. This is done by sending a

SCENE*<uuid> LOAD
SCENE*<uuid> CUE

to the engine a few seconds before the scene is taken to air. Clips must be placed in the stage to be preloaded correctly.
The correct sequence to bring a scene on air exactly at 12:00:00:00 with clips prepared would then be:

SCENE*<uuid> LOAD
SCENE*<uuid> CUE
TC*TC_COMMAND SET 1 12 00 00 00 "-1 RENDERER*UPDATE SET 0" 
TC*TC_COMMAND SET 1 12 00 00 00 "-1 RENDERER*MAIN_LAYER SET_OBJECT SCENE*<uuid>"
TC*TC_COMMAND SET 1 12 00 00 00 "-1 RENDERER*STAGE START"
TC*TC_COMMAND SET 1 12 00 00 00 "-1 RENDERER*UPDATE SET 1"

Framebuffer Delay

The FramebufferDelay setting is usually used to delay the playout of any graphics. It is used to keep DVE and Graphics in sync when it is set to 0.
However for fine tuning the delays between Graphics, DVE Live and DVE Videos this value needs to be adjusted accordingly.

Matrox0.VideoOut1.FrameBufferDelay = n

Settings for X.mio2 and X.mio2+ boards.

The following settings have been measured for X.mio2 and X.mio2+ boards.

As of the architecture of X.mio3 boards, a frame accurate playout with DVE effects (position and scaling) is currently not possible.
Therefore a X.mio3 board needs to run in X.mio2+ mode (Matrox.LowLatencyMode = 0)

For X.mio2 boards, following settings are needed:

Resolution

TC_BIAS Setting

1080i50

0

720p50

-1

PAL

+8

1080i60M

2

720p60M

0

NTSC

7

For X.mio2+ boards, following settings are needed:

As of the architecture of X.mio2+ boards, more settings need to be done:

Resolution

TC_BIAS Setting

DVE Delay Video

DVE Delay Clips

FramebufferDelay

1080i50

0

4

0

4

720p50

6

3

-

4

PAL

0

4

0

4

1080i60M

1

4

0

4

720p60M

6

3

-

4

NTSC

1

4

0

4