VML Clip Player is a direct replacement for DirectShow Clip Player and an alternative to Matrox Clip Player. The main goal of VML Clip Player is to be able to play non-broadcast resolution while offering similar functionality and behavior to Matrox Clip Player.

The user can choose the preferred fallback mode, between Matrox with Fallback, VML Only, and Matrox Only, via the following configuration (VerboseConfig must be set to 1):

# Default clip player to be used for this channel. 0=Matrox With Fallback 1=VML Only 2=Matrox Only
ClipIn1.PlayerFallbackMode: Default=0 Min=0 Max=2
ClipIn1.PlayerFallbackMode = 0

The default preferred fallback mode in the Matrox workflow is Matrox Clip Player with Fallback to VML Player. It is also possible to change the preferred fallback mode during runtime via the following command:

MAIN*CONFIGURATION*CHANNELS*CLIPIN_0*PLAYERFALLBACK SET MATROX_WITH_FALLBACK
MAIN*CONFIGURATION*CHANNELS*CLIPIN_0*PLAYERFALLBACK SET VML_ONLY
MAIN*CONFIGURATION*CHANNELS*CLIPIN_0*PLAYERFALLBACK SET MATROX_ONLY

Feature Comparison between Clip Players

Not all functionalities are available for VML. The following is a feature comparison between the three different supported clip players:

Functionality

VML

Matrox 

DirectShow
(Viz 4.x and earlier)

Basic Functions (Play, Pause, Stop, Load, Scrub, Continue, Flush, Autorun)

(tick)

(tick)

(tick)

In and out setting and getting

(tick)

(tick)

(tick)

Loop playback

(tick)

(tick)

(tick)

3-point loop / 4-point loop

(tick)

(tick)

(error)

Upscale luma

(error)

(tick)

(error)

Repeat field

(tick)

(tick)

(error)

Reverse field

(tick)

(tick)

(error)

Playback speed

(tick)

(tick)

(tick)

Native pending support

(tick)

(tick)

(tick)

Embedded alpha format

(tick)

(tick)

(tick)

Multiple files (alpha / fill / audio / VBI files)

(error)

(tick)

(error)

Timecode

(tick)

(tick)

(error)

VBI Passthrough (to output)

(error)

(tick)

(error)

Timecode Passthrough (to output)

(error)

(tick)

(error)

CC Extraction

(error)

(tick)

(error)

Audio 

(tick)

(tick)

(error)

SHM key events

(tick)

(tick)

(tick)

Contiguous seek performance

(tick)

(tick)

(error)

DVE

(error) (1)

(tick)

(error) (1)

Playlist management (insert, remove, replace, etc.)

(tick)

(tick)

(error)

Mode on load error (pending)

(tick)

(tick)

(error)

V210 (10-bit support)

(tick)

(tick)

(error)

Broadcast clip status

(tick)

(tick)

(tick)

Replay mode (TDIR)

(tick)

(tick)

(error)

Growing files

(tick)

(tick)

(error)

Dealing with display aspect ratio

(tick)

(tick)

(error)

Delay audio and video

(error)

(tick)

(error)

Hardware-accelerated decoding

(tick) (4)

(tick) (2)

(error)

Mixed resolution mode

(tick) (3)

(tick) (3)

(tick) (3)

(1) Simulated DVE is supported.
(2) With an additional Matrox M264 board.
(3) With a slight difference in behavior documented below.
(4) With an NVIDIA GPU that supports NVDEC.

Mixed Resolution Mode in Matrox and VML Clip Player

Mixed resolution mode means playing clips with different resolution than the configured Viz Engine output resolution and/or the configured Viz Engine clip channel resolution. Matrox and VML clip player support the playback in mixed resolution. In Viz 4.x and earlier, Matrox clip player was already able to playback clips in mixed resolution, as long as the clips have the same framerate family as the output. However from Viz Engine 5.0 and later, Matrox clip player also support the playback of selected clips coming from smartphones with framerate family different than the configured Viz Engine output resolution. VML has always supported clips with framerate family different than the configured Viz Engine output resolution since its inception.

Even if both Matrox and VML clip players support mixed resolution, the following differences in behavior needs to be taken into account. This is referring only to mixed resolution in which the clip has the same framerate family as the configured Viz Engine output resolution.

Player

Output 

Channel 

Clip 

STATUS GET AT EOF

SCRUBBING

CONCLUSIONS

VML

p50

p50

p50

duration 1000
current_position 999
play_mode scrubbing EOF
file_name D:/clips_reference/1080p50/1080p50_Video_ProRes_Encoder_ProRes[ch=2 bits=24-32]_matrox.mov
frame_rate 50.00000000
markin 0
markout 1000
output_frame_rate 50.00000000

Exactly the same between Matrox and VML. (tick)

Exactly the same between Matrox and VML. (tick)

MATROX

p50

p50

p50

duration 1000
current_position 999
play_mode scrubbing EOF
file_name D:/clips_reference/1080p50/1080p50_Video_ProRes_Encoder_ProRes[ch=2 bits=24-32]_matrox.mov
frame_rate 50.00000000
markin 0
markout 1000
output_frame_rate 50.00000000

Exactly the same between Matrox and VML. (tick)

Exactly the same between Matrox and VML. (tick)

VML

p50

i25

p50

duration 1000
current_position 998
play_mode scrubbing EOF
file_name D:/clips_reference/1080p50/1080p50_Video_ProRes_Encoder_ProRes[ch=2 bits=24-32]_matrox.mov
frame_rate 50.00000000
markin 0
markout 1000
output_frame_rate 25.00000000

Matrox displayed is -1 compared to VML on scrubbing to 00:00:05:00. (error)

Matrox displayed last position is -1 compared to VML at scrubbing EOF. (error)

MATROX

p50

i25

p50

duration 1000
current_position 998
play_mode scrubbing EOF
file_name D:/clips_reference/1080p50/1080p50_Video_ProRes_Encoder_ProRes[ch=2 bits=24-32]_matrox.mov
frame_rate 50.00000000
markin 0
markout 1000
output_frame_rate 25.00000000

Matrox displayed is -1 compared to VML on scrubbing to 00:00:05:00. (error)

Matrox displayed last position is -1 compared to VML at scrubbing EOF. (error)

VML

p50

p50

i25

duration 2000
current_position 1999
play_mode scrubbing EOF
file_name D:/clips_reference/1080i50/1080i50_Video_AVC-Intra_Encoder_AVCIntraClass100[TimeCode] [VBI] [ch=2 bits=24-32]_avcintra.mxf
frame_rate 25.00000000
markin 0
markout 2000
output_frame_rate 50.00000000

Exactly the same between Matrox and VML. (tick)

Matrox displayed last position and Current Position is -1 compared to VML at scrubbing EOF. (error)

MATROX

p50

p50

i25

duration 2000
current_position 1998
play_mode scrubbing EOF
file_name D:/clips_reference/1080i50/1080i50_Video_AVC-Intra_Encoder_AVCIntraClass100[TimeCode] [VBI] [ch=2 bits=24-32]_avcintra.mxf
frame_rate 25.00000000
markin 0
markout 2000
output_frame_rate 50.00000000

Exactly the same between Matrox and VML. (tick)

Matrox displayed last position and "Current Position" is -1 compared to VML at scrubbing EOF. (error)

VML

p50

i25

p50

duration 2000
current_position 1998
play_mode scrubbing EOF
file_name D:/clips_reference/1080i50/1080i50_Video_AVC-Intra_Encoder_AVCIntraClass100[TimeCode] [VBI] [ch=2 bits=24-32]_avcintra.mxf
frame_rate 25.00000000
markin 0
markout 2000
output_frame_rate 25.00000000

Exactly the same between Matrox and VML. (tick)

Exactly the same between Matrox and VML. (tick)

MATROX

p50

i25

p50

duration 2000
current_position 1998
play_mode scrubbing EOF
file_name D:/clips_reference/1080i50/1080i50_Video_AVC-Intra_Encoder_AVCIntraClass100[TimeCode] [VBI] [ch=2 bits=24-32]_avcintra.mxf
frame_rate 25.00000000
markin 0
markout 2000
output_frame_rate 25.00000000

Exactly the same between Matrox and VML. (tick)

Exactly the same between Matrox and VML. (tick)

VML

i25

i25

i25

duration 1000
current_position 999
play_mode scrubbing EOF
file_name D:/clips_reference/1080i50/1080i50_Video_AVC-Intra_Encoder_AVCIntraClass100[TimeCode] [VBI] [ch=2 bits=24-32]_avcintra.mxf
frame_rate 25.00000000
markin 0
markout 1000
output_frame_rate 25.00000000

Exactly the same between Matrox and VML. (tick)

Exactly the same between Matrox and VML. (tick)

MATROX

i25

i25

i25

duration 1000
current_position 999
play_mode scrubbing EOF
file_name D:/clips_reference/1080i50/1080i50_Video_AVC-Intra_Encoder_AVCIntraClass100[TimeCode] [VBI] [ch=2 bits=24-32]_avcintra.mxf
frame_rate 25.00000000
markin 0
markout 1000
output_frame_rate 25.00000000

Exactly the same between Matrox and VML. (tick)

Exactly the same between Matrox and VML. (tick)

VML

i25

p50

i25

duration 1000
current_position 999
play_mode scrubbing EOF
file_name D:/clips_reference/1080i50/1080i50_Video_AVC-Intra_Encoder_AVCIntraClass100[TimeCode] [VBI] [ch=2 bits=24-32]_avcintra.mxf
frame_rate 25.00000000
markin 0
markout 1000
output_frame_rate 50.00000000

Exactly the same between Matrox and VML. (tick)

Matrox displayed last position is -1 compared to VML at scrubbing EOF. (error)

MATROX

i25

p50

i25

duration 1000
current_position 999
play_mode scrubbing EOF
file_name D:/clips_reference/1080i50/1080i50_Video_AVC-Intra_Encoder_AVCIntraClass100[TimeCode] [VBI] [ch=2 bits=24-32]_avcintra.mxf
frame_rate 25.00000000
markin 0
markout 1000
output_frame_rate 50.00000000

Exactly the same between Matrox and VML. (tick)

Matrox displayed last position is -1 compared to VML at scrubbing EOF. (error)

VML

i25

i25

p50

duration 500
current_position 499
play_mode scrubbing EOF
file_name D:/clips_reference/1080p50/1080p50_MPEG-2__MpegIFrame422ProfileHighLevel_422[bitrate=300].avi
frame_rate 50.00000000
markin 0
markout 500
output_frame_rate 25.00000000

Matrox displayed is -1 compared to VML on scrubbing to 00:00:05:00. (error)

Matrox displayed last position is -1 compared to VML at scrubbing EOF. (error)

MATROX

i25

i25

p50

duration 500
current_position 499
play_mode scrubbing EOF
file_name D:/clips_reference/1080p50/1080p50_MPEG-2__MpegIFrame422ProfileHighLevel_422[bitrate=300].avi
frame_rate 50.00000000
markin 0
markout 500
output_frame_rate 25.00000000

Matrox displayed is -1 compared to VML on scrubbing to 00:00:05:00. (error)

Matrox displayed last position is -1 compared to VML at scrubbing EOF. (error)

VML

i25

p50

p50

duration 500
current_position 499
play_mode scrubbing EOF
file_name D:/clips_reference/1080p50/1080p50_MPEG-2__MpegIFrame422ProfileHighLevel_422[bitrate=300].avi
frame_rate 50.00000000
markin 0
markout 500
output_frame_rate 50.00000000

Exactly the same between Matrox and VML. (tick)

Matrox Current Position (but not displayed one) is the same as duration but VML is duration -1. (error)

MATROX

i25

p50

p50

duration 500
current_position 500
play_mode scrubbing EOF
file_name D:/clips_reference/1080p50/1080p50_MPEG-2__MpegIFrame422ProfileHighLevel_422[bitrate=300].avi
frame_rate 50.00000000
markin 0
markout 500
output_frame_rate 50.00000000

Exactly the same between Matrox and VML. (tick)

Matrox Current Position (but not displayed one) is the same as duration but VML is duration -1. (error)

Non-broadcast Clip Support in Matrox and VML Clip Player

Broadcast clips are defined by their resolution (width and height), framerate, aspect ratio, scan mode and audio sample rate (48khz). The codec and format can also define a clip as broadcast clip. Examples of broadcast clips can be found in the Media Assets > Supported Codecs > Supported Codecs for Matrox Clip Playback section of the Viz Artist User Guide.

From Viz Engine version 5.0 and later, Matrox Clip Player also supports non-broadcast clips. These clips usually comes from smartphones. All of these clips are progressive resolution with non-broadcast resolution, aspect ratio, framerate and audio sample rate (41.1khz). The following needs to be taken into account regarding non-broadcast clip support in Matrox clip player:

  • Loading a clip with different framerate than the configured Viz Engine Output framerate, converts the clip framerate to the Viz Engine Output framerate.

  • DVE or Hybrid is not supported for non-broadcast clip.

  • Reverse playback might not be in real time.

  • Supported containers for non-broadcast clips are mostly .mov or .mp4.

VML Clip Player as a Fallback Clip Player

When using Matrox clip player as the preferred clip player and the input clip is not supported, Viz Engine automatically tries to load the clip with VML clip player. However, this is not always possible, such as in the following case:

  • If the clip channel is configured as DVE or Hybrid.

Three possible fallback modes can be set starting from Viz Engine 5.4 using the following command:

MAIN*CONFIGURATION*CHANNELS*CLIPIN_0*PLAYERFALLBACKMODE GET/SET

The possible fallback modes are MATROX_WITH_FALLBACK, VML_ONLY, and MATROX_ONLY.

To know which clip player is being used at the moment, the following command can be called:

MAIN_SCENE*VIDEO*CLIPIN*1*PLAYER GET

Calling this command after loading a clip tells you if a fallback has been triggered and VML is being used instead of Matrox Clip Player, if the preferred clip player is configured as Matrox Clip Player. If the preferred clip player is configured as VML, the command always returns VML.

The preferred clip player is always used first in an attempt to load a new clip. If the load fails, then the fallback triggers. An example of a workflow if the fallback mode is configured as MATROX_WITH_FALLBACK:

  • The user attempts to load a supported clip; Matrox Clip Player is used.

  • The user then tries to load an unsupported clip: Matrox Clip Player is used first, Matrox Clip Player reports the clip is not supported, fallback triggers and VML Clip Player is instead used to load the clip.

  • The user then tries to load a supported clip: Matrox Clip Player is used first (since it is the preferred clip player) in an attempt to load the clip.

The following warning messages appear in the console when a fallback has triggered, depending on whether the target clip player inside Matrox Clip Player is active or pending:

WARNING: Unable to open file with Matrox clip player (active). Attempting to open file with VML clip player.
WARNING: Unable to open file with Matrox clip player (pending). Attempting to open file with VML clip player.

The following message also appears after a VML Clip Player has been used to load an unsupported clip, and a new clip is about to be loaded in Matrox Clip Player:

Warning: VML Clip Player was used to open an unsupported clip. Using Matrox Clip Player again as the preferred clip player.

The messages are there to warn the user that a clip player switch has been performed.

Warning: Do not use clip fallback in stage workflow since it is not fully supported. The console also displays a warning when the pending clip player is the one failing to load a clip. Basic stage workflow which do not include back to back playback or 3-4 point loop work fine. If an unsupported clip is needed, then the best course of action is to change the preferred clip player of the clip channel to VML: ClipIn1.PlayerfallbackMode= 1.

The following warning appears in the console when the pending clip player is used to attempt to load a clip but fails:

Warning: If this is part of a stage workflow (B2B, 3-4 point loop) clip fallback is not fully supported!

Fallback Mode in Viz Engine Version 5.3.2 and Earlier

Viz Engine version 5.3.2 and earlier only have two different fallback modes: MATROX and VML. Their behavior is the same as the fallback mode, MATROX_WITH_FALLBACK and VML_ONLY, respectively. The command to set and get them was:

MAIN*CONFIGURATION*CHANNELS*CLIPIN_0*PLAYER GET/SET

This command is still usable in Viz Engine 5.4 and later; however, it is not possible to set the new MATROX_ONLY mode, and the get command returns the new values MATROX_WITH_FALLBACK, VML_ONLY, and MATROX_ONLY.

Clip Player AutoFormat

From Viz Engine version 5.1, VML and Matrox Clip Player automatically decides which format to use based on the clip characteristics. The following configurations are ignored when ClipInX.AutoFormat is enabled:

  • clip_bpcX

  • ClipInX.ContainsAlpha

  • ClipInX.UseV210

If for any reason the old behavior is needed, disable ClipInX.AutoFormat (for example, ClipInX.AutoFormat = 0).

Info: The stage b2b workflow does not work with Matrox Clip Player if two clips have different formats (for example, one clip has alpha and the next one does not). If this workflow is needed with Matrox Clip Player, disable the AutoFormat setting or use VML Clip Player as the default clip player.

VML Clip Player with NVDEC

It is possible to decode a clip using NVDEC. Depending on the NVIDIA GPU in use, there are different capabilities in terms of which codec can be decoded. This is an experimental feature and can be enabled in the configuration file:

## Allow using NVDEC to decode clips (experimental)
#* clip_use_NVDEC: Default=0
# clip_use_NVDEC = 0