VCS is a well-featured, open-source Linux control application by Tarpeeksi Hyvae Soft for Datapath's VisionRGB range of capture hardware, with a feature-set targeted especially at retro enthusiasts.
You can find VCS on GitHub.
Vendor | Model |
---|---|
Datapath | VisionRGB-PRO1 |
Datapath | VisionRGB-PRO2 |
Datapath | VisionRGB-E1 |
Datapath | VisionRGB-E2 |
Datapath | VisionRGB-E1S |
Datapath | VisionRGB-E2S |
Datapath | VisionRGB-X2 |
Datapath | VisionAV series* |
*Can't be guaranteed, but user reports suggest compatibility. |
OS |
|
||||||||
---|---|---|---|---|---|---|---|---|---|
CPU |
|
||||||||
GPU | For hardware rendering (optional), a graphics card with support for OpenGL 1.2 | ||||||||
RAM | 1 GB |
In this section, you'll find answers to some of the common questions and problems that one might have when using VCS.
VCS is distributed as open-source for Linux at github.com/leikareipa/vcs/. It currently has no pre-built binary distributable.
Assuming you've compiled VCS as per instructions on GitHub, and have installed the drivers for your capture device, you can simply run the VCS executable to get started.
When you start up VCS, two windows should open: a console window, in which notifications about VCS's status will appear during operation; and the output window, in which captured frames are displayed. Right-clicking inside the output window will open a context menu that gives you access to the various controls of VCS.
The capture hardware may not always provide an accurate color balance by default.
To correct this, you can use the Video presets dialog to manually adjust the balance, then save the settings to be applied automatically next time you run VCS in this video mode.
When capturing an analog source, some visual noise is to be expected. VCS comes with a few ways to mitigate this.
The first thing to check is that you have suitable analog capture parameters set, using the Video presets dialog. The phase setting is especially important to get right. What the exact correct settings are depends on your capture source and can't be pre-determined, so simply adjust them until the output looks correct. You can use the capture window's magnifying glass (see Capture window: Features) to inspect the output in closer detail. Once you're happy with the settings, you can save them to be applied automatically next time.
Depending on the capture source, some noise may be present regardless of the capture parameters, in which case you can apply frame filtering to reduce the noise further. The Denoise (pixel gate) filter can be used to eliminate pixel shimmer; and there's also the more powerful – but more performance-hungry – Denoise (non-local means) filter. If you're capturing a line-doubled source (e.g. VGA mode 13h), you can apply a 1× Decimate filter to remove sub-pixel noise. The Delta histogram filter will produce a visual indication of the amount of noise present, allowing you to better estimate the effect of the various filters (just make sure that this histogram filter is the last one in the filter chain, so that it sees the changes from the other filters).
The capture hardware may not always correctly sense the resolution of the input signal, resulting in the displaying of malformed frames in VCS's capture window and/or the reporting of an incorrect input resolution in the capture window's title bar.
You can use the Input resolution dialog to manually correct the resolution.
If you find that a particular resolution is consistently misidentified by the capture hardware, you can have VCS correct it automatically via the Alias resolutions dialog.
The size of the capture window can be changed via the Output resolution dialog.
There are two ways to set a custom output aspect ratio:
You can use the Output resolution dialog to set a fixed resolution for the capture window. All captured frames will then be scaled automatically to that resolution using the currently-active scaler. (To customize the scaler, use the
VCS supports two fullscreen modes: windowed fullscreen, and true fullscreen. In most cases, the windowed fullscreen mode is recommended, but the true fullscreen mode may be needed for variable refresh rate output.
To enter windowed fullscreen mode, first use the Output resolution dialog to set the resolution of the capture window to the size of your screen, then press the
To enter true fullscreen mode, first use the Output resolution dialog to set the resolution of the capture window to the size of your screen, then press the
To ensure that the capture window displays frames in their correct aspect ratio while in either of the fullscreen modes, select the
If you hardware supports variable refresh rate output with OpenGL, VCS should be able to take advantage of it.
First, select the
With some capture sources (e.g. DOS-mode VGA), you may find the image susceptible to tearing. This kind of tearing is present in the output signal and doesn't result from the capture process – you'd see it even if you were viewing the output directly through a monitor.
To reduce or even eliminate this kind of tearing, VCS provides anti-tearing functionality. See Anti-tear dialog for more information.
VCS with a Datapath VisionRGB capture card should exhibit minimal latency, typically one or two frames (10~20 milliseconds).
The central point of the VCS user interface is the output window, where captured frames are displayed as they arrive from the capture device and having undergone any of VCS's filtering and scaling.
If you press the middle mouse button over the output window, a magnifying glass will pop up, showing an elarged view of the area around the cursor.
You can drag the output window by left-clicking and holding anywhere on the window.
You can double-click inside the output window to toggle borderless mode on/off. The
The output window – along with the frames it's displaying – can be resized via the Output resolution dialog. Spinning the mouse scroll wheel over the output window will also adjust the output size.
Although you can emulate a fullscreen mode by turning off the output window's border and then scaling the window to the size of the the display area, there's also a true fullscreen mode available. You can toggle it on/off with the
The output window's title bar shows information about VCS's current operating state – for example, the input and output resolution.
The title bar may contain some or all of the following elements, from left to right:
Element | Desription | ||||||||
---|---|---|---|---|---|---|---|---|---|
{!} | The frame drop indicator. Shown when VCS is having to drop captured frames due to insufficient performance (e.g. the CPU not being fast enough for the current capture settings). | ||||||||
VCS | The program's name. | ||||||||
FOA |
|
||||||||
░ × ░ (░ Hz) | The current capture resolution and its refresh rate. | ||||||||
shown in ░ × ░ (░ FPS) | The current output resolution and the rate at which the output is being updated. |
Under special circumstances, the title bar may also show one of these messages:
Message | Reason |
---|---|
No signal | The capture device doesn't appear to be receiving a signal. |
Signal out of range | Either VCS or the capture device is unable to process the signal's video mode due to the mode exceeding operating parameters. For example, the input resolution may be too high. |
Invalid capture channel |
The requested input channel on the capture device, or the entire capture device, is unavailable for use. This could be caused e.g. by an out-of-range input channel index or the capture device driver not being installed. |
Right-clicking inside the output window will bring up its context menu, which gives you access to the various controls and dialogs of VCS.
Selecting this option will save the output window's contents into a PNG image file under VCS's working directory. The VCS terminal window will show the name of the file.
The input menu lets you customize various operational parameters of the capture device. The menu provides the following options:
Option | Explanation |
---|---|
Channel | Set the capture device's active input channel. |
Color depth | Set the color depth in which the capture device outputs frames. In other words, the device is expected to convert frame data into this format prior to transferring them via the system bus to VCS. Prior to display, VCS will convert the data into the color depth of the output window. |
De-interlacing | Set the hardware-side de-interlacing mode for interlaced signals. This setting is expected to have no effect on non-interlaced signals. |
The output menu lets you customize the way in which VCS processes captured frames prior to display in the output window. The menu provides the following options:
Option | Explanation | ||||||||
---|---|---|---|---|---|---|---|---|---|
Screenshot | Save the current output image into an image file. | ||||||||
Aspect ratio |
|
||||||||
Scaler | Set the scaler to be used when captured frames are scaled to fit the output window. |
The window menu lets you customize various properties of the output window. The menu provides the following options:
Option | Explanation | ||||||
---|---|---|---|---|---|---|---|
Set title... | Give the output window a custom title. All of VCS's normal title bar information - except the frame drop indicator - will be replaced with the text you set. Setting an empty string will restore VCS's default title bar. | ||||||
Frame drop indicator | If enabled, the symbol "{!}" will be shown in the output window's title bar when frames are being dropped. | ||||||
Renderer |
|
||||||
Font size in dialogs | Select the font size to be used in VCS dialogs. | ||||||
Border | A hint to the operating system on whether to decorate the output window with the system's window border and title bar. When the window is in borderless mode, the operating system is also asked to position it on top of other desktop elements. You can achieve a windowed fullscreen mode by disabling the window border and setting the Output resolution to match your desktop resolution (see also the Top left menu option). | ||||||
Fullscreen | Place the output window into fullscreen mode. For best results, you should first scale the window to the resolution of your screen before entering fullscreen mode. Not fully supported on some distributions of Linux. | ||||||
Center | Snap the output window to the middle of the screen. | ||||||
Top left | Snap the output window to the top left corner of the screen. |
Toggle a power-saving mode in which VCS will micro-sleep between capture events to reduce its overall CPU usage.
The eco mode may increase capture latency by a bit in some situations, and the responsiveness of the GUI will also suffer to some extent. But you may find these acceptable tradeoffs for energy savings and a cooler-running CPU.
The eco mode works best when the output resolution is the same as the input resolution, i.e. when VCS has to spend minimal CPU resources processing captured frames, allowing most of the time to be spent in a resource-efficient sleep state.
This dialog can be accessed with
With the alias resolutions dialog, you can instruct VCS to automatically override certain capture resolutions.
For instance, if you find that your capture device is displaying 640 × 400 as 512 × 488 (or something to that effect), you can define 640 × 400 as an alias of 512 × 488. Whenever the capture device reports a new video mode of 512 × 488, VCS will tell the device to use 640 × 400, instead.
This dialog can be accessed with
The anti-tear dialog provides functionality to remove tearing from captured frames.
Under some circumstances, like when the captured source doesn't sync its rendering with the refresh rate, captured frames can contain tearing. VCS's anti-tearer helps mitigate this issue.
Anti-tearing should be considered an experimental feature of VCS. It works well in some cases and not that well in others. It'll completely fail to work if the captured source redraws the screen at a rate higher than the capture's refresh rate – e.g. a game running at 100 FPS with a refresh of 60 Hz.
Setting | Description |
---|---|
Scan start | Set where the anti-tearer begins scanning each frame for tears. Static screen-wide content like a game's UI bar can prevent the anti-tearing from working, so you should set this value so that such content is excluded. You can choose to visualize the scan range to help you set it up. |
Scan end | Same as Scan start but for where the scanning should end. This is an offset from the bottom of the screen up, so e.g. a value of 5 at a resolution of 640 × 480 would mean the scanning ends at pixel row 475. |
Scan direction | If the captured source redraws its screen from bottom to top, set the scan direction to Down. Otherwise, use the Up setting. Using the wrong direction will fully prevent the anti-tearing from working (it may correctly detect tears but won't be able to remove them). |
Scan hint | If the captured source redraws its screen at a rate higher than half of its refresh rate but lower than the full refresh rate (e.g. 35 FPS at 60 Hz), you may (or might not) have better results and/or performance by setting this option to Look for one tear per frame. Otherwise, use the Look for multiple tears per frame setting. |
Visualization | Draw certain anti-tearing-related markers in the output window. |
Threshold | The anti-tearer compares adjacent frames to find which parts of the new frame may be torn (where pixels from the previous frame are still visible). This setting controls the amount by which a pixel's color values are allowed to change between frames without the pixel being considered new (given inherent noise in analog pixels). In an ideal situation where there's no noise in the captured signal, you can set this to 0 or close to it. Otherwise, the value should be high enough to exclude capture noise. |
Window size | When scanning frames for tears, the anti-tearer will average together a bunch of horizontal pixels' color values to reduce the negative effect of analog noise. This setting controls the pixel size of the sampling window. Lower values will result in better performance but possibly worse tear detection. |
Step size | The number of pixels to skip horizontally when scanning for tears. Higher values will improve performance but may cause a failure to detect subtler tears. |
Matches req'd | Set how many times the sampling window must find a pixel's color values to have exceeded the detection threshold for a horizontal row of pixels to be considered new relative to the previous frame. Higher values should reduce the chance of false positives but may also cause a failure to detect subtler tears. |
This dialog can be accessed with
The filter graph dialog lets you to create chains of image filters to be applied to captured frames prior to display in the output window.
The filter graph is made up of nodes that can be connected together in a chain. These nodes come in three varieties: input gate, output gate, and filter.
The input and output gates determine the resolutions for which the connected filters will be applied. For instance, if you set an input gate's width and height to 640 and 480, and the width and height of an output gate to 1920 and 1080, any filters you connect between these two nodes will be applied when the size of the output window is 1920 × 1080 and the original resolution of the frames (i.e. the capture resolution) is 640 × 480. You can also use the value 0 for a gate's width and/or height to allow VCS to match any value to that dimension: an input gate with a width and height of 0, for instance, will apply the connected filters to frames of all capture resolutions, provided that they also meet the resolution specified for the output gate. A filter graph can have multiple chains of these input-filter-output combos, and VCS will select the most suitable one (or none) given the current capture and output resolutions.
When deciding which of multiple filter chains to use, VCS will prefer more specific chains to more general ones.
If you have e.g. an input gate whose width and height are 0, and another input gate whose width and height are 640 and 480, the latter will be used when the capture resolution is exactly 640 × 480, and the former otherwise.
Likewise, if your input gates are 0 × 0 and 640 × 0, the former will be applied for capture resolutions of any × any, except for 640 × any, where the latter chain will apply – except if you also have a third input gate of 640 × 480, in which case that will be used when the capture resolution is exactly 640 × 480.
To connect two nodes, click and drag with the left mouse button from one node's output edge (square) to another's input edge (circle), or vice versa. A node can be connected to as many other nodes as you like. To disconnect a node from another, right-click on the node's output edge, and select the other node from the list that pops up. To remove a node itself from the graph, right-click on the node and select to remove it. To add nodes to the graph, right-click on the graph's background to bring up the node menu, or select
This dialog can be accessed with
Normally, the capture device will automatically set the capture resolution to match that of the input signal, but sometimes the result isn't quite right. The input resolution dialog lets you override this resolution with your own one.
You can change a button's assigned resolution by clicking on it while pressing the
This dialog can be accessed with
The dialog lets you resize the output window.
Setting | Description |
---|---|
Constant | Lock the size of the output window so that changes to the capture resolution don't affect the output resolution. Frames will be scaled up or down as needed to match this resolution. |
Scale | Scale the size of the output window up or down by a percentage of its base size. The base size is either the capture resolution, or, if enabled, the Constant resolution. |
This dialog can be accessed with
The overlay dialog lets you define a message to be overlaid on the output window, with optional HTML/CSS styling.
For a list of the HTML and CSS formatting features supported, see Qt5: Supported HTML Subset.
<style> video-mode { color: yellow; background-color: black; font-family: "Comic Sans MS"; } </style> <video-mode> Input: $inWidth × $inHeight, $inRate Hz </video-mode>
Input: $inWidth x $inHeight, $inRate Hz
The following variables will expand to dynamic values in the overlay:
Variable | Explanation |
---|---|
$inWidth | The width of the current input resolution. |
$inHeight | The height of the current input resolution. |
$inRate | The refresh rate of the current input signal. |
$inChannel | The index of the current input channel on the capture device. |
$outWidth | The width of the current output resolution. |
$outHeight | The height of the current output resolution. |
$outRate | The current output frame rate. |
$frameDropIndicator | Shows a warning label if frames are currently being dropped, or nothing if they aren't. |
$time | Current system time. |
$date | Current system date. |
This dialog can be accessed with
The video presets dialog lets you to modify the capture devices's video signal parameters.
A given video preset's parameters will be applied when all of its "Activates with" conditions are met. For instance, if you've defined a preset's activation resolution as 800 × 600 and have disabled the other activating conditions, the preset's parameters will be applied when the capture video mode is 800 × 600.
To add or delete a preset, click the + or - buttons next to the preset selector at the top of the dialog. Clicking the + button while holding the Alt key will create a new preset with the current preset's settings.
If you want your changes to the video presets to persist after you exit VCS, remember to save them first! This can be done via
Action | Description |
---|---|
Double-click output window | Toggle the window border on/off. |
Middle-click output window | Magnify the portion of the output window over which the cursor is hovering. |
Left-click and drag output window | Move the window (same as dragging by its title bar). |
Right-click output window | Open the output window's context menu. |
Mouse wheel over output window | Scale the output window up/down. |
Key(s) | Description |
---|---|
Toggle fullscreen mode on/off. | |
Open the anti-tear dialog. | |
Open the filter graph dialog. | |
Open the video settings dialog. | |
Open the input resolution dialog. | |
Open the output resolution dialog. | |
Open the record dialog. | |
Open the overlay dialog. | |
Toggle the corresponding dialog's functionality on/off (e.g. |
|
Shortcuts for the input resolution buttons on the control panel's Input tab. | |
Set the input channel index. |
Key(s) | Description |
---|---|
Delete the selected node(s). | |
When dragging a node, snap it to a grid. | |
Zoom the view in and out. |
Option | Description |
---|---|
-i <input channel> | Start capture on the given input channel (1…n). On Linux, a value of 1 corresponds to /dev/video0, 2 to /dev/video1, 3 to /dev/video2, and so on. By default, channel 1 will be used. |
-v <path> | Load video presets from the given file on start-up. Video preset files typically have the .vcs-video suffix. |
-f <path> | Load a custom filter graph from the given file on start-up. Filter graph files typically have the .vcs-filter-graph suffix. |
-a <path> | Load alias resolutions from the given file on start-up. Alias resolution files typically have the .vcs-alias suffix. |
-s | Don't prevent the screensaver from activating while VCS is running. |