Camera Controller Universal
User Guide
Getting Started
What is Camera Controller Universal?
Camera Controller Universal gives you full control over your webcam or conference camera. Instead of being stuck with whatever your camera decided looks good, you can:
- Adjust the picture - Fine-tune brightness, contrast, colour saturation, and more.
- Point and zoom the camera - Pan left/right, tilt up/down, zoom in/out, and set the focus on cameras that support it.
- Save presets - Store your favourite camera setups (e.g., "Whiteboard", "Close-Up", "Meeting Room") and switch between them instantly.
- Keep your settings - The app remembers your adjustments for each camera separately, so everything is back the way you left it next time.
It works with most USB webcams and conference cameras on Windows 10 and 11.
How to Use Camera Controller
Camera Controller is flexible — you can use it in different ways depending on what you need. Here are the three most common setups:
Standalone camera control
Use Camera Controller on its own to set up and fine-tune your camera. The live preview shows you exactly what the camera sees while you adjust picture settings, point and zoom the camera, and save presets for later.
This is the best way to get started: take your time to explore the controls, find the right settings for your room and lighting, and save a few presets.
Control bar alongside a video call
During a Teams, Zoom, or Google Meet call, keep Camera Controller as a compact bar below your video window. You get full control over picture, zoom, and camera position — and you can switch presets during the call without touching the video app. (Yes, that's me!)
For an even slimmer bar, switch off "Show Preview" — the camera view is already in your video call, so you don't need it twice.
Important: Start Camera Controller before you join the call. If Teams or Zoom opens the camera first, it may take exclusive access and Camera Controller won't be able to connect. See Sharing Camera Access for how to set up shared camera mode on Windows 11.
Preset switcher
If you've already saved your favourite camera setups as presets, you can shrink Camera Controller down to just the preset buttons. Hide the preview and all control panels, and you're left with a minimal strip that lets you switch between camera positions and settings with a single click — even during a live call.
This is ideal when you want to switch between "Close-Up" and "Whiteboard" views during a presentation without any distracting controls on screen.
Installing the App
Install Camera Controller Universal from the Microsoft Store. Once installed, launch it from the Start menu or taskbar like any other app.
Set up camera sharing (recommended)
If you use video conferencing software (Zoom, Teams, Google Meet, etc.), you should enable Windows shared camera mode so that Camera Controller Universal can show its preview and adjust the camera while you're in a call. This requires Windows 11 version 24H2 or later. See Sharing Camera Access Between Applications for step-by-step instructions.
Your First Steps
1. Plug in your camera
Connect your USB camera if it isn't already. The app detects your cameras automatically.
2. Open the app
Click the Camera Controller Universal icon. You'll see the main window:
3. Choose your camera
Use the dropdown at the top (A) to select which camera you want to control. If you only have one camera, it's already selected.
4. Check the preview
The upper part of the window (B) shows a live preview of what your camera sees. This updates in real time as you make changes.
5. Start adjusting
The lower part of the window has four panels. Here's a quick overview:
| Panel | What it does |
|---|---|
| Presets (1) | A column of round buttons on the left. Each one is a saved camera setup you can load with a click. |
| Picture (2) | Vertical joysticks for brightness, contrast, saturation, and other picture adjustments. |
| Camera (3) | A joystick pad for pointing the camera, plus vertical joysticks for zoom and focus. |
| Settings (4) | Quick on/off switches and buttons for common options. |
6. Adjust the picture
The controllers in the Picture and Camera panels behave like joysticks:
- Grab the round button in the middle of a vertical joystick and drag it up or down.
- The further you drag, the faster the value changes. A small drag = slow, precise adjustment. A big drag = fast change.
- Let go and the button snaps back to the centre, stopping the change. The value stays where you left it.
Each joystick has a gauge - a coloured fill inside the track that shows you the current value at a glance. You can also turn on numeric value display via "Show Numeric Settings" in the Settings panel.
This gives you much finer control than a regular slider, especially for small tweaks.
7. Point and zoom the camera
If your camera supports it, the Camera panel shows a square joystick pad. Grab the dot in the centre and drag in any direction to pan and tilt the camera. Let go to stop. Use the arrow buttons around the edges for tiny, precise movements.
The Zoom and Focus joysticks next to the pad work the same way as the picture joysticks.
8. Save a preset
Once you have everything set up the way you like, click the + button in the Presets panel to save both the camera settings and the screen layout. Give it a short name and a label (up to three characters). You can save multiple presets for different situations and switch between them with a mouse click. Double-click a preset to overwrite it with the current settings.
The camera also returns to your last settings on restart if you switch on "Remember Settings".
Tips
- Can't see a control you need? Some properties are hidden by default to keep things simple. Click Settings... in the Settings panel to show or hide individual controls.
- Update a preset: Single-click to select it. Double-click to update it with the current camera position and settings.
- Camera not moving? Some webcams only move when you release the joystick - try it.
- Camera does not return to previous position? Some cameras need time to initialise when they "wake up". Try increasing the "Startup Delay" in Settings.
- Want a simpler view? Hide the preview, the presets panel, or the value numbers using the switches in the Settings panel.
- Dark or light? The app follows your Windows colour scheme, but you can force dark or light mode in Settings.
The Main Window
When you open Camera Controller Universal, you see three areas stacked top to bottom: the camera selector, the live preview, and the control panels.
Camera Selector (A)
The dropdown bar at the very top lists all cameras connected to your computer. Click it to choose which camera you want to control. The app remembers your last choice and selects the same camera next time you open it.
Live Preview (B)
The middle area shows a live view from the selected camera. Everything you change in the controls below is immediately visible here.
- Don't need the preview? Switch it off using "Show Preview" in the Settings panel. The control panels will expand to fill the space.
- Want more preview space? Drag the divider bar (C) between the preview and the controls up or down to adjust the split.
Control Panels (1-4)
The bottom area is divided into four panels, arranged left to right:
1. Presets
Your saved camera setups. By default they appear as round buttons with short labels (up to three characters). With Preset Thumbnails enabled (see Settings), each button shows a small camera snapshot instead, making it easy to identify presets visually. Click to load, double-click to update. See Presets for details.
2. Picture
Vertical joysticks for adjusting the image: brightness, contrast, saturation, and others. See Adjusting the Picture to learn how they work.
3. Camera
The joystick pad for pointing the camera (pan and tilt) plus vertical joysticks for zoom, focus, and other camera properties. See Pointing & Zooming the Camera.
4. Settings
Quick on/off switches for common options, plus buttons to open the Advanced camera settings and the full Settings window. See Settings.
Adapting to Your Camera
Not every camera supports every feature. The app detects what your camera can do and only shows the relevant controls. For example:
- A simple webcam might only show picture controls - no joystick pad, no zoom.
- A conference camera or 4K webcam with pan/tilt support will show the full joystick pad and camera controls.
- If all camera controls are hidden, that entire panel disappears to save space.
Dark and Light Mode
The app follows your Windows colour scheme by default. If Windows is set to dark mode, the app uses a dark theme; if light, it uses a light theme. You can also force a specific mode in the Settings window.
Picture Controls
The Picture panel contains vertical joysticks for adjusting how the image looks: brightness, contrast, colour saturation, and more.
How the Joysticks Work
The controllers behave like joysticks:
- Grab the round grip in the centre and drag it up or down.
- How far you drag controls how fast the value changes. A small drag gives you slow, precise adjustment. A large drag changes the value quickly.
- Let go and the grip snaps back to the centre. The change stops immediately, and the value stays where it is.
What You See on a Joystick
- Name at the top (e.g., "Brightness").
- Gauge - a coloured fill inside the track that shows the current value at a glance. The higher the fill, the higher the value.
- Grip - the round button you drag to adjust. It highlights when you're dragging it.
- Value below the track (when the "Show Numeric Settings" setting is on) - the current number.
- Auto switch at the bottom - for properties where the camera can manage itself automatically.
Available Properties
By default, the app shows three properties:
| Property | What it does |
|---|---|
| Brightness | Makes the overall image lighter or darker. |
| Contrast | Controls the difference between the lightest and darkest parts of the image. Higher contrast = more punch. |
| Saturation | Controls how vivid the colours are. Turn it down for a more muted look, up for richer colours. |
Many cameras support additional properties that are hidden by default to keep the panel clean. Here is how the panel looks with all properties visible:
| Property | What it does |
|---|---|
| Hue | Shifts all colours around the colour wheel. |
| Sharpness | Makes edges crisper or softer. |
| Gamma | Adjusts mid-tone brightness without affecting the very darkest or lightest areas. |
| White Balance | Adjusts colour temperature (warm/cool) to match your lighting. |
| Backlight | Compensates when there's a bright light behind the subject. |
| Gain | Boosts the image in low-light conditions (may add graininess). |
Each property can be shown or hidden individually. Click Settings... in the Settings panel and use the visibility switches. See Settings.
Automatic Mode
Some properties (like White Balance or Exposure) offer an Auto switch below the joystick. When Auto is on:
- The camera adjusts the property by itself based on conditions (e.g., auto-adjusting brightness as lighting changes).
- The joystick still shows the current value via its gauge, but you can't drag it.
When you switch Auto off, the value freezes at whatever the camera had settled on. This is useful when you want the camera to find a good value first, then lock it in so it doesn't keep changing.
Anti-Flicker
If your camera image has a noticeable flicker under fluorescent or LED lighting, you can set the anti-flicker option in the Settings window. Choose 50 Hz (most of Europe, Asia, and Africa) or 60 Hz (the Americas and parts of Asia) to match your local electricity frequency.
Camera Controls
If your camera supports pan, tilt, zoom, or focus, the Camera panel gives you hands-on control. This includes cameras with physical motors (like conference cameras) as well as many 4K webcams that offer electronic pan, tilt, and zoom by cropping from a high-resolution sensor.
The Joystick Pad
The joystick is a square pad with a round grip in the centre. It controls where the camera is pointing.
How to use it
- Grab the round grip in the centre and drag in any direction.
- The camera moves the way you drag. Drag further = faster movement.
- Let go to stop. The grip snaps back to the centre.
For small, precise adjustments, use the arrow buttons around the edges of the pad. Each click nudges the camera by the smallest possible step.
Double-click the grip to centre the camera (move to pan 0, tilt 0).
Position gauges
Two coloured bars show where the camera is currently pointing:
- The horizontal bar above the pad shows the left-right (pan) position.
- The vertical bar to the left of the pad shows the up-down (tilt) position.
When the "Show Numeric Settings" setting is on, the exact position numbers are displayed below the pad.
Using the gauges to aim
Some cameras (particularly some Logitech models) only move the camera after you release the joystick, rather than while you're dragging. This is a limitation of the camera's own firmware - it is not something Windows or this app can change.
When this happens, the gauges become your guide: drag the joystick to set your target position, watch the gauge bars to see where the camera will end up, then release. The camera moves to that position. With a little practice this becomes intuitive - think of it like setting coordinates and then pressing "go".
Auto mode
Some cameras can track a subject automatically. If your camera supports this, an Auto switch appears below the joystick. When Auto is on, the camera points itself and the joystick is disabled.
Zoom, Focus, and Other Controls
To the right of the joystick pad, you'll find vertical joysticks for additional camera properties. These work the same way as the picture joysticks - drag the grip away from centre to change the value, let go to stop. Each one has a gauge showing the current value.
| Control | What it does |
|---|---|
| Zoom | Move closer to or further from the subject without physically moving the camera. |
| Focus | Sharpen the image at a specific distance. Most useful in manual mode. |
Other controls (Exposure, Iris, Roll) may appear depending on your camera. Here is how the panel looks with all controls visible:
Each control can be shown or hidden individually in Settings.
The Focus Trick
Many people use this workflow to get a sharp, stable focus:
- Leave Auto switched on. The camera will search for the right focus distance.
- Once the image is sharp, switch Auto off. The focus locks in place.
- The camera stops "hunting" (the annoying in-and-out searching that some cameras do).
This is especially useful during video calls and recordings where you want a consistently sharp image.
Physical Joystick / Gamepad
You can connect a USB joystick, gamepad, or flight stick to control your camera hands-free. The physical joystick works alongside the on-screen joystick - both use the same control logic.
Axis mapping
By default the joystick axes are mapped to:
| Axis | Camera function |
|---|---|
| X axis (left/right) | Pan |
| Y axis (forward/back) | Tilt |
| Z axis or throttle | Zoom |
| Additional axes | Focus, Exposure, Iris (if available) |
You can reassign axes and buttons in Settings.
How movement speed works
The app distinguishes between a nudge and continuous movement based on how long you hold the stick:
- Short tip (push and release quickly): The camera makes one small movement in that direction and stops. Use this for precise positioning.
- Sustained hold (push and keep holding): After a brief pause, the camera begins moving continuously. The further you push, the faster it moves. Release to stop.
The arrow buttons on the on-screen joystick pad always produce a single nudge, regardless of how long you hold them.
Within the continuous zone, the stick has a dead zone near the centre (~10%) to prevent drift, and speed increases smoothly with deflection up to full speed.
Button mapping
Joystick buttons can be mapped to actions like recalling presets or toggling auto-focus. See Settings for details.
Does My Camera Support Pan, Tilt, or Zoom?
Many cameras support more than you might expect. Conference cameras with physical motors obviously do, but many 4K webcams also offer electronic pan, tilt, and zoom - even some older HD models like the Logitech C920 have limited support. The app automatically detects what your camera can do.
If you're not sure, here's a quick way to check:
- Open Settings... in the Settings panel.
- Set Advanced Opens to "DirectShow property page".
- Click OK, then click the Advanced... button in the main window.
- The camera's own property page opens, showing all the features your camera reports to Windows.
If pan, tilt, or zoom appear there, the app can control them. If they don't appear in the camera's own property page either, then the camera (or its driver) simply doesn't offer those features to Windows.
Camera Startup Behaviour
Some conference cameras go through a short startup routine when they're first switched on or when the app starts - the camera physically moves to a starting position. This is normal. If you have "Remember Settings" enabled, the app will wait a few seconds for this to finish and then move the camera to your saved position. You can adjust the wait time under "Startup Delay" in Settings.
Presets
Presets let you save your complete camera setup and screen layout, and recall it instantly. This is perfect when you regularly switch between different scenarios - for example, switching between a "Whiteboard" view and a "Close-Up" during a presentation.
What Gets Saved
A preset captures everything:
- All picture adjustments (brightness, contrast, etc.)
- Camera position (pan, tilt), zoom level, and focus
- Which controls are set to Auto and which are manual
- Which controls are visible on screen
When you load a preset, all of these are applied at once.
The Presets Panel
The narrow column on the left side of the control area shows your presets. By default they appear as round buttons with short labels:
If you enable Preset Thumbnails in the Settings window, each preset shows a small snapshot of what the camera was seeing when the preset was saved, making it easy to pick the right one at a glance:
- Click a preset button to load it.
- Double-click a preset button to overwrite it with the current camera settings.
- Click the + button at the bottom to create a new preset.
- Hover over a button to see its full name in a tooltip.
When thumbnails are enabled the panel automatically arranges presets into multiple columns if there isn't enough vertical space to show them all in one column.
You can hide this panel using the "Show Presets" switch in the Settings panel. Presets can also be reviewed and managed in the Settings window.
Creating a Preset
- Set up the camera exactly the way you want it - picture adjustments, camera position, zoom, everything.
- Click the + button in the Presets panel.
- If thumbnails are enabled, the dialog shows a snapshot of the current camera view on the left. The Save thumbnail checkbox (on by default) controls whether this snapshot is stored with the preset.
- Enter a label (up to three characters, e.g., "WB" or "MTG"). This must be unique.
- Enter a name (up to 16 characters, e.g., "Whiteboard").
- Click OK.
Your preset now appears as a new button in the panel — with a thumbnail if you chose to save one.
Updating a Preset
Made changes and want to save them to an existing preset? Double-click the preset button. The edit dialog opens with a fresh snapshot from the camera. Confirm to overwrite the preset with your current camera settings and thumbnail.
Editing the Name or Deleting a Preset
Double-click a preset button to open the edit window:
Here you can:
- Change the label or name.
- Delete the preset entirely.
Supported Cameras
Presets work with all cameras, but pan/tilt position in presets requires a camera that supports absolute positioning. This includes:
- Most conference cameras with motorised pan/tilt (e.g., Logitech Rally)
- Logitech PTZ Pro 2 and Logitech Group
- 4K webcams with electronic pan/tilt/zoom
Tips
- Use meaningful labels: "M1" for Meeting Room 1, "WB" for Whiteboard, "CU" for Close-Up.
- Each camera has its own presets. Switching cameras loads that camera's presets.
- Presets survive restarts. They are saved automatically and available every time you open the app.
- Include camera position in your presets. If your camera supports pan/tilt, make sure "Remember Settings" is on so that saved positions can be applied correctly after the camera starts up.
Settings
Quick Settings (Main Window)
The Settings panel on the right side of the main window gives you quick access to common options:
| Switch | What it does |
|---|---|
| Show Preview | Show or hide the live camera view. Hiding it gives you more room for the controls. |
| Shared Access | When on, other apps (like Teams or Zoom) can use the camera at the same time. When off, only Camera Controller Universal uses the camera. |
| Remember Settings | When on, your camera adjustments are saved when you close the app and restored next time. |
| Show Numeric Settings | Show or hide the numbers on the joysticks. |
| Show Presets | Show or hide the presets column on the left. |
Below the switches are two buttons:
- Advanced... opens your camera's built-in settings page (provided by the camera manufacturer) or the Windows camera settings page.
- Settings... opens the full Settings window described below.
The Settings Window
Click Settings... to open the full configuration window. It has four columns:
Column 1 - Picture Controls
Lists all picture properties your camera supports. For each one:
- Visible - show or hide the control in the main window.
- Auto - let the camera manage this automatically, or control it manually.
At the bottom:
- Anti-Flicker - if you see flickering under artificial lights, set this to match your region's electricity frequency: 50 Hz (Europe, most of Asia, Africa) or 60 Hz (Americas, parts of Asia).
Column 2 - Camera Controls
Same idea as Column 1, but for camera positioning: pan/tilt, zoom, focus, exposure, iris, and roll.
Pan and Tilt share a single visibility switch because they are controlled together with the joystick.
Column 3 - Settings Switches
Controls which quick switches appear in the main window and what their current value is.
Each setting has two toggles:
- Visible - whether the switch appears in the main window's Settings panel.
- Value - the actual on/off state.
This lets you simplify the main window by hiding switches you don't use regularly, while still being able to change them here when needed.
Column 4 - System & Presets
Advanced Opens:
Choose what the "Advanced..." button in the main window opens:
- Camera's own settings page - the manufacturer's control panel (may offer features not available in Camera Controller Universal).
- Windows Settings - the Windows camera settings page.
Startup Delay:
How long the app waits after startup before restoring your saved camera position. Some cameras need a few seconds to finish their startup routine before they accept position commands. If your camera doesn't move to the saved position on startup, try increasing this delay. Default is 5 seconds.
Display Mode:
- System - follows your Windows dark/light setting.
- Dark - always use the dark theme.
- Light - always use the light theme.
Show Presets:
Show or hide the presets panel in the main window.
Preset Thumbnails:
Controls the size of thumbnail snapshots shown on preset buttons. Drag the slider to choose a display height (shown in millimetres so the size is consistent regardless of your screen resolution). Slide all the way to the left to turn thumbnails off — presets revert to the original round buttons with letter labels. A preview box with diagonal lines shows the approximate thumbnail size at the current setting.
Presets:
A list of all presets saved for the current camera. You can edit the label and name of each preset, or delete presets using the × button.
Bottom Buttons
| Button | What it does |
|---|---|
| Reset Camera | Sets all properties of the current camera back to their factory defaults. Your presets are not affected. |
| Reset UI | Resets the window layout (panel sizes, position) to defaults. Your camera settings and presets are not affected. |
| Reset All | Removes all saved settings and presets for all cameras. The app returns to its initial state. Use with care. |
| Windows Settings | Opens the Windows camera settings page for your camera. From there you can enable shared camera mode and access other system-level camera options. |
| Camera Properties | Opens the camera's own property page provided by the manufacturer. |
| Joystick Setup | Opens the joystick configuration for mapping physical joystick axes and buttons. |
Per-Camera Settings
Each camera has its own settings. When you switch cameras, the app loads the settings you previously configured for that specific camera. You can have completely different setups for different cameras.
Troubleshooting
General
My camera doesn't appear in the list
- Make sure the camera is plugged in and recognised by Windows (check Settings > Bluetooth & devices > Cameras).
- The app works with most USB cameras. Some very specialised or network-based cameras may not be compatible.
A control I expect is missing
The app only shows controls that your camera actually supports. If a property doesn't appear, your camera doesn't offer it. You can also check that the property isn't hidden: open Settings... and look for its Visible switch.
The camera is being used by another app
If you see a blank preview or get no response from controls, another application might have exclusive access to the camera. Either close that application, or turn on Shared Access in the Settings panel to allow multiple apps to use the camera at the same time.
Pan, Tilt, and Zoom
The camera doesn't move to my saved position on startup
Many conference cameras go through a startup routine where they physically move to a home position when first powered on. The app waits before restoring your saved position (default: 5 seconds). If your camera takes longer, increase the Startup Delay in Settings.
The camera only moves when I release the joystick
This is a known behaviour with some Logitech cameras (including the BCC950 and C920 series). The camera hardware only processes movement after you stop sending commands. There is no workaround within the app - it's how those cameras behave. Cameras with speed-based movement (common on professional conference cameras) respond smoothly during the drag.
The joystick doesn't appear
Your camera doesn't report pan/tilt capability to Windows. The joystick only appears for cameras that support it - this includes both cameras with physical motors and cameras with electronic pan/tilt (common on 4K webcams). Check the camera's own property page via the Advanced... button - if pan/tilt doesn't appear there either, the camera's driver simply doesn't offer it. Contact the camera manufacturer for more information.
Note: The Logitech PTZ Pro 2 and Logitech Group do not expose pan/tilt through the standard Windows interface, but Camera Controller Universal detects them automatically and provides full joystick control including presets with camera position.
The camera hits its limits
Some cameras don't accurately report their movement range. If the camera physically bumps into its pan or tilt limits, try reducing the range of movement by not dragging the joystick all the way to the edge.
Picture Adjustments
Changes don't seem to take effect
If you have another app (like OBS or Teams) using the camera, it may be overriding your settings. Try turning off Shared Access for exclusive control, or check the other app's camera settings.
The image flickers under artificial lighting
Open Settings and set the Anti-Flicker option to match your region: 50 Hz for most of Europe, Asia, and Africa; 60 Hz for the Americas and parts of Asia.
Logitech-Specific Notes
Logitech Rally
The Rally camera can be slow to respond to rapid adjustments. If position readings seem inconsistent or the camera behaves erratically, try making changes more slowly and waiting between adjustments.
Logitech PTZ Pro 2 / Logitech Group
These cameras do not expose pan and tilt through the standard Windows camera interface. Camera Controller Universal detects them automatically and provides full pan/tilt control via Logitech's proprietary interface.
What works:
- Pan and tilt via the joystick, including saving and recalling camera position in presets.
- All picture controls (brightness, contrast, saturation, etc.), zoom, focus, and exposure.
- Presets store the full camera state including pan/tilt position.
Limitations:
- One axis at a time. The camera hardware processes only pan or tilt per command, not both simultaneously. When moving the joystick diagonally, only one axis moves. For diagonal repositioning, move the joystick along one axis first, then the other.
- Movement is step-based. Each joystick input triggers a discrete motor step. At very small joystick deflections, the camera moves in single steps with pauses between them. This is normal behaviour for these cameras and not a limitation of the app.
Preview
Preview flickers or disappears at very large window sizes
On high-DPI displays, stretching the window very tall (so the preview area exceeds approximately 3800 pixels in height) may cause the live preview to briefly disappear or flicker. This is a limitation of the VMR-9 video renderer's Direct3D 9 back buffer, which must match the full window size. The preview recovers automatically when the window is resized to a smaller height, or when maximizing/restoring.
Settings
My settings are lost after a Windows update
In rare cases, a major Windows update may reset application settings. If this happens, you will need to reconfigure your camera settings. Using presets makes recovery faster - but presets are stored in the same location, so they may also be affected.
Different USB port = different settings
The app identifies cameras partly by which USB port they are connected to. If you plug the same camera into a different port, it may appear as a new device with default settings. For consistent behaviour, always use the same USB port for a given camera.
Technical Appendix
This section is for developers and advanced users who want to understand the internals of Camera Controller Universal.
Architecture
- Language: C++ (C++20 standard)
- UI Framework: Native Win32 API with Direct2D (D2D1) custom-rendered controls and DirectWrite text rendering
- Camera API: DirectShow COM interfaces (
IAMVideoProcAmp,IAMCameraControl) - Build System: CMake with MSVC (Visual Studio 2026)
- Output:
CameraController.exe(Win32 subsystem, single executable, no dependencies beyond the Windows SDK)
DirectShow Interfaces
Two COM interfaces control camera properties:
IAMVideoProcAmp
Controls picture properties (brightness, contrast, hue, saturation, sharpness, gamma, white balance, backlight compensation, gain, colour enable, digital multiplier, digital multiplier limit, white balance component, powerline frequency).
GetRange(property, &min, &max, &step, &default, &capsFlags)- query supported rangeGet(property, &value, &flags)- read current value and modeSet(property, value, flags)- write value with mode flag
IAMCameraControl
Controls mechanical/optical properties (pan, tilt, roll, zoom, exposure, iris, focus). Same API shape as IAMVideoProcAmp.
Flag Constants
| Flag | Value | Meaning |
|---|---|---|
CameraControl_Flags_Auto |
0x0001 | Camera manages the property |
CameraControl_Flags_Manual |
0x0002 | Application sets the value |
KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE |
0x0010 | Value is a speed, not a position |
capsFlags is a bitmask of supported modes. Bit 0 = auto supported, bit 1 = manual supported, bit 4 = relative (speed-based) movement supported.
Relative (Rate-Based) Control
Some PTZ cameras support relative mode where value is a speed:
- Start:
Set(property, speed, CCF_MANUAL | CCF_RELATIVE) - Stop:
Set(property, 0, CCF_MANUAL | CCF_RELATIVE)
Detection: Only check capsFlags & 0x10. Do NOT probe with Set() calls - many cameras silently accept relative commands but treat the value as an absolute position, causing unexpected movement to position 0.
Settings Storage
All settings are stored in the Windows Registry under:
HKEY_CURRENT_USER\Software\CameraControllerUniversal
Global Settings
| Key | Type | Description |
|---|---|---|
LastCameraPath |
REG_SZ | Device path of the last-selected camera |
RestoreSettings |
REG_DWORD | 0/1 - restore on startup |
PreviewEnabled |
REG_DWORD | 0/1 - preview visible |
AdvancedOpensMode |
REG_DWORD | 0=DirectShow page, 1=Windows Settings |
RestoreDelaySec |
REG_DWORD | Tenths of seconds (50 = 5.0s) |
DisplayMode |
REG_DWORD | 0=System, 1=Dark, 2=Light |
WindowRect |
REG_BINARY | RECT structure (window position/size) |
PanelsHeight |
REG_DWORD | User-set panel height in pixels |
VisPreview, VisShared, VisRestore, VisValues, VisPresets |
REG_DWORD | Visibility of Settings panel toggles |
ShowValues, ShowPresets |
REG_DWORD | Current toggle states |
Per-Camera Settings
Stored under ...\Cameras\:
| Key Pattern | Description |
|---|---|
VP_ / VP_ |
VideoProcAmp value and flags |
CC_ / CC_ |
CameraControl value and flags |
Vis_VP_ |
Visibility for VideoProcAmp property |
Vis_CC_ |
Visibility for CameraControl property |
AntiFlicker |
0=disabled, 1=50Hz, 2=60Hz |
Device paths are sanitised by replacing \, /, #, ?, {, }, : with _.
DPI Scaling
All layout dimensions are computed relative to the system DPI. The scale factor is dpi / 96.0. Control widths, heights, padding, and font sizes are multiplied by this factor. The Settings panel width is measured from actual rendered text widths rather than fixed pixel values.
Direct2D render targets are explicitly set to 96 DPI to avoid coordinate mismatches between the Win32 pixel space and the D2D drawing space.
Update Rate and Timer Architecture
All interactive controls (sliders and joystick) use a timer-based update pattern:
- WM_MOUSEMOVE: Only updates the internal thumb offset variable. No repaints, no camera updates.
- WM_TIMER (333ms / 3 Hz): Reads the current thumb offset, computes the new value, sends the camera update, and triggers a repaint.
- WM_LBUTTONDOWN: Starts the timer and captures mouse input.
- WM_LBUTTONUP: Kills the timer, resets the thumb to centre, releases mouse capture.
This architecture prevents WM_TIMER starvation from high-frequency mouse messages (an 800 DPI mouse can generate hundreds of WM_MOUSEMOVE per second, which would starve the low-priority WM_TIMER if repaints were triggered on every mouse move).
Spring Slider Value Computation
- Compute elapsed real time (capped at 100ms per tick).
- Normalise thumb displacement to [-1..+1], apply power curve (^1.5) for fine control near centre.
- Compute position delta:
curvedRate * dt / FULL_RANGE_SECONDS(5.0 seconds for full sweep). - Clamp normalised position [0..1], convert to integer via step-grid snapping.
- Send change notification only if the integer value changed.
Joystick Speed Computation
The joystick applies a dead zone / saturation curve to the raw displacement:
- 0-10% deflection: Dead zone — output is 0 (no movement). Allows pure single-axis movement without crosstalk.
- 10-90% deflection: Linear mapping to 0-100% output.
- 90-100% deflection: Saturates to 100% — makes it easy to reach full speed without pixel-precise aiming.
The parent window converts the normalised speed to camera commands:
- Relative mode: Multiply by max speed range (or 100 for relative-only cameras), send as relative speed.
- Absolute mode (fallback): Multiply by
range / 15for per-tick increment (~5 seconds for full sweep at 3 Hz).
PTZ Position Restore
Pan/tilt restore is deferred because many cameras home on startup:
- On camera selection, all properties except pan/tilt are restored immediately.
- A one-shot timer is started with the configured restore delay.
- When the timer fires, saved pan/tilt positions are applied.
- On the first joystick grab after restore, a "jiggle" (+/-1 step) is sent to wake the camera motor if needed.
Position tracking uses internal variables (m_panPos, m_tiltPos) rather than API reads, because IAMCameraControl::Get() echoes the last-set value rather than reporting actual physical position.
Build Dependencies
| Library | Purpose |
|---|---|
d2d1.lib |
Direct2D rendering |
dwrite.lib |
DirectWrite text |
strmiids.lib |
DirectShow GUIDs |
ole32.lib, oleaut32.lib |
COM infrastructure |
dwmapi.lib |
Desktop Window Manager (dark mode title bar) |
uxtheme.lib |
Visual theme detection |
comctl32.lib |
Common controls (tooltips) |
windowscodecs.lib |
WIC image loading (application icon) |
shlwapi.lib |
Shell utility functions |
References
Sharing Camera Access
Why this matters
By default, Windows only allows one application to use a camera at a time. This means that if you're in a Zoom, Teams, or Google Meet call, Camera Controller Universal cannot show a preview or control the camera — and vice versa.
Starting with Windows 11 version 24H2, you can enable shared camera mode so that multiple applications can access the same camera simultaneously. With this setting enabled, Camera Controller Universal can show its live preview and adjust camera settings while you're in a video call.
We recommend enabling this setting before using the app, especially if you plan to adjust your camera during meetings. Otherwise you need to switch off the preview in Camera Controller Universal to show the camera in Teams, Zoom or other applications.
How to enable shared camera mode
The quickest way is directly from Camera Controller:
- Click Settings... in the Settings panel.
- Click the Windows Settings button at the bottom of the Settings window.
- Windows opens the camera settings page. Click on your camera, then scroll down to Advanced camera options and click Edit.
- Turn on "Allow multiple apps to use camera at the same time" and click Apply.
Back on the camera settings page, you should see a confirmation banner:
The setting is persistent — you only need to do this once per camera.
Notes
- This feature requires Windows 11 version 24H2 or later. It is not available on Windows 10 or earlier versions of Windows 11.
- You need to enable the setting separately for each camera you want to share.
- If you don't enable this setting, the app will still work — but you need to switch off the preview in Camera Controller Universal before other applications can access the camera.