GithubHelp home page GithubHelp logo

freezy / dmd-extensions Goto Github PK

View Code? Open in Web Editor NEW
120.0 24.0 53.0 35.36 MB

A toolbox for virtual pinball dot matrix displays.

License: GNU General Public License v2.0

C# 87.23% C 3.79% Batchfile 1.64% C++ 1.51% JavaScript 3.44% HTML 0.05% CSS 0.02% Rich Text Format 1.59% GLSL 0.41% PowerShell 0.31%
dmd pinball pinball-fx2 pinball-arcade pro-pinball vpinmame

dmd-extensions's Introduction

DMD Extensions

A toolbox for digital pinball and dot matrix displays.

This project aims to connect digital pinball games with the physical DMDs that are widespread in the community. It also comes with pretty monitor output, supports frame-by-frame colorization, and can even stream over the network.

Table of Contents

Features

Supported Games

DMD Extensions adds real DMD support to the following games:

The command line tool can also display image files on the DMD device and render frames to bitmap files. Many features like this are described in the command line options below, so have a close look at those as well.

Supported Displays

Currently supported hardware displays:

  • PinDMD v3, full RGB support
  • PinDMD v2, 4 bit (16 shades) support
  • PinDMD v1, 2 bit (4 shades) support
  • PIN2DMD, full RGB support
  • Pixelcade, full RGB support
  • ZeDMD / PinDMD v3.1*, full RGB support

* The display from VirtuaPin marketed as PinDMD v3.1 is a ZeDMD under the hood.

High Resolution DMD for Monitors

DMD Extensions includes a complex shader with awesome effects for monitor users. For more info, find the documentation here.

Segment Display Rendering

DMD Extensions supports high-resolution rendering of segmented alpha-numeric displays:

Documentation how to enable and customize this feature can be found here.

Frame Colorization

DMD Extensions includes support for Serum colorizations, as well as the VNI/PAL/PAC format, originally used on PIN2DMD devices.

Colorization is enabled for most games, including Pinball FX(3), The Pinball Arcade, and Visual PinMAME.

Network Streaming

DMD Extensions can also receive frames from the network and output them to any device. Likewise, it can stream frames from any source over the network. Documentation of this feature can be found here.

Additionally, DMD Extensions can act as a web server where any number of clients can connect to, and see the DMD in real time in the web browser.

Scaling

Most of the time, your DMD will match the resolution of the game, which is 128x32. There are however two cases where scaling comes into play.

  1. The game has a different resolution than 128x32. If the resolution is higher, the frames will be scaled down, using scaling algorithm defined by the resize option (stretch, fill, and fit). If the resolution is lower, the frames will be centered on the DMD, with black borders around it.
  2. You're using a high-resolution DMD, like a PIN2DMD XL or ZeDMD HD, running at 256x64. In this case, frames can be be scaled up, using either a "doubler" or "scale2x" algorithm. Note that your physical display must be at least double the size of the source frame size.

The above mainly applies to hardware displays, which are limited to a fixed resolution. However, it's also possible to upscale frames to the virtual DMD. In order to do that, set scalermode so to either doubler or scale2x.

Install Instructions

Download the installer and run it. A few notes:

  • The installer will overwrite any existing dmddevice.dll in your VPM folder if you choose to install it (existing INI files are untouched).
  • If you're on Windows x64, you probably want to install both 32 and 64-bit versions. They can live happily next to each other.
  • The reason for installing both versions is that your VPM is probably 32-bit, so you'll need the 32-bit DmdDevice.dll and if you're using dmdext.exe with the 64-bit version of Pro Pinball, it will only work with the 64-bit version.
  • However, if you don't have Pro Pinball, just 32-bit will do fine, and if you don't use VPM then just 64-bit will do fine as well. And if you're on a 32-bit Windows, then just take the 32-bit version.
  • The installer will add the install folder of dmdext.exe to the PATH environment variable, but only if the platform is the same:
    • DMD Extensions (64-bit) on Windows x64 is added to PATH
    • DMD Extensions (32-bit) on Windows 32-bit is added to PATH
    • All other combinations aren't added to PATH
  • The installer will set the DMDDEVICE_CONFIG environment variable to the location of your DmdDevice.ini. That means from wherever you launch DmdDevice.dll (or run dmdext.exe with --use-ini), the same DmdDevice.ini will be used.
  • If you re-install and your VPM installation folder changed since the last installation, a new DmdDevice.ini will be copied to the new location (if it doesn't exist), and the DMDDEVICE_CONFIG environment variable will be updated accordingly.
  • During installation, when a feature is deactivated, that means the installer couldn't find the host program. For VPM that means that you haven't registered VPinMAME.dll. For Pro Pinball it means it's not installed via Steam, and you'll need to select its installation folder manually.

If you don't trust the installer and want to do it manually, see below.

Usage

Test

  1. Open a command prompt ([Windows]+[R], cmd, [enter])
  2. Type dmdext test -d auto [enter]

You should see a test image on your DMD as well as on a virtual DMD.

Pinball FX2

  1. Enable cabinet options in Pinball FX2
  2. Resize the DMD to:
    • Width: 520
    • Height: 136
  3. Move the DMD to somewhere hidden like off-screen or behind the playfield (usually at 0/0).
  4. Open a command prompt ([Windows]+[R], cmd, [enter])
  5. Type dmdext mirror --source=pinballfx2 --no-virtual [enter] (or pinballfx3 for FX3)
  6. Start Pinball FX2/3

For further tweaking, see options below.

Pinball FX3

The DMD from Pinball FX3 is pulled directly from the memory.

  1. Open a command line prompt ([Windows], type cmd, [enter])
  2. Type dmdext mirror --source=pinballfx3 --no-virtual [enter]
  3. Start Pinball FX3 and play a game.

It doesn't matter whether Pinball FX3 is started before or after dmdext, and it works with or without cabinet mode.

Note that while the current memory grabber code should also work for future Pinball FX3 versions, we obviously can't guarantee it. If a new version breaks dmdext, you should still be able to fall back to the legacy screen grabber that is used by Pinball FX2 by using the --fx3-legacy flag.

Pinball FX

Since mid June 2023, Pinball FX officially supports DMD Extensions through DmdDevice.dll. Note however that Pinball FX runs on 64 bit, so it's technically DmdDevice64.dll, which comes with the 64-bit version of DMD Extensions.

If you don't have Visual PinMAME installed, you'll have to set the DMDDEVICE_CONFIG environment variable to point to DmdDevice.ini, given you keep DmdDevice64.dll in the same directory.

To do that:

  1. Press the [Windows] key, type "env" and select Edit the system environment variables.
  2. Click Environment Variables....
  3. Under System variables, click New....
  4. Enter DMDDEVICE_CONFIG as variable name and the full path to DmdDevice.ini as variable value.

If you have done that, or you do have VPM installed, simply enable the external DMD in Pinball FX:

  1. Start Pinball FX
  2. Open the settings menu (gears icon at the top right)
  3. Choose Cabinet Support
  4. Choose Dotmatrix Window
  5. Under Dotmatrix Window, select External DMD Device.

For customizing games in DmdDevice.ini, see this list of IDs for all supported games.

The Pinball Arcade

For TPA we're pulling frames off the DMD texture from TPA's memory.

  1. Open a command line prompt ([Windows], type cmd, [enter])
  2. Type dmdext mirror --source=pinballarcade --no-virtual [enter]
  3. Start the DX11 version of The Pinball Arcade.
  4. Select and start a game (only then it starts mirroring, during attract mode it doesn't, even though TPA does display the DMD).

Currently re-running dmdext while TPA is running doesn't work and will be addressed soon.

Also note that currently only 128x32 DMD games are supported, that means no EM games neither Frankenstein which has a different resolution.

If you happen switch tables often and the last DMD frame gets stuck on your DMD when changing to an EM game, you can use the --idle-after option to clear the screen.

Pro Pinball Ultra

In version 1.2.1, Barnstorm Games added support for external hardware through a message queue. To get it running, do the following:

  1. Make sure you have dmdext.exe in your PATH
  2. Copy ProPinballSlave.bat to the Pro Pinball installation folder (usually at %PROGRAMFILES(X86)%\Steam\SteamLibrary\steamapps\common\Pro Pinball Ultra)
  3. Add the following command line parameters when launching ProPinball.exe: m3 dProPinballSlave

Note that this currently works only with the 64-bit version of Pro Pinball. 32 bit binaries will be provided with a later release. If you want to change the options (e.g. show the virtual DMD), edit ProPinballSlave.bat and adopt accordingly.

Visual PinMAME

VPM introduced the possibility of delegating DMD rendering to an external DLL. The main motivation is being able to ship a single build instead of having to release multiple binaries for multiple DMDs.

Be sure to use at least PinMAME v3.4. You can download the latest version here.

Future Pinball

Copy Future Pinball/OpenGL32.dll to your Future Pinball folder, i.e. where Future Pinball.exe is located. Now, you can send frames to your DMD by running:

dmdext mirror -s futurepinball

Note that:

  • The -q toggle works here, so instead of killing the process you could make it exit automatically when the table closes.
  • With -g <name>, you can set the game's name, which will, when used along --use-ini, read the game-specific settings.

For more details check out TerryRed's guide here.

Media

DMD Extensions can also play videos and images. Here are a few examples:

dmdext play -f "ACDC (Stern 2012).gif"
dmdext play -f "Tron Legacy (Stern 2011).png"

Pinup Player

DMD Extensions can send unprocessed frames and scene events detected by supported colorizers to Pinup Player, which is then used to trigger videos.

To enable event triggering, you'll need a recent version of dmddevicePUP.dll and dmddevicePUP64.dll. You can download the latest version here.

Then, enable the Pinup Player output in DmdDevice.ini:

[pinup]
enabled = true

PinballX

DMD Extensions can be used in PinballX, the frontend for virtual pinball cabinets. In order to do so, copy DmdDevice64.dll to the PinballX's installation folder, and delete or rename PinDMD.dll. Then, activate the DMD output through the Settings app, and you should be good to go.

Frame Dumping

DMD Extensions can also dump frames to disk. This is needed when colorizing a new game, since both the Serum as well as the Pin2Color editor use them as the basis for the colorization.

Visual PinMAME has a built-in frame dumper, which is enabled when the dmddump folder exists, and both Use external DMD and Show DMD Window are active for a ROM. However, this doesn't work for the DMD rendering of alphanumeric games.

Dmdext's frame dumping not only works for those games, but can also be used to dump frames from Pinball FX and all the other games where VPM isn't involved.

To enable it, update DmdDevice.ini:

[rawoutput]
enabled = true

For dumping frames through dmdext.exe, use the following command line:

dmdext mirror -s <source> --dump-frames

The frames will be dumped to the dmddump folder, which is located where PinMAME is installed. If PinMAME isn't found, a dmddump folder is created in the current working directory. Existing dump files are appended to.

Note however that the frame dumper needs a source that provides a game name. Tested sources are:

  • VPX/VPM
  • Pinball FX
  • Pinball FX3
  • The Pinball Arcade
  • Pro Pinball Ultra (add --dump-frames to ProPinballSlave.bat)

Configuration

Since DmdDevice.dll is called by VPM, we can't pass any configuration parameters to it. Instead, we use DmdDevice.ini which must be located in the same folder as VPinMAME.dll or at the path where the DMDDEVICE_CONFIG environment variable is pointing to.

Note however that it's also possible to make dmdext.exe use the ini instead of command line parameters (using the --use-ini parameter).

Output Configuration

You can also tell dmdext.exe to read the output configuration from DmdDevice.ini instead of passing them as command line arguments. The options are described below.

The output are described by block below.

Command Line DmdDevice.ini Description
-r, --resize [global]
resize
How to downscale SEGA 192x64 or other high-resolution games to smaller displays. Can have three values:
  • stretch - Just fill the available space and ignore the aspect ratio
  • fill - Fill it up so the whole DMD is filled while keeping aspect ratio intact. Pixels will be cropped off.
  • fit - Scale it so the whole image fits on the DMD while keeping aspect ratio intact. There will be white space (uh, more like black space).
--flip-x [global]
fliphorizontally
Flips the image horizontally (left/right)
--flip-y [global]
flipvertically
Flips the image vertically (top/down)
--colorize [global]
colorize
Enable or disable frame-by-frame colorization (inactive in VPX bundle)
--plugin [global]
plugin{n}.path[64]
Enable a third party plugin. See Plugin Configuration
--plugin-passthrough [global]
plugin{n}.passthrough
Enable the plugin to always receive frames. See Plugin Configuration
-d virtual
--no-virtual
[virtualdmd]
enabled
Shows a virtual DMD that renders on the computer screen somewhat nicely
--virtual-stay-on-top [virtualdmd]
stayontop
Virtual DMD stays on top of most other windows
n/a [virtualdmd]
ignorear
If true, allow free resizing of the virtual DMD, otherwise the aspect ratio is locked to the DMD's.
n/a [virtualdmd]
useregistry
If true, read the virtual DMD position from VPM's registry.
--virtual-position [virtualdmd]
left
top
width
height
Position of the virtual DMD. Command line takes in all four in the shown order, where the last (height) is optional.
--virtual-dotsize [virtualdmd]
dotsize
Scale dot size. Use 0.8 for previous default setting.
-d pindmdv1 [pindmd1]
enabled
Enables the 2-bit pinDMD display.
-d pindmdv2 [pindmd2]
enabled
Enables the 4-bit pinDMD2 display.
-d pindmdv3 [pindmd3]
enabled
Enables the RGB24 pinDMDv3 display.
--port [pindmd3]
port
COM port, e.g. COM3.
-d pin2dmd [pin2dmd]
enabled
Enables the RGB24 PIN2DMD display.
n/a [pin2dmd]
delay
Delay in milliseconds to wait after loading a palette.
-d zedmd [zedmd]
enabled
Enables the RGB24 ZeDMD display.
-d zedmdhd [zedmdhd]
enabled
Enables the RGB24 ZeDMD HD display.
-d zedmdwifi [zedmdwifi]
enabled
Enables the RGB24 ZeDMD WiFi display.
-d zedmdhdwifi [zedmdhdwifi]
enabled
Enables the RGB24 ZeDMD HD WiFi display.
--zedmd-debug [zedmd]
debug
Let any ZeDMD show its debug informations.
--zedmd-brightness [zedmd]
brightness
Change any ZeDMD brightness between 0 and 15.
--zedmd-rgborder [zedmd]
rgborder
Change any ZeDMD RGB order between 0 and 5.
--zedmd-scalergb24 [zedmd]
scalergb24
Scale pure RGB24 content on ZeDMD HD. Default: true.
--zedmd-wifi-address [zedmdwifi]
wifi.address
Connect to ZeDMD (HD) WiFi using this IP address.
--zedmd-wifi-port [zedmdwifi]
wifi.port
Connect to ZeDMD (HD) WiFi using this port. Default: 3333.
--zedmd-wifi-ssid [zedmdwifi]
wifi.ssid
Configure ZeDMD (HD) WiFi to use this SSID.
--zedmd-wifi-password [zedmdwifi]
wifi.password
Configure ZeDMD (HD) WiFi to use this password.
n/a [video]
enabled
Enables creating an .avi video from the DMD frames.
n/a [video]
path
Path to folder or .avi file. If a folder is given, it will create a file named after the current game.
n/a [browserstream]
enabled
Enables streaming the DMD in real time to your browser in your LAN.
n/a [browserstream]
port
Port of the web server to listen on
--pinup [pinup]
enable
Enables output to PinUP.
--scaler-mode [global]
scalermode
Use to upscale all frames.

Can have three values:
  • none - No upscaling.
  • doubler - Double all pixels.
  • scale2x - Use Scale2x algorithm.
--scaler-mode [global]
vni.scalermode
Scaler mode for VNI/PAC colorizations. Note: This only applies to 256x64 colorized content files.

Can have two scaling modes:
  • doubler - Double all pixels.
  • scale2x - Use Scale2x algorithm.
--skip-analytics [global]
skipanalytics
If true, Don't send anonymous usage statistics to the developer. More info here.

You can also override all options per game by using the game's name as section name and pre-fixing options with the name of the section (apart from [global] options, which aren't prefixed). For example if you have a PinDMD2 and don't want to use it for Baywatch which has a different resolution, you would create a section like this:

[baywatch]
pindmd2 enabled = false
virtualdmd enabled = true
virtualdmd left = 2500
virtualdmd top = 800
virtualdmd width = 1024
virtualdmd height = 256

This is also useful if you just want to fit the virtual DMD onto different backglasses which have slightly different positions.

Also note that dmdext can retrieve the DMD's position from VPM's registry setting. That means you can use VPM to position the DMD and dmdext will take the same setting for each game. This behavior can be enabled using the useregistry option.

Command Line Configuration

Input options only apply to dmdext.exe, because the DLL is called externally from VPM where no configuration is necessary (apart from enabling it in VPM).

The following parameters are valid for all of dmdext's commands:

Parameter Description Default
--use-ini Path to DmdDevice.ini to use instead of command line options. If no path is provided, the DMDDEVICE_CONFIG environment variable is used as fallback. If just DmdDevice.ini is provided, dmdext will look for it in the current working directory. none
-c, --color Sets the color of a grayscale source that is rendered on an RGB destination. ff3000
-q, --quit-when-done Exit the program when finished, e.g. when Pinball FX2 doesn't receive any frames anymore. false
--quit-after Exit after n milliseconds. If set to -1, waits indefinitely or until source finishes when -q used. -1
--no-clear Don't clear screen when quitting. false
-o, --output-to-file If set, writes all frames as PNG bitmaps to the provided folder.

Note that all options of dmdext.exe are also available via command line:

dmdext --help
dmdext mirror --help
dmdext play --help
dmdext test --help

Mirror Command

The mirror command has the following additional parameters:

Parameter Description Default
-s, --source Required. The source you want to retrieve DMD data from. One of: [ pinballfx2, pinballfx3, pinballarcade, propinball, futurepinball, screen ]. n/a
-f, --fps How many frames per second should be mirrored. 25
--idle-after Wait for number of milliseconds until clearing the screen. Disable with 0. 0
--idle-play Play this file while idleing instead of blank screen. Supported formats: JPG, PNG, GIF. Animated GIFs are supported. none
--position screen - Position and size of screen grabber source. Four values: <Left> <Top> <Right> <Bottom>. 0 0 128 32
--resize-to screen - Resize captured screen to this size. Two values: . 128 32
--grid-spacing screen - How much of the white space around the dot should be cut off (grid size is defined by --resize-to). 1 means same size as the dot, 0.5 half size, etc. 0 for disable. 0
--propinball-args propinball - Arguments send from the Pro Pinball master process. Usually something like: ndmd w0_0_0_0_w m392. Will be set automatically when called through Pro Pinball.
--fx3-legacy pinballfx3 - If set, don't use the memory grabber but the legacy screen grabber, like Pinball FX2. false
--colorize Enable or disable frame-by-frame colorization. Supported on pinballfx3 (memory grabber) and pinballarcade. false

Play Command

The play command has the following additional parameters:

Parameter Description Default
-f, --file Path to the file to play. Currently supported file types: PNG, JPG, BIN (raw). none

Test Command

The test command just outputs a single image. This allows you to test different modes and resolutions without having to start a game.

Parameter Description Default
--format The frame format. One of rgb24, gray2, gray4, coloredgray2, coloredgray4, coloredgray6. rgb24

Examples:

dmdext test
dmdext test --format gray2

ZeDMD

The ZeDMD library (zedmd.dll) is bundled with DmdDevice.dll and dmdext.exe. However, you can also replace this library with a newer version if you wish. To do that, download the latest DLL from here and place it alongside with DmdDevice.dll or dmdext.exe. Note that this might break compatibility, so check your log if ZeDMD suddenly stops working.

USB mode

This is the default maode for ZeDMD. You don't need to configuire anything except setting enabled to true in DmdDevice.ini for [zedmd] or [zedmdhd]. BUit in case you have multiple devices or run into issues with the auto detection and other USB devices attached, you can set a conctrete COM port to use in DmdDevice.ini using port.

WiFi mode

Alternatively ZeDMD could be flashed with a firmware that provides a WiFi mode. In DmdDevice.ini there're special devices named [zedmdwifi] and [zedmdhdwifi] to use it.

To run the ZeDMD in WiFi mode it needs WiFi credentials to establish the network connection. These could also be set once via the DMD Extension. Run dmdext.exe -d zedmd --zedmd-wifi-ssid YOUR_SECRET_SSID --zedmd-wifi-password YOUR_SECRET_PASSWORD. At the next start, ZeDMD will display the IP address it obtained from you WiFI network in the top left corner. This address has to be added as wifi.address to DmdDevice.ini.

You can also perform that configuration without dmdext.exe using this multi-step process: First you have to add the SSID and the password in the zedmd section of DmdDevice.ini using wifi.ssid and wifi.password. These will be submitted to ZeDMD the next time you start DMD Extensions. Once done you should quit DMD Extensions. Now you have to remove wifi.ssid and wifi.password from DmdDevice.ini. At the next start, ZeDMD will display the IP address it obtained from you WiFI network in the top left corner. This address has to be added as wifi.address to DmdDevice.ini.

ZeDMD will store the WiFi credentials internally! So ensure to erase them using one of the processes described above before giving your ZeDMD to someone else!

Colorization

If you are a PC monitor user or have an RGB display (PinDMDv3, PIN2DMD, Pixelcade or ZeDMD), you can enable frame-by-frame colorization for games that are supported by the creators of the virtual pinball community. This means that the DMD will be rendered in color, with up to 64 colors per frame.

There are two natively supported formats: Serum and VNI/PAL/PAC (originally only available for PIN2DMD displays). Additionally, dmdext supports colorization plugins from third parties.

Colorization File Location

All formats keep their files in the altcolor folder, which is located in the same folder as VPM (usually Visual Pinball\VPinMAME\altcolor). In this folder, every game has its separate folder, which contains the colorization files.

Depending on the source, the game folders and colorization files are named differently:

  • In VPM, the game folders are named after the ROM name (e.g. cp_16 for Champion Pub).
  • Serum files can be named anything, but must have the .cRZ extension.
  • VNI/PAL/PAC files can be named anything, but must have the .vni/.pal/.pac extension.
  • In Pinball Arcade and Pinball FX3, the games have different names. Scroll down for a list of game names at the time of writing.

For example, a structure for Champion Pub for all games and all color formats, could look like this (note that if both a .cRZ and VNI/PAL/PAC files are present in the same game folder, the .cRZ file will be used):

altcolor
├── cp_16
│   ├── ChampionPub.cRZ
│   ├── pin2dmd.pal
│   └── pin2dmd.vni
├── ChampionPub
│   ├── ChampionPub.cRZ
│   ├── pin2dmd.pal
│   └── pin2dmd.vni
├── BALLY_Champion_Pub
│   ├── ChampionPub.cRZ
│   ├── pin2dmd.pal
│   ├── pin2dmd.vni
└── 121
    ├── ChampionPub.cRZ
    ├── pin2dmd.pal
    └── pin2dmd.vni

Not about Serum: The library that does Serum colorization (serum.dll) is bundled with DmdDevice.dll and dmdext.exe. However, you can also replace this library with a newer version if you wish. To do that, download the latest DLL from here and place it alongside with DmdDevice.dll or dmdext.exe. Note that this might break compatibility, so check your log if Serum suddenly stops working.

Plugin Configuration

Enabling colorization plugins is done through the plugin.path setting in DmdDevice.ini, or through the --plugin command line option in dmdext.exe. Additionally, you can specify the plugin.passthrough option, which will send frames to the plugin independently of the whether a colorization file is present or not. This is useful for frame dumping.

DmdDevice.ini example:

; load plugins
plugin.0.path = C:\Visual Pinball\VPinMAME\pin2color.dll
plugin.0.path64 = C:\Visual Pinball\VPinMAME\pin2color64.dll
plugin.0.passthrough = false

You can add up to 10 plugins. The first plugin which has a colorization file present or passthrough enabled will be used.

Command line example:

dmdext.exe mirror --source pinballfx3 --colorize --plugin "C:\Visual Pinball\VPinMAME\pin2color.dll" --plugin-passthrough

Note that the --plugin parameter needs to point to a DLL with the correct bitness, i.e. 64-bit dmdext.exe would need the 64-bit version of the plugin.

Also note that without passthrough enabled, the plugin is disabled if no colorization file is present.

Usage

Depending on the source, enabling colorization is different:

  • In VPM, enter setup, open the ROM's game options and enable Use external DMD (dll) as well as Colorize DMD.
  • In Pinball Arcade and Pinball FX3, use the --colorize option when running dmdext.exe.

Colorizations in the VNI/PAL format or the plugin are able to emit selected frames at 256x64, which is twice the normal size. In this case, all frames will be rendered at this resolution. Frames that aren't provided at 256x64 will be upscaled. In the native VNI/PAL/PAC colorizer, you can choose which upscale algorithm to use.

  • For the command line, use the --scaler-mode option. The default is double.
  • In DmdDevice.ini, set the vni.scalermode option.

Breaking Changes

v2.2.2

  • In DmdDevice.ini, the [zedmd] has been split into [zedmd], [zedmdhd], [zedmdwifi], [zedmdhdwifi].
  • ZeDMD HD devices don't use their built-in scaler anymore when attached to DMD Extension. They now leverage the common scalermode setting.
  • ZeDMD firmware versions before 3.6.0 aren't supported anymore.
  • Removed --scale-to-hd in favor of --scaler-mode. Set scaler mode to none if you want to disable scaling.

v2.1.1

  • In DmdDevice.ini, the [ZeDMD] has changed to [zedmd].
  • ZeDMD firmware versions before 3.2.0 aren't supported anymore.

v1.8.0

  • Data types in configuration files are now culture invariant. Meaning if you are running under a Windows UI Culture such as German which normally represents decimals with commas instead of periods you will need to change your configuration file (such as DMDDevice.ini) to use periods for decimal data. The most common example would be those users who are using dotsize setting in your DMDDevice.ini. This was done to standardize the format of numeric data accross different languages.
  • Hardware DMDs aren't probed per default anymore, unless you specifically set the destination. For most people that means that you'll need to provide the -d option when running dmdext.exe.
  • If you are a PinDMDv3 user and are using colored ROMs, you'll want to upgrade your firmware.

Troubleshooting

Flickering with PinDMDv3

Some users reported heavy flickering when running via PinballX. Seems that this is linked to the desktop settings. This seems to help:

  • Go to My Computer
  • Click on Performance Information and Tools on the bottom left
  • Click on Adjust Visual Effects at the top left.
  • When the Performance Window pops up, click on Adjust for Best Appearance. All the boxes should automatically get check marked.
  • Click on Apply, and then OK to get out.

Thanks to xman72!

Still flickering?

Try boosting how fast dmdext grabs the frames. For example, for Pinball FX2, try:

dmdext mirror --source=pinballfx2 --no-virtual -q --fps 60

Default is 25, which seems too slow for some games.

Thanks smoke007 for the tip!

DmdDevice.ini Ignored?

DMD Extensions comes bundled in two versions: A library which is loaded by VPM called DmdDevice.dll, and an executable, dmdext.exe for all the other applications.

The executable ignores DmdDevice.ini because it's configured through command line options (that is, unless you specifically tell it to use a config file with the --use-ini option).

Slow rendering on certain ROMs with VPM?

Use VPM 3.1. If you can't wait there's a beta build here.

Thanks to djrobx for the fix an all others at #52 for reporting.

Weird positioning or no DMD visible at all?

When you override High DPI scaling in the host app (e.g. vpinballx.exe), dmdext is put into a different coordinate system, so your DmdDevice.ini's position settings are applied differently. This can lead to wrong positioning or complete off-screen rendering.

Thanks to outhere for the tip!

Unable to load DLL 'serum.dll'

This can happen if your system doesn't have the needed Visual C++ Redistributable installed. You can download it here.

Thanks Jewer76!

Backglass covers segment displays

Try unchecking "backglass bring to front" by right clicking the backglass (source).

Thanks wiesshund!

Reporting Bugs

Make sure you include the application log, in its entirety. You can usually find it at the same place you copied your DmdDevice.dll or dmdext.exe. However, there are two premises for the log to be created:

  1. You need a log config file. If there's no log config file, no log is created. The log config file is called DmdDevice.log.config for both DmdDevice.dll and DmdDevice64.dll, and dmdext.log.config for dmdext.exe. They must be at the same place as the DLL and EXE respectively.

  2. The user running the host app must have write permissions to the log folder. Per default that's the current working directory. If you have copied the DLL to the Windows\SysWOW64 folder, you don't have write access. In this case you need to write the log elsewhere. You can do that by editing the log config file. The format of the log file is XML. To change the log file location, find this line:

    <target xsi:type="File" name="file" fileName="DmdDevice.log"
    

    And change the fileName attribute to somewhere you can write, for example:

    <target xsi:type="File" name="file" fileName="C:\Users\youruser\DmdDevice.log"
    

For problems with DmdDevice.dll, specially with coloring, set the log level to Trace and reproduce the problem. You can do that by editing DmdDevice.log.config and changing:

<logger name="*" minlevel="Info" writeTo="file" />

to

<logger name="*" minlevel="Trace" writeTo="file" />

If you have a crash, please also include which OS/bitness you're using. If it's about the DLL, let us know where you copied the DLL and which host application you're using (VPM's setup.exe orvpinball.exe, also which version).

You can post bugs at VPUniverse, or preferably here.

Manual Installation

  1. Download the .zip archive, copy its content to your hard drive, preferably in your PATH, and unblock the .exe file (right-click, properties, unblock).
  2. Download and install the Visual C++ Redistributables for Visual Studio 2017.
  3. If you haven't already, download and install the .NET Framework 4.7.2.

If you want to use DMD Extensions with VisualPinMAME:

  1. Copy DmdDevice.dll, DmdDevice64.dll, DmdDevice.ini and DmdDevice.log.config into your VPM folder (usually at Visual Pinball\VPinMAME).
  2. Run the VPM setup
  3. Click on Test, select the game and click on Game Options.
  4. Enable Use External DMD and optionally disable Show DMD.

You can also set this as the default by selecting Default Options in the VPM setup, however note that games that you've already configured won't be affected.

Game Names

Title Pinball Arcade Pinball FX3 Pinball FX
AC/DC ACDC
Attack From Mars AttackFromMars BALLY_Attack_from_Mars 119
Big Buck Hunter PRO BuckHunter
Big Hurt BigHurt
Black Rose BlackRose BALLY_BlackRose 118
Bram Stoker's Dracula Dracula
Cactus Canyon CactusCanyon
Champion Pub ChampionPub BALLY_Champion_Pub 121
Cirqus Voltaire Cirqus BALLY_Cirqus_Voltaire 127
Creature of the Black Lagoon Creature BALLY_Creature_from_the_Black_Lagoon 131
Cue Ball Wizard CueBallWizard
Doctor Who DoctorWho
Dr. Dude and his Excellent Ray DrDude BALLY_Dr_Dude 135
Fish Tales FishTales WMS_Fish_Tales 108
Funhouse FnHouse WMS_Funhouse 134
Ghostbusters GhostBustersStern
Gladiators Gladiators
Harley Davidson HarleyDavidson
High Roller Casino HighRollerCasino
Hurricane Hurricane WMS_Hurricane 126
Indiana Jones: The Pinball Adventure WMS_Indiana_Jones 133
Indianapolis 500 Indy500
Jack·Bot JackBot
Judge Dredd JudgeDredd
Junk Yard JunkYard WMS_Junkyard 110
Last Action Hero LastActionHero
Mary Shelley's Frankenstein Frankenstein
Medieval Madness Mediev WMS_Medieval_Madness 109
Monster Bash Monster WMS_Monster_Bash 130
Mustang Mustang
No Fear: Dangerous Sports NoFear
No Good Gofers Gofers WMS_No_Good_Gofers 128
Party Zone PartyZone BALLY_Party_Zone 120
Pistol Poker PistolPoker
Red and Ted's Road Show RoadShow WMS_Roadshow 125
Rescue 911 Rescue911
Ripley's Believe it Or Not Ripleys
Safe Cracker SafeCracker BALLY_Safe_Cracker 122
Scared Stiff ScaredStiff
Space Station WMS_Space_Station 129
Starship Troopers StarshipTroopers
StarTrek StarTrek
StarTrek: The Next Generation StarTrekTNG 163
Swords of Fury SwordsOfFury 149
Tales of the Arabian Nights Totan WMS_Tales_of_the_Arabian_Nights 132
Teed Off TeedOff
Terminator 2: Judgment Day Terminator2
The Addams Family AddamsFamily 156
The Getaway: High Speed 2 HighSpeed2 WMS_Getaway 111
The Machine: Bride of Pin·Bot BridePB 148
Theatre of Magic TheaterOfMagic BALLY_TheatreOfMagic 117
Twilight Zone TwilightZone 162
Whirlwind WhirlWind 168
White Water WhiteWater WMS_White_Water 124
WHO dunnit WhoDunnit
Whoa Nellie! Big Juicy Melons WhoaNellie
Wipeout Wipeout
World Cup Soccer WorldCup 157
World Tour WorldTour

x64 vs x86

  • For dmdext.exe, take the bitness of your OS. This is important for Pro Pinball, where the bitness of the binary must be the same as dmdext's.
  • For DmdDevice.dll, we now recommend using the 64-bit version (i.e. DmdDevice64.dll).

Build Instructions

  1. Download and install Visual Studio 2022
  2. The unmanaged exports library needs MS Build tools, which come with .NET 3.5. Install Instructions
  3. Recommended: If you want DmdDevice.dll automatically copied to your VPM folder after build, point the VPM_HOME environment variable to your VPM installation folder.
  4. Clone the repo: git clone https://github.com/freezy/dmd-extensions.git
  5. After cloning the repo, you'll need to restore the DllExport dependency. There is a script that does it for you. Go into the cloned repo and run:
    DllExport -action Restore -sln-file DmdExtensions.sln
  6. Open the .sln file in Visual Studio and build the solution.

If you want to build the installer, you'll need the WiX Toolset v3 and its Visual Studio Extension.

Then there is an issue with Fody third party addin that may give you an error ith the $(IntermediateOutputPath). If this occurs, simply close Visual Studio and re-launch the DMD Extensions project and the issue will go away. Reference

Credits

  • NoEx for the excellent TPA grabber code, as well as the Pinball FX3 memory grabber.
  • Tom Speirs, Lucky1, CarnyPriest and Russdx for their help on the DMD code
  • Lucky1 for instructions and details about the coloring features and Pin2DMD support.
  • DJRobX for helping with the dynamic coloring, better performance and much more.
  • mjrgh for debugging and optimizing stuff.
  • Adrian Page from Barnstorm for his help setting up the slave correctly.
  • Funkyman for 64 color support, 256x64 scaling options, bug fixes and code cleanup.
  • To Zen Studios for their support and for making Pinball FX!

IntelliJ Resharper

Finally, thanks to JetBrains for their awesome tools and support of the Open Source Community!

License

GPLv2, see LICENSE.

dmd-extensions's People

Contributors

alinke avatar coding-horror avatar djrobx avatar freezy avatar gyrojoe avatar jasonhsieh avatar jseph avatar lucky01 avatar markadr avatar matttw avatar mista-funky avatar mjrgh avatar mkalkbrenner avatar mrmoose74 avatar noexdev avatar toxieainc avatar vbousquet avatar westworld avatar xantari avatar zesinger avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dmd-extensions's Issues

No Colour on Metallica LE with official pin2dmd.pal

I tried the Metallica 1.70 LE 1.0.0 Rom Patch, but only got black and white. Just tried it with the pin2dmd.pal file from the Metallica Pro patch mtl_170c and it seems to be working. The pin2dmd.pal from the LE patch mtl_170hc doesn't seem to work. I am using a virtual DMD on two screen set-up. Lucky1 said to report the issue to you.

PinDMDv3 working/Non-Working

Hello All..

I'll start by stating that I have a dual screen setup plus a PinDMD3 and I would like to get Pinballfx2 working in Cabinet Mode.

I managed to get the PinDMD3 working with Pinballfx2 but only after I shut down my second monitor. When I do this, I of course lose my backglass image. DMD position in Pinballfx2 is currently set to 0/0. I'm thinking this may have to be different if using a 2nd monitor perhaps? Also note that I have the screen with an orientation of 270.

Another issue I'm having is when I did get the PinDMD3 working, it was blinking quite a bit as if the frames per second were too low. Should I try raising it up from 25? The thing is I'm not sure how to do this. Is the command simply --fps=50 (50 being the example)?

Here's my current log with dual screens running:
dmdext cap

--position argument doesn't work

The value for --position seems to be ignored, as it only renders with the default values. I believe this worked in versions prior to the ones that added --port parameter.

[DLL] Problems with refresh rate

I just installed DMDExt and got it to work. I wanted to install it as it has round dots and color support.

I tested with only one game and found that there appears to be a problem with refresh rate. It is noticably delayed and seems to not refresh screen very well and presents a "ghosting" effect.

This issue does not occur with native VPM and I have a very powerful pincab (16GB DDR4, 4ghz Core i7-6700k, GTX 960, all SSD).

Is there something I can do to make it refresh better?

I noticed there is a VP to VPM sync option. Would that help? What value to put there?

Here is a video of VPM 2.9 Native sttng_l7 ROM:

https://www.youtube.com/watch?v=6YonPW27n7c

Here is a video of VPM 2.9 with DMD Ext sttng_l7 ROM.

https://www.youtube.com/watch?v=SYm8diAYX1U

NOTE: I had to set ignorear = true for sttng_l7 ROM in these videos otherwise right hand 10% of screen gets chopped off.

Using DMDExt 1.5.2 with VPM 2.9 SAM Build (rev 4245)

Here is my config file:
DmdDevice.zip

[EXE] Flickering when capturing Pinball FX2

not sure if this the right place but I thought id try

  1. am trying to use dmd ext with FX2 and get extreme flickering on my pindmd3. i've tried adjusting visual effects and boosting the dmdext frame grab rate but no improvement - any suggestions

  2. do I have to type in the cmd prompt every time I want to use it? what i'm trying to do is have it work through pinball so that when I open up a table it automatically puts the dmd on the pindmd3. cant figure out how to do this

System.BadImageFormatException

Tried 1.5.1 version with same results.

I have win10 64bit systems.
Still running 32bit vpm
Crashes happen when running from VPM setup.exe or from launching a table in VPX.
All files are installed to the same folder (VP, VPM and the DMDEXT) D:\VP
Let me know any other questions you have.
edit: I will say that running the DMDEXT TEST does work fine.
Thanks!
-Mike

 [1] 2017/03/12 19:17:41.513  INFO | Determined color path from assembly path: D:\VP\altcolor 
 [1] 2017/03/12 19:17:41.531  INFO | Starting VPinMAME API through Setup.exe. 
 [1] 2017/03/12 19:17:41.531  INFO | [vpm] Open() 
 [1] 2017/03/12 19:17:41.531  INFO | [vpm] Set_4_Colors_Palette() 
 [1] 2017/03/12 19:17:41.531  INFO | Setting palette to 4 colors... 
 [1] 2017/03/12 19:17:41.531  INFO | [vpm] PM_GameSettings(1) 
 [1] 2017/03/12 19:17:41.531  INFO | Enabling game colorization 
 [1] 2017/03/12 19:17:41.531  INFO | Setting game name: mtl_170hc 
 [1] 2017/03/12 19:17:41.531  INFO | Setting color: #FFFF5820 
 [1] 2017/03/12 19:17:41.549 ERROR | System.BadImageFormatException: Could not load file or assembly 'dmdext, Version=1.5.1.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name: 'dmdext, Version=1.5.1.0, Culture=neutral, PublicKeyToken=null'
   at PinMameDevice.DmdExt.Init()
   at PinMameDevice.DmdDevice.GameSettings(String gameName, UInt64 hardwareGeneration, IntPtr options)

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

[EXE] Customize luminosity per shade

Hello,

I want to thx freezy and the others contributers for this incredible work you made guys for permitting us to use DMD on our Pincab.

I don't have any bugs but I just want to share my gaming experience on the table Rogue One in Pinball FX2.

In fact, i don't know if it's the color or the quality of game's DMD, but Every DOTS seems to have the same level of yellow and this affects the rendering's quality. I can barely notice this when I have to save the score... it's very difficult to read letters.

Is there a solution by changing a parameter ?

Best regards

[DLL] Can't use your version of dmddevice.dll for pinballx nor xdmd - PinDMD3

Mentioned before in a closed case. Might be you thought the issue was resolved since I told you to close the case. For pinballx I put png images - sized 128x32 into "Real DMD Color Images", when this name is the same as in description field of a table the image will show on the DMD.

This doesn't happen if I replace you're dmddevice.dll with the same file what I believe comes from lucky1. Pinballx logfile is exactly the same as when its working.

We need to resolve this if there is going to be only one DLL to rule them all :-)

dmddevice.dll from dmdext doens't work as a replacement for lucky1 release in xdmd either. Same issue - DMD stays black. With lucky1 ( 2.802 - copied from pindmd3 folder xdmd ) UltraDMD does get projected.

Maybe have a chat with Tom Speirs and Lucky1.

[DLL] Fallback to registry settings for virtual DMD position

VPM actually writes DMD dimensions and positioning to the registry. For example, Apollo 13 would have:

HKEY_CURRENT_USER\Software\Freeware\Visual PinMame\apollo13\DMDExt_X
HKEY_CURRENT_USER\Software\Freeware\Visual PinMame\apollo13\DMDExt_Y
HKEY_CURRENT_USER\Software\Freeware\Visual PinMame\apollo13\DMDExt_width
HKEY_CURRENT_USER\Software\Freeware\Visual PinMame\apollo13\DMDExt_height

The DLL could fall back to these values per default when not overridden in the .ini. A global ignoreregistry option to disable that behavior would be needed though.

PinDMD3: Stuttering with SAM build 2.9

Hello Freezy,
I updated from SAM build 2.8 to 2.9 This version shows stuttering animations on my PinDMD3– it looks like 1.5 fps, sometimes a frame (or only one half of a frame) freezes for a few seconds.
Something essential for the PinDMD3 device must have changed from 2.8 to 2.9 - other PinDMD3 users already mentioned the same problem.
Russell Pirie asked me to open the issue here, after having spoken to you today.
Thanks for looking over it!!

Add option to define hue for shade down-sampling on RGB devices

There are basically two modes:

  1. When using the --use-gray4 option, it should configure the display to use the provided color
  2. Otherwise, apply the tint internally and render as RGB.

Color is specified color (#rrggbb). Proposed option name: --tint=#ff0000

Rotate option (low priority!) - enhancement req

Hi. Finally, finally, I got around to playing more extensively with the tool. Works beautifully for mirroring PinballFX2 on a Pinball 2000 style cabinet. It's a more elegant solution than what I was doing before, mirroring and playing back the floating DMD via the localhost loopback via ffmpeg streaming.

I have a couple of other projects that use a similar mirroring solution. Using dmdext instead would require being able to rotate the virtual dmd.

Use case 1:
I have a project that mirrors VPM and dB2S output onto mini virtual DMDs on the playfield apron. It would be easy enough to re-orient the DMD monitor as portrait and rotate the DMD via script or registry. On the other hand, I don't know about dB2S on the third screen (Funhouse, Earthshaker, etc.). Maybe by going into the dB2S designer tool and re-doing these backglasses. That's a bridge too far, I think.

Use case 2:
SlamIt: Big Score - I mirror from the DMD on the playfield to the third monitor. Playfield monitor must be oriented in landscape but can be rotated in-game to portrait. Dmdext can grab the image but it would be rotated and the virtual dmd is defined as a fixed 4:1 aspect ratio. In other words, the virtual would be displayed with the sides squashed in.

I'm not a developer. However, I would not mind taking a crack at a solution. Might be a while because I'm trying to switch my cab project to getting hardware toys installed. Don't do it just for me is what I'm saying. But if it's a quick one. Great!

No virtual display output in Pinball FX2 after Dmdext reports frames received

I'm doing well at the moment as there's no output on my rig for Pinball FX2. DMDext runs elevated, moves its virtual output to my third screen but that's it. The command windows last report is aiming along the lines of frames are being received. I'm following the instructions to the letter other than dropping the no virtual instruction, the rig runs windows 7 three screes with aero enabled. Other mirroring software does work correctly. Ideas welcome, at the moment I'm guessing it may be triggered by a Pinball FX2 update.

This behavior is identical to the issue with TPA I described in CarneyPriests thread. Its odd as the program obviously is working the virtual DMD sets bright orange, move to screen three and then dims as the program starts receiving frames. And that's it, I've tried changing the PFX2 DMD location and the program happily reports a fault in yellow text so it looks like its seeing the correct location. The only trouble I really can identify is my understanding of the syntax as when I tried to change say --position=3294 364 780 to -p=3294 364 780 I get errors.

I've used ActualWindowsManager to mirror in the past and the only similar issue came down to aero/desktop composition settings, but that was an easy one to crack in the end.

Anyhow thank you for the work on this, its appreciated

Scale virtual DMD

I'd like to non-proportionally scale the virtual DMD display, and I can only set width, I can't set height.

Can you allow setting the height and scaling the DMD non-proportionally? I know it'll be a little distorted but I'm OK with that and I'd rather maximize the viewing area in my small DMD monitor at 800x400 res.

Pinball X line code for PinballFX2

This should be an easy one but for some reason I can't get the DMD (PinDMD3) to launch.

I know it's a matter of entering the line code correctly in the Pinball FX2 setup window. I'm not sure whether to launch it Before or After.

Also.. I'm assuming that I add "dmdext mirror" to the executable's box and "--source=pinballfx2 --quit-when-done" to the parameters box.

And should I leave the 2 Launch Before Wait & Launch Before Hide boxes with "Yes"?

No output to pinDMD v3 for Pinball Arcade

It is working perfectly in FX2. Using Windows 10 Pro. Followed the directions for the command line parameters and put into an ADM CMD window. DMDext starts running but nothing is output to pinDMD. Is there something else to set in TPA?

[EXE] DMD doesn't work for Frankenstein on TPA

Hi,

Just raising an issue as sending a pull request with half working code didn't seem right.

I've had a play at getting Frankenstein working, the attached TPAGrabber grabs the DMD succesfully, Doesn't look great in the virtual DMD because of the scaling but better than nothing?.I've not tried on my Pin2DMD.

The values are hardcoded just now and I think I might still be one pixel too far to the right.

I'm not sure what NoEx's code cave is doing but for Frankensten the memory just appear to be for the whole screen so I just offset further back until I got the DMD captured. The "flag" is just a colour of the corner of the DMD and I'm assume 0x02 on the normal dmd is something similiar. I tried it on a few different resolutions and it still seemed to work.

Probably need NoEx to see if the code cave can return a different offset based of the resolution of the DMD. If not perhaps a flag on the grabber or a totally different grabber just for the larger DMD.

Ta

Jason

TPAGrabber.cs.txt

Cmd command does not recognize Real DMD (fx2)

Hello freeze, sorry to bother you again! = /

I decided to write here because I think it would be my most appropriate to try to solve my problem and if other people have the same problem can see this topic.
I apologize again for the inconvenience but I am relentlessly trying to configure the current dmd vishay with pindmdv2 with the pinballx and pinballx emulator but unfortunately I am not getting it.
I ran new tests and still did not succeed.

  1. I have created a path in my path C: / Pinball Fx2. Location where my emulator is and the executable dmdext;
  2. I ran the cmd command in C: / Pinball Fx2 and it recognizes my dmd. Both the virtual image and the image appear in my real dmd.
  3. After configuring dmd in cabinet mode in pinballx 2 to 0 0 1040 272 and executing the command in cmd dmdext mirror --source = pinballfx2 --no-virtual, my real dmd disappears the "dmdext" image and stays with the Black screen and the virtual dmd remains with this image.
  4. When starting a table, the actual dmd screen is still black and the virtual dmd is with the dmdext still image.

Cmd command below:

C:\Users\Thiago>dmdext test
[1] 2017/04/04 22:50:56.312 INFO | Launching console tool.
[1] 2017/04/04 22:50:56.344 DEBUG | PinDMDv1 device not found.
[1] 2017/04/04 22:50:56.375 INFO | Found PinDMDv2 device.
[1] 2017/04/04 22:50:56.375 DEBUG | Manufacturer: pinDMD
[1] 2017/04/04 22:50:56.375 DEBUG | Product: pinDMD V2
[1] 2017/04/04 22:50:56.375 DEBUG | Serial: 00000000050C
[1] 2017/04/04 22:50:56.375 DEBUG | Language ID: 1035
[1] 2017/04/04 22:50:56.391 DEBUG | Checking port COM1 for PinDMDv3...
[1] 2017/04/04 22:50:56.484 DEBUG | Error: Parâmetro incorreto.
[1] 2017/04/04 22:50:56.484 DEBUG | PinDMDv3 device not found.
[1] 2017/04/04 22:50:56.500 DEBUG | Device found but it's not a ******* device (pinDMD V2).
[1] 2017/04/04 22:50:56.656 INFO | Added PinDMDv2 renderer.
[1] 2017/04/04 22:50:56.719 INFO | Added VirtualDMD renderer.
[1] 2017/04/04 22:50:56.734 DEBUG | Resizing virtual DMD to 128x32
[1] 2017/04/04 22:50:56.734 INFO | Setting up Render Graph for 2 destination(s)
[1] 2017/04/04 22:50:56.750 INFO | Connecting Image Source to PinDMD v2 (Bitmap => Gray4)
[1] 2017/04/04 22:50:56.781 INFO | Connecting Image Source to Dmd (Bitmap => Bitmap)
[1] 2017/04/04 22:50:56.797 INFO | Press CTRL+C to close.
[5] 2017/04/04 23:03:19.463 INFO | Source for 2 renderer(s) stopped.
[5] 2017/04/04 23:03:19.463 DEBUG | Disposing render graph.

C:\Users\Thiago>dmdext mirror --source=pinballfx2 --no-virtual
[1] 2017/04/04 22:52:24.852 INFO | Launching console tool.
[1] 2017/04/04 22:52:24.886 DEBUG | PinDMDv1 device not found.
[1] 2017/04/04 22:52:24.918 INFO | Found PinDMDv2 device.
[1] 2017/04/04 22:52:24.919 DEBUG | Manufacturer: pinDMD
[1] 2017/04/04 22:52:24.919 DEBUG | Product: pinDMD V2
[1] 2017/04/04 22:52:24.919 DEBUG | Serial: 00000000050C
[1] 2017/04/04 22:52:24.919 DEBUG | Language ID: 1035
[1] 2017/04/04 22:52:24.919 DEBUG | Checking port COM1 for PinDMDv3...
[1] 2017/04/04 22:52:25.003 DEBUG | Error: Parâmetro incorreto.
[1] 2017/04/04 22:52:25.003 DEBUG | PinDMDv3 device not found.
[1] 2017/04/04 22:52:25.020 DEBUG | Device found but it's not a ******* device (pinDMD V2).
[1] 2017/04/04 22:52:25.144 INFO | Added PinDMDv2 renderer.
[1] 2017/04/04 22:52:25.144 DEBUG | VirtualDMD disabled.
[1] 2017/04/04 22:52:25.167 INFO | Setting up Render Graph for 1 destination(s)
[1] 2017/04/04 22:52:25.173 INFO | Press CTRL+C to close.

You said in another forum that my fx2 pinball is not being recognized. But I can not say why this is happening, because I am following your step by step and unfortunately I am not succeeding.

I really do not know why when I run the command
"Dmdext mirror --source = pinballfx2 --no-virtual" the pinball fx2 does not recognize in the cmd command and when I run the pinball fx2 the virtual dmd remains in the "dmdext" image and the real dmd the screen turns black.

What do you think it could be? Any dll problem? Any inappropriate folder?

I did the tests by executing only the commands

Dmdext mirror --source = pinballfx2

Without putting the option --no-virtual
And I recognized the Pinball fx2 in the cmd command, also opened the virtual dmd in my playfield with the dmd of the tables of the pinball game fx2, but the real dmd still continues with black screen.

In the same way when I execute the command

Dmdext.exe mirror -s PINBALLFX2 - 0 0 128 32-d pindmd

The following log appears

C: \ Pinball FX2> dmdext.exe mirror -s PINBALLFX2 - 0 0 128 32-d pindmd
 [1] 2017/04/08 16: 33: 52.480 INFO | Launching console tool.
 [1] 2017/04/08 16: 33: 52.517 DEBUG | PinDMDv1 device not found.
 [1] 2017/04/08 16: 33: 52.551 INFO | Found PinDMDv2 Device.
 [1] 2017/04/08 16: 33: 52.551 DEBUG | Manufacturer: pinDMD
 [1] 2017/04/08 16: 33: 52.551 DEBUG | Product: pinDMD V2
 [1] 2017/04/08 16: 33: 52.551 DEBUG | Serial: 00000000050C
 [1] 2017/04/08 16: 33: 52.551 DEBUG | Language ID: 1035
 [1] 2017/04/08 16: 33: 52.551 DEBUG | Checking port COM1 for PinDMDv3 ...
 [1] 2017/04/08 16: 33: 52.637 DEBUG | Error: Incorrect parameter.
 [1] 2017/04/08 16: 33: 52.637 DEBUG | PinDMDv3 device not found.
 [1] 2017/04/08 16: 33: 52.645 DEBUG | Device found but it's not a PIN2DMD device (pinDMD V2).
 [1] 2017/04/08 16: 33: 52.769 INFO | Added PinDMDv2 renderer.
 [1] 2017/04/08 16: 33: 52.850 INFO | Added VirtualDMD renderer.
 [1] 2017/04/08 16: 33: 52,850 DEBUG | Resizing virtual DMD to 128x32
 [1] 2017/04/08 16: 33: 52.861 INFO | Setting up Render Graph for 2 destination (s)
 [1] 2017/04/08 16: 33: 52.874 INFO | Connecting Pinball FX2 to Dmd (ColoredGray2 => Rgb24)
 [1] 2017/04/08 16: 33: 52.874 INFO | Capturing at 25 frames per second ...
 [1] 2017/04/08 16: 33: 52.890 INFO | Waiting for Pinball FX2 to spawn ...
 [1] 2017/04/08 16: 33: 52.911 INFO | Press CTRL + C to close.
 [4] 2017/04/08 16: 33: 52.911 INFO | Frames coming in from Pinball FX2.

When I run the "screen" command the current dmd works more in a cluttered way. It is not enough to understand what is happening in the real dmd. Just the sign in your rgb's

What could be that it is getting black screen in my real dmd or when I put the command "--no-virtual" it does not recognize the current dmd. What could it be?

Would I have some command or something I'm not doing so I can work with my real dmd along with the fx2 pinball?

I apologize for the inconvenience. Whatever you can help me, I thank you very much!

[EXE] mirror command, source=screen, -flip-x and -flip-y do not work

1.5

Seems to work fine with pinballfx2

I'm trying to mirror the DMD from SlamIt: Big Score. It is a single screen table. Like how most people set up VP, the playfield screen is set up in landscape orientation. So, the area I'm trying to capture has an aspect ratio of 1:4 rather than 4:1. I would not think that would have anything to do with affecting image flip functions.

Add 'stay on top' - for virtual DMD

Create a command (or can you make a switch) for the virtual DMD to 'stay on top'. This would help me determine minimum system requirements for this app.

[LIB] Rotate DMD 90° for portrait setups where screen is not rotated

I play vpx in FS mode on one monitor, so the playfield and dmd are on the same monitor.
Because of this i need to be able to rotate the dmd to the left, so the 'rol' or 'ror' option for vpinmame.

Is there a way i can do this with the dmdext dmd? I only see an option to flip the image but no option to rotate.

dmdext play

Just github latest 1.5, directly extracted to c:-test - no adjustments to ini-file, so everything is probed. If I run with demo param, it plays demo image, but still not on the dmd - only virtual. Adjust *.ini for pindmd3. Still same issue. Replaced the dll you gave me a couple of weeks ago. That code was very close to at least work for VP. Same issue.

I hope you could have a peek at this forum thread

http://vpuniverse.com/forums/forums/topic/2952-pindmd3-dmddevicedll-almost-there/

I can't use you code in either c:\pinballx or c:\visual_pinball\xdmd. Doing so, and the DMD will not show. I can however use the ones that comes with Pinmame 2.8b - but, I don't believe it wise to have several versions laying around :-)

I so wish for this to work - very close it seems.

thalamus@PINBALL C:\-test\dmdext-v1.5.0
$ dmdext.exe play --file "c:\Pinball_Resources\Company Logos\Williams.png"
[1] 2017/02/14 17:09:38.211 DEBUG | PinDMDv1 device not found.
[1] 2017/02/14 17:09:38.258 DEBUG | PinDMDv2 device not found.
[1] 2017/02/14 17:09:38.258 DEBUG | Checking port COM1 for PinDMDv3...
[1] 2017/02/14 17:09:38.336 DEBUG | Error: The parameter is incorrect.
[1] 2017/02/14 17:09:38.336 DEBUG | Checking port COM3 for PinDMDv3...
[1] 2017/02/14 17:09:38.476 INFO | Found PinDMDv3 device on COM3.
[1] 2017/02/14 17:09:38.476 DEBUG | Firmware: REV-vPin-01008
[1] 2017/02/14 17:09:38.476 DEBUG | Resolution: 128x32
[1] 2017/02/14 17:09:38.601 DEBUG | ******* device not found.
[1] 2017/02/14 17:09:38.601 INFO | Added PinDMDv3 renderer.
[1] 2017/02/14 17:09:38.648 INFO | Added VirtualDMD renderer.
[1] 2017/02/14 17:09:38.648 DEBUG | Resizing virtual DMD to 128x32
[1] 2017/02/14 17:09:38.663 INFO | Setting up Render Graph for 2 destination(s)
[1] 2017/02/14 17:09:38.679 INFO | Connecting Image Source to PinDMD v3 (Bitmap => Rgb24)
[1] 2017/02/14 17:09:38.710 INFO | Connecting Image Source to Dmd (Bitmap => Bitmap)
[1] 2017/02/14 17:09:38.710 INFO | Press CTRL+C to close.
[10] 2017/02/14 17:09:38.710 ERROR | The calling thread cannot access this object because a different thread owns it.
[10] 2017/02/14 17:09:38.710 ERROR | System.InvalidOperationException: The calling thread cannot access this object because a
different thread owns it.
at System.Windows.Threading.Dispatcher.VerifyAccess()
at System.Windows.Media.Imaging.BitmapSource.get_PixelWidth()
at LibDmd.Common.ImageUtil.ConvertToRgb24(BitmapSource bmp, Double lum) in C:\Development\dmd-extensions\LibDmd\Common\Imag
eUtil.cs:line 121
at System.Reactive.Linq.ObservableImpl.Select`2._.OnNext(TSource value)
--- End of stack trace from previous location where exception was thrown ---
at System.Reactive.PlatformServices.DefaultExceptionServices.Rethrow(Exception exception)
at System.Reactive.Stubs.<.cctor>b__1(Exception ex)
at System.Reactive.AnonymousSafeObserver`1.OnError(Exception error)
at System.Reactive.Linq.ObservableImpl.Select`2._.OnError(Exception error)
at System.Reactive.Linq.ObservableImpl.Select`2._.OnNext(TSource value)
at System.Reactive.ScheduledObserver`1.Dispatch(ICancelable cancel)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state,
Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean
preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

Unhandled Exception: System.InvalidOperationException: The calling thread cannot access this object because a different thread
owns it.
at System.Windows.Threading.Dispatcher.VerifyAccess()
at System.Windows.Media.Imaging.BitmapSource.get_PixelWidth()
at LibDmd.Common.ImageUtil.ConvertToRgb24(BitmapSource bmp, Double lum) in C:\Development\dmd-extensions\LibDmd\Common\Imag
eUtil.cs:line 121
at System.Reactive.Linq.ObservableImpl.Select`2._.OnNext(TSource value)
--- End of stack trace from previous location where exception was thrown ---
at System.Reactive.PlatformServices.DefaultExceptionServices.Rethrow(Exception exception)
at System.Reactive.Stubs.<.cctor>b__1(Exception ex)
at System.Reactive.AnonymousSafeObserver`1.OnError(Exception error)
at System.Reactive.Linq.ObservableImpl.Select`2._.OnError(Exception error)
at System.Reactive.Linq.ObservableImpl.Select`2._.OnNext(TSource value)
at System.Reactive.ScheduledObserver`1.Dispatch(ICancelable cancel)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state,
Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean
preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

thalamus@PINBALL C:\-test\dmdext-v1.5.0 

Fix PIN2DMD matching

Product ID instead of manufacturer. It's "PIN2DMD" and "PIN2DMD XL" for the 64x192 panels.

mtl_170hc not writing the nvram when in pinballX front end and showpindmd 1

I only noticed when the latest metallica premium monsters was released. It doesn’t write the nvram when in the pinballX front end and when external DMD is enabled. (2.9 final, 10.3 final, 1.5.2 freezy, LED monitor for DMD, windows7x64) Now I go back and discover sliderpoint’s original release has the problem as well. If I disable the external DMD, it writes fine when in pinballX front end. Checked ACDC, doesn't have the problem, Spiderman LE no problem. If I launch the table in the vpinballx.exe 10.3 with no pinballX front end, and external DMD enabled it writes the nvram just fine. I put in the newest 2.36 pinballX, no change.

Add idle and blank animations

When switching tables in TPA, from one that has a DMD, to one that does not, the DMD stays "stuck" on whatever the last image it was sent.

It would be cool if there was an "idle animation" that the DMD could send when it is not getting any data. So I guess what I am asking for is:

If the DMD doesn't receive any data in (x) seconds... either..

  1. Make the DMD go blank
  2. Make the DMD display a fixed image
  3. Make the DMD display a cycling animation

I'd love to see some cool "FREE PLAY!" animations going on when the DMD is no longer active ;)

How to run dmdext along with the other emulators and pinballx

Freeze, how are you?
I apologize bother you again. But I'm having the following problem.
I was having trouble executing my dmdext and you solved it for me by forwarding a new executable, according to # 47 questioning. This for me was already a great achievement and perfect. But unfortunately I am not able to run the dmdext of fx2 along with the other emulators and pinballx.
Dmdext is running normally through the emulator when I run the cmd command "dmdext mirror -s pinballfx2".
It happens that when leaving fx2 for example and run another emulator like future pinball or visual pinball or even the pinballx it disables the dmd of these other emulators and pinballx (the screen turns black). Also in pinballx the dmd in fx2 is not running. The virtual dmd window appears but does not run in the fx2 pinball, only when I run directly through the emulator.
When I close the cmd command mentioned above, the visual pinball fp and the menu pinballx the dmd come back to work. When I enable the cmd again direct by the emulator of fx2 the dmd of fx2 returns to work and the others stop, and vice versa.
What could it be? I did an update of windows 10 that I was needing but I believe this is not the problem. Let me know what you can help me.
Another question I wanted to see with you. Every time I want to run dmdext from fx2 I need to enable. Is not there a way for the command to be saved? For when I play the fx2 in pinballx it already works? In pinballx when configuring fx2 for it I mentioned the path of cmd "mirror -s pinballfx2 -q". But it is not solving because I am having the problems mentioned above.
Please let me know what can be done. Could you help me one more time?
Sorry for the inconvenience.
Thank you very much for your attention.
Have a great day!

No virtual dmd output on TPA

I've just started using dmdext. I've tried mirroring pinballarcade to virtual but not seeing any frames displayed although the program output says that it is detecting frames. I do get a virtual dmd on startup (all dots illuminated, grip handle, etc.).

As mentioned, I just started testing this yesterday on the current release which does use the new UI.

I believe NoEx did have to make some changes to the FreeCabMod program... to the extent that he did change the name of the executable. I have no idea if that has any bearing here. But I don't know the next step for me to continue troubleshooting. I haven't seen anyone else posting about issues. OTOH, I may be the only one with a use case for flipping a virtual DMD.

I have not yet gotten around to assembling my Pin2DMD system.

It's not a big priority. I don't have much invested at all in TPA.

VirtualDMD not staying on top of directB2S

VirtualDMD not staying on top of directB2S. It is opening behind the directB2S backglass even though this is set to DMD Visible. I have had this problem with V10.2 and the Spiderman VE Rom and in VP10.1 with the Shrek Rom. Normal Vpinmame DMD will always stay on top with no problems.

DMD Extension Change/ Lock/Save position

Probably a noobish question. But I am soon completely balled due
to head-scratching.
I have figured out how to startup and show the DMD Extension in a 2 pc-monitor setup. But...
When I start DMD Extension, it spawns on my playfield monitor (display1). I need it to spawn on
my backbox monitor (display2)

I can of course mouse "drag and drop" the DMD to the preferred backbox-monitor, but the next time i start the cmd-prompt it spawns on my playfield monitor again.
How can I choose on which monitor (displayport) the DMD starts up? and how to lock that setting.

Thx

[EXE] pinDMD3 not working right with pinball FX2 in latest release 1.5

only some of the scenes seem to be displaying now. at times when there is only text on the in-game dmd, the pindmd3 is completely black.

also previously there were some shading options in dmdext which I was using to adjust it for fx2 because black background from the in-game dmd was showing as color in the real dmd, not sure if that is related.

Virtual DMD resize indicator

I would like to use the virtual DMD in this project to replace the original PinballFX2 DMD. And was therefor wondering if it is possible to remove or hide the resize indicator in the lower right corner?
untitled

[EXE] Enable time based image play

I was hoping get get a param that would simply display a given image a set amount of time, Eg.

dmdext display -s 1 -f logo.png

an option for the dmd to clear or keep the image after time period as well.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.