Drivers Portrait Displays

Calman Display Calibration Software directly controls many hardware devices, including light meters, pattern sources, LUT processors, and display devices. The control interface to these devices may be USB, RS-232 serial, or wired or wireless network IP connections.

If the hardware device has a USB interface connection and is connected to a USB computer port, the computer needs to have a device driver installed (unless it is a USB HID device; see below). The device driver tells the computer how to properly handle data communications between the computer and the hardware USB device.

USB HID Devices

The USB Human Interface Device (HID) class is a specification for computer peripherals such as keyboards, mice, and game controllers. A computer doesn’t require a separate device driver for USB HID devices because they are recognized and handled directly by the Windows operating system. Other devices that comply with the USB HID spec are also recognized automatically by a computer and don’t require a separate device driver.

USB HID devices that are supported by Calman include the SpectraCal C6 Colorimeter and the X-Rite i1Display light meters. When one of these meters is plugged into a computer, Windows automatically connects to the meter without requiring an external device driver.

Network Control Devices

Check out our support resources for your P2350 Series Business Monitor P2350-1 to find manuals, specs, features, and FAQs. You can also register your product to gain access to Samsung's world-class customer support.

If the hardware device is connected to a computer via a wired or wireless IP network connection, the computer does not require a device driver for that device.

Serial Control Devices

  • About / Contact Portrait Displays About Portrait Displays, Inc., since 1993, is a leading application software provider (ASP) for PC, smartphone, and tablet displays. The Portrait Displays team now includes SpectraCal, the world’s leading provider of video display calibration software.
  • CalMAN Display Calibration Software directly controls many hardware devices, including light meters, pattern sources, LUT processors, and display devices. The control interface to these devices may be USB, RS-232 serial, or wired or wireless network IP connections.

If the hardware device has an RS-232 serial connection and is directly connected to a computer serial port, the computer does not require a device driver for that device.

However, since most computers no longer provide a serial port, a serial hardware device will usually be connected to a computer via a USB to serial converter. In that case, the computer needs to have a device driver installed to properly communicate through the USB to serial converter.

USB to Serial Converters

If a hardware device has an RS-232 serial connection, a USB to serial converter is usually used to connect the serial device to a computer’s USB port.

The computer sends data to and receives data from the USB port on the converter. The converter translates that data, through its serial port, to a serial hardware device. The computer requires a device driver to tell it how to properly handle data communications with the USB port on the USB to serial converter.

A data buffer is included within some USB to serial converters. The data buffer improves the reliability of a device interface at high data rates. Many USB to serial converters without a data buffer do not provide a reliable interface between Calman and hardware devices. The USB to serial converters produced by FTDI include a data buffer. The FTDI converters have been tested with all hardware devices supported by Calman and have been certified to provide a reliable interface in all cases.

For more information, see the Calman setup guide for the FTDI USB to serial converters.

Obtaining Device Drivers

Device drivers can be obtained in a number of ways.

The required device driver can often be obtained from the hardware device manufacturer. Device manufacturers may package a device driver with the device or they may provide a device driver download on their device support page.

In cases where the manufacturer supplies operating software with the hardware device, the device driver may be installed as part of the manufacturer’s operating software installation.

If you will only ever connect one or two USB devices to a Calman computer, you may wish to obtain the device driver for your device(s) directly from the device manufacturer.

For convenience, SpectraCal provides a Device Driver Pack that includes device drivers for most of the hardware devices supported by Calman.

To ensure that you have the proper driver, or if you will be connecting a number of different USB devices to Calman, you may wish to download the Calman Device Driver Pack from the Calman Download page to install all supported device drivers on the Calman computer.

Installing Device Drivers

Installing the SpectraCal Device Driver Pack on a Calman computer automatically installs and registers the included device drivers for Calman supported hardware. Installing a driver that you obtain directly from a device manufacturer also automatically registers the device driver in Windows.

When a hardware device is then connected to the Calman for the first time, the proper device driver is automatically associated with the device.

Unsigned Device Drivers

Many currently available device drivers have not been tested and certified by Microsoft. These drivers are referred to as unsigned device drivers. Some of the drivers provided in the SpectraCal Device Driver Pack are unsigned.

Windows 7 or Earlier

If you are installing an unsigned device driver in Windows 7 or earlier, a Windows Security dialog will open to give us a choice of whether or not to install an unsigned device driver. If you feel comfortable with the source of your device driver file, you will probably want to select the Install Anyway option.

Windows 8.0 or Later

If you are installing an unsigned device driver in Windows 8.0 or later, you will need to follow one of the special driver installation procedures below.

  • Windows 8.0
  1. Open Settings (move your mouse to the top or bottom right corner of the screen and wait for the charm bar to appear, then click the Gear icon)
  2. Click Change PC Settings
  3. Click General
  4. Scroll down and click Restart Now under Advanced Startup
  5. Click Troubleshoot
  6. Click Advanced Options
  7. Click Windows Startup Settings
  8. Click Restart
  9. When the computer restarts, select Disable Driver Signature Enforcement from the list.
  10. You can now load the unsigned driver(s). After restarting the computer, any drivers that you installed will continue to function.

Note: This may need to be repeated each time you update your graphics driver.

  • Windows 8.1 and Windows 10
  1. While holding down the Shift key, go to SettingsPowerRestart
  2. On shutdown, you will be presented a list of Options. Select Troubleshoot
  3. On the Troubleshoot menu, select Advanced Options
  4. On Advanced Options, select Startup Settings
  5. Click Restart - Machine will reboot.
  6. This will bring you to Startup Settings. Select 7 - Disable driver signature enforcement

When Windows starts, Driver Signature Enforcement is disabled.

You can now load the unsigned driver(s).

After a normal reboot, Driver Signature Enforcement will re-enable. Any drivers that were installed while it was disabled will continue to function.

Windows Device Manager

When a USB-controlled hardware device is connected to a computer, Windows first needs to recognize the device and properly connect to it. The proper device driver needs to be registered with Windows to support that device connection. Only if Windows is properly connected to a device, will Calman also then be able to connect to the device.

Windows Device Manager is the important software utility for managing Windows connections to the external hardware devices that we are then going to want to connect to Calman. Device Manager allows us to check a device connected to Windows and manage the device’s driver registration.

Note: When Calman is unable to connect to a USB-controlled hardware device (or a USB to serial converter), Device Manager is one of the first places to check.

Any device that is connected to a computer’s USB port will create a device listing in Device Manager. The device will either be listed under an existing device type (e.g. “Ports (COM & LPT)”, or a new Device Type will appear (e.g. “X-Rite Devices”)

Under its particular Device Type, the device will be given a Device Description (e.g. “USB Serial Port (COM6),” “ColorMunki Smile”).

Alternately connecting and disconnecting the USB plug for the device in question may help to identify which device listing in Device Manager corresponds to the hardware device in question.

Virtual COM Port Drivers

Some USB devices use a Virtual COM port (VCP) driver, which causes the USB device to appear as an additional COM port available to the PC (listed in Windows Device Manager, under the Ports (COM & LPT) type, as a “USB Serial Port (COMx)” device.

Calman software can then access the USB device as it would a standard COM port. Note the designated COM port number in Device Manager (COMx), as you will need to select that port number on the Calman device connect dialog.

Normal Device Manager Listings

Following are many of the popular hardware devices that are supported by Calman that require a Windows device driver to support their USB connection. Following each device name is the Device Type and Device Description, as they will be listed in Device Manager when the proper device driver is installed.

If your device is listed some other way in Device Manager, the device driver is not installed properly.

  • AV Foundry VideoForge Classic
    • Network Adapters > RNDIS Gadget
  • EIZO Monitors
    • Human Interface Devices >
  • Fujifilm IS-mini
    • Universal Serial Bus Controllers > IS-mini
  • FTDI USB to Serial Converter
    • Universal Serial Bus Controllers > USB Serial Converter
  • HDfury Integral 4K60
    • Universal Serial Bus Controllers > USBXpress Device
  • HP Z27x
    • Libusb-win32 devices > HP Z27x USB
  • Klein K10
    • Universal Serial Bus Controllers > USB Serial Converter
      (meter has internal FTDI converter)
  • Lumagen Radiance Pro
    • Ports (COM & LPT) > USB Serial Port (COMx)
  • Murideo SIX-G
    • Ports (COM & LPT) > USB Serial Port (COMx)
  • Quantum Data 780-series generators
    • Ports (COM & LPT) > USB Serial Port (COMx)
  • SpectraCal C3 Colorimeter
    • X-Rite Devices > ColorMunki Smile
  • SpectraCal C6 Colorimeter
    • Human Interface Devices > USB Input Device
  • SpectraCal ColorBox/eeColor
    • Universal Serial Bus Controllers > USB Serial Converter A, USB Serial Converter B
      (unit has internal FTDI converters)
  • SpectraCal VideoForge PRO
    • Ports (COM & LPT) > USB Serial Port (COMx)
  • UPRtek MK550T Spectroradiometer
    • Human Interface Devices > USB Input Device
  • X-Rite i1Pro 2
    • X-Rite Devices > i1 Pro
  • X-Rite i1Display
    • Human Interface Devices > USB Input Device

Updating a Device Driver

If a hardware device was connected to the computer before its correct device driver was installed, Windows may have registered an incorrect device driver to the device. In that case, you may need to uninstall the incorrect driver (in Windows Device Manager), then reconnect the device to the correct device driver.

Follow these steps to update a device driver:
  1. Identify the device listing in Windows Device Manager that corresponds to the hardware device of interest. Alternately connect and disconnect the device USB connection as you are watching the Device Manager screen to identify the listing.
  2. Right-click on the device description and select Update driver from the pop-up menu.
  3. When asked how you want to search for drivers, select Browse my computer for driver software
  4. On the following screen, click the Browse button.
  5. Navigate to the drive folder containing the correct driver for the hardware device. For the Device Driver Pack, that is:
    C:Program Files (x86)SpectraCalDrivers (corresponding device folder)
  6. Click the OK/Next button to update the driver.


The Auto-correct method discussed later in this topic is the recommended solution to non-reference orientation mounting of camera sensors. This is to ensure app compatibility since the majority of the applications already written to use camera feeds do not know to check for, nor correct for rotation information. Please carefully review the information in the auto-correct section below.

As different form factors computing devices are introduced, some of the physical constraints result in camera sensors being mounted in a non-traditional orientation. Because of this, it is necessary to properly describe to the OS and application, how the sensors are mounted so the resulting video can be rendered/recorded properly.

Starting with Window 10, version 1607, all camera drivers are required to explicitly specify the camera orientation regardless if the camera is mounted in accordance with the Minimum hardware requirements.Specifically, a camera driver must set a newly introduced field, Rotation, in the ACPI _PLD structure associated with a capture device interface:

For camera, the Rotation field in an ACPI _PLD structure specifies the number of degrees ('0' for 0°, '2' for 90°, '4' for 180°, and '6' for 270°) a captured frame is rotated relative to the screen while the display is in its native orientation.

Based on the value in the Rotation field, an application can perform additional rotation, if necessary, in order to render captured frames correctly.

Rotation Values

For those devices whose cameras and displays share the same housing (or enclosure/casing), it is possible to have these peripherals be mounted on different surfaces with each of them being rotated by a fixed yet arbitrary degrees on its respective plane. Consequently, an application needs a mechanism to describe the spatial relationship between the two peripherals such that a captured frame can be transposed onto the rendering surface in the correct orientation.

One way to solve the problem is to use the ACPI _PLD structure which already has the concepts of surface and degrees of rotation defined. For example, the _PLD structure already has panel field which specifies the surface on which a peripheral reside:

Definition of ACPI _PLD Panel field (Rev. 5.0a)

The next two diagrams illustrate the definition of each panel visually:

Panel definitions for desktop PCs and most devices

Panel definitions for foldable devices

In fact, the concept of an ACPI 'panel' is already adopted by Windows where:

  • A camera device interface is associated with a _PLD structure with the Panel field being set accordingly if a capture device is statically mounted at a fixed location.

  • An application can retrieve the panel on which a capture device resides by calling the Windows.Devices.Enumeration.DeviceInformation.EnclosureLocation.Panel property.

The ACPI _PLD structure also has a Rotation field defined as follow:

Definition of ACPI _PLD Rotation field (Rev 5.0a)

Instead of using the definition above as is, we further refine it to avoid ambiguity:

  • For camera, the Rotation field in an ACPI _PLD structure specifies the number of degrees (‘0’ for 0°, ‘2’ for 90°, ‘4’ for 180°, and ‘6’ for 270°) a captured frame is rotated relative to the screen while the display is in its native orientation.

Landscape Primary vs Portrait Primary

In Windows, one can query the native display orientation by calling the property, Windows.Graphics.Display.DisplayInformation.NativeOrientation, which returns either Landscape or Portrait:

No matter which value NativeOrientation returns, the logical display scanning pattern starts from the top-left corner of the display moving from left to right downwards (see Figure 5). For those devices whose default physical orientation is inexplicit, this property not only implies the location of an ACPI Top panel but also provides the spatial relationship between a camera output buffer and the rendering surface.

Note that, unlike camera, the NativeOrientation property is not based on ACPI and thus does not have a _PLD structure. This is true even if a display is statically mounted to a device.

When mounting on a Portrait Primary device, camera drivers must be aware that most applications will treat the device as outputting a landscape camera output buffer regardless of the actual camera output buffer orientation. Because of this, we recommend that camera drivers output a camera buffer that has a 90 degree orientation offset from the NativeOrientation Portrait when on a Portrait Primary device. This will then allow applications that are performing this additional rotation on portrait devices to correct the rotation to the expected orientation. This can be verified using the Camera Application with Rotation Sample.

Drivers Portrait Displays

Offset Mounting

IHV/OEMs are strongly encouraged to avoid mounting the sensor in a non-0 degree offset to maintain app compatibility. Many existing and legacy apps do not know to look for the ACPI’s PLD table, nor will attempt to correct the non-0 degree offset. Consequently, for such apps the resulting video will be rendered incorrectly.

In cases where IHV/OEMs are unable to mount the sensor in 0 degree orientation as described above, the following mitigation steps are recommended in the order of preference:

  1. Auto-Correct the non-0 degree orientation within the Camera Driver (either in kernel mode with the AV stream miniport driver or in user mode using a plug in such as Device MFT or MFT0) so the resulting output frames are in the 0 degree orientation.

  2. Declare the non-0 degree orientation via FSSensorOrientation tag so the Camera Pipeline can correct the captured image.

  3. Declare the non-0 degree orientation in the ACPI’s PLD table as described above.

Compressed/Encoded Media Types

For Compressed and/or Encoded Media Types (such as MJPG, JPEG, H264, HEVC), pipeline correct cannot be used. Because of this, Compressed/Encoded Media Types will be filtered out if the FSSensorOrientation is set to a non-zero value.

In the case of MJPG media types (such as those from a UVC camera), the Frame Server pipeline provides an auto-decoded media type (NV12 or YUY2 for DShow based applications). The auto-decoded and corrected media type will be presented, but the original MJPG format will not.

[!NOTE!]If Compressed/Encoded Media Types must be exposed to applications, IHV/ODMs must not utilize the FSSensorOrientation correction. Instead, the correction must be done by the camera driver (either in kernel mode via the AV Stream driver or in user mode via DMFT/MFT0).

Auto-Correct via AV Stream Miniport/Device MFT/MFT0

The recommended scenario if the sensors cannot be mounted with a 0 degree offset, is to have the AV Stream miniport driver (or the user mode plug ins in the form of either DMFT or MFT0) correct the resulting captured frame so it is exposed to the pipeline in a 0 degree offset.

When correcting the video frame from the AV Stream Miniport and/or the Device MFT/MFT0 plug in, the resulting media type declaration must be based on the corrected frame. If the sensor is mounted at a 90 degree offset so the resulting video is 9:16 aspect ratio from the sensor, but the corrected video would be 16:9, the media type must declare the 16:9 aspect ratio.

This includes the resulting stride information. This is necessary as the component responsible for doing the correction is controlled by the IHV/OEM and the camera pipeline does not have visibility into the video frame except after it has been corrected.

It is strongly encouraged that the correction be done in user mode and the API contract between the pipeline and the user mode plugin must be followed. Specifically, when using either the DMFT or MFT0, when the IMFDeviceTransform::ProcessMessage or IMFTransform::ProcessMessage is invoked with a MFT_MESSAGE_SET_D3D_MANAGER message, the user mode plugin must adhere to the following guideline:

  • If no D3D manager is provided (the ulParam of the message is 0), the user mode plugin must NOT invoke any GPU operations to handle the Rotation correction. And the resulting frame must be provided in system memory.
  • If D3D manager is provided (the ulParam of the message is the IUnknown of a DXGI Manager), that DXGI Manager must be used for Rotation correction and the resulting frame must be GPU memory.
  • The user mode plugin must also handle the D3D manager message during runtime. When the MFT_MESSAGE_SET_D3D_MANAGER message is issued, the next frame produced by the plugin must correspond to the requested type of memory (i.e., GPU if DXGI Manager was provided, CPU otherwise).
  • When the AV Stream driver (or the user mode plugin) handles the Rotation correction, the ACPI’s PLD structure’s Rotation field must be set to 0.


When Auto Correct is used, OEMs and IHVs must NOT advertise the actual orientation of the sensor via the _PLD Rotation field. In this case, the Rotation field must indicate the orientation after the correction: 0 degrees.

Declare via FSSensorOrientation

By declaring the non-0 degree orientation of the sensor via the FSSensorOrientation registry tag, the camera pipeline can correct the captured frame before presenting it to the application.

The pipeline will optimize the rotation logic by leveraging GPU or CPU resources based on the use case and app request/scenario.

ACPI PLD Rotation

ACPI PLD structure’s Rotation field must be 0. This is to avoid confusing applications which may use the PLD information to correct the frame.

Media Type Information

Media Type presented by the driver must be the uncorrected media type. When informing the camera pipeline of the non-0 degree offset using the FSSensorOrientation entry, the media type information presented by the sensor must be the uncorrected media type. For example, if the sensor is mounted 90 degree clockwise offset, so instead of 16:9 aspect ratio, the resulting video is 9:16, the 9:16 aspect ratio media type must be presented to the camera pipeline.

This is necessary to ensure the pipeline can correctly configure the counter rotation process: The pipeline needs the input media type and the desired output media type of the application.

This includes the stride information. The stride information must be presented for the uncorrected media type to the camera pipeline.

Registry Subkey

The FSSensorOrientation registry entry must be published on the Device Interface node. The recommended approach is to declare this as an AddReg directive during the AddInterface directive declaration in the camera driver’s INF.

The data presented in the FSSensorOrientation must be a REG_DWORD and the only valid values accepted will be 90, 180, and 270. Any other value will be treated as 0 degrees offset (i.e., ignored).

Each value represents the sensor orientation in degrees clockwise. The camera pipeline will correct the resulting video frame by counter rotating the video by the same amount counter clockwise: i.e., a 90 degree clockwise declaration will result in a 90 degree counter clockwise rotation to bring the resulting video frame back to 0 degree offset.

MS OS Descriptor 1.0

For USB based cameras, FSSensorOrientation may also be published via MSOS descriptors.

MS OS Descriptor 1.0 has two components:

  • A fixed-length header section
  • One or more variable length custom properties sections, which follows the header section

MS OS DESCRIPTOR 1.0 Header Section

The Header Section describes a single custom property (Face Auth Profile).

OffsetFieldSize (bytes)ValueDescription
4bcdVersion20x0100Version 1.0
6wIndex20x0005Extended property OS descriptor
8wCount20x0001One custom property

Custom MS OS DESCRIPTOR 1.0 Property Section

OffsetFieldSize (bytes)ValueDescription
0dwSize40x00000036 (54)Total size (in bytes) for this property.
8wPropertyNameLength20x00000024 (36)Size (in bytes) of the property name.
10bPropertyName50UVC-FSSensorOrientation“UVC-FSSensorOrientation” string in Unicode.
60dwPropertyDataLength40x000000044 bytes for property data (sizeof(DWORD)).
64bPropertyData4Offset angle in degrees clockwise.Valid values are 90, 180, and 270.

Drivers Portrait Displays Near Me

MS OS Descriptor 2.0

MSOS Extended Descriptor 2.0 can be used to define the registry values to add FSSensorOrientation support. This is done using the Microsoft OS 2.0 Registry Property Descriptor.

For the UVC-FSSensorOrientation registry entry, the following shows a sample MSOS 2.0 descriptor set:

Declare via ACPI PLD Information

As an option of last resort, PLD information can be leveraged as described above to indicate to the application that the video frame must be corrected before being rendered/encoded. However, as stated, many existing applications do not use the PLD information nor handle the frame rotation, so there will be scenarios where apps may not be able to render the resulting video properly.

The following figures illustrate the values of the _PLD Rotation field for each hardware configuration:

Rotation: 0 degree clockwise

In the figure above:

  • The picture on the left illustrates the scene to capture.

  • The picture in the middle depicts how a scene is viewed by a CMOS sensor whose physical readout order starts from the bottom-left corner moving from left to right upwards.

  • The picture on the right represents the output of the camera driver. In this example, the content of the media buffer can be rendered directly while the display is its native orientation without additional rotation. Consequently, the ACPI _PLD Rotation field has a value of 0.

Rotation: 90 degrees clockwise

In this case, the content of the media buffer is rotated by 90 degrees clockwise compared to the original scene. As a result, the ACPI _PLD Rotation field has a value of 2.

Rotation: 180 degrees clockwise

Drivers Portrait Displays Software

In this case, the content of the media buffer is rotated by 180 degrees clockwise compared to the original scene. As a result, the ACPI _PLD Rotation field has a value of 4.

Rotation: 270 degrees clockwise

Drivers Portrait Displays Display

In this case, the content of the media buffer is rotated by 270 degrees clockwise compared to the original scene. As a result, the ACPI _PLD Rotation field has a value of 6.