The XC2055, XC4055 and XT2145 BrightSign players have multiple independent video outputs. This page describes how to configure these outputs with BrightSign APIs.

Relevant APIs

For multiple outputs the relevant API is roVideoMode SetScreenModes and the corresponding GetScreenModes (for single output players the main API is roVideoMode SetMode).

GetScreenModes returns an roArray of roAssociativeArray which describe each available output on the platform and how they are configured. The members of the roAssociativeArray are:

If you do not want to change the existing screen settings, do not enter a value for those settings.

The frame rates on all screens must be an exact match to ensure precise synchronization.

Videomode Plugins

Videomode plugins allow you to set custom multi-screen video modes. This feature has been updated to support multi-screens in BrightAuthor:connected 1.13.0 and later and BrightAuthor 5.0.1.1 and later. You must match the graphics mode that you set when authoring the presentation. See https://brightsign.atlassian.net/wiki/spaces/DOC/pages/420217686/Apply+a+Custom+Resolution#Custom-Mode for more information.

Example

SetScreenModes takes the argument that GetScreenModes returns. To configure a 1x2 video wall with bezel compensation:

vm=CreateObject("roVideoMode")
sm = vm.GetScreenModes()

sm[0].video_mode="1920x1080x60p"
sm[0].transform = "normal"
sm[0].display_x=0
sm[0].display_y=0
sm[0].enabled=true

sm[1].video_mode="1920x1080x60p"
sm[1].transform = "normal"
sm[1].display_x=0
sm[1].display_y=1100    ' Bezel compensation of 20 pixels
sm[1].enabled=true

sm[2].enabled=false
sm[3].enabled=false

vm.SetScreenModes(sm)

In this case the resulting canvas will be 1920x2180, and full screen video and graphics will display across the whole canvas.

If a screen is enabled, but isn't plugged in, then the correct size is used for the missing screen so that the canvas size and shape remains constant. Obviously, this isn’t possible with auto mode as the screen size is unknown and so again auto mode is dis-recommended for use with multiple outputs.

Note that if a script calls SetMode on a player capable of multiple screen outputs, then it effectively calls SetScreenModes with just the first screen enabled and a transform of normal.

For internal debugging, the registry entry .bs/vms is where the screen configuration is stored as a JSON string. For the above example it looks like this:

{"HDMI-1":{"mode":"1920x1080x60p","transform":"normal","x":0,"y":0},"HDMI-2":{"mode":"1920x1080x60p","transform":"normal","x":0,"y":1100}}

That is turned into an initialization file which is stored in memory. Currently, that format looks like this:

[core]
require-input=false
idle-time=0

[shell]
panel-location=""
panel-position=none
background-color=0xff000000
animation=none
close-animation=none

[output]
name=HDMI-A-1
mode=148.5 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
force-on=true
transform=normal
x_position=0
y_position=0

[output]
name=HDMI-A-2
mode=148.5 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
force-on=true
transform=normal
x_position=0
y_position=1100

[output]
name=HDMI-A-3
mode=off
force-on=false
transform=normal
x_position=0
y_position=0

[output]
name=HDMI-A-4
mode=off
force-on=false
transform=normal
x_position=0
y_position=0

Note that the BrightSign style mode is passed to our compositor as a complete modeline.