Technical Topics
Multiscreen VideoMode
5min
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 name on the xc platform, the possible values are hdmi 1 , hdmi 2 , hdmi 3 , or hdmi 4 the number of array items depend on the number of outputs the xc2055 has two outputs, hdmi 1 and hdmi 2 the xc4055 has four outputs, hdmi 1, hdmi 2, hdmi 3, and hdmi 4 the name tells the system which output is associated with the rest of the settings in that entry within the roassociativearray (the order of the hdmi outputs is not important) video mode the videomode can be either a known brightsign format videomode (for example, 1920x1080x60p) a full modeline as described apply a custom resolution docid 58vplqm4sgh vgqvs4frs auto which differs slightly from previous platforms auto isn’t recommended when using multiple outputs because the canvas positions are fixed and so if a screen uses an unexpected resolution then it won’t be positioned correctly in the canvas display x and display y the position of the screen within the overall canvas the origin 0,0 is the top left corner, and each screen can be positioned relative to that this allows for bezel compensation as gaps can be left on the canvas between screens transform normal , 90 , 180 or 270 each screen can be rotated independently when a screen is rotated, it rotates all of the content including video if a single screen is set to 1920x1080x60p and 90 then the screen is running in portrait mode and all of the firmware will run as if the screen is set to 1080x1920x60p with video and graphics all rotated enabled whether the screen is enabled for output to turn an output to off, set enabled = false no other fields need to be set 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 apply a custom resolution docid 58vplqm4sgh vgqvs4frs for more info 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