Compare commits

1848 Commits
sio ... master

Author SHA1 Message Date
Stenzek
eda65a6ae2 PostProcessing: Fix texture hazard when stages disabled 2026-02-05 13:00:24 +10:00
Stenzek
8c669e38c8 VideoThread: Simplify reconfiguration
- Removes cross-thread access of FSUI state.
- Fixes lockup when startup fails.
2026-02-03 20:00:02 +10:00
Stenzek
1a607257fb System: Fix game settings not deloading after shutdown 2026-02-03 19:59:59 +10:00
Anderson Cardoso
14decb1667 Atualização Português do Brasil (#3697)
Atualizado para a última versão.
2026-02-03 14:21:38 +10:00
Davide Pesavento
0b7d3ce2f6 PostProcessing: Correctly update stage count when removing/clearing stages (#3698) 2026-02-03 14:21:27 +10:00
Stenzek
016c08b9c3 GPU/HW: Use clamped rect for sprites-as-fills
Fixes VRAM corruption in Tales of Phantasia with the texture cache
enabled.
2026-02-02 19:11:40 +10:00
Stenzek
0094344360 README: Add links/instructions to Windows installer 2026-02-02 16:31:55 +10:00
Stenzek
372e1f3533 InputManager: Fix needing double press for button binding
Regression from 44e055ba03
2026-02-02 13:42:03 +10:00
Stenzek
682c9c6431 InputManager: Only enable sensor polling if there are bindings
Or when binding (hook).
2026-02-02 13:30:36 +10:00
Stenzek
653d04c84b InputManager: HasAnyBindingsForSource() shouldn't check subtype
Only affected pause-on-controller-removal, and if you didn't have any
controller buttons bound.
2026-02-02 13:22:57 +10:00
Stenzek
ab959a5d47 InputManager: Always call SetHook()/RemoveHook() on core thread 2026-02-02 13:17:53 +10:00
Stenzek
bcd7a43cf9 InputManager: Fix typo in variable name 2026-02-02 12:53:38 +10:00
Stenzek
faf988b31b System: Match console region to BIOS region when starting BIOS
Avoids using NTSC timings if you only have a PAL BIOS.
2026-02-02 12:51:48 +10:00
Víctor "IlDucci
dc78763292 Spanish (Spain) translation update (#3696)
Out-of-schedule update to add the revamped Capture/OSD menus.
2026-02-02 12:50:27 +10:00
Stenzek
43cf1d93a8 Installer: Share progress callback with updater 2026-02-01 19:07:28 +10:00
Stenzek
5bf65fe48b Installer: Calculate estimated size for uninstaller entry 2026-02-01 18:28:31 +10:00
Stenzek
7e4efbfa9c CI: Generate Windows installers 2026-02-01 17:04:32 +10:00
Stenzek
4756b17899 Installer: Add Windows uninstaller program 2026-02-01 17:04:32 +10:00
Stenzek
22c8d91109 Installer: Add windows installer program 2026-02-01 16:33:24 +10:00
Stenzek
186d558332 FileSystem: Check fclose() for WriteBinaryFile()/WriteStringToFile() 2026-02-01 15:38:33 +10:00
Connor McLaughlin
fcd3f972c1 README: Update resource overrides section
Replace with a link to the wiki page.
2026-02-01 14:16:59 +10:00
Stenzek
d8b889757b Qt: Reverse window open order on all Wayland platforms
Turns out KDE's kinda broken too - behaves inconsistently from run to
run. Probably a QtWayland issue, can't be arsed debugging.
2026-02-01 14:09:19 +10:00
Stenzek
59aeb1e84b VulkanDevice: Fix query index in WaitForCommandBufferCompletion() 2026-02-01 13:39:49 +10:00
Stenzek
3a54524e40 VulkanDevice: Add missing scissor clamp in SetInitialPipelineState() 2026-02-01 13:38:04 +10:00
Stenzek
2bd0a6ab41 VulkanDevice: Fix incorrect stage bits for compute PushUniformBuffer() 2026-02-01 13:36:11 +10:00
Stenzek
86dcbc614e Achievements: Remove hidden leaderboard check
No longer necessary since this is handled in rc_client now.
2026-02-01 13:33:13 +10:00
Stenzek
7df574cf59 Achievements: Fix notification icon opacity
Mostly noticeable on the RA icon when using center position.
2026-02-01 13:29:01 +10:00
Stenzek
fbf4cdd085 dep/rcheevos: Bump to dedfe2d 2026-02-01 13:25:51 +10:00
Stenzek
c60e3aaf2c VideoThread: Fix core thread view missing surface format
Fixes media capture throwing unhandled pixel format error after toggling
fullscreen.
2026-02-01 13:18:41 +10:00
Stenzek
e81fa84800 HTTPDownloader: Add missing error status assignment 2026-02-01 02:41:32 +10:00
Stenzek
84ff25e487 HTTPDownloader: Fix return value of curl write callback 2026-02-01 02:41:32 +10:00
Stenzek
ca49dd1ae5 HTTPDownloader: Fix error description for WinHttpOpenRequest() 2026-02-01 02:41:32 +10:00
Stenzek
66856687cc OpenGLDevice: Fix error reporting in SetSwapInterval() and SetVSyncMode() 2026-02-01 02:41:32 +10:00
Stenzek
87c4b66c46 OpenGLDevice: Fix error reporting in CreateFramebuffer() 2026-02-01 02:41:32 +10:00
Stenzek
a64272b7aa PostProcessing/FX: Fix incorrect min_point_mag_linear_mip_point translation 2026-02-01 02:41:32 +10:00
Stenzek
9630464e37 CMake: Remove pointless flags change
Wasn't specified in the user flags anyway.
2026-02-01 02:41:32 +10:00
Stenzek
7db0555b60 CMake: Bump version requirement 2026-02-01 02:41:32 +10:00
Stenzek
b20c2b281f Common: Add additional unit tests
And fix several logical errors.
2026-02-01 02:41:32 +10:00
Stenzek
d6915fb57a D3D11Device: Fix assigning integer to boolean 2026-02-01 02:41:32 +10:00
Stenzek
566681ff20 D3D11Device: Add missing push constant buffer destroy
No difference overall, but better to destroy buffer before device.
2026-02-01 02:41:32 +10:00
Stenzek
fa4d08491f CMake: Simplify resource copy 2026-02-01 02:41:32 +10:00
Stenzek
b330b3e7da CMake: Simplify Metal shader build
Don't need multiple versions.
2026-02-01 00:28:11 +10:00
Davide Pesavento
29241260a0 Qt: Avoid rich text in message boxes (#3695)
Otherwise Qt falls back to a very ugly non-native dialog on macOS.
2026-01-31 23:03:07 +10:00
Stenzek
0f280acaa7 InputManager: Remove padding from struct
No longer necessary since it's not shared between threads.
2026-01-31 19:47:31 +10:00
Stenzek
d66db164bd Qt: Add controller sensor mapping 2026-01-31 19:47:31 +10:00
Stenzek
668a930eb5 SDLInputSource: Add sensor (accelerometer) support 2026-01-31 19:29:59 +10:00
Stenzek
c13d04e2c9 InputManager: Remove Sensor source
This was only used for Android, and is better handled in the source
itself.
2026-01-31 19:25:14 +10:00
Stenzek
44e055ba03 Misc: Use delta from initial value for input binding
Avoids sensors falsely tripping.
2026-01-31 18:44:25 +10:00
Stenzek
1cfde39d3c Deps: Version updates
- Qt 6.10.2
- Harfbuzz 12.3.2
- libpng 1.6.54
2026-01-31 18:00:54 +10:00
Stenzek
0aca150a46 Common: Fix incorrect float rvalid() 2026-01-31 18:00:53 +10:00
Davide Pesavento
511058dc51 Qt: Fix crash on Linux when opening game properties (#3694)
* Qt: Fix crash on Linux when opening game properties

Regression from 370df62930

* Qt: Remove 'Use System Font' option from game properties

It only makes sense to set this globally.
2026-01-31 13:06:00 +10:00
bl@ck_m@ge
5cf8d080c9 GameDB: Max speedup cycles for Disruptor and Rescue Shot (#3693) 2026-01-30 22:00:22 +10:00
Stenzek
e50909234b Common: Fix string tests building 2026-01-30 21:56:38 +10:00
Stenzek
467f2fa6a8 StateWrapper: Avoid unnecessary include 2026-01-30 19:55:26 +10:00
Stenzek
7235494a77 VideoPresenter: Ensure skipped_present_count is zeroed 2026-01-29 22:12:50 +10:00
Stenzek
130494fae5 Qt: Allow changing executable with drag/drop
Also simplify the process a bit, remove the hack for GPU dumps in
InsertMedia().
2026-01-29 14:04:12 +10:00
Stenzek
a87d2aeafa Qt: Fix application name in task switcher on GNOME
Stupid desktop environment.

This will only work if you let DuckStation create/manage its desktop file.
2026-01-28 19:03:29 +10:00
Stenzek
f245357bbc Qt: Move state into QtHost namespace
Avoids symbol conflicts...
2026-01-28 17:59:01 +10:00
Stenzek
133018440a Qt: Fix log window appearing in front of main window on KDE 2026-01-28 17:55:10 +10:00
Stenzek
0aa6e1efcf Qt: Add popup to create desktop file on Linux 2026-01-28 17:33:30 +10:00
Stenzek
f4b3d1ce91 FileSystem: Add SetPathExecutable() 2026-01-28 16:32:17 +10:00
Stenzek
2fd81f5032 ImGuiManager: Make margins consistent across OSD/achievements 2026-01-28 15:44:33 +10:00
Stenzek
6f39b2f2e8 Qt: Fix fixed-width font not loading 2026-01-28 15:40:39 +10:00
Stenzek
8e5ec64448 Qt: Adjust window bring-up order
Ensure that the main window always has focus over the log window, but
the main window is shown first so it doesn't break the application icon
on Windows.
2026-01-28 15:32:12 +10:00
Stenzek
d45e121559 Qt: Remove QtUtils::GetRootWidget()
And replace usage with correct alternatives.
2026-01-28 14:56:38 +10:00
Davide Pesavento
a875254528 Controller: Add option to use right analog as trigger buttons (#3692) 2026-01-28 14:49:07 +10:00
Stenzek
c28282c405 Qt: Always use FullscreenUI for confirm message if system valid 2026-01-28 00:15:49 +10:00
Stenzek
36788b8595 Misc: Eliminate unnecessary atomic thread fences 2026-01-28 00:15:49 +10:00
Stenzek
25211c6fdb VideoPresenter: Move present throttling from VideoThread 2026-01-28 00:15:49 +10:00
Stenzek
335145b54b VideoThread: Avoid possible null presentation in PresentFrameAndRestoreContext() 2026-01-28 00:04:24 +10:00
Stenzek
5516f7a2f1 Misc: Use 'Render Window' consistently instead of 'Display Window' 2026-01-28 00:04:24 +10:00
Stenzek
92b888fb82 VideoThread: Fix overreserve in command allocator
Should be inconsequential.

Also fix wraparound handling at the buffer size.
2026-01-28 00:04:12 +10:00
Stenzek
4c523a6345 VideoThread: Rename some missed references 2026-01-27 23:20:26 +10:00
Anderson Cardoso
7c4bcefdd6 Atualização Português do Brasil (#3691)
Atualizado novos textos para última versão.
2026-01-27 19:52:45 +10:00
Stenzek
0bbb5b736e Qt: Fix tab order in OSD settings again 2026-01-27 19:51:47 +10:00
Stenzek
31f9be1ba1 VideoPresenter: Simplify post-processing settings update 2026-01-27 17:17:38 +10:00
Stenzek
219ee2067e PostProcessing: Fix depth buffer always being requested 2026-01-27 17:17:38 +10:00
Stenzek
208a8a505b GPUPresenter: Rename to VideoPresenter
Also fewer conflicts.
2026-01-27 17:17:38 +10:00
Stenzek
a04a312c1a GPUThread: Rename to VideoThread
Fewer conflicts.
2026-01-27 17:17:16 +10:00
Stenzek
63102e9a7f Qt: Avoid locals symbol name clash in qtthemes.cpp 2026-01-27 15:24:18 +10:00
Stenzek
370df62930 Qt: Add option to use the system font on Linux 2026-01-27 15:24:18 +10:00
Stenzek
9b299fee46 GPUPresenter: Convert to namespace 2026-01-27 15:24:18 +10:00
Stenzek
df757371e6 WindowInfo: Move prerotation enum to global scope
Enable forward declarations.
2026-01-27 13:56:38 +10:00
Stenzek
7e484861de Achievements: Reduce the size of challenge notifications 2026-01-27 12:37:30 +10:00
Stenzek
27afb31cc2 Achievements: Fix overlap when >1 leaderboard tracker active 2026-01-27 12:21:46 +10:00
Stenzek
5c0a227c1c Qt: Ensure fields in MemoryViewWidget are initialized
Didn't hit this before but better safe than sorry.
2026-01-26 20:59:17 +10:00
Stenzek
6be96f6fd7 GameDB: PGXP CPU for World's Scariest Police Chases 2026-01-26 20:58:58 +10:00
Stenzek
fb682a92ce Qt: Fix incorrect tab indices in graphics settings 2026-01-26 17:53:19 +10:00
Stenzek
499c08a370 Achievements: Warn on shutdown when unlocks are unconfirmed 2026-01-26 16:47:53 +10:00
Stenzek
ddcc2e0878 Achievements: Add missing lock to GetPauseThrottleFrames() 2026-01-26 16:47:53 +10:00
Stenzek
8643068870 Achievements: Fix unsynchronized achievements missing from list 2026-01-26 16:47:53 +10:00
Stenzek
2da35d2d38 dep/rcheevos: Prioritize unsynchronized bucket over recently unlocked 2026-01-26 16:47:53 +10:00
Stenzek
dc69e3f0c5 Qt: Fix conflicting accelerators in Settings menu 2026-01-26 16:47:53 +10:00
Stenzek
38c6c3e769 Qt: Improve grouping of OSD options 2026-01-26 15:46:44 +10:00
Stenzek
1f672d3ff1 ImGuiManager: Fix spacing for media capture timer overlay 2026-01-26 15:25:23 +10:00
Stenzek
a0fbffe05d Qt: Don't store unneeded references to settings pages 2026-01-26 15:10:41 +10:00
Stenzek
0f35e4e5dd Qt: Drop workaround for Classic Windows theme change bug
Seems fine now.
2026-01-26 15:10:41 +10:00
Stenzek
0a9a77ceb1 Qt: Move OSD and Capture settings to their own sections 2026-01-26 15:10:41 +10:00
Davide Pesavento
83b3a2ebb3 GameDB: Adjust cropping in Threads of Fate 2026-01-26 15:10:31 +10:00
Davide Pesavento
dcebea1cbf GameDB: Adjust cropping in FF8 and FF9 2026-01-26 15:10:31 +10:00
Davide Pesavento
21dfa471a0 GameDB: Disable auto analog in Mizzurna Falls (#3689) 2026-01-26 12:53:21 +10:00
Stenzek
ac1e6b533f GameList: Fix some interactions with custom serials
- Disc sets need to be recreated.
- Title should be cleared if going from unknown to known serial.
2026-01-26 12:50:53 +10:00
Stenzek
3a53a89268 Qt: Fix double save of custom serials 2026-01-26 12:50:27 +10:00
Stenzek
1608a6f7f5 FullscreenUI: Adjust footer item spacing 2026-01-25 23:23:50 +10:00
Stenzek
6c013dbe91 ImGuiManager: Increase font weight for OSD settings
Needed with font change.
2026-01-25 23:23:50 +10:00
Stenzek
4d6932eb13 GameDB: Tighten timing in Wing Commander III
Prevents crash during area loading.
2026-01-25 23:23:50 +10:00
Víctor "IlDucci
2ac1d892a9 Spanish (Spain) translation update. (#3688)
- Added translations for new/changed strings, other minor tweaks.
 - Renamed "subconjunto" (achievements) to "subset" following now-existing RetroAchievements translation.
 - Renamed "ampliación de tiempo" to "ampliación temporal".
2026-01-25 23:23:27 +10:00
Stenzek
91b0ed95da ImGuiManager: Use text font for frame time overlay
Slightly less terrible looking on low-DPI.
2026-01-25 21:02:47 +10:00
Stenzek
ac8502ce50 ImGuiManager: Swap fixed-width font to Google Sans Code
More consistent and better looking at low-DPI.
2026-01-25 21:02:47 +10:00
Stenzek
65bb5bc43e ImGuiManager: Adjust fixed-width font weight based on DPI
Fixed-width fonts seem to look awful at lighter weight on low-DPI
displays.
2026-01-25 21:02:47 +10:00
Stenzek
dedc59037f ImGuiManager: Allow renderer switch without destroying context
Fixes UI getting reset when changing renderers, and works around being
left in an inconsistent state if FSUI wasn't started and renderers are
changed from the ingame settings menu.
2026-01-25 21:02:47 +10:00
Stenzek
81bee3191e ImGuiManager: Fix possible memory leak on shutdown 2026-01-25 21:02:47 +10:00
Davide Pesavento
60ab6a960b Qt: Reflect new defaults in settings help (#3687) 2026-01-25 21:02:24 +10:00
Stenzek
1379d3ae55 Qt: Fix recommended value for Optimal Frame Pacing 2026-01-25 17:05:15 +10:00
Stenzek
ba180d63ae Qt: Add option to edit game list serials
Useful for modded games/ROM hacks, since then they get a different set
of settings.
2026-01-25 16:56:08 +10:00
Stenzek
4281de3521 Qt: Make settings update check ignore skipped updates
Same as help menu.
2026-01-25 14:02:37 +10:00
Stenzek
d3bff97f48 Settings: Default optimal frame pacing to enabled
Except on ARM64 Linux because potato RK3326's and such.
2026-01-25 13:10:58 +10:00
Stenzek
c76ee85b1d VulkanDevice: Don't submit during image acquire
Regression from 5e6a18a584
2026-01-25 13:08:00 +10:00
Stenzek
6f9752a177 VulkanDevice: Simplify EndAndSubmitCommandBuffer() a bit 2026-01-25 12:48:52 +10:00
Stenzek
1a81adb696 GPUThread: Fix crash concurrently changing renderer and deinterlacing 2026-01-24 20:54:33 +10:00
Stenzek
d67b9b9d28 OpenGLDevice: Don't use glGetTextureSubImage() on NVIDIA
glReadPixels() is about 2x faster...
2026-01-24 20:20:31 +10:00
Stenzek
5e6a18a584 VulkanDevice: Wait before starting next command buffer
Potentially avoids a fence wait.
2026-01-24 19:55:07 +10:00
Stenzek
af305d3814 D3D12Device: Avoid second fence wait for infrequent readback 2026-01-24 19:55:07 +10:00
Stenzek
4b30147350 D3D12Device: Avoid render pass end when setting same target 2026-01-24 19:55:06 +10:00
Stenzek
0614262e04 GPU/HW: Fix inconsistent device state after blank deinterlace 2026-01-24 19:55:06 +10:00
Stenzek
66956ded76 GPUPresenter: Avoid empty viewport on blank deinterlace 2026-01-24 19:26:05 +10:00
Stenzek
fa84d9e893 Qt: Default MacOS fractional window scale to disabled 2026-01-24 13:27:09 +10:00
Stenzek
66bfc4b164 Achievements: Increase padding for leaderboard loading indicator 2026-01-24 01:16:56 +10:00
Stenzek
bd1b660514 dep/rcheevos: Destroy parse state in rc_find_next_classification()
Fixes memory leak.
2026-01-24 01:12:43 +10:00
Stenzek
e26ad17fea dep/rcheevos: Fix silent URL truncation in new functions 2026-01-24 01:09:47 +10:00
Stenzek
c41eeda026 Achievements: Fix almost there/active challenge showing in all subsets 2026-01-23 22:00:06 +10:00
Stenzek
d9e442e5c8 GPUDevice: Don't duplicate fullscreen modes
Also sort the list while we're at it.
2026-01-23 21:22:41 +10:00
Stenzek
424a8e7756 Cheats: Fix aspect ratio not updating on change 2026-01-23 21:16:59 +10:00
Stenzek
75aba0d1ed GPUThread: Fix core thread window info not updating on fullscreen 2026-01-20 18:07:22 +10:00
Stenzek
07f2fa8f59 Achievements: Reload game when resetting after disc swap
Otherwise rcheevos maintains the old game info.
2026-01-20 16:38:42 +10:00
Stenzek
9a24913ab3 FullscreenUI: Remove now-unused host file selector functions
Apparently I forgot this. Should've been optimized out with LTO anyway.
2026-01-20 15:59:34 +10:00
Stenzek
c1ff163943 Misc: Replace more 'reset' strings with 'restart' 2026-01-20 00:27:30 +10:00
Stenzek
ce5b358d25 README: Update Mac installation instructions 2026-01-19 23:37:10 +10:00
Stenzek
fb474e8dd1 Qt: Relabel 'Reset Game' as 'Restart Game'
Clearer what it actually does.
2026-01-19 23:18:54 +10:00
Stenzek
f18aaee695 Qt: Use QPlatformTheme for Cancel 2026-01-19 23:18:54 +10:00
Stenzek
29692268b9 Qt: Allow parenting updater to settings dialog
Saves flipping back to main window if queried from interface settings.
2026-01-19 23:18:54 +10:00
Stenzek
e851c665c9 Common: Remove MemorySettingsInterface
No longer needed. Regtest uses the INI interface without a backing file.
2026-01-19 23:18:54 +10:00
Stenzek
06897cd733 Qt: Move windows data location from Documents to AppData
OneDrive shenanigans, Windows Defender preventing access, the list of
issues goes on.

Existing setups with a DuckStation directory in Documents will continue
to use Documents. New installs will use AppData\Local.
2026-01-19 23:18:54 +10:00
Stenzek
322320f816 FileSystem: Backport 3-arg Path::Combine() 2026-01-19 18:29:00 +10:00
Stenzek
a57851fb0c Qt: Fall back to QScreen if WindowInfo refresh rate query fails 2026-01-19 15:38:30 +10:00
Stenzek
ec22863e48 CocoaTools: Add display link fallback for refresh rate query 2026-01-19 15:38:10 +10:00
Stenzek
7f7d827397 GPUPresenter: Avoid NaN sized target during loading
Fixes texture errors during achievement loading with post-processing
active.
2026-01-19 15:05:46 +10:00
Stenzek
4800a4e552 PostProcessing: Avoid creating zero-sized intermediate targets 2026-01-19 15:05:46 +10:00
Stenzek
962454bbf4 Qt: Fix double invoking of mouse wheel/button events
Fixes FSUI scroll speed.
2026-01-19 15:05:46 +10:00
Stenzek
0c1f61f783 FullscreenUI: Add option to swap gamepad confirm/cancel buttons 2026-01-19 15:05:46 +10:00
Stenzek
a44f202f42 ImGuiManager: Remove another source of truth for window size 2026-01-19 15:05:46 +10:00
Stenzek
808d1116e5 GunCon: Don't read ImGuiManager state
Owned by GPU thread.
2026-01-19 15:05:46 +10:00
Davide Pesavento
39634b3555 FSUI: More consistent icons (#3686) 2026-01-19 15:05:36 +10:00
Stenzek
525dba5c52 GPUDevice: Use sorted array for storing shader cache entries
Saves hundreds of heap allocations for something that is more often read
rather than write.
2026-01-18 19:50:16 +10:00
Stenzek
c4255112ce MediaCapture: Remove stream ID check in ProcessVideoEvents()
Wasn't doing anything, and broke hardware encoding on NVIDIA.
2026-01-18 18:37:02 +10:00
Daniel Nylander
0058441ae5 Updated Swedish translation (#3685) 2026-01-18 18:36:48 +10:00
Stenzek
9eb092cf1b Qt: Detect refresh rate change when screen changed 2026-01-18 18:24:48 +10:00
Stenzek
ff0ad1b176 System: Rewrite present skipping
Now can operate in "only if vsync blocks" mode.

Significantly improves frame pacing for fast forward speeds.
2026-01-18 18:24:48 +10:00
Stenzek
4ec6ff7ebc InputManager: Remove second source of truth for window size 2026-01-18 16:51:10 +10:00
Stenzek
7c0e4d37c6 Qt: Forward mouse events through core thread
Instead of messing with core thread state on the UI thread.
2026-01-18 16:51:10 +10:00
Stenzek
71f46cf8c1 GPUThread: Update core thread window size on core thread
Avoid the barrier when reading it.
2026-01-18 16:51:07 +10:00
Stenzek
abed81d53e GPUDevice: Use present instead of current time for skip logic
Fixes erratic frame times when fast forwarding and below the
screen refresh rate.
2026-01-18 13:29:00 +10:00
Stenzek
a7d29da8ef System: Clamp typical time to frame period on MacOS
Gets rid of constraint errors with targeted fast forward speed.
2026-01-18 13:27:31 +10:00
Stenzek
e41ca32459 AudioStream: Fix changing stretch mode without buffer change 2026-01-18 13:24:08 +10:00
Stenzek
c8abdccce4 FullscreenUI: Remove content start sound effect
This ended up being way more annoying than I thought it would be.
2026-01-18 01:44:40 +10:00
Stenzek
4f37bc6e18 dep/rcheevos: Update rcheevos to v12.2.1
Already applied the patch, but this will bump the user agent which may
help with troubleshooting.
2026-01-18 01:44:02 +10:00
Stenzek
53e7cf5e5b System: Disable screensaver inhibit on Gamescope
So I don't have a barrage of Steam Deck users whinging about the OSD
message.

Also disable it if XDG_CURRENT_DESKTOP is missing, like running directly
on the framebuffer.
2026-01-18 01:25:01 +10:00
Stenzek
2a8256673a GPUDevice: Use separate variables for last/next present time
Fixes erratic frame rates in Big Picture mode.

Regression from 09926a3769.
2026-01-17 23:07:24 +10:00
Stenzek
2c77eabe3a Qt: Use nested layouts in controller settings dialog
Gets rid of the gaps but doesn't require rearranging.
2026-01-17 21:45:22 +10:00
Stenzek
9c9bd21c30 Qt: Remove RemoveEmptyRowsAndColumns() helper
Even after fixing this function, Qt's still screwing up the spacing of
grid items after rearranging. Better to approach this a different way.
2026-01-17 21:44:29 +10:00
Stenzek
8863c53813 System: Fix inhibit state if option changed while paused 2026-01-17 20:21:18 +10:00
Stenzek
70d286516e Qt: Fix auto updater half complete state on missing asset 2026-01-17 19:33:36 +10:00
Stenzek
54692a842b Qt: Only override with real/fractional scale on Metal renderer
Vulkan/MoltenVK can't handle it.
2026-01-17 19:13:46 +10:00
Stenzek
171514327d Qt: Fix incorrect fractional window size in MacOS 2026-01-17 19:13:46 +10:00
Stenzek
ebb604e1c6 Achievements: Use secondary colour for active subset
Makes it clearer.
2026-01-17 19:13:46 +10:00
Stenzek
3b57f437d4 Achievements: Don't duplicate subset title in list view
It's already shown in the subset selector.
2026-01-17 19:13:46 +10:00
Stenzek
1c02bf01a7 Achievements: Fix progress bar being too short 2026-01-17 19:13:46 +10:00
Stenzek
2463a5fdb7 Misc: Remove platform_misc.h completely 2026-01-17 19:13:46 +10:00
Stenzek
9c07d9bf7c CocoaTools: Move util functions to common 2026-01-17 19:13:46 +10:00
Stenzek
8135aefacf Qt: Move window corner rounding out of PlatformMisc 2026-01-17 19:13:46 +10:00
Stenzek
ffe7ca9f0a Host: Move screensaver inhibit to host
Removes direct dependency on DBus, uses Qt DBus instead.
2026-01-17 19:13:46 +10:00
Stenzek
e2266cd617 dep/rcheevos: Bumpt a4b9156 + #492
And remove some local patches that are now unnecessary.
2026-01-17 14:41:00 +10:00
Stenzek
2c8647d348 Achievements: Use rc_client_create_leaderboard_list() for hidden test
That way it's compatible with external client.
2026-01-17 14:32:50 +10:00
Stenzek
3a0c4898ef GunCon: Add line/tick offset for position fine-tuning
Fixes calibration in Ghoul Panic and default position in Judge Dredd.
2026-01-17 14:14:09 +10:00
Stenzek
9882ef4251 GPU: Fix ConvertDisplayCoordinatesToBeamTicksAndLines() with forced-progressive 2026-01-17 12:50:42 +10:00
Stenzek
4c92dc1818 Qt: Fix tab order in a couple of places
Regression from ff889fc749 and
e52b7dde8b.
2026-01-16 17:35:14 +10:00
Stenzek
6d61c54d50 Qt: Adjust Darker Fusion highlight colour 2026-01-16 17:34:58 +10:00
Davide Pesavento
ff889fc749 Qt: Fix overlapping group boxes in controller global settings (#3683) 2026-01-16 17:23:44 +10:00
Anderson Cardoso
a9bea9a4dd Atualização Português do Brasil (#3682)
Atualizado para a última versão
2026-01-16 17:22:22 +10:00
Davide Pesavento
0edd6e6fe4 GameDB: PGXP CPU mode and max speedup cycles for The Guardian of Darkness 2026-01-16 18:22:03 +11:00
Davide Pesavento
98596dd7df GameDB: Set PGXP tolerance for Vagrant Story 2026-01-16 18:22:03 +11:00
Stenzek
bd44e36f70 Achievements: Use OSD messages for errors instead of notifications 2026-01-16 02:49:40 +10:00
Stenzek
18768bcaba Achievements: Use note area in more notifications
- Show RA logo for login/game summary.
- Add icons to game complete, subset complete, leaderboard start/fail.
2026-01-16 02:49:40 +10:00
Stenzek
d02df7cf4b Achievements: Don't use visibility for leaderboard paging
Fixes leaderboards not being scrollable with controller only navigation.
2026-01-16 02:49:40 +10:00
Stenzek
f372a92246 Achievements: Add active leaderboard trackers to pause menu 2026-01-16 02:49:39 +10:00
Stenzek
93a5663fc8 Achievements: Make leaderboard notifications a little nicer 2026-01-16 02:49:39 +10:00
Stenzek
f222c5012a Achievements: Raise leaderboard fetch size to 15/50
Was loading too often otherwise.
2026-01-16 00:46:38 +10:00
Stenzek
a108fcf2b2 Hotkeys: Fix power off hotkey in achievements hardcore mode 2026-01-16 00:46:38 +10:00
Stenzek
80993e9880 FullscreenUI: Fix crash when hovering floating buttons
Only used in achievement lists.

Regression from db46413df7.
2026-01-16 00:46:38 +10:00
Stenzek
56fc9afbcf InputManager: Default to using global sources in profiles/games
Fixes controllers disconnecting and reconnecting on game start if any
settings were not copied from global (e.g. new settings).

Also fixes raw input not being hidden on non-Windows.

This is a breaking change if you were relying on input profiles/game
configuration having different sources selected.

In those cases, you will need to enable the new "Use Profile Input
Sources" checkbox to revert to the old behaviour for new profiles.
2026-01-15 20:26:01 +10:00
Stenzek
0c29d4e1db Qt: Remove empty rows/columns in controller settings 2026-01-15 20:26:01 +10:00
Stenzek
82947f0f65 Qt: Don't double-create the controller settings widgets
If editing a preset.
2026-01-15 20:26:01 +10:00
Stenzek
2db018bd88 Qt: Convert text in analog/digital pad SVGs to paths
Makes controller settings open instantly instead of a second or two
delay while DWrite is set up for font rendering.
2026-01-15 20:25:51 +10:00
Davide Pesavento
8dc07e5282 Qt: Use splitter in macro editor (#3680) 2026-01-15 16:58:49 +10:00
Stenzek
1ec280113f Qt: Fix incorrect row for compatibility comments 2026-01-15 16:35:42 +10:00
Stenzek
0912783158 System: Add taint for memory card time travelling 2026-01-15 15:47:40 +10:00
Stenzek
3bff452022 Qt: Add custom titles for disc sets
Still questioning the point since all discs including patched will get
lumped into the same disc set... but it's straightforward enough.
2026-01-15 15:30:59 +10:00
Stenzek
09926a3769 GPUDevice: Update last presented time after present
Instead of before.

Makes present skipping much more effective against NVIDIA's global
framerate cap if enabled, on my system with the cap at 60fps it
went from 120fps to 1400fps. Still about half of the true uncapped
speed, but when the present call blocks for a few milliseconds this
is all you can do. Can't stop presenting frames entirely.
2026-01-14 22:03:15 +10:00
Stenzek
d02382da79 GameList: Log image open errors on file scan failure 2026-01-14 22:03:15 +10:00
Stenzek
0c84baf4da Qt: Use portal file picker on KDE/GNOME 2026-01-14 22:03:15 +10:00
Stenzek
9cc8b0e19f InputManager: Apply 'Disable Background Input' to ImGui too
And fix the incorrect config key.
2026-01-14 02:01:28 +10:00
Stenzek
2d8b7c85bf FullscreenUI: Halve menu animation time
Felt really sluggish. Not sure how I haven't picked up on this before.
2026-01-14 01:22:27 +10:00
Stenzek
e52b7dde8b InputManager: Add 'Disable Background Input' option
Ignores controller input when application is not in the foreground.
2026-01-14 01:10:05 +10:00
Stenzek
f901d716bc InputManager: Don't use relative mode in raw input without bindings
Fixes mouse pointer getting locked if the user accidentially enables it
with nothing bound.
2026-01-14 00:30:12 +10:00
Stenzek
991db9e49a InputManager: Remove default Pointer-0 device on raw input startup
And re-add it on shutdown.

Fix the duplicate devices in the list.
2026-01-14 00:29:37 +10:00
Stenzek
2cb7bace03 InputManager: Fix raw input device disconnect events not triggering on disable 2026-01-14 00:28:54 +10:00
Stenzek
8048c05b3e InputManager: Fix raw input not registering 2026-01-14 00:28:31 +10:00
Davide Pesavento
f7083f9635 Qt: Fix singular form in a few translatable strings (#3681) 2026-01-13 12:55:59 +10:00
Stenzek
671751f980 Qt: Define Q_OBJECT for TextureReplacementSettingsDialog 2026-01-13 12:54:57 +10:00
bl@ck_m@ge
7d2377b98e GameDB: Max speedup cycles for Inuyasha and Monster, Inc. (#3679) 2026-01-12 20:48:36 +10:00
Stenzek
f9bf0cb128 Qt: Make 'Clear Settings' in Game Properties clear ini
Same as fullscreen UI.
2026-01-12 20:47:32 +10:00
Stenzek
08131302cd FullscreenUI: Reorder settings pages to match Qt
And add per-game post-processing.
2026-01-12 20:43:44 +10:00
Stenzek
a011b78d22 FullscreenUI: Fix per-game post processing settings 2026-01-12 20:43:35 +10:00
Stenzek
249f9d03f9 InputManager: Avoid redundant core thread invocation 2026-01-12 20:37:56 +10:00
Stenzek
896395b3ba FullscreenUI: Tweak message dialog widths 2026-01-12 20:37:41 +10:00
Stenzek
1431d5cf5b FullscreenUI: Use horizontal buttons for message dialogs
Unless it's a long string, then use vertical.

Also add icons to the dialogs.
2026-01-12 20:02:33 +10:00
Stenzek
f5ebe1cee2 FullscreenUI: Use horizontal buttons for resuming state 2026-01-12 19:59:41 +10:00
Stenzek
5637fc7804 ImGuiManager: Run idle when OSD messages are present
So we don't miss them.
2026-01-12 18:25:49 +10:00
Stenzek
56cbbb1323 InputManager: Don't display controller connected for initial 3 seconds
Avoids spamming the OSD when starting up.
2026-01-12 18:25:49 +10:00
Stenzek
5154ea9b18 Qt: Route status messages to OSD if fullscreen 2026-01-12 18:25:49 +10:00
Stenzek
82ab3e84a5 Host: Add ReportStatusMessage() 2026-01-12 18:25:49 +10:00
Stenzek
8f94a56ab2 System: Add GetProcessUptime() 2026-01-12 18:25:49 +10:00
Stenzek
a83ccdcd0e FullscreenUI: Fix focusing when pressing west face button 2026-01-12 17:14:49 +10:00
Stenzek
454d33272f FullscreenUI: Hook up L2/R2 to page up/down 2026-01-12 17:07:13 +10:00
Stenzek
d54de027cd FullscreenUI: Don't show ports in game settings by default 2026-01-12 16:45:00 +10:00
Stenzek
db46413df7 FullscreenUI: Use channels for background/highlight/foreground 2026-01-12 16:27:43 +10:00
Stenzek
bc2a2ba8d5 FullscreenUI: Fix background alpha for achievements user heading 2026-01-12 14:22:53 +10:00
Stenzek
9dcef869a3 FullscreenUI: Use appropriate icon for console settings 2026-01-12 14:22:53 +10:00
Stenzek
6c9277dbd2 FullscreenUI: Improve split window UX
- Fix sidebar scroll resetting after activation.
- Fix selection rectangle displaying on escape down.
- Improve padding and remove gaps.
2026-01-12 14:22:53 +10:00
Stenzek
c5ce2f999b dep/imgui: Add ImGuiChildFlags_NoNavCancel 2026-01-12 14:22:53 +10:00
Stenzek
d9fa8d1ed5 FullscreenUI: Use dummy for menu headings
No need to draw frames.
2026-01-12 14:22:52 +10:00
Stenzek
723fb02a76 Qt: Fix reshade shader icon in light themes 2026-01-12 14:22:52 +10:00
Stenzek
beaf01ccd6 Qt: Fix ReportFatalError() returning 2026-01-12 13:03:56 +10:00
Stenzek
a188633f6d FullscreenUI: Don't clear transition when preserving state 2026-01-12 13:03:46 +10:00
Stenzek
cb1e545f05 FullscreenUI: Wrap navigation in split windows 2026-01-12 13:03:27 +10:00
Stenzek
3952477d39 FullscreenUI: Use split window for controller settings
Much better than that massive scrolling list.
2026-01-11 19:43:00 +10:00
Stenzek
23e57f83fc FullscreenUI: Add 'Split Windows'
i.e. sidebar + content
2026-01-11 19:42:45 +10:00
Stenzek
cd688477a0 FullscreenUI: Settings changed fields don't need to be atomic 2026-01-11 17:24:34 +10:00
Stenzek
c126ee7d28 FullscreenUI: Fix EndFullscreenWindow() inside conditional 2026-01-11 13:34:45 +10:00
Stenzek
1ef7ce0d7f Qt: Don't open dialog on shift-click for effect bindings 2026-01-10 16:34:18 +10:00
Stenzek
e0f97a8a00 CompressHelpers: Fix incorrect function call 2026-01-10 15:29:27 +10:00
Stenzek
b287f00235 ZipHelpers: Don't call zip_error_fini() on zip_get_error() object 2026-01-10 15:29:27 +10:00
Stenzek
a8776a3b22 DynamicHeapArray: Don't resize if size is the same 2026-01-10 15:29:27 +10:00
Stenzek
7d95949e87 README: Update deps list 2026-01-10 15:29:27 +10:00
Davide Pesavento
2afc6cf26e Qt: Fix initial state of output latency slider 2026-01-09 23:40:26 +11:00
Davide Pesavento
ad01f993c8 Qt: Polish sliders 2026-01-09 23:40:26 +11:00
Stenzek
0b3c2c3e05 Qt: Fix enable syncing of notification/indicator locations 2026-01-09 16:00:25 +10:00
Davide Pesavento
626d511218 Qt: Fix help text for a couple of OSD settings (#3677) 2026-01-09 12:55:26 +10:00
Stenzek
d908b923ef VideoPresenter: Textures should be uploaded before any draws 2026-01-08 22:19:58 +10:00
Stenzek
0c1cdd31e1 Qt: Fix notification/indicator location enable state 2026-01-08 21:33:06 +10:00
Stenzek
79f9bbe6af Qt: Hide size for directories in ISO browser
It was nonsensical since it was reporting the size of the directory
entry, which has no correlation with the size of the files in the
directory.
2026-01-08 20:09:23 +10:00
Stenzek
bb8179f617 ImGuiManager: Allow repositioning OSD messages 2026-01-08 20:05:30 +10:00
Stenzek
4e0c42100a Achievements: Allow changing position of overlays 2026-01-08 19:54:19 +10:00
Stenzek
212b0e6aed Qt: Display profile icon in achievement settings 2026-01-08 15:31:06 +10:00
Stenzek
f7e83492b9 Qt: Remove game info from settings
Doesn't belong here, and I need the space.
2026-01-08 15:13:41 +10:00
Stenzek
3dcb73f66f Deps: Cherry-pick SDL3 f369e80
Incredible that this silly broken DLL is still causing problems almost a
decade later.
2026-01-08 13:01:53 +10:00
Stenzek
11331eb6c3 Deps: Bump to SDL3 3.4.0 2026-01-08 12:55:30 +10:00
Stenzek
5b5b6bbf77 FullscreenUI: Avoid redundant transition 2026-01-07 14:23:04 +10:00
Stenzek
f989a80541 Qt: Fix initial state of debugger if opened while paused 2026-01-07 14:02:10 +10:00
Stenzek
54285978cf CPU: Add Host::ReportDebuggerEvent()
And replace the old ReportDebuggerMessage().

Fixes breakpoint hit counts not updating in UI.
2026-01-07 13:57:30 +10:00
Stenzek
74a8e6653d FullscreenUI: Fix incorrect state with per-game renderer setting 2026-01-07 13:17:03 +10:00
Stenzek
a2f3d038db dep/imgui: Update to 69a501d 2026-01-06 15:44:28 +10:00
Stenzek
ace6cd2da4 Qt: Use temporary game list entry for properties of playlists
Doesn't provide full functionality, but this is not a supported setup
and it's better than only making the first disc accessible.
2026-01-06 14:57:08 +10:00
Stenzek
bff1f473d6 CPU: Add cop0 breakpoint checks for coprocessor loadstores 2026-01-06 14:00:58 +10:00
Stenzek
b1d1c76289 CPU: Don't set cop bits on DBE 2026-01-06 14:00:58 +10:00
Stenzek
f9c2aeabbb CPU: Fix incorrect EPC after cop0 breakpoint 2026-01-06 13:48:59 +10:00
Stenzek
c02bcdcd9f Qt: Add link to wiki page for changing sounds 2026-01-06 13:48:59 +10:00
Stenzek
cd9e3ffb85 SoundEffectManager: Support converting float wave files too 2026-01-06 01:20:25 +10:00
Stenzek
4522449156 SoundEffectManager: Support converting bit depth 2026-01-06 00:51:04 +10:00
Stenzek
2e659d8cf8 CPU: Pack local state in struct 2026-01-05 18:35:24 +10:00
Stenzek
5a32d194b7 CPU: Fix cop0 breakpoints triggering too late 2026-01-05 18:31:13 +10:00
Stenzek
64d70753fc ImGuiManager: Use default icons when unspecified 2026-01-05 16:44:51 +10:00
Stenzek
6c09ba4944 Qt: Move time stretch settings into audio widget
Fewer popup windows.
2026-01-05 16:44:51 +10:00
Stenzek
f2adc39709 CoreAudioStream: Handle parameter changes without restarting 2026-01-05 16:29:06 +10:00
Stenzek
fa39e63bbb Achievements: Show leaderboard times as relative
With a tooltip showing the absolute time.
2026-01-05 13:40:15 +10:00
Stenzek
4ab3669af0 Qt: Set QT_NO_SIGNALS_SLOTS_KEYWORDS
This should have been on before.
2026-01-05 12:45:01 +10:00
Stenzek
9e0e07f029 FullscreenUI: Update idle state after transition finishes
Just in case the FSUI Active bit gets stuck on.
2026-01-05 12:44:57 +10:00
Daniel Nylander
283478a329 Updated Swedish translation (#3676)
* Updated Swedish translation

* Remove VRAM mention from Swedish translation

* Updated Swedish translation

* Updated Swedish translation

* Minor fixes
2026-01-05 12:35:10 +10:00
Anderson Cardoso
b805c431f9 Atualização Português do Brasil (#3675)
Atualizado para a última versão
2026-01-04 13:12:21 +10:00
Stenzek
5c53fba912 Qt: Fix Wayland workarounds not applying
Forcing XWayland is almost a better option than this garbage.
2026-01-03 21:14:57 +10:00
Stenzek
ae1bd270c7 Data: Update SDL game controller database 2026-01-03 13:12:10 +10:00
Davide Pesavento
43a405413b PlatformMisc: Fix screensaver inhibition on macOS (#3674) 2026-01-03 12:24:40 +10:00
Stenzek
632aa18df0 CPU: Don't raise #RI on write to read-only COP0 registers
Should be silently ignored instead apparently.
2026-01-02 20:35:46 +10:00
Stenzek
c015893571 CPU: Add COP0 register names to disassembly 2026-01-02 19:55:00 +10:00
Davide Pesavento
d7b2f2d5f7 README: Update minimum macOS version (#3673) 2026-01-02 18:59:51 +10:00
Stenzek
2258463d8a CDImagePPF: Implement parsing of undo data 2026-01-02 18:59:21 +10:00
Stenzek
65de509c8d Qt: Fix spurious WinId change error on debug widget close 2026-01-02 13:04:08 +10:00
Stenzek
0ad425f584 GameList: Fix reporting of 'Yesterday' on Jan 1st 2026-01-01 14:40:54 +10:00
Stenzek
45dd5001cd Qt: Restore disassembly register previews in debugger
Probably got lost when I added branch lines.
2025-12-31 20:41:30 +10:00
Stenzek
67bb75250b Cheats: Search local cheats/patches for multi-disc games
Was already done for archives, just not local files.
2025-12-31 20:15:13 +10:00
Stenzek
14625af98e Common: Remove fallback for missing heterogeneous lookup
Minspec has this now, and I don't need to worry about Debian 11 anymore.
2025-12-31 18:18:37 +10:00
Stenzek
0a9bf5aa00 StringUtil: Use to_chars() for floating point types 2025-12-31 18:18:37 +10:00
Stenzek
a584a5a5ae CI: Set MacOS deployment target to 13.3
Required for std::to_chars() with floating-point types.
2025-12-31 18:18:37 +10:00
Stenzek
f03bb5b255 Qt: Defer initial layout of game grid
Knocks ~200ms off the startup time.

For some reason, the pixelMetric() call was taking all the time...
2025-12-31 17:53:53 +10:00
Stenzek
170d4b9fb8 Build: Don't make fast_float a public link for libraries 2025-12-31 17:36:53 +10:00
Stenzek
d4c4ec566a CMake: Prefer private over public include dirs 2025-12-31 17:33:04 +10:00
Stenzek
4c79ee82ac CMake: Adjust fmt build macros
Set on the library, not globally.
2025-12-31 17:30:04 +10:00
Stenzek
84e4aed8a7 dep/fmt: Update to v12.1.0 2025-12-31 17:22:30 +10:00
Stenzek
091517a62e StringUtil: Move FromChars()ToChars() instantiation to source file
Knocks ~10% off compile time.
2025-12-31 16:45:00 +10:00
Stenzek
dea9ce3d68 StringUtil: Move most non-template functions to source file 2025-12-31 16:45:00 +10:00
Stenzek
a42df97716 StringUtil: Use C++20 requires clauses instead of enable_if 2025-12-31 16:45:00 +10:00
Stenzek
8db7cff9d7 InputManager: Remove hotkey list indirection
Should also fix GCC link errors in Release builds.
2025-12-31 16:45:00 +10:00
Stenzek
604b7ce73f Misc: Fix building with GCC
Not that anyone should be doing it.
2025-12-31 16:21:04 +10:00
Stenzek
a725890dee Achievements: Add easing to progress indicators 2025-12-31 14:53:56 +10:00
Stenzek
3ff1ea33cf ImGuiManager: Extract out gradient rect function 2025-12-31 14:30:22 +10:00
Stenzek
83f5fdcab9 Qt: Order volume controls before audio backend configuration
Put the options that the user is more likely to change at the top.
2025-12-30 15:37:31 +10:00
Stenzek
f226581460 Qt: Include time stretch latency in displayed maximum 2025-12-30 15:37:12 +10:00
Stenzek
4b02270c79 Qt: Apply Wayland workarounds before creating QApplication 2025-12-30 15:23:24 +10:00
Stenzek
fb932eb598 FullscreenUI: Don't use SmallString for URL templates 2025-12-30 15:23:24 +10:00
Stenzek
1b9ef2c248 StringUtil: Backport helper functions 2025-12-30 15:23:24 +10:00
Davide Pesavento
bca82e1bb0 Achievements: Improve consistency of log messages (#3671) 2025-12-30 15:22:54 +10:00
Stenzek
3f1ab1cb8a SoundEffectManager: Upmix and resample sound effects when needed
Allows users to provide files at other sample rates/channels.
2025-12-29 20:59:37 +10:00
Stenzek
5cd5853435 Achievements: Add type badges to list and wrap long titles 2025-12-29 20:59:35 +10:00
Stenzek
02a36c78bd Qt: Prefer size from native OS over Qt
The latter is wrong when a resize fails.
2025-12-29 13:01:13 +10:00
Stenzek
c4ee79b52a CoreAudioStream: Ensure stream is destroyed before buffer
Fixes potential race during stream shutdown.
2025-12-28 22:04:54 +10:00
Stenzek
bfa70857e5 Qt: Fix missing borders in separate render window
Regression from f07b726c67
2025-12-28 14:18:28 +10:00
Stenzek
fa23d16c3c Qt: Cache window handle for size updates
Apparently calling winId() during window resizes ends up with a bad
m_surface pointer inside the QWindowsWindow...

I don't feel like debugging Qt any further, so this will be sufficient.
Plus it's faster.
2025-12-28 13:46:11 +10:00
Davide Pesavento
a2d95a1ba5 FullscreenUI: Change a few icons 2025-12-27 23:51:53 +10:00
Davide Pesavento
6c46b0cfe8 Deps: Update FontAwesome to 7.1.0 2025-12-27 23:51:50 +10:00
Davide Pesavento
84ff881721 Deps: Remove version number from FontAwesome header
Reduces code churn on version bumps.
2025-12-27 23:42:26 +10:00
Stenzek
f07b726c67 Qt: Sync after creating widget on Linux
We want to avoid nested event loops as much as possible because it's problematic on MacOS.
I removed the sync/processEvents() here for this reason, except of course fucking Linux throws
a wrench in the plan. On Windows and MacOS, calling show() and showFullscreen() will send resize
events with the correct size before returning. On Linux with X11 and Wankland, it doesn't.

So we have to force a processEvents() here to ensure the display widget is the correct size,
otherwise we'll see a glitched frame at the windowed size when starting fullscreen. Linux is
the odd one out again, as usual. Note: QGuiApplication::sync() is supposed to pump events
before and after syncing, but it seems this alone is not sufficient for getting the resize.
2025-12-27 23:35:47 +10:00
Stenzek
a4657fbcbb Qt: Catch show events for resize too 2025-12-27 23:35:19 +10:00
Stenzek
570a7042a6 OpenGLContextAGL: Compile fix
Not built on CI, so didn't notice.
2025-12-27 23:34:57 +10:00
Stenzek
213d3efdf7 GPUDevice: Unload persistent libraries on shutdown 2025-12-27 23:02:55 +10:00
Stenzek
739b0734bc CodeCache: Don't try to handle page faults when shutting down 2025-12-27 23:00:02 +10:00
Stenzek
21abd24870 Deps: Ensure PDBs get generated for Qt plugins
Need to debug a crash in Qt...
2025-12-26 23:23:01 +10:00
Stenzek
c206bd6311 FullscreenUI: Fix incorrect icon for macro buttons 2025-12-26 16:20:23 +10:00
Stenzek
d2c8df97f9 FullscreenUI: Fix sound on mouse click for some popups
Should only play sound effect using keyboard/gamepad navigation.
2025-12-26 16:20:23 +10:00
Stenzek
9904c5fbb3 FullscreenUI: Fix macro pressure/deadzone dialogs 2025-12-26 16:20:23 +10:00
Stenzek
7c401777a8 Deps: Build Brotli
For woff2 font loading.
2025-12-26 16:20:23 +10:00
Stenzek
c20f8d1ec4 Deps: Version updates
libjpeg-turbo: 3.1.3
libpng: 1.6.53
zlib-ng: 2.3.2
ffmpeg: 8.0.1
2025-12-26 16:20:23 +10:00
Stenzek
ef2cf6e223 System: Fix missing subchannel not blocking startup
I only tested the escape hatch, not the intended path...
2025-12-26 02:09:06 +10:00
Stenzek
682a3b3eb9 FullscreenUI: Only delete sound stream on full shutdown
Not when changing renderers.
2025-12-26 01:57:17 +10:00
Stenzek
5933489456 ImGuiManager: Reduce possible false sharing when adding events 2025-12-26 01:57:15 +10:00
Stenzek
6146769d85 Settings: Restore a few missing defaults in Safe Mode 2025-12-26 01:57:07 +10:00
Víctor "IlDucci
e70ae0be06 Spanish (Spain) translation update 2025/12/25 (#3669)
- Translated the latest batch of strings.
- Minor additional tweaks.
2025-12-26 01:57:00 +10:00
Stenzek
e2aa1ae24c Qt: Fix handling of mouse double-click events
- Fixes double-click events with mouse binds getting dropped.
- Fixes early release event when toggling fullscreen.
2025-12-25 19:56:26 +10:00
Davide Pesavento
182075675d CI: Minimize workflow permissions 2025-12-25 17:29:46 +10:00
Davide Pesavento
9aaaf14e85 CI: Stricter yamllint config 2025-12-25 17:29:46 +10:00
Davide Pesavento
ff747dde38 CI: Use ubuntu-slim runner for lint jobs 2025-12-25 17:29:46 +10:00
Davide Pesavento
1bc30de66f CI: Update actions 2025-12-25 17:29:46 +10:00
Stenzek
25790d704b InputManager: Register for device notifications with XInput
I forgot that I apparently don't poll active controllers.

Fixes controller hotplugging with XInput.
2025-12-25 13:52:30 +10:00
Stenzek
31764738c6 InputSource: Remove before calling OnInputDeviceDisconnected()
Fixes background polling interval not decreasing after last device
disconnects.
2025-12-25 13:51:29 +10:00
Anderson Cardoso
3253cc5bed Atualização Português do Brasil (#3667)
Atualizado para a última versão.
2025-12-25 13:50:32 +10:00
Stenzek
4b9154b45d Hotkeys: Add hotkey to toggle texture modulation cropping 2025-12-24 02:00:06 +10:00
Stenzek
88ca6cf40a README: Add instructions for resource overrides 2025-12-24 01:51:45 +10:00
Stenzek
b55f4041bf GPU: Add option to crop vertex colours before modulation
aka "old" GPU.
2025-12-24 01:23:01 +10:00
Stenzek
ad0312ec82 Settings: Free up space in GPUSettings struct 2025-12-24 00:16:44 +10:00
Stenzek
56d79c76a7 GPU: Extract heavier helper functions to own header 2025-12-23 20:00:58 +10:00
Stenzek
095fef524d GPUDevice: Extract enums to own file
Further reduction of indirect includes.
2025-12-23 19:52:33 +10:00
Stenzek
9370642434 Deps: Update rcheevos to v12.2.0 2025-12-23 19:34:29 +10:00
Stenzek
7bc32cdfa2 VulkanDevice: Swap EXT for KHR in structure type
No net difference.
2025-12-23 18:27:01 +10:00
Stenzek
822d756538 CubebAudioStream: Add missing layout mapping
Not actually used in DuckStation but one fewer patch I have to maintain.
2025-12-23 18:24:21 +10:00
Stenzek
9bcf23fa9b GameDB: Set PGXP-CPU for Vagrant Story
Fixes jitter in attack outline.
2025-12-23 18:24:05 +10:00
Stenzek
a1aa038623 VulkanDevice: Use KHR variants of surface/swapchain maintenance
AMD doesn't support the EXT variant.
2025-12-23 16:43:21 +10:00
Stenzek
41a000c0f1 Deps: Update Vulkan-Headers to v1.4.337 2025-12-23 16:36:17 +10:00
Stenzek
69458bd90b VulkanDevice: Persist instance throughout launches
Testing with AMD on Windows and LLVMPipe on Linux, creating and
destroying a Vulkan instance appears to leak around 20-30MB of memory.

Just keep the thing around for the whole time. Reduces startup time too,
so everyone wins. Unless you're switching renderers all the time, then
you lose a bit of memory.
2025-12-23 16:22:33 +10:00
Stenzek
e13b9a0c17 WindowInfo: Extract type into global namespace 2025-12-23 16:10:45 +10:00
Stenzek
f4c752a99f Qt: Extract window info functions to own file
More include reduction.
2025-12-23 16:10:45 +10:00
Stenzek
5b789be901 GPUDevice: Extract texture format to global namespace
Avoid pulling in gpu_texture.h and indirect includes just for this.
2025-12-23 16:10:45 +10:00
Stenzek
c3415c4891 VulkanDevice: Rearrange fields for locality 2025-12-23 12:50:16 +10:00
Stenzek
5a7acfe730 Qt: Populate graphics adapters asynchronously
More time saved when opening the settings window.
2025-12-23 01:52:06 +10:00
Stenzek
fbdd2689b1 Qt: Populate audio devices asynchronously
Save another 40-60ms when opening the window on my system. That's a few
frames at least!
2025-12-23 01:52:06 +10:00
Stenzek
edd3df899a Qt: Fix noreturn warning in Host::ReportFatalError() 2025-12-23 01:52:06 +10:00
Stenzek
a494477225 SoundEffectManager: Add caching and async reading 2025-12-23 01:52:05 +10:00
Stenzek
c7c29d4141 WAVReader: Add in-memory parsing 2025-12-23 01:52:05 +10:00
Stenzek
b8e93855fe WAVReader: Fix reading into non-data chunks after data 2025-12-23 01:52:05 +10:00
Stenzek
3fe319df51 FullscreenUI: Add navigation sound effects 2025-12-23 01:52:05 +10:00
Stenzek
0897dfcc94 Data: Add navigation sound effects 2025-12-23 01:52:05 +10:00
Stenzek
b1d5c42a13 PlatformMisc: Remove PlaySoundAsync()
No longer needed.
2025-12-23 01:52:05 +10:00
Stenzek
7a85841511 Achievements: Use SoundEffectManager instead of PlaySoundAsync()
Much less jank.
2025-12-23 01:52:05 +10:00
Stenzek
8a7dd1612b SoundEffectManager: Add system for playing short sound effects 2025-12-23 01:52:05 +10:00
Stenzek
cf103e9979 Core: Set correct log channel 2025-12-23 01:52:05 +10:00
Stenzek
c0277db4cf WAVReader: Make ReadFrames() return optional
That way the caller can detect EOF.
2025-12-23 01:52:05 +10:00
Stenzek
132ca44f05 CubebAudioStream: Use a single shared context
Will be needed shortly.
2025-12-23 01:52:05 +10:00
Stenzek
02384ac2aa AudioStream: Move all streams to same log channel 2025-12-23 00:51:06 +10:00
Stenzek
abcaceeb80 AudioStream: Split into source and backend streams 2025-12-23 00:18:07 +10:00
Stenzek
471fba1445 FullscreenUI: Fix stack use-after-free 2025-12-23 00:18:06 +10:00
Stenzek
2935a3d71b Common: Add additional ryml helpers 2025-12-21 16:14:20 +10:00
Stenzek
d7c015aefb MSBuild: Fix non-reproducible path sneaking into binary 2025-12-21 14:00:42 +10:00
Stenzek
22d8b6dc8c GPUBackend: Fix infinite loop on state allocation failure 2025-12-21 13:59:17 +10:00
Stenzek
461aaeda4d ProgressCallback: Add message logging 2025-12-21 01:35:46 +10:00
Stenzek
bfb9ba1c6d Qt: Backport noreturn ReportFatalError() 2025-12-20 23:56:21 +10:00
Stenzek
f4ff36b565 Host: Move async tasks to host namespace
So we can use proper QThreads for them to avoid lazy-creating the Qt
per-thread data.
2025-12-20 23:56:21 +10:00
Stenzek
57adcddc29 Host: Rename CPUThread/EmuThread to CoreThread 2025-12-20 23:56:20 +10:00
Stenzek
a43e05472a Host: Split into multiple files
Translation, actual host, and core for settings management.
2025-12-20 23:50:26 +10:00
Stenzek
26b8fe0d5b MSBuild: Remove _CRT_INTERNAL_NONSTDC_NAMES
Doesn't seem to be needed anymore.
2025-12-20 21:58:21 +10:00
Stenzek
4c97badb07 CMake: Fix Windows build
But you shouldn't be using it.
2025-12-20 21:58:21 +10:00
Stenzek
4810b1c7da Log: Fix empty output with only main window logs enabled 2025-12-20 17:57:02 +10:00
Stenzek
52bd6e7495 Qt: Clamp max upscale multiplier to 32x
Turns out Mali of all GPUs can do 64k x 64k textures.

Of course this is completely impractical as such a texture would use
16GB of memory.
2025-12-20 16:23:29 +10:00
Stenzek
63d352bb03 Misc: Fix move of constant values 2025-12-20 16:23:29 +10:00
Stenzek
b6cd37c6a4 Qt: Add option to show log in main window
When using render to separate window. Makes the main window actually
useful.
2025-12-20 16:06:08 +10:00
Stenzek
962137fcdf Qt: Move some settings around
Need the extra space.
2025-12-20 16:06:08 +10:00
Stenzek
0aff70237d Qt: Reduce indirect includes in mainwindow.h 2025-12-20 14:53:52 +10:00
Stenzek
a7637c5b50 Qt: Split log window into LogWidget and LogWindow
So it can be embedded.
2025-12-20 14:35:40 +10:00
Stenzek
854edd5d39 Achievements: Save/restore state on setting changes
Preserve hardcore mode, wait for load to complete to avoid potentially
missing trigger hits.
2025-12-20 12:48:41 +10:00
Stenzek
ea8d7b015c VulkanDevice: Only enable KHR_maintenance5 with dynamic rendering
Required by spec. Only really gets hit by the
disable-on-broken-mobile-driver path.
2025-12-20 12:33:13 +10:00
Davide Pesavento
b8c8941496 GameDB: Add sort title to FF7 and FF8 demo discs 2025-12-20 12:32:04 +10:00
Davide Pesavento
7d31ab9f16 GameDB: Fix typo in FF7's sort title 2025-12-20 12:32:04 +10:00
Windsurf7
1c06b685c5 GameDB: add missing compatibility entry for original release of A Bug’s Life (#3664)
The compatibility entry for the non-revision original release was missing. This PR adds it.
2025-12-20 12:31:34 +10:00
Stenzek
d5dc9fb568 FullscreenUI: Fix bg load after close->reopen 2025-12-18 01:29:27 +10:00
Stenzek
97128838cf ProgressCallback: Add a variant with alert/confirm
And implement it in both Qt and FullscreenUI.
2025-12-18 01:28:56 +10:00
Stenzek
822024dda5 Qt: Fix empty text box after image verification 2025-12-17 18:50:12 +10:00
Stenzek
51986e763d InputManager: Fix some low-risk races during reload 2025-12-17 13:51:57 +10:00
Stenzek
0af8b74773 InputManager: Move device notification from main window
Can use the new CM_Register_Notification() function since we don't have
to care about Windows 7.

Hopefully should stop a very rare race between window destruction and
device unplugging. Also gets the Windows-specific stuff out of
MainWindow which is nice.
2025-12-17 13:31:12 +10:00
Stenzek
a72d21f7ae Win32RawInputSource: Support device hotplugging 2025-12-17 13:31:08 +10:00
bl@ck_m@ge
9857835142 GameDB: Add mouse support for compatible games (#3662)
* GameDB: Add mouse support for compatible games

* fix trailing spaces for one entry
2025-12-17 13:03:32 +10:00
mariobob
bc72d58fd9 Achievements: Preserve hardcore mode when toggling encore/spectator/unofficial settings (#3661) 2025-12-17 13:02:36 +10:00
Stenzek
93f62c4292 CI: Fix cache key in upload caches workflow 2025-12-17 12:08:44 +10:00
Stenzek
6062f5e2f8 Qt: Use same changed colour in memory scanner as view
More readable.
2025-12-17 01:36:09 +10:00
Stenzek
89946ccad5 Qt: Provide theme icons for most used Qt StandardIcons
Fixes the file selector looking like total ass on Linux, with dark
coloured icons on a dark background.
2025-12-17 01:36:09 +10:00
Stenzek
b8b576e158 Qt: Override application font on Linux
Default fonts are ugly and too large.
2025-12-17 01:36:09 +10:00
Stenzek
6521355343 CMake: Don't copy desktop file to resources
No longer needed as of d5037f1242.
2025-12-17 01:36:09 +10:00
Stenzek
fe8d2e0329 VulkanDevice: Set rasterization order attachment access bit on blend state 2025-12-17 01:36:09 +10:00
Stenzek
7a539ba693 GPUDevice: Reduce GraphicsConfig struct size 2025-12-17 01:36:09 +10:00
Stenzek
b10eba419a VulkanDevice: Disable fbfetch on LLVMpipe
Rendering behaviour with llvmpipe + fbfetch is very strange, it fails
to read push constants sometimes??

Driver bug?
2025-12-17 01:36:09 +10:00
Stenzek
1ccd7508a8 CMake: Avoid using system zlib outside of MacOS 2025-12-17 01:36:06 +10:00
Stenzek
b3caf07a40 Qt: Make enhanced controllers reports option more clear 2025-12-15 19:20:02 +10:00
Stenzek
547b76fe1b SDLInputSource: Use auto mode for enhanced reports
Less chance of breaking other applications unless rumble actually goes
through.
2025-12-15 19:09:50 +10:00
Stenzek
a777466c51 Qt: Invalidate covers when all titles are invalidated 2025-12-15 19:02:36 +10:00
Stenzek
f52a5afcb8 System: Fix fullscreen state persisting between games
This was not intentional.
2025-12-14 20:48:19 +10:00
Stenzek
708e3b8694 Achievements: Use rc_client_create_subset_list() 2025-12-14 20:42:18 +10:00
Stenzek
cda367d211 Achievements: Use badge_url for downloads 2025-12-14 20:42:18 +10:00
Stenzek
f99601e3d0 dep/rcheevos: Bump to b77013b 2025-12-14 20:42:17 +10:00
Stenzek
86ba9ea3af ImGuiManager: Add colour gradient to OSD messages 2025-12-14 20:42:17 +10:00
Stenzek
900d06c32c FullscreenUI: Fix inconsistent notification colour gradient 2025-12-14 20:42:17 +10:00
mariobob
1ee0f73df8 Achievements: Use rc_client API for fetching game titles (#3658)
* dep/rcheevos: Bump to 7fb4300

* Achievements: Use rc_client API for fetching game titles
2025-12-14 20:12:24 +10:00
Stenzek
2498e66a6e MetalDevice: Fix compile warnings 2025-12-14 19:21:28 +10:00
Stenzek
37d7cd46c5 Common: Silence deprecation warnings on MacOS 2025-12-14 19:21:20 +10:00
Stenzek
351e787681 Common: Fix a bunch of errors in ARM vector wrapper
ARM64 passes now at least.
2025-12-14 19:20:20 +10:00
Stenzek
3fc563e5a3 Qt: Invalidate tooltips for title changes as well
Probably unnecessary since I don't think it's cached.
2025-12-14 12:22:10 +10:00
Stenzek
7cf6e04257 GPU/HW: Chunk skewed+overlapping copies
Can't see any retail games that do this from a quick check..
2025-12-14 02:25:24 +10:00
Stenzek
c6a44ff569 GPU: Add "Fine Crop" settings
Allows the image to be cropped while preserving output aspect ratio.
2025-12-14 01:17:21 +10:00
Stenzek
986e66b517 GPU: Use vectors in draw rect calculation 2025-12-14 01:17:21 +10:00
Stenzek
97582bcfec GPU: Use vectors/rects for presentation 2025-12-14 01:17:21 +10:00
Stenzek
69784d10a3 GPU: Move draw helper functions to cpp file
No derived classes that need this inlined anymore.
2025-12-14 01:17:21 +10:00
Stenzek
ed531da03b Qt: Move wireframe rendering to debug tab
Free up space in advanced.
2025-12-14 01:17:21 +10:00
Stenzek
9eaf58613a Qt: Simplify cover and icon invalidation
Get rid of multiple functions for doing the same thing, sync Big Picture
and Qt UIs.
2025-12-14 01:17:20 +10:00
Stenzek
c9177bc398 Common: Add vector rectangle helper functions 2025-12-14 01:17:20 +10:00
Stenzek
e06d880257 MSBuild: Set -Wno-invalid-offsetof
Same as CMake.
2025-12-14 00:36:39 +10:00
Stenzek
9ba0bb9a32 MSBuild: Only remove source paths in ReleaseLTCG
Don't want to hurt debugability.
2025-12-14 00:36:39 +10:00
Stenzek
4c384842ce Qt: Failed to retrieve update change list is not fatal 2025-12-14 00:36:39 +10:00
Anderson Cardoso
f248c1cd74 Atualização Português do Brasil (#3659)
Atualizado para a última versão.
2025-12-14 00:36:12 +10:00
Daniel Nylander
9790c1b8ad Updated Swedish translation (#3660)
* Updated Swedish translation

* Remove VRAM mention from Swedish translation

* Updated Swedish translation
2025-12-14 00:36:01 +10:00
Stenzek
95a196144c Build: Fix RC version field
It broke once the commit count passed 10,000.
2025-12-09 23:21:33 +10:00
Stenzek
dbd8288e96 Common: Fix implicit conversions in ARM vector wrapper 2025-12-09 23:21:22 +10:00
Stenzek
d1f2b80fbe Data: Update game controller database 2025-12-09 22:43:17 +10:00
Stenzek
bde06fe786 Settings: Disable wireframe+downsample in Safe Mode
Apparently I forgot these.
2025-12-09 22:41:45 +10:00
Stenzek
0e0e82d122 ImGuiManager: Apply same change to OSD messages 2025-12-09 22:41:44 +10:00
Stenzek
e9767ba349 FullscreenUI: Tweak achievement notification animation
Make colour gradient more obvious. Animate position instead of size
(less jarring).
2025-12-09 22:41:42 +10:00
Stenzek
43074cfe52 FullscreenUI: Slightly improve achievement notifications
Add more spacing between title and points. Allow note to overlap with
description in horizontal size.
2025-12-09 22:41:38 +10:00
Stenzek
6e5291d8fc Qt: Update English plural strings 2025-12-08 02:06:10 +10:00
Stenzek
6070bff9f6 dep/rcheevos: Bump to 9aa1352 2025-12-07 19:10:36 +10:00
Stenzek
de01bf704e FullscreenUI: Remember the last-opened achievement subset 2025-12-07 18:57:41 +10:00
Stenzek
4da93d7e19 FullscreenUI: Set scrollbar rounding 2025-12-07 18:57:32 +10:00
Stenzek
ac0a299884 FullscreenUI: Add achievement subset selection 2025-12-07 18:57:31 +10:00
Stenzek
75380e7859 FullscreenUI: Improve styling consistency between achievements/leaderboards 2025-12-07 18:31:26 +10:00
Stenzek
7214ec0b8b FullscreenUI: Improve leaderboard display
Finally somewhat satisfied with it. The old layout always bothered me.
2025-12-07 18:31:26 +10:00
Stenzek
56d8750f41 FullscreenUI: Add floating nav bar widgets 2025-12-07 18:31:26 +10:00
Stenzek
e2fc40c407 FullscreenUI: Fix infinite loading at end of leaderboard 2025-12-07 17:32:32 +10:00
Davide Pesavento
4b82191502 Qt: Fix use-after-free in edit/remove cheat (#3657) 2025-12-06 19:15:21 +10:00
Stenzek
d9f8302292 Qt: Increase idle polling interval
Use less power.
2025-12-06 16:15:14 +10:00
Stenzek
f7ca150c79 InputManager: Fix possible use-after-free on source reload 2025-12-06 16:15:14 +10:00
Stenzek
ea4933abe5 Achievements: Add progress to progress database refresh
That way there's some indication in the UI that the operation is
happening.
2025-12-06 16:15:14 +10:00
Stenzek
42c872efff FullscreenUI: Add achievement game icon download 2025-12-06 16:15:14 +10:00
Stenzek
3867c848b0 Qt: Allow cancelling icon downloads 2025-12-06 16:15:14 +10:00
Stenzek
1541200903 Qt: Name consistency improvements 2025-12-06 16:15:11 +10:00
Stenzek
a870f62709 Achievements: Use main HTTP for badge downloads 2025-12-06 14:13:29 +10:00
Stenzek
972dcd7920 Achievements: Tidy up badge downloader 2025-12-06 13:57:39 +10:00
mariobob
5b91141f09 GameList: Add option to download all game icons (#3655)
* GameList: Add option to download all game icons

* Fix translation support in status text calls

* Parallelize downloading game icons
2025-12-06 13:27:45 +10:00
Davide Pesavento
9b31d8b571 GameDB: Adjust cropping in a number of titles (part 2) (#3656)
* GameDB: Adjust cropping in a number of titles

Namely:
 - Metal Gear Solid
 - Parasite Eve 1 & 2
 - Resident Evil 3
 - Star Ocean
 - Tales of Destiny II
 - Tenchu 1 & 2
 - Vagrant Story
 - Valkyrie Profile

* GameDB: Disable auto analog for Xenogears
2025-12-06 12:47:43 +10:00
bl@ck_m@ge
0eaf1dd228 GameDB: Add various fixes for some games (#3654)
* GameDB: Add various fixes for some games

* Disable analog controller support for Dance Europe (compatible only with Digital)

* Disable texture filtering for Star Wars - Dark Forces

* Disable auto analog for some Wrestling titles

* Disable auto analog for Japanese DDR games
2025-12-06 12:39:36 +10:00
Stenzek
27802bf450 Deps: Set PKG_CONFIG_PATH when building 2025-12-05 20:42:56 +10:00
Stenzek
1d28a4b385 Deps: Disable GTK when building Qt
Why did I have this enabled...
2025-12-05 17:52:54 +10:00
Stenzek
801114f4cf Deps: Bump SDL3 to 3.2.28 2025-12-05 17:52:54 +10:00
Stenzek
5650880f90 Deps: Set QT_PREFIX_PATH for Qt on Linux 2025-12-05 17:52:54 +10:00
Stenzek
760b7b4740 CI: Revert hardcoded Mac cache key
Upstream issue has been resolved (at least for now).
2025-12-03 20:49:12 +10:00
Stenzek
241f720cb8 FullscreenUI: Avoid png/svg name clash for disc icon 2025-12-03 20:49:11 +10:00
Stenzek
941b62e938 FullscreenUI: Slight tweak to font weights
Improves readability on low-dpi displays.
2025-12-03 20:49:11 +10:00
Stenzek
9a8d9d7104 Hotkeys: Fix rotation hotkeys not having any effect 2025-12-03 20:49:11 +10:00
Stenzek
b4b05ed07a README: Remove non-functional link
Been paying hundreds of dollars for hosting for the last few years, and
with no immediate plans to push a new Android release, it does not make
sense for me to keep paying for it, especially since I make $0 off
DuckStation.

(it's been non-functional for a few weeks, apparently it took until now
for someone else to notice, which kinda shows how little use it was
getting)

If there's significant demand, then I may re-consider.
2025-12-03 20:49:11 +10:00
Stenzek
e92fb99a10 Qt: Update padtest URL 2025-12-03 20:49:11 +10:00
Davide Pesavento
b42f26fbac SDLInputSource: Log the joystick GUID as well (#3653) 2025-12-03 15:07:48 +10:00
Stenzek
60dbc5ad3d Qt: Remove unused block_until_done parameter
Recipe for deadlocks.
2025-12-02 20:06:56 +10:00
Stenzek
84aa425620 Qt: Move lock in ConfirmMessageAsync() 2025-12-02 20:05:30 +10:00
Stenzek
42c26cf919 Qt: Use ShowOrRaiseWindow() for main window 2025-12-02 20:05:14 +10:00
Stenzek
0172f220ed GPU/HW: Draw small fill sprites with software if TC is enabled
Wild Arms 2 clears out the sprite area of VRAM, then uploads new
sprites. The clears were not counting as fills before, because
they did not meet the page threshold.

It's not worth risking treating all untextured sprite draws as
clears, so instead just draw it with software as well to ensure
the local copy of VRAM is cleared.
2025-12-02 20:02:31 +10:00
Stenzek
af29ce010e Achievements: Show points for most recent unlock 2025-12-01 19:54:57 +10:00
Stenzek
c5c5a80414 Achievements: Fix challenge badge display in pause menu 2025-12-01 19:40:42 +10:00
Stenzek
3e32deebfc Qt: Fix power off system hotkey when fullscreen 2025-12-01 15:19:08 +10:00
Stenzek
ceb199b18d System: Add missing game list lock 2025-12-01 13:56:52 +10:00
Stenzek
8e3a65c152 MemoryCard: Show game icon when saving 2025-12-01 02:05:46 +10:00
Stenzek
7970287d69 GameList: Fix memcard icon extraction for non-database games
Also fix "Edit Memory Cards" menu option.
2025-12-01 00:35:17 +10:00
Daniel Nylander
1bf7431b89 Updated Swedish translation (#3648)
* Updated Swedish translation

* Remove VRAM mention from Swedish translation
2025-11-30 23:57:18 +10:00
Stenzek
11a0abaa83 Qt: Improve widget device pixel ratio detection
Fixes forced integer scaling when running under Wayland.

Why on earth QScreen is giving integer DPRs is beyond me. But my
reasoning for pulling the DPR from here dates back to 2020, so it
was probably a Qt5 thing.
2025-11-30 23:56:31 +10:00
Stenzek
df75127fc8 Qt: Disable AA_DontCreateNativeWidgetSiblings hack on KDE
Seems this is no longer needed... but it still breaks on GNOME,
because of course...

Almost at the point of just forcing XWayland on everything except KDE.
2025-11-30 23:56:16 +10:00
Stenzek
843558a16c Qt: Don't create wasteful display container on KDE
Still needed on GNOME because it's fucking stupid and they refuse to
support server-side decorations, with no signs this will ever change.
2025-11-30 21:44:55 +10:00
Stenzek
521eee42b3 Qt: Remove unnecessary application syncs
Wayland seems fine with this now.
2025-11-30 21:14:26 +10:00
Stenzek
621649748a Qt: Disable window rounded corners is only needed on Win32 2025-11-30 21:13:53 +10:00
Stenzek
259cd846a4 Qt: Use fine-grained cover invalidate in downloader 2025-11-30 21:00:26 +10:00
Stenzek
1fccee229b Qt: Use QtAsyncTaskWithProgress for cover downloader 2025-11-30 19:05:18 +10:00
Stenzek
d1d9008ffe Qt: Add QtAsyncTaskWithProgress 2025-11-30 19:05:00 +10:00
Stenzek
f3e0fe90d9 Qt: Rename QtAsyncTaskWithProgress to QtAsyncTaskWithProgressDialog 2025-11-30 17:29:34 +10:00
Stenzek
547d3495ed HTTPDownloaderCurl: Fix crash in worker thread 2025-11-30 17:29:24 +10:00
Stenzek
682d0075bd Achievements: Add missing lock in OnSystemDestroyed() 2025-11-30 16:35:44 +10:00
Stenzek
8cfbaca0e1 Achievements: Don't enable HC mode on reset without game 2025-11-30 16:28:47 +10:00
Stenzek
5859f0dbfd Achievements: Don't try to enable HC mode when starting without disc 2025-11-30 16:18:27 +10:00
Stenzek
1706dac0f0 System: Fix possible deadlock when starting
HC mode + debug windows enabled
2025-11-30 16:16:02 +10:00
Stenzek
177afb2aff Achievements: Executable read error should not show when starting BIOS 2025-11-30 16:14:15 +10:00
Stenzek
c3b1859f45 HTTPDownloaderCurl: Use INT_MAX timeout
Don't wake up for no reason.
2025-11-30 15:52:37 +10:00
Davide Pesavento
e1ca130fd4 GameDB: Set DisableFastForwardMemoryCardAccess for Lunar 2025-11-30 14:57:39 +10:00
Davide Pesavento
577f74a7fd GameDB: Increase cdromMaxReadSpeedupCycles for Dino Crisis 2 2025-11-30 14:57:39 +10:00
Davide Pesavento
51524d7259 GameDB: Adjust cropping in a number of titles
Namely:
 - Arc the Lad III
 - Breath of Fire IV
 - Dino Crisis 1 & 2
 - Dragon Warrior VII
 - Echo Night
 - Front Mission 3
 - Galerians
 - Koudelka
 - Lunar 1 & 2
2025-11-30 14:57:39 +10:00
Stenzek
521a23f5c3 Qt: Make disc select dialog window-modal 2025-11-30 14:54:55 +10:00
Stenzek
4a445a051d Qt: Disable Game Properties for PSF/GPUDump 2025-11-30 14:54:34 +10:00
Stenzek
6f80a199f1 Qt: Pack main window local state in struct 2025-11-30 14:42:30 +10:00
Stenzek
ed71c45da4 Qt: Simplify updateEmulationActions() and updateShortcutActions() 2025-11-30 14:39:42 +10:00
Stenzek
d612f8eea8 Qt: Support populating game list entry at runtime
Re-enables support for modifying cheats when running direct from disc.
2025-11-30 14:25:37 +10:00
Stenzek
d8a92f7c97 Qt: Fix styling of checked push buttons 2025-11-30 13:11:20 +10:00
Davide Pesavento
7a929b1d41 Qt: Allow copying the version string from interface settings 2025-11-30 13:01:46 +10:00
Davide Pesavento
9fa42e2f61 Qt: Add close button to "About" dialog
And fix title font size on macOS.
2025-11-30 13:01:46 +10:00
Davide Pesavento
d106639619 Qt: Reload game settings after reset to default (#3651) 2025-11-30 13:00:42 +10:00
Anderson Cardoso
e3dfc85562 Atualização Português do Brasil (#3649)
Atualizado para a última versão.
2025-11-30 13:00:13 +10:00
bl@ck_m@ge
9aeb6ee798 GameDB: Max speedup cycles and other fixes for some games (#3647)
* GameDB: Max speed up cycles and other fixes for some games

* GameDB: Fix metadata for one entry

* Fix string length under settings for SLUS-00872
2025-11-30 12:59:19 +10:00
Stenzek
b723a8852d GPU: Update CRTC configuration on line offset change
Fixes offsets not applying immediately in interlaced modes that do not
flip buffers.
2025-11-30 12:57:39 +10:00
Stenzek
65e890f7f4 Qt: Fix incorrect use of toggled signal
Fixes frame stepping, probably others.

Regression from 9ee1b02cd7.
2025-11-30 12:50:34 +10:00
Stenzek
de36fefad4 GPU: Re-add missing AR correction
Regression from 2b26690565.
2025-11-29 18:27:29 +10:00
Stenzek
e0a0745839 Qt: Fix devbuild check 2025-11-29 18:27:19 +10:00
Stenzek
db9a9e7624 Qt: Add indication that update check is in progress
Only for manually initiated update checks as feedback for the action
triggering.
2025-11-29 16:31:33 +10:00
Stenzek
fe8b8f04a7 HTTPDownloader: Remove unused default user agent 2025-11-29 16:19:04 +10:00
Stenzek
a1162731a0 HTTPDownloader: Remove InternalPollRequests()
CURL uses a worker thread now, so it's no longer needed.
2025-11-29 16:19:04 +10:00
Stenzek
e2b3f65134 HTTPDownloaderCurl: Use worker thread for processing
Should significantly speed up update downloads.
2025-11-29 16:19:04 +10:00
Stenzek
d6f7084309 HTTPDownloader: Use release-acquire ordering for request state 2025-11-29 16:19:04 +10:00
Stenzek
a171c25fb2 PostProcessing/Slang: Handle option names containing "//" 2025-11-29 16:19:03 +10:00
Stenzek
e71a022ad4 Qt: Fix crash on updater exit 2025-11-29 14:38:32 +10:00
Stenzek
3d27de7835 Qt: Fix inverted fullscreen condition 2025-11-29 13:38:24 +10:00
Stenzek
480d002324 Log: Only include function names for warn/error
Regressed when I redid the macros.
2025-11-29 13:11:21 +10:00
Stenzek
03c2ec2cad OpenGLDevice: Fix creation on MacOS
Only for debugging, CI builds have GL disabled.
2025-11-29 13:11:21 +10:00
Stenzek
8bc3f04be5 Qt: Try to work out the "real" display scale on MacOS
Avoids the rendering at 2x and downsampling at fractional DPI scale.
2025-11-29 13:11:21 +10:00
Stenzek
9ee1b02cd7 Qt: Remove a bunch of unnecessary QSignalBlockers
QAction::setChecked() does not invoke triggered().
2025-11-29 12:59:18 +10:00
Stenzek
f069570b3c Qt: Show update dialog after fullscreen exit completes
Use the new completion handlers.
2025-11-29 12:59:18 +10:00
Stenzek
a5755d12f1 Qt: Get rid of multiple sources of truth for fullscreen
Only has UI and CPU thread "views" now.
2025-11-29 12:59:18 +10:00
Stenzek
b13207a02f Qt: Remove unused fields 2025-11-28 23:57:56 +10:00
Stenzek
3c00c4d273 Qt: Remove main window surfaceless hackery 2025-11-28 23:57:56 +10:00
Stenzek
33b532d10b Qt: Remove unused focusDisplayWidget() 2025-11-28 21:43:52 +10:00
Stenzek
c91446c603 Qt: Remove unused cover downloader signal 2025-11-28 21:02:24 +10:00
Stenzek
cc6428645a Qt: Remove unsafe EmuThread isFullscreen() from UI thread 2025-11-28 21:00:24 +10:00
Stenzek
97c9daf1b9 Qt: Remove unused EmuThread::SystemLock 2025-11-28 20:58:03 +10:00
Stenzek
0c6cbf82d9 Qt: Remove redundant grid layout in updater 2025-11-28 20:57:49 +10:00
Stenzek
58cb4f2e37 FullscreenUI: Update loading/notification run idle on shutdown
Stops us from ending up in a state where we're always running idle when
paused, because a previous notification was blown away by shutdown.
2025-11-28 16:52:41 +10:00
bl@ck_m@ge
9fb1172a8b GameDB: Disable auto analog for some titles (#3645) 2025-11-28 16:47:39 +10:00
Stenzek
9d61e8c4e8 Qt: Do blocking game list refresh with autoboot without batch
Still need the entries.
2025-11-28 16:46:57 +10:00
Stenzek
e026117269 Qt: Make auto updater window-modal 2025-11-28 16:23:41 +10:00
Stenzek
1ba3efae7c Qt: Better layout for updater window 2025-11-28 15:57:38 +10:00
Stenzek
243a8afe97 Qt: Simplify updater configuration and process 2025-11-28 15:57:38 +10:00
Stenzek
f6bfb739f4 Qt: Remove QtModalProgressCallback
No longer needed.
2025-11-28 14:40:05 +10:00
Stenzek
8fcdf1049e Qt: Get rid of nested event loop in updater 2025-11-28 14:24:50 +10:00
Stenzek
676165282b Qt: Remove QtAsyncProgressThread
Merged into CoverDownloaderThread.
2025-11-28 14:24:50 +10:00
Stenzek
2b26690565 GPU: Simplify PAR calculation
Also fixes difference in aspect ratio with force 4:3 option and stretch.
2025-11-28 14:24:02 +10:00
Stenzek
4cbd01d033 Qt: Get rid of nested event loops in achievement login 2025-11-28 14:13:43 +10:00
Stenzek
ee1defd43c Qt: Don't try to center on an invisible window 2025-11-28 14:13:43 +10:00
Stenzek
cbbfecc0ff HTTPDownloader: Set initial indeterminate state 2025-11-28 14:13:43 +10:00
Stenzek
5b1e0117c9 Qt: Compile warning fix 2025-11-28 11:54:48 +10:00
Stenzek
cc6bfeb976 Qt: Use QtAsyncTaskWithProgress for ISO Browser extraction 2025-11-27 18:29:48 +10:00
Stenzek
d8e1418f37 Qt: Use QtAsyncTaskWithProgress for padtest download 2025-11-27 18:29:48 +10:00
Stenzek
d1519aa097 Qt: Use QtAsyncTaskWithProgress for dump verification 2025-11-27 18:29:48 +10:00
Stenzek
3f882cf254 Qt: Add QtAsyncTaskWithProgress class
Async work item with a progress dialog that doesn't require a nested
event loop.
2025-11-27 18:29:48 +10:00
Stenzek
82a44b19bf ProgressCallback: Avoid unnecessary struct padding 2025-11-27 18:29:48 +10:00
Stenzek
4290f75951 ProgressCallback: Remove modal methods
Still required for the updater, but I've moved that to an
updater-specific class in the heirarchy.
2025-11-27 18:29:47 +10:00
Stenzek
548887449e Misc: Eliminate usage of modal progress callback functions
Too error-prone, nested event loops are nasty. Error pattern is better.
2025-11-27 18:29:12 +10:00
Davide Pesavento
48ec261043 Qt: Center game properties window too (#3644)
Missed it in 63f929e6f8
2025-11-27 18:08:51 +10:00
Stenzek
90ec75b4e4 Achievements: Don't display points badge for 0 points 2025-11-27 18:08:51 +10:00
Stenzek
5e2b32f33f Host: Remove blocking ConfirmMessage()
No longer needed.
2025-11-27 18:08:51 +10:00
Stenzek
7ce8959247 System: Use ConfirmMessageAsync() for SBI-less boot
No more nested event loops!
2025-11-27 17:48:31 +10:00
Stenzek
7b6fd224af System: Confirm HC disable on undo load state/reset
Again, no issue since it was unconditionally disabling, but this gives
the user the opportunity to cancel it.
2025-11-27 17:48:30 +10:00
Stenzek
08f357f0d7 System: Avoid load state message on HC disable confirm
It wasn't actually loading, so no issue, but could be confusing to a
user.
2025-11-27 17:48:30 +10:00
Stenzek
93f3be46f2 Achievements: Remove ConfirmHardcoreModeDisable
No longer needed.
2025-11-27 17:48:30 +10:00
Stenzek
249f8cf4a0 System: Always use async hardcore cancel on boot
No blocking event loops.
2025-11-27 17:48:30 +10:00
Stenzek
e142a321f2 CDImagePBP: Fix TOC misreporting for some images 2025-11-27 17:48:30 +10:00
bl@ck_m@ge
6369f38d65 GameDB: Disable read speedup for Gundam Battle Assault 2 (#3643) 2025-11-27 01:45:37 +10:00
Davide Pesavento
c00aac6463 GameDB: Increase cdromMaxReadSpeedupCycles for Alundra 2 (#3642) 2025-11-27 01:45:30 +10:00
Stenzek
5626fe09b3 Qt: Replace most blocking message boxes with async 2025-11-26 23:48:22 +10:00
Stenzek
459ee19298 Qt: Add QtUtils::AsyncMessageBox() 2025-11-26 22:01:04 +10:00
Stenzek
73823edf56 Qt: Make message box utility parameter order consistent 2025-11-26 22:00:24 +10:00
Stenzek
8311a0cf55 FullscreenUI: Fix moving achievement points badge 2025-11-26 21:49:55 +10:00
Stenzek
f3523508b5 FullscreenUI: Add gradient to achievement notification background 2025-11-26 21:49:40 +10:00
Stenzek
0302d6eefa Qt: Use metaobject class name for saving/restoration
Less chance for error.
2025-11-26 20:05:08 +10:00
Víctor "IlDucci
f84990bc79 Spanish (Spain) translation update 2025-11-25 (#3641)
- Translated the last batch of strings.
2025-11-26 12:13:20 +10:00
bl@ck_m@ge
225623b78e GameDB: Disable auto analog for some games and add missing info (#3640) 2025-11-26 12:08:43 +10:00
Stenzek
952b6c90c0 ImGuiOverlays: Add missing space 2025-11-26 12:07:21 +10:00
Davide Pesavento
3b25e7b3ad Qt: Use Close button in ControllerCustomSettingsDialog
Consistency.
2025-11-25 13:19:31 +10:00
Davide Pesavento
63f929e6f8 Qt: Fix centering of secondary windows
The window size may be incorrect in the constructor because layouting
hasn't happened yet. We need to wait until show() is called.
2025-11-25 13:19:31 +10:00
Davide Pesavento
f9ca1f2241 Qt: Disable game compat comments button instead of hiding it (#3639) 2025-11-25 13:14:18 +10:00
Stenzek
21daf6c873 Qt: Fix window icon for setup wizard 2025-11-24 23:56:21 +10:00
Stenzek
17284156d6 Qt: Swap table view for tree in setup wizard game list 2025-11-24 23:56:16 +10:00
Stenzek
618d154ee5 Qt: Swap table for tree in Game Properties track list
More space-efficient.
2025-11-24 23:50:17 +10:00
Stenzek
afc019d586 FullscreenUI: Avoid drawing OSD messages over achievement badges 2025-11-24 23:08:14 +10:00
Stenzek
79bfa1a65a System: Fix inverted save state overclock warning 2025-11-24 22:55:27 +10:00
Stenzek
267e81f470 README: Remove compatibility list link
Hasn't been updated in years, isn't providing any value anymore as most
games work fine.
2025-11-24 22:14:41 +10:00
Stenzek
a14433e033 FullscreenUI: Fix ImGui asset tripping on empty game grid 2025-11-24 21:56:46 +10:00
Stenzek
e012d97800 Achievements: Use RA icon for some notifications 2025-11-24 21:56:34 +10:00
Stenzek
ce37f0e751 ImGuiManager: Support non-font icons in OSD 2025-11-24 21:40:58 +10:00
Stenzek
b5392ee2ce Regtest: Build fix 2025-11-24 21:02:04 +10:00
Stenzek
db72c78f7c ImGuiManager: Fix incorrect condition in OSD rendering 2025-11-24 21:02:04 +10:00
Stenzek
302ce03fe4 Qt: Async messageReported() signal should not block 2025-11-24 21:02:04 +10:00
Stenzek
eb518c8e39 Qt: Eliminate OSD from debug RAM dumping 2025-11-24 21:02:04 +10:00
Stenzek
e02883eabd Settings: Make OSD message durations customizable 2025-11-24 21:02:04 +10:00
Stenzek
1cc5fe081c ImGuiManager: Remove duration parameter from OSD messages
Use a type instead.
2025-11-24 21:02:04 +10:00
Stenzek
2290f31ffd ImGuiManager: Remove multiple sources of truth for prescale/margins 2025-11-24 19:19:48 +10:00
Stenzek
b5316239b0 Settings: Slightly reduce struct size 2025-11-24 19:19:48 +10:00
Stenzek
795e2d2735 ImGuiOverlays: Fix bold with ICache enabled 2025-11-24 19:19:48 +10:00
bl@ck_m@ge
d4e2f4fb93 GameDB: Disable auto analog for Tenchu (#3636) 2025-11-24 12:31:35 +10:00
Davide Pesavento
e3332d176f Qt: Fix open button icon in ISO browser (#3638) 2025-11-24 12:27:07 +10:00
Stenzek
fd24d9946e CI: Work around Mac runner failing 2025-11-23 12:48:36 +10:00
Stenzek
c9c4997d6f PostProcessing/Slang: Separate original and input textures
Only applies when chaining.
2025-11-23 12:38:20 +10:00
Stenzek
5d9309cd55 Qt: Make parented progress callback dialog window modal
Maybe this'll help with it not appearing for some Linux users...

Whole thing needs to be re-done with threads.
2025-11-22 21:09:44 +10:00
Stenzek
86bf551620 Qt: Warn when executable has been renamed 2025-11-22 15:34:36 +10:00
Stenzek
1f7a44c65d Qt: Remove a couple of left-over spacer size hints 2025-11-22 15:34:36 +10:00
zkdpower
3a43f59934 Update the Simplified-Chinese Translation. (#3635) 2025-11-22 15:29:53 +10:00
Stenzek
783e7675d5 Qt: Swap remaining form layouts for grid 2025-11-22 14:43:52 +10:00
Stenzek
573734eeb2 Qt: Swap form for grid layouts in setup wizard
Consistency with main settings window, mainly for MacOS.
2025-11-22 14:43:52 +10:00
Stenzek
7829d4316b Qt: Add proper alert titles in a couple of areas 2025-11-22 14:43:52 +10:00
Stenzek
6146d33fa2 Qt: Fix game list background on MacOS 2025-11-22 14:43:52 +10:00
Davide Pesavento
30a0b94a4f CI: Download all artifacts into the same directory 2025-11-22 14:43:27 +10:00
Davide Pesavento
5b56399d8d CI: Update GitHub actions 2025-11-22 14:43:27 +10:00
shikulja
b79d69b702 Update Russian translation (#3634) 2025-11-22 14:42:46 +10:00
Stenzek
f7e6c20fed CMake: Bump Qt version requirement 2025-11-21 15:01:35 +10:00
Stenzek
95563345b1 Deps: Revert Qt window-modal dialog disabling on Tahoe
It's not a problem for us, and the non-native dialogs look awful.
2025-11-21 12:44:59 +10:00
Stenzek
704cdef932 Deps: Bump to Qt 6.10.1 2025-11-21 12:38:18 +10:00
Stenzek
b4900c90ed dep/imgui: Fix memory leak in imgui_freetype
Only once on font load, but still a leak.
2025-11-21 12:28:07 +10:00
Stenzek
e9966cfed0 Qt: Fix QEventLoop leak on shutdown
This one is inconsequential.
2025-11-21 02:11:53 +10:00
Stenzek
857a767898 Qt: Fix QAction memory leak on shutdown
Would also leak if you changed languages.
2025-11-21 02:07:09 +10:00
Stenzek
654587ea38 System: Add 'Low VRAM' rewind mode
i.e. use the software renderer for rewinding instead.

Works fairly well, and takes away the VRAM hit when upscaling.
2025-11-21 01:59:03 +10:00
Stenzek
a8967b2b44 Settings: Shouldn't be accessing the global object 2025-11-21 01:59:03 +10:00
Stenzek
938a0e50c9 GPU/HW: Add field for software renderer drawing 2025-11-21 00:45:17 +10:00
Stenzek
012c7de231 GPU/HW: Slightly rearrange data fields
Make space for software renderer flag.
2025-11-21 00:38:03 +10:00
Stenzek
aecdfd5a1d GPU: Align the memory allocation rather than the class 2025-11-21 00:29:42 +10:00
Stenzek
defbe7061b GameDB: Set DisableAllBordersCrop for Alundra 2
I'd expect there'd be a good few others too.
2025-11-20 14:21:25 +10:00
Stenzek
b9571a2371 GameDatabase: Add DisableAllBordersCrop trait 2025-11-20 14:19:42 +10:00
Stenzek
e7862b9ca7 Qt: Prefer eliding source over the middle of the binding
Makes arrows more readable.
2025-11-20 14:16:33 +10:00
Anderson Cardoso
542a2cf0d5 Atualização Português do Brasil (#3631)
Atualizado para a última versão.
Pequenas alterações de contexto no geral.
2025-11-20 14:03:43 +10:00
zkdpower
c8a2f931a5 Update the Simplified-Chinese Translation. (#3630) 2025-11-20 14:03:36 +10:00
Davide Pesavento
b949c17cc8 Qt: Improve text elision in InputBindingWidget (#3629) 2025-11-20 14:03:29 +10:00
Stenzek
bea07e71af Updater: Set default title
Avoid any potential flicker.
2025-11-20 13:47:35 +10:00
Stenzek
4a5e17273b Updater: Close button should be disabled 2025-11-20 13:47:10 +10:00
Stenzek
942422babb Updater: Set application icon 2025-11-20 13:41:24 +10:00
Stenzek
bda75db0fa Updater: Compute window size dynamically 2025-11-20 13:41:11 +10:00
Stenzek
65ddf1a9f8 Updater: Make high DPI aware 2025-11-20 13:12:56 +10:00
Stenzek
8f5a1fdcf0 Updater: Replace incorrect ANSI Win32 calls 2025-11-20 13:10:30 +10:00
Stenzek
acadbffe1c Achievements: Allow overriding host through config
[Cheevos]
Host = http[s]://servername
2025-11-17 22:33:37 +10:00
Stenzek
16e56d7824 Qt: Use icon text instead of duplicate actions 2025-11-16 13:35:24 +10:00
Davide Pesavento
e4d9bed880 Qt: Get rid of the last few QMenu::exec() (#3628)
Completes c025da4e5c
2025-11-16 12:46:15 +10:00
Stenzek
483f9ba41b Qt: Allow overriding cover placeholder image 2025-11-16 02:24:25 +10:00
Stenzek
d5037f1242 Qt: Remove setDesktopFileName() icon workaround
No longer needed since XDG toplevel icon is a thing. Don't care about
compositors other than KWin.

Keeping it around was also causing KDE to report an incorrect title
above the windows in the taskbar, anyway.
2025-11-16 02:22:52 +10:00
Stenzek
4d9f31890a Qt: Use icon theme enum for sort icons 2025-11-16 02:02:19 +10:00
Stenzek
a293792385 Qt: Remove a bunch of old/unused resources 2025-11-16 02:02:19 +10:00
Stenzek
f6976c4888 Qt: Remove unused function 2025-11-16 02:02:19 +10:00
Stenzek
63b99a647e Qt: Use theme icons in Memory Card Editor 2025-11-16 02:02:19 +10:00
Stenzek
1e57a5b94e Qt: Make the memory card modified state more obvious 2025-11-16 01:40:47 +10:00
Stenzek
f5bd7c1b01 Qt: Don't include calling function name in Qt logs
It's redundant.
2025-11-16 01:40:47 +10:00
Stenzek
085c02d495 Qt: Add more actions to toolbar (hidden by default)
Media Capture, Memory Editor, Memory Scanner
2025-11-16 01:40:47 +10:00
Stenzek
5a26f38213 Qt: Add icons to tools menu actions 2025-11-16 01:40:47 +10:00
Stenzek
c396f0ab8d Qt: Set game icon as window icon in Game Properties 2025-11-16 01:40:33 +10:00
Stenzek
b3385094f9 Qt: Provide a central point for getting the app logo
And ensure it's using high DPI.
2025-11-16 01:32:06 +10:00
Stenzek
75aee64772 Qt: Set appropriate window icons for subwindows
Too bad it won't work on most Wankland compositors, too bad.
2025-11-16 00:50:21 +10:00
Stenzek
67208460f4 ImGuiOverlays: Tidy up font weight in OSD 2025-11-16 00:50:21 +10:00
Stenzek
8ce216e42c Qt: Improve readability of changed bytes in memory view 2025-11-16 00:50:21 +10:00
Stenzek
23d45a35db Data: Swap Roboto Mono for JetBrains Mono
Also move the font license/copyright to the main third-party file.

Most were OFL, not Apache anyway.
2025-11-16 00:50:21 +10:00
Stenzek
6c3c02f703 Qt: Use bundled fixed-width font where appropriate
Better than trying to juggle the differences between monospaced fonts on
different platforms.
2025-11-16 00:49:41 +10:00
Stenzek
87847ed248 Qt: Fix crash when changing toolbar icons
Regression from c025da4e5c
2025-11-16 00:49:41 +10:00
Stenzek
d45f630a56 Qt: Further tidy up for 4850471 2025-11-16 00:49:40 +10:00
Davide Pesavento
48504711cd Qt: Remove a few more instances of QDialog::exec() (#3623) 2025-11-15 23:15:03 +10:00
Stenzek
e3a044a8a4 Log: Move FastWrite() into macro
That way the format args can be packed inside the conditional,
potentially outside of the hot path.
2025-11-15 20:16:41 +10:00
Stenzek
b4f9bc794d InputManager: Remove setting of unused config variable 2025-11-15 17:47:45 +10:00
Stenzek
c8ef05a16d Qt: Fix non-native message boxes in Dark Fusion on MacOS 2025-11-15 17:47:14 +10:00
Stenzek
c5f60c13b3 Qt: Don't display two popup messages on card open failure 2025-11-15 17:40:47 +10:00
Stenzek
c025da4e5c Qt: Invoke popup menus asynchronously
And use the invokable overload for addAction() while we're at it.
2025-11-15 17:40:47 +10:00
Stenzek
b14c17b718 Qt: Set attributes on popup menus
Fixes extra border appearing in popup menus in Darker Fusion theme.
2025-11-15 17:40:47 +10:00
Stenzek
2bf14f84e0 Qt: Don't copy QtConcurrent DLL 2025-11-15 17:40:47 +10:00
Stenzek
3d6627c7a0 Qt: Speed up interface page creation
By deferring the loading of CJK fonts. Saves ~170ms on my machine.
2025-11-15 14:35:11 +10:00
Stenzek
b9b1b13fb3 Qt: QtConcurrent is no longer needed
Hasn't been in some time. Apparently I forgot to remove it.
2025-11-15 14:20:37 +10:00
Stenzek
754591f279 StringUtil: Add GetUTF8CharacterCount() 2025-11-15 14:20:36 +10:00
Stenzek
982035fbcc GPU: Remove implicit bool conversion 2025-11-15 14:06:44 +10:00
Stenzek
0edf71bd03 GPU: Fix 480i resolution display with force progressive 2025-11-15 13:09:24 +10:00
Stenzek
4c56f06ffe Qt: Style check boxes in Darker Fusion 2025-11-14 01:59:22 +10:00
Stenzek
3099f5f3d2 Qt: Fix game grid selection rect bottom/right edges 2025-11-13 23:45:00 +10:00
Stenzek
35e3d9a4d1 Qt: Get window sizes from OS instead of scaling Qt size
Qt's device independent sizes are a lossy transformation.

This stops our sizes from being potentially off by one with the "real"
window size.

Too bad it can't be done properly on Linux, see comment. Don't care.
2025-11-13 23:45:00 +10:00
Stenzek
d1f26eef3b Qt: Fix a bunch of implicit conversion warnings
Qt previously hid these... thanks Qt.
2025-11-13 23:45:00 +10:00
Stenzek
ef2086b2c3 Qt: Silence new warning from VS2026 2025-11-13 23:45:00 +10:00
Stenzek
df547195ae README: Bump VS version requirement to 2026 2025-11-13 23:45:00 +10:00
Stenzek
7e7e51db08 D3D12Device: Remove unused class member 2025-11-13 23:45:00 +10:00
Stenzek
d532acb39a Build: Use VS2026 build tools
GitHub runners don't have it yet, but it's a non-issue there as they're
using clang, not MSVC.
2025-11-13 23:45:00 +10:00
Stenzek
c953480ed5 Build: Use Unicode as default MSBuild character set
Apparently I forgot to change this ages ago...
2025-11-13 23:44:59 +10:00
Stenzek
65be533ad3 Build: Use C17 for MSBuild 2025-11-13 23:44:59 +10:00
Stenzek
fa793ce3ad Updater: Fix compiling in Unicode mode 2025-11-13 23:44:59 +10:00
Stenzek
34484d4f96 CDImageDevice: Fix compiling in Unicode mode 2025-11-13 23:44:59 +10:00
bl@ck_m@ge
e2cd5e79a1 GameDB: Max speedup cycles for Street Fighter Alpha 2 & 3 and Super Puzzle Fighter II (#3627) 2025-11-13 16:26:00 +10:00
bl@ck_m@ge
66c924e29e GameDB: Max speedup cycles for Bugs Bunny - Lost in Time & Bugs Bunny and Taz - Time Busters (#3626) 2025-11-12 15:01:57 +10:00
bl@ck_m@ge
a742164b6e GameDB: Increase cdromMaxReadSpeedupCycles for Discworld Noir (#3625) 2025-11-12 15:01:40 +10:00
Stenzek
29d5598de4 PostProcessing: Fix slang+overlay+odd shader count combination 2025-11-12 14:59:08 +10:00
Stenzek
6581e8e3bb PostProcessing: Fix unscaled input sizes if first stage disabled 2025-11-12 14:59:08 +10:00
Stenzek
cad8b43763 PostProcessing: Fix starting with all stages disabled 2025-11-12 14:59:07 +10:00
Stenzek
fa965cf9f2 Qt: Use delegate for drawing covers
More efficient, less memory usage. Also adds a border around the covers
to indicate what is selected.
2025-11-11 23:32:05 +10:00
Stenzek
a301066926 Qt: Use QSizeF for device scaled sizes
More consistent with Qt internally.
2025-11-11 23:32:05 +10:00
Stenzek
fc97cf514c PostProcessing/slang: Flip textures if using OpenGL
Fixes them being sampled upside down.
2025-11-11 23:31:53 +10:00
Stenzek
3a1e8fe7a1 PostProcessing: Load shaders even if disabled
Gets rid of the lag when toggling on and off.
2025-11-11 23:20:28 +10:00
Stenzek
a9b9e8952d PostProcessing: Rename Enabled -> StageEnabled
Less chance of conflicting with shader config keys.
2025-11-11 22:52:12 +10:00
Anderson Cardoso
c06e4fea0e Atualização Português do Brasil (#3624)
Atualizado para a última versão.
2025-11-11 22:37:17 +10:00
Ariel Nogueira Kovaljski
0b2865730c Qt, FullscreenUI, PostProcessing: Add shader enable/disable toggle. (#3621)
* Qt, FullscreenUI, PostProcessing: Add shader enable/disable toggle.

Allows enabling/disabling individual shaders in a post processing chain. Unlike removing, disabling preserves custom parameter values.

* Use `Qt::ItemIsUserCheckable` flag for shader list
2025-11-11 22:36:55 +10:00
Stenzek
475b69baa9 Qt: Save/restore painter state in achievements delegate 2025-11-09 22:50:52 +10:00
Stenzek
013cce51c9 Qt: Return size hint for covers 2025-11-09 22:50:52 +10:00
Stenzek
cb609fc6b2 ImGuiOverlays: Polish frame time graph 2025-11-09 22:48:52 +10:00
Stenzek
639aa3c7fc ImGuiOverlays: Fix inconsistent font weight 2025-11-09 22:48:51 +10:00
Stenzek
a1a763cead GameDB: Set tolerance for Tekken 3
Stops polygon glitches when characters go partially offscreen,
probably bit manipulation again.
2025-11-09 22:48:51 +10:00
Stenzek
127cc70ba1 GameDB: Enable PGXP-CPU for Tekken 3
Game fudges vertices by small amounts. Still noticeable, but at least
the Z gets perserved now.
2025-11-09 15:43:46 +10:00
Stenzek
bdeeecefa7 GPU/HW: Clamp after round with round upscaling fix
Stops coordinates possibly ending up off by one, which is mostly
noticeable with sprites in the Crash Bandicoot series.
2025-11-09 15:07:23 +10:00
Stenzek
361bcde48b FullscreenUI: Fix loading screen progress going negative
Mainly during shader compilation, because it uses RenderLoadingScreen()
directly.
2025-11-09 14:38:24 +10:00
Stenzek
26323f4419 GPU/HW: Fix incorrect clamp UV state on setting change 2025-11-09 14:15:01 +10:00
Stenzek
4a246a74a2 GPU: Avoid unnecessary postfx source preprocess when upscaling 2025-11-08 13:04:11 +10:00
Stenzek
63d5c34242 System: Fix use of moved string in error path 2025-11-08 13:04:11 +10:00
Davide Pesavento
bf0c0fd95a GameDB: Decrease cdromMaxReadSpeedupCycles for AITD4 and Dino Crisis 2 2025-11-08 13:03:52 +10:00
Davide Pesavento
540e02a2e6 GameDB: Add various comments 2025-11-08 13:03:52 +10:00
Davide Pesavento
652ce9ef3a GameDB: Set DisableFastForwardMemoryCardAccess for Broken Sword II 2025-11-08 13:03:52 +10:00
Davide Pesavento
fbffdbc960 GameDB: Disable widescreen for Digimon World 2025-11-08 13:03:52 +10:00
Davide Pesavento
326016d1dd GameDB: Set max speedup cycles to 35k for Alundra 2 2025-11-08 13:03:52 +10:00
zkdpower
2059e9bbac Update the Simplified-Chinese Translation. (#3619) 2025-11-08 13:03:40 +10:00
bl@ck_m@ge
00444fd912 GameDB: Max speedup cycles for Discworld II (#3618) 2025-11-08 11:21:21 +10:00
Davide Pesavento
62054ba97c Qt: Fix canceling shader selection dialog (#3617) 2025-11-08 11:21:18 +10:00
Víctor "IlDucci
c2737f953a Spanish (Spain) translation update 2025/11/07 (#3616)
- Translated new terms just so I can return to monthly updates at the beginning or end of each month.
- Removed obsolete entries.
2025-11-08 11:21:02 +10:00
Daniel Nylander
859e1908bd Updated Swedish translation (#3614)
* Updated Swedish translation

* Updated Swedish translation
2025-11-08 02:00:58 +10:00
Anderson Cardoso
93f4e40bfc Ajuste (#3615)
Pequeno ajuste na mensagem OSD de desafio descontextualizada.
2025-11-08 02:00:35 +10:00
Stenzek
c00428669b Qt: Improve shader add dialog
- Use icon instead of text.
- Fix duplicated subdirectory nodes.
- Collapse single item nodes.
- Add on double-click.
2025-11-07 23:03:01 +10:00
Stenzek
de250b86c9 Qt: Increase spacing in game list toolbar 2025-11-07 22:23:28 +10:00
Stenzek
e4797b1ca9 Qt: Add 'Open Directory' button to post-processing settings 2025-11-07 22:20:52 +10:00
Stenzek
ac30cf341b GPU: Display emulated GPU usage in stats 2025-11-07 21:44:50 +10:00
Stenzek
242280d6ed GPU: Rearrange and reduce struct padding 2025-11-07 21:44:50 +10:00
Stenzek
3e25958477 Qt: Add dialog for adding postfx shaders
Better than an overflowing menu.
2025-11-07 21:44:50 +10:00
Stenzek
cb5ab7292e Qt: Fix qrc generation script ordering differently 2025-11-07 20:24:28 +10:00
Stenzek
a49b351db2 CMake: Bump SDL version requirement 2025-11-07 18:45:59 +10:00
Stenzek
8dc0b99ee2 VulkanDevice: Fix off-by-one in assertion 2025-11-07 18:36:03 +10:00
Stenzek
082ba21640 Deps: Update versions
Update to SDL3 3.2.26
Update to Shaderc 2025.4
Update to DXCompiler 1.8.2505.32
Update to SPIV-Cross 1.4.328.1
Update to MoltenVK 1.4.0
2025-11-07 18:35:55 +10:00
Stenzek
8302a6b9e1 Deps: Remove unused CMake argument 2025-11-07 18:27:41 +10:00
Stenzek
d797ca4839 Deps: Don't build qtdeclarative
See previous commit.
2025-11-07 18:27:41 +10:00
Stenzek
9ed5254293 Deps: Patch Linguist to build without Qt Quick
Quick/Declarative takes way too long to build on the CI, and insane
amounts of disk space.
2025-11-07 18:27:40 +10:00
Stenzek
28b911137b Deps: Bump MacOS deployment target to 13.0 2025-11-07 18:27:40 +10:00
Davide Pesavento
dca565a2fe GameDB: Adjust crop area for Gran Turismo 2 (#3613) 2025-11-07 13:32:07 +10:00
Stenzek
fbc99916f8 PostProcessing/Slang: Remap and skip binding unused textures
Hopefully keep us under the limit where it might otherwise go over.
2025-11-07 13:28:30 +10:00
Anderson Cardoso
51726e3be2 Atualização Português do Brasil (#3612)
Atualizado para a última versão.
2025-11-07 04:33:34 +10:00
bl@ck_m@ge
15d70ffb10 GameDB: Max speedup cycles for Discworld and Discworld Noir (#3611) 2025-11-07 04:30:26 +10:00
Stenzek
3d39fe2683 GPU: Don't crash if first frame is interlaced+black
Regression from dd0c7ec9fe.

Fixes crash in Destruction Derby Raw.
2025-11-06 20:14:11 +10:00
Stenzek
42cf66cbd7 FullscreenUI: Fix achievement points placement with short description 2025-11-06 20:14:11 +10:00
Stenzek
d598470de2 Scripts: Remove Flatpak manifest
As I noted in 41b8f2bf77 and #3454, I was
still undecided on how to proceed with the Flatpak going forward, and
was waiting on user feedback.

However, it appears that decision has been made for me. As of the time,
of writing, the page displays "This application is no longer available on
Flathub." "This application is no longer maintained on Flathub", and I
was not notified in any way of the removal.

No idea if this was automated (it's been ~3 months since the last push),
or manual, so I'm not pointing fingers at anyone here. But it is still
completely unprofessional on flathub's part. No other distributor would
remove applications without notifying the developer. Combined with the
constant workflow/CI breakage, new requirements being added and enforced
with little notice, and delisting of anything more than a couple years
old, I would recommend to any application developers considering
flatpak/hub and don't heavily use it themselves: don't, it ain't worth it.

No point keeping it around now, since it was only a copy of the AppImage
anyway, and if I recall correctly there's other tools that can bwrap an
AppImage if you really desire. But IMO the security argument is kinda
weak, if you don't trust the code you're running, don't run it. The app
is still interacting with the rest of the OS regardless...
2025-11-06 20:13:51 +10:00
Stenzek
df4d04c868 Qt: Style patches widget on Mac 2025-11-06 00:11:44 +10:00
Stenzek
8b217b5cc1 GPU: Fix OSD reporting of non-interleaved interlaced resolution 2025-11-05 16:04:10 +10:00
Stenzek
dd0c7ec9fe GPU: Insert null field buffer if display disabled
Don't throw away all buffers. 240p Test Suite flips display disabled
during vblank every frame.
2025-11-05 16:03:34 +10:00
Stenzek
f9cab709bd INISettingsInterface: Use case sensitive storage
Need to replace SimpleIni at some point, want to move the settings
interface to use string_views.
2025-11-05 13:13:17 +10:00
Stenzek
a22d3a794b Qt: Style more widgets in Darker Fusion 2025-11-05 02:38:01 +10:00
Stenzek
d58f2d0222 Qt: Make auto/clear bindings buttons QPushButtons
On the Darker Fusion theme they don't look nearly as ass, so no need to
use QToolButtons here.
2025-11-05 01:42:49 +10:00
Stenzek
14481affba Qt: Bring toolbar checked background closer to combo background 2025-11-05 01:36:10 +10:00
Stenzek
d6f4fc7f18 PostProcessing: Ensure input buffer matches present format 2025-11-05 01:31:01 +10:00
Stenzek
a88cfbee67 PostProcessing/slang: Raise error if too many textures are bound 2025-11-05 01:30:57 +10:00
Stenzek
7080e98bc1 PostProcessing/slang: Don't balk at duplicate option names
Apparently some shaders are like this.
2025-11-05 01:11:06 +10:00
Stenzek
a8e922c458 Qt: Improve Darker Fusion style
Style more elements consistently.
2025-11-05 00:52:04 +10:00
Stenzek
de2e89ea90 Settings: Ensure slang shaders subdirectory is created 2025-11-05 00:51:45 +10:00
Stenzek
cebb1348ab FullscreenUI: Fix button-held colour in menus 2025-11-04 22:00:50 +10:00
Stenzek
2a350960bf FullscreenUI: Fix misdetection of some light themes 2025-11-04 22:00:39 +10:00
zkdpower
a5e20511d9 Update the Simplified-Chinese Translation. (#3606) 2025-11-04 13:44:49 +10:00
Davide Pesavento
0c7e8f3d87 Qt: Fix overlapping widgets in cheat settings (#3607) 2025-11-04 13:44:38 +10:00
Davide Pesavento
a1889a20bb Qt: Add standard shortcut to open settings (#3608)
That is "⌘ ," on macOS.

Also fix a couple of menu roles.
2025-11-04 13:44:18 +10:00
Davide Pesavento
e91db67c79 Qt: Reload icons and tooltips when game list rows change (#3609) 2025-11-04 13:43:47 +10:00
Stenzek
520502dab0 FileSystem: Fix RealPath() with relative paths 2025-11-02 22:40:39 +10:00
Stenzek
f5fc2474a4 Qt: Resolve command line paths before autobooting
Increase the chances of Game Properties still functioning.
2025-11-02 22:11:32 +10:00
Stenzek
70352b69ce Qt: Center windows when they don't have saved positions
Stupid Linux decides to spawn it in the top-left corner of the screen
otherwise.
2025-11-02 22:07:07 +10:00
Stenzek
b4d71cb66c Qt: Save position of settings windows 2025-11-02 21:56:10 +10:00
Stenzek
b0689d54e6 FullscreenUI: Move loading screen progress callback into namespace 2025-11-02 21:32:24 +10:00
Stenzek
85275a1965 Qt: Add missing help text in Interface Settings 2025-11-02 17:34:43 +10:00
Stenzek
49a1446fbe Common: Fix SSE2 build
Tired of having to support processors that are old enough to drink, but
every time I try to remove it someone complains.
2025-11-02 17:12:02 +10:00
Stenzek
5ca35363d4 CPU/Recompiler: Set up frame pointer on Windows ARM64
Required by the ABI. Not tested yet.
2025-11-02 16:30:20 +10:00
Stenzek
042bc7945c ImGuiManager: Use different OSD title/text colours
And add an early out when there's no messages.
2025-11-02 16:30:20 +10:00
Stenzek
b04b87a730 PostProcessing: Use titled OSD messages 2025-11-02 16:30:20 +10:00
Stenzek
4ec6752fe7 GPUPresenter: Handle padding for unscaled/slang input 2025-11-02 16:30:20 +10:00
zkdpower
5da178eb28 Update the Simplified-Chinese Translation. (#3605) 2025-11-02 16:30:09 +10:00
Stenzek
9a5e0c9028 ShaderGen: Fix ImGui rendering with Vulkan 2025-11-01 21:07:37 +10:00
Stenzek
77b1abf5e3 MemoryCard: Fix off-by-one reporting in card number 2025-11-01 16:30:07 +10:00
Stenzek
8a732ded41 PostProcessing: Support loading slang shaders/presets
Compatibility will likely vary quite a bit.
2025-11-01 16:30:07 +10:00
Stenzek
81fb8014a1 PostProcessing: Support unscaled input
Needed for slang support.
2025-11-01 16:30:07 +10:00
Stenzek
fc618b8b62 SPIRVModule: Add class for iterating/manipulating SPIR-V 2025-11-01 16:30:07 +10:00
Stenzek
eb0a8890e2 MetalDevice: Fix creating mipmapped textures with generate flag 2025-11-01 16:30:07 +10:00
Stenzek
d06f306f8f GPUDevice: Ensure clear is committed in MakeReadyForSampling() 2025-11-01 16:30:07 +10:00
Stenzek
af5c3fac42 GPUDevice: Fix mipmap generation on targets
Mainly DX12 that was broken.
2025-11-01 16:30:07 +10:00
Stenzek
9a5eadd86a GPUDevice: Add SRGBA8 texture format 2025-11-01 16:30:07 +10:00
Stenzek
08317d9478 GPUDevice: Set fixed names for UBO/push constants in SPV transpiling
Ensures that name-based binding in GL succeeds.
2025-11-01 16:30:07 +10:00
Stenzek
4729e22573 GPUDevice: Handle non-contiguous texture bindings in SPV transpiling 2025-11-01 16:30:07 +10:00
Stenzek
b43111f36e GPUDevice: Remap input attributes when transpiling to HLSL 2025-11-01 16:30:06 +10:00
Stenzek
47c820455d GPUDevice: Add MultiTextureAndUBOAndPushConstants pipeline layout 2025-11-01 16:30:06 +10:00
Stenzek
916b23f85c GPUDevice: Use separate buffer for push constants 2025-11-01 16:30:06 +10:00
Stenzek
6848f07c57 GPUDevice: Combine draw and push constant functions
Prevents us from being in a situation where the push constants haven't
been uploaded because we couldn't allocate a descriptor or something
else which forced a flush.
2025-11-01 16:30:06 +10:00
Stenzek
683ccbf216 GPUDevice: Swap ImGui rendering to use UBO 2025-11-01 16:30:06 +10:00
Davide Pesavento
863b9b10a0 Qt: Minor layout fixes in analog controller binding widget (#3604) 2025-11-01 16:30:00 +10:00
Stenzek
5de231ca5a System: Fix regtest build
Keep forgetting I'm using these functions here.
2025-11-01 14:46:26 +10:00
Stenzek
899d500d35 GPU: Fix compile warning 2025-11-01 14:44:57 +10:00
Stenzek
3e6dd9b9a2 System: Simplify and polish more OSD messages 2025-11-01 14:32:59 +10:00
Davide Pesavento
22220853de Qt: Fix recommended value for "Challenge Indicators" (#3603)
The default was changed in babf4201d8
but the help text wasn't updated to match.
2025-11-01 14:32:47 +10:00
Stenzek
0d4ffde7c5 Qt: Allow command line boot of device path
Untested.
2025-11-01 01:47:02 +10:00
Stenzek
529da22ef5 System: Use new OSD message variants 2025-11-01 01:44:25 +10:00
Stenzek
b483d2f61f ImGuiManager: Add title variants for OSD messages 2025-11-01 01:43:45 +10:00
Stenzek
dc5b57aa42 Qt: Missed a couple of shutdown -> close messages 2025-11-01 00:14:24 +10:00
Stenzek
c33354e2d6 Qt: Don't hold game list lock on popup 2025-11-01 00:14:20 +10:00
Stenzek
0841ab4b92 Qt: Fix disc swap from game list incorrectly pausing 2025-11-01 00:14:20 +10:00
Stenzek
b797aae28b GPU: Fix a couple instances of reading wrong thread settings 2025-11-01 00:14:04 +10:00
shikulja
a929aaf194 Update Russian translation (#3601)
* Update ts

* Update Russian translation

* more corrections
2025-11-01 00:13:53 +10:00
bl@ck_m@ge
bfc6da2574 GameDB: Disable disc speedup on MDEC for Warcraft II (#3600) 2025-10-31 12:50:13 +10:00
Davide Pesavento
97db72cb2c Achievements: Fix display of game completion time (#3599) 2025-10-31 12:50:05 +10:00
Davide Pesavento
5a49db0717 Qt: Reflect DisableFastForwardMemoryCardAccess trait in the settings UI 2025-10-31 12:49:44 +10:00
Davide Pesavento
d0bbf8ca18 GameDB: Set DisableFastForwardMemoryCardAccess for Tales of Destiny 2025-10-31 12:49:44 +10:00
Anderson Cardoso
5f6b690b9d Atualização Português do Brasil (#3597)
Atualizado para a última versão.
2025-10-31 12:49:16 +10:00
zkdpower
7bba98af3d Update the Simplified-Chinese Translation. (#3596) 2025-10-31 12:49:09 +10:00
Stenzek
8c0878882f Qt: Normalize shut down labels 2025-10-31 12:47:47 +10:00
Stenzek
88802e0d09 GameList: Fix achievement game ID not set for disc sets 2025-10-31 12:44:32 +10:00
Stenzek
b8764e8c1b Qt: Add exit specific message for confirmation dialog 2025-10-29 23:33:28 +10:00
Stenzek
d54234444f Qt: Don't need these functions defined in the header 2025-10-29 23:33:28 +10:00
Stenzek
cd8d6d8387 Qt: Remove game icon extra size
Looks worse because the icon is significantly larger than the text.
2025-10-29 23:33:27 +10:00
Stenzek
f6cdf95b6e Qt: Fix positioning of game list achievements icon 2025-10-29 23:33:27 +10:00
Stenzek
1999b0df6c GameDB: Set DisableFastForwardMemoryCardAccess for Twisted Metal 4 2025-10-29 23:33:27 +10:00
Stenzek
c5d93583da GameDatabase: Add DisableFastForwardMemoryCardAccess trait 2025-10-29 23:33:27 +10:00
Stenzek
efa6e4aeca Common: Use NSAlert for assertion failures/panics 2025-10-29 23:33:27 +10:00
zkdpower
94cfc9ba2e Update the Simplified-Chinese Translation. (#3594) 2025-10-29 23:33:14 +10:00
Davide Pesavento
458ad1334c Qt: Take header width into account for all columns
Seemed inconsistent to do it only for a subset of columns.

Also respect DPR for region icons.
2025-10-29 22:37:29 +10:00
Davide Pesavento
59d0f3c01c Qt: Fix game icon size and row height in game list 2025-10-29 22:37:29 +10:00
Davide Pesavento
49762aa493 Qt: Fix column width estimation in game list
More accurately copy how Qt calculates the width (we were
underestimating it in some cases).
2025-10-29 22:37:29 +10:00
Davide Pesavento
e89ab8311e Qt: Misc code cleanups 2025-10-29 22:37:29 +10:00
Stenzek
d82ae473a4 CI: Bump minimum macOS version to 13.0
Qt's minimum is 13, and I don't particularly feel like debugging issues
created if I work around it for an OS that hasn't been supported in over
a year.
2025-10-29 21:34:32 +10:00
Stenzek
a038c88d24 dep/reshadefx: Work around inability to discard in function in DXC
Need to fix this in SPIRV-Cross instead.
2025-10-29 21:21:33 +10:00
Stenzek
fcde8c7765 dep/reshadefx: Cherry-pick upstream 74e95dd 2025-10-29 21:21:32 +10:00
Stenzek
05701fef41 GPUDevice: Make dyn libs public 2025-10-29 21:21:32 +10:00
Stenzek
cff3ece1a7 VulkanDevice: Fix incorrect struct type 2025-10-29 21:21:32 +10:00
Stenzek
2c2fb1d496 D3D12Device: Fix incorrect StencilBeginningAccess/StencilEndingAccess 2025-10-29 21:21:32 +10:00
Stenzek
b858fe5e94 GPUDevice: Display OSD message if debug settings are enabled 2025-10-29 21:21:32 +10:00
Stenzek
24ae4a5d24 FullscreenUI: Fix uniform push before pipeline set 2025-10-29 21:06:36 +10:00
Stenzek
eefcd90714 GPU/HW: Avoid some redundant calls in Metal 2025-10-29 21:06:36 +10:00
Stenzek
0fec148e02 GPU/HW: Add missing padding to UBOs 2025-10-29 21:06:36 +10:00
Stenzek
a44c8466eb CMake: Fix Xcode project debugging
No more manual resource copying.
2025-10-29 21:06:36 +10:00
Stenzek
de08a2fff5 CMake: Only remap source path in Release builds
Don't make debugging painful.
2025-10-29 21:06:36 +10:00
Stenzek
5a7094b812 Achievements: Use consistent icon style in list 2025-10-25 14:02:36 +10:00
Stenzek
5818a05be3 Achievements: Add point count to unlock popup 2025-10-25 13:58:46 +10:00
Stenzek
b237604ac7 GPUDevice: Don't log warning for WARP driver 2025-10-25 13:58:46 +10:00
Anderson Cardoso
eb23999d6d Atualização Português do Brasil (#3593)
Atualizado para a última versão
2025-10-25 13:58:30 +10:00
zkdpower
7414ed92e4 Update the Simplified-Chinese Translation. (#3592) 2025-10-25 13:58:22 +10:00
Stenzek
326a6e391f CMake: Fix scmversion.cpp always updating on Mac 2025-10-21 23:17:43 +10:00
Stenzek
6432ac103f Qt: Fix non-rounded buttons in achievement login 2025-10-21 22:55:08 +10:00
Stenzek
8775ca0ff9 Qt: Convert more message boxes to window modal 2025-10-21 22:37:16 +10:00
Stenzek
db7598ffa6 Qt: Use message box wrapper functions 2025-10-21 22:34:09 +10:00
Stenzek
d9e363f848 Qt: Add message box helpers
Because the standard Qt message boxes look terrible on MacOS.

Using the helpers prevents the stylesheet from breaking liquid ass.

Also styles the dialog so the title isn't hidden.
2025-10-21 22:33:21 +10:00
Stenzek
2fb3773591 Qt: NativeThemeStylesheetNeedsUpdate() should not apply to Fusion 2025-10-21 21:16:35 +10:00
Stenzek
0776e2f9c3 Qt: Clear style sheet before applying theme 2025-10-21 21:15:23 +10:00
Stenzek
e48649bc26 FullscreenUI: Remove unused variable 2025-10-20 20:56:13 +10:00
Stenzek
9fa8b17cb5 FullscreenUI: Fix a couple of missing strings 2025-10-20 17:55:35 +10:00
Stenzek
3d6c042ffd FullscreenUI: Fix missing lock for settings read 2025-10-20 17:55:35 +10:00
Stenzek
93b4c3467f FullscreenUI: Fix missing logo on landing page 2025-10-20 17:55:35 +10:00
Stenzek
cab6669eb7 DMA: Speed up RAM write with CDROM speedup
Might make it ever-so-slightly more reliable. The number of cycles is
pretty small though, ~500 or so.
2025-10-20 17:55:35 +10:00
Stenzek
751781325c Settings: Remove CD speedup above 6x
In the majority of games it just crashes. Maximum is safer.
2025-10-20 17:55:35 +10:00
zkdpower
b4a868c5c9 Update the Simple-Chinese Translation to latest. (#3591) 2025-10-20 17:55:04 +10:00
Mario
9977e1dca0 FullscreenUI: Disable rewind options when runahead is enabled (#3589) 2025-10-19 12:29:11 +10:00
Stenzek
aa980a44cd GPU: Don't save settings to save state 2025-10-19 01:33:37 +10:00
Stenzek
a52020bcfc DMA: Reduce linked list header read time
Closer to console.
2025-10-19 01:33:34 +10:00
Stenzek
f2dd91c874 RegTest: Compile fix 2025-10-18 23:12:15 +10:00
Stenzek
9ca1c9730f Mini: Compile fix 2025-10-18 22:57:50 +10:00
Stenzek
476c1c5b9d FullscreenUI: Make OpenOrUpdateLoadingScreen() thread safe 2025-10-18 22:48:37 +10:00
Stenzek
45d3c66579 FullscreenUI: Simplify game properties state
Only allow scanned games to be changed like the Qt UI, makes everything
much simpler.
2025-10-18 22:48:37 +10:00
Stenzek
32aa86a608 FullscreenUI: Move achievements to its own file 2025-10-18 22:48:37 +10:00
Stenzek
bed758a75b FullscreenUI: Move translation strings to own file 2025-10-18 22:48:37 +10:00
Stenzek
10a7d8ad4d FullscreenUI: More scope clean up 2025-10-18 22:48:37 +10:00
Stenzek
f4f8aa587e FullscreenUI: Defer more resource loads
That way we're not compiling the background shader (if any) when we're
just using the pause menu.
2025-10-18 22:48:37 +10:00
Stenzek
cc2ee00681 FullscreenUI: Split game list into its own file 2025-10-18 22:48:37 +10:00
Stenzek
dc7a7ed6bb FullscreenUI: Split settings into its own file 2025-10-18 22:48:37 +10:00
Stenzek
ba28a3fb3c Achievements: Cache user badge path 2025-10-18 22:48:36 +10:00
Stenzek
2bc387fe33 FullscreenUI: Fix returning to window that was open
e.g. disc swap hotkey
2025-10-18 22:48:36 +10:00
Stenzek
b1cd5625f2 System: Don't add to the pause timer when we're already paused 2025-10-18 22:48:36 +10:00
Stenzek
983cde33bc FullscreenUI: Make notifications/toasts thread-safe 2025-10-18 22:48:36 +10:00
Stenzek
8c25144abb FullscreenUI: Always initialize widgets
That way notifications etc can be used independently of FSUI.
2025-10-18 22:48:36 +10:00
Stenzek
9cbcf78090 FullscreenUI: Move transition handling to widgets file 2025-10-18 22:48:36 +10:00
Stenzek
e36ea9e3a8 FullscreenUI: Remove more redundancy 2025-10-18 22:48:36 +10:00
Stenzek
fab4b05bc8 FullscreenUI: Remove ImGuiFullscreen namespace 2025-10-18 22:48:36 +10:00
Stenzek
836fd9bcfb FullscreenUI: Make file naming consistent 2025-10-18 22:48:36 +10:00
Stenzek
1fbf083987 FullscreenUI: Move ImGuiFullscreen to core 2025-10-18 22:48:36 +10:00
Stenzek
2c03fb915c ImGuiManager: Use static key map
No need to dynamically look it up now, since we're using USB key codes
everywhere.
2025-10-18 22:48:36 +10:00
Stenzek
5653f8dd64 ImGuiManager: Don't let non-imgui keys through
Stops hotkeys bound to some keys from activating in pause menu.
2025-10-18 22:48:36 +10:00
Stenzek
bae05a7f67 SDLInputSource: Change default for WGI to off
Changed in SDL 3.2.24.
2025-10-18 22:48:36 +10:00
Stenzek
7deb374cf9 Deps: Hopefully work around path length limits 2025-10-16 20:50:37 +10:00
Stenzek
33a342751a Deps: Remove build directory after each library
Hopefully work around running out of space on the runners.
2025-10-16 19:23:56 +10:00
Stenzek
f2291eaaff Deps: Build Qt Declarative/ShaderTools
Needed for Linguist now.
2025-10-16 18:19:52 +10:00
Stenzek
8520e3f94d System: Work around lupdate bug causing hang 2025-10-16 17:55:45 +10:00
Stenzek
a49d0b665f PostProcessing/GLSL: Skip recompile on target size change
This is specific to reshade.
2025-10-16 16:32:26 +10:00
Stenzek
41b8f2bf77 CI: Remove Flatpak builds
Now they're getting random timeouts updating the SDKs, just tired of it.

The workflow to publish is still in the tree, but I haven't updated
Flathub in months, and it's arguably kinda pointless since the Flatpak
is literally just a wrapper of the AppImage now...

So, still undecided what to do about that. If you are using it, please
let me know, because in the months that it's been deprecated only a
couple of people mentioned that they were using it. Therefore, as best I
can tell there's basically no userbase.
2025-10-16 16:00:18 +10:00
Stenzek
2a0fe0a753 GameDB: Add disc set for GT2 US
Match Europe/Japan.
2025-10-16 15:56:11 +10:00
Stenzek
bd6e747c65 GameDB: Fix serials for Black-Matrix + 2025-10-16 15:56:11 +10:00
Anderson Cardoso
e96a85d29f Atualização Português do Brasil (#3588)
Atualizado para a última versão
2025-10-15 19:32:40 +10:00
shikulja
70185cb693 Update Russian translation (#3587)
* Update ts

* purge ts

* Update Russian translation

* typo
2025-10-15 19:32:32 +10:00
Stenzek
2ff9c67c71 Qt: Replace table widget in Game List Settings 2025-10-15 19:16:24 +10:00
Stenzek
2b3c7e00c8 Qt: Initialize COM before Qt
Ensures we're consistent regardless of whether Qt initializes it or not.

Currently, it initializes it through OLE -> COM.
2025-10-15 19:07:13 +10:00
Stenzek
89e3ba29a5 Qt: Fix warning 2025-10-15 19:06:55 +10:00
Stenzek
3d2c3c919d GameList: Avoid a couple of heap allocations 2025-10-14 15:01:23 +10:00
Stenzek
a035c48721 GameList: Fall back to achievement badges for game icons 2025-10-14 00:16:39 +10:00
Stenzek
ac4634c289 Add StringPool and BumpStringPool classes 2025-10-14 00:06:56 +10:00
Stenzek
84806d3055 GameList: Use LockedFile class 2025-10-14 00:06:56 +10:00
Stenzek
e7f4034678 FileSystem: Add LockedFile helper class 2025-10-14 00:06:56 +10:00
Stenzek
8f0c9dd171 Qt: Fix disabled menu items in MacOS native theme 2025-10-14 00:06:50 +10:00
Stenzek
3c632c896d Qt: Fix hang on theme change on MacOS 2025-10-14 00:06:29 +10:00
Stenzek
114c26307d Qt: Fix initial button state in memory card editor 2025-10-13 18:29:03 +10:00
Víctor "IlDucci
a08996d55f Spanish (Spain) 2025/10/12 translation update (#3586)
- Translated the new strings.
 - Corrected major misunderstandings related to Safe Mode and RetroAchievements' hardcore mode.
 - Changed "shaders" translation from "sombreador" to the English word. Computer graphics shader's name has become a lost war to English.
2025-10-12 23:29:14 +10:00
Stenzek
8ed329ff1f Qt: Fix serial mismatch error when verifying 2025-10-12 23:28:24 +10:00
Stenzek
c117059c82 GPU/HW: Fix crash when preloading texture replacements 2025-10-12 13:40:51 +10:00
Stenzek
90e6078543 Cheats: Show OSD warning when parsing fails 2025-10-12 13:26:27 +10:00
Stenzek
ec96dd70f9 Qt: Don't use hash cheat list when PPFs exist 2025-10-12 13:21:00 +10:00
Stenzek
c4c6357be3 Qt: Improve column width behaviour in cheat list
Prevent long cheats being truncated after addition/editing.
2025-10-12 13:08:07 +10:00
Stenzek
286f9dddec Qt: Validate cheats before saving edits 2025-10-12 12:38:37 +10:00
Stenzek
bfcd3d4220 Cheats: Strip whitespace on code body when editing 2025-10-12 12:37:11 +10:00
Stenzek
08556f3143 Qt: Normalize line endings in cheat edit dialog 2025-10-12 12:16:40 +10:00
Stenzek
f8c720a5ef Qt: Tab should change focus in edit cheat dialog 2025-10-12 12:04:43 +10:00
Stenzek
adbfe7f184 Qt: Display hash in game properties summary 2025-10-12 12:04:25 +10:00
Stenzek
00042a5ea4 Qt: Default to native theme on MacOS 2025-10-12 01:09:48 +10:00
Stenzek
a654ce63bf Qt: Style QMenu and QToolButton with stylesheet on MacOS
Using a QStyleProxy would be preferable, but this is fast enough and
stops the native theme from looking so ugly.
2025-10-12 01:09:47 +10:00
Stenzek
e0e245d59a Qt: Swap most out-of-toolbar QToolButtons to QPushButtons
Styles better on MacOS.
2025-10-12 01:09:47 +10:00
Stenzek
b5e1087e2a Qt: Fix submenu accessibility on MacOS 2025-10-12 01:09:47 +10:00
Stenzek
f0f7475c39 FullscreenUI: Modernize blocking loading dialog
And add a time estimate.
2025-10-11 18:08:20 +10:00
Stenzek
a1c177402b CI: Fix AppImage build (again)
So tired of this silly OS...
2025-10-11 15:43:50 +10:00
Stenzek
4587c45d93 MediaCapture: Improve FFmpeg load error message 2025-10-11 14:51:24 +10:00
Stenzek
505753da48 Deps: Update to FFmpeg 8.0 2025-10-11 14:51:24 +10:00
Stenzek
3552a5b001 Qt: Fix rare bug where covers get stuck in loading state
When quickly changing cover scale.
2025-10-11 12:25:16 +10:00
Stenzek
50a9f04dd9 dep/rcheevos: Bump to 6755915 2025-10-10 20:23:29 +10:00
Stenzek
330eb057d5 Scripts: Hopefully fix AppImage build 2025-10-09 23:06:12 +10:00
Stenzek
29d73cb18c GameDB: Remove PGXP vertex cache from Touge Max G
No longer needed with the earlier fix. But add CPU mode, since that
helps the sprite jitter.
2025-10-09 23:06:12 +10:00
Stenzek
4d516c5247 dep/rcheevos: Bump external client image URL buffer size
Works around invalid parameter being triggered on long usernames.
2025-10-09 23:06:12 +10:00
Stenzek
27d26794d9 CPU/GTE: Remove unnecessary struct padding 2025-10-09 23:06:12 +10:00
Stenzek
8bce5b0a55 CPU/PGXP: Make register writes more readable 2025-10-09 23:06:12 +10:00
Stenzek
05a58285aa CPU/PGXP: Handle SXYP mirror reads
Fixes PGXP on some parts of geometry in Legend of Legaia.

Also fixes broken PGXP in Boxing and Touge Max G.
2025-10-09 23:06:12 +10:00
Stenzek
cd37cd741c Deps: Update to Qt 6.10.0 2025-10-09 21:22:35 +10:00
Stenzek
00a2f5a2ce FullscreenUI: Fix crash opening settings
Regression from 76facb3. Derp.
2025-10-09 18:22:59 +10:00
zkdpower
550858104f Update the Simplified Chinese Translation. (#3585) 2025-10-08 20:57:56 +10:00
Daniel Nylander
c039a946fb Updated Swedish translation (#3584) 2025-10-08 20:57:32 +10:00
Stenzek
4f0d35c2ef VulkanDevice: Make current command buffer lookup consistent 2025-10-08 19:37:45 +10:00
Stenzek
97c49a9e36 CDImageDevice: Use g_settings for ignore host subcode 2025-10-08 19:31:59 +10:00
Stenzek
76facb3da7 FullscreenUI: Fix default value for theme 2025-10-08 19:28:32 +10:00
Stenzek
5afa6b2d67 Controller: Remove unused helper function 2025-10-08 19:28:14 +10:00
Stenzek
98761961bc Cheats: Remove unnecessary std::move() 2025-10-08 19:27:58 +10:00
Stenzek
dbf2849803 Misc: Move SettingInfo declaration to input_types.h
267b74c breaks on cross-compiled Linux otherwise, and I can't be
bothered to set it up locally to debug.
2025-10-07 01:31:20 +10:00
Anderson Cardoso
267b74cab8 Atualização Português do Brasil (#3583)
Atualizado para a última versão
2025-10-07 01:17:32 +10:00
Stenzek
7575050b00 Controller: Don't indirectly include settings.h 2025-10-07 01:14:06 +10:00
Stenzek
39eb2c564f Qt: Don't include git hash in window title
It's too verbose and meaningless to the user. Still shown in the about
dialog for reference purposes.
2025-10-07 01:14:06 +10:00
Stenzek
733df6a0ce Qt: Show screenshot in resume game popup 2025-10-06 13:45:48 +10:00
zkdpower
1b7e42920b Update the Simplified Chinese Translation to latest. (#3582) 2025-10-06 02:51:14 +10:00
Stenzek
3a806738b9 Qt: Fix cover title being clipped 2025-10-05 23:09:11 +10:00
Stenzek
848833b687 CI: Fix Windows build symbol upload 2025-10-05 01:32:50 +10:00
Stenzek
24a3dcb412 InputManager: Sync effect state on connection
Fixes mic/RGB LED not synchronizing on new device connection.

Apparently I forgot that it doesn't reload bindings, only when the
InputSource list changes.
2025-10-05 00:58:57 +10:00
Stenzek
e373be9fd3 CMake: Bump required dependency versions 2025-10-05 00:58:57 +10:00
Stenzek
4e797f398f CI: Remove redundant prefix on AppImage cross job 2025-10-05 00:58:55 +10:00
Stenzek
9cc29fb603 Qt: Use QSize throughout GameListWidget 2025-10-05 00:24:12 +10:00
Stenzek
7b991def42 Qt: Bump currently-visible covers to front on scale change
Fixes flicker when very quickly changing scales from small to large.
2025-10-05 00:17:35 +10:00
Stenzek
78db5addcd Qt: Fix flicker when changing cover size
By scaling images instead of tossing the whole cache.
2025-10-04 23:52:55 +10:00
Stenzek
f219c2ca98 AnalogController: Fix sync/readback value for vibration 2025-10-04 22:59:53 +10:00
Stenzek
1665cb6953 InputManager: Refactor and simplify vibration mapping
Now multiple devices can be bound if anyone wants to do that for some
reason...

Current strength will also synchronize on binding reload instead of
getting lost.
2025-10-04 22:53:36 +10:00
Stenzek
f57eeb349c CI: Simplify Windows/Linux workflows
Use matrix instead of duplicating.
2025-10-04 19:18:17 +10:00
Stenzek
22399c25a1 FullscreenUI: Fix localization of 'None' background 2025-10-04 19:17:32 +10:00
Stenzek
e6788b313e System: Add 'Runahead for Analog Input' option
Mitigates the performance impact of serializing PGXP state.
2025-10-04 19:17:31 +10:00
Stenzek
cf0b602476 Settings: Rearrange fields
To make space in the bitfield.
2025-10-04 19:17:31 +10:00
zkdpower
95e9cba79b Update the Simple-Chinese Translation to latest. (#3581) 2025-10-04 19:17:20 +10:00
Stenzek
3966a9eea7 System: Serialize PGXP state for runahead 2025-10-04 17:51:25 +10:00
Stenzek
10f9039dea Controller: Skip runahead replay when analog is unchanged
Slight CPU usage reduction at idle.
2025-10-04 17:44:33 +10:00
Stenzek
424f9a9db9 Controller: Simplify deadzone calculation
Use Pythagoras to measure distance from center. Fixes incorrect results
very close to the center.
2025-10-04 17:38:20 +10:00
Stenzek
1b49f82c98 Controller: Merge all binds into one index space
Simplifies things a bit.
2025-10-04 16:52:26 +10:00
Stenzek
9d8d81d092 InputManager: Only update vibration once per frame 2025-10-04 16:39:40 +10:00
Stenzek
f0c67e998b Controller: Remove GetInputOverlayIconColor()
Use the bind state instead.
2025-10-04 16:39:40 +10:00
Stenzek
3624474b91 Controller: Remove unused InAnalogMode() 2025-10-04 16:39:24 +10:00
Stenzek
2adf7a1663 CI: Bump MacOS runner to macos-15 + Xcode 26 2025-10-04 16:39:21 +10:00
Stenzek
570f0416b1 Deps: Bump to Qt 6.9.3 2025-10-04 13:51:25 +10:00
Stenzek
21c83440b3 Misc: Add error checking to LocalTime() 2025-10-04 13:51:25 +10:00
Stenzek
6cb727f383 GameDB: Disable auto analog in Alien Resurrection
Game enables analog mode itself, and ends up in a state where
vibration does not function until manually toggled if forced.
2025-10-03 00:49:49 +10:00
Stenzek
a048e092b2 Qt: Make LED settings clearer 2025-10-03 00:10:52 +10:00
Stenzek
982753d7ce Qt: Allow binding both active and inactive LED colours 2025-10-02 11:55:10 +10:00
Stenzek
cf8b1a58ca Qt: Re-introduce FlowLayout 2025-10-02 11:55:10 +10:00
Stenzek
ffa0e8d131 Qt: Refactor LED bindings
Make it more general and bindable to both the mode and RGB LED, that way
it can be used on Dualshock 4 as well.
2025-10-02 11:54:41 +10:00
Ariel Nogueira Kovaljski
51942df7dd Use DualSense Mic Mute LED for Analog Mode (#3574)
* Use DualSense Mic Mute LED for Analog Mode

* Fix function casing and move function call outside loop

* Refactored code to use binds

- `InputManager` no longer uses API specific logic
- The Mic Mute LED gets bound as `ModeLED = SDL-0/ModeLED` only for DualSense controllers
- Changed DualSense detection to use Vendor & Product ID
2025-10-02 11:54:13 +10:00
Stenzek
c790972265 System: Warn if geometry tolerance is not default 2025-09-30 18:18:22 +10:00
Stenzek
e5c17880cb Qt: Fix vibration binding not applying immediately 2025-09-29 00:48:17 +10:00
Stenzek
975b9b18e0 AnalogController: Fix inverted motor display in OSD 2025-09-29 00:48:17 +10:00
Stenzek
9807948ac1 Qt: Remove old vsync mode migration function
Been over a year.
2025-09-29 00:35:39 +10:00
Daniel Nylander
5c9e28f115 Updated Swedish translation (#3580)
* Updated Swedish translation

* Add files via upload
2025-09-28 23:03:59 +10:00
Stenzek
38bb240a44 Qt: Avoid extra string storage 2025-09-28 20:27:47 +10:00
Stenzek
a50997a554 Qt: Fix app icon ending up as null 2025-09-28 20:27:47 +10:00
Stenzek
3d4115613c Achievements: Fix unused variable warning 2025-09-28 20:27:47 +10:00
zkdpower
3fada38b57 Update the Simple-Chinese Translation to latest. (#3579) 2025-09-28 16:53:29 +10:00
Anderson Cardoso
0a25dd0693 Atualização Português do Brasil (#3578)
Atualizado para a última versão
2025-09-28 16:51:43 +10:00
Stenzek
eadca6cd7b Settings: Prefer widescreen patches over GTE hack
Since they tend to work better.
2025-09-28 16:43:34 +10:00
Stenzek
fa8a995d7e Cheats: Fix uninitialized data read in parsing 2025-09-28 16:43:34 +10:00
Stenzek
fb60691afc Cheats: Pack state in struct 2025-09-28 16:43:34 +10:00
Stenzek
c5d309f320 Settings: Avoid log.h include 2025-09-28 16:43:34 +10:00
Stenzek
6c1ee0ca87 Settings: Store custom aspect ratios in main key
What a pain. But allows patches to override aspect ratio to any
arbitrary value.
2025-09-28 16:43:34 +10:00
Stenzek
3832b39576 Qt: Fix disabling patches not removing empty ini 2025-09-28 16:43:34 +10:00
Stenzek
ea57a428f9 Qt: Don't use static storage for app icon
Wastes TLS space apparently.
2025-09-28 12:27:47 +10:00
Stenzek
daf5fee9ff Qt: Don't bother using worker for background resize
Ends up looking jankier.
2025-09-28 12:13:59 +10:00
Stenzek
50c9f63e8e Qt: Hackfix game list background on stylesheet themes 2025-09-28 12:13:43 +10:00
Stenzek
bb9dbf9a33 Qt: Avoid casts on animation delegate 2025-09-27 22:00:06 +10:00
zkdpower
a904544c64 Update the Simple-Chinese translation to latest. (#3577) 2025-09-27 17:47:58 +10:00
Stenzek
b40ff8b0bd Qt: Add optional animation of icons in game list
Disabled by default.
2025-09-27 17:45:24 +10:00
Stenzek
da471120c4 Qt: Link memory scanner address double-click to editor 2025-09-26 22:44:22 +10:00
Stenzek
ecf13ded23 Qt: Add Memory Editor window 2025-09-26 22:44:01 +10:00
Stenzek
4ee8738771 FullscreenUI: Stop icons leaking into cover cache 2025-09-26 20:02:08 +10:00
Stenzek
93a13a6fa2 FullscreenUI: Draw generated covers when not present 2025-09-26 20:02:08 +10:00
Stenzek
5caa560134 FileSystem: Disallow control characters on Linux/Mac as well
Technically allowed, but just asking for trouble.
2025-09-26 20:02:08 +10:00
Stenzek
d4c6905cfa Tests: Linux build fix 2025-09-26 20:02:08 +10:00
Stenzek
ea11ce2dd5 Tests: Add for CueParser and ElfFile 2025-09-26 20:02:08 +10:00
Stenzek
8e65beb736 GameList: Save APNGs for memory card icons 2025-09-26 20:02:08 +10:00
Stenzek
102af48b6b AnimatedImage: Add class for reading APNGs
And probably GIFs in the future.
2025-09-26 20:02:08 +10:00
Stenzek
9d14a4a57f Tests: Add tests for Image class 2025-09-26 20:02:08 +10:00
Stenzek
8f78f83587 Image: Don't use png_read_image()
Avoids a temporary buffer allocation.
2025-09-26 20:02:08 +10:00
Stenzek
bcc066a2e0 Image: Fix a couple of random bugs 2025-09-26 20:02:08 +10:00
Stenzek
f2cee19002 HeapArray: Add size_bytes() 2025-09-26 20:02:08 +10:00
Stenzek
2624914628 Deps: Patch libpng for apng support 2025-09-26 20:02:08 +10:00
Stenzek
29aa0faa6c Deps: Update Harfbuzz to 11.5.0 2025-09-26 20:02:07 +10:00
Stenzek
7e4f0ce119 Deps: Update to FreeType 2.14.1
And use dynamic Harfbuff loading.
2025-09-26 20:02:07 +10:00
Stenzek
86f36ad339 Deps: Remap paths in libbacktrace
File path creeps in otherwise, we want reproducible builds.
2025-09-26 20:02:07 +10:00
Stenzek
7df21b216d Deps: Bump cpuinfo version 2025-09-26 20:02:07 +10:00
Stenzek
94efd0089f Qt: Add fallback if system colour scheme is unknown 2025-09-23 22:58:06 +10:00
Stenzek
5b4cf75c74 Qt: Fix game list icon colours on theme change 2025-09-23 22:35:32 +10:00
Stenzek
65d6ecc4ca Qt: Don't use style hints as source of truth for dark mode
Apparently this doesn't work on Linux. Typical.
2025-09-23 22:35:11 +10:00
Stenzek
598d393ae9 System: Don't create any memory cards in PSF/GPU Dump mode 2025-09-22 20:50:37 +10:00
Víctor "IlDucci
36ebaf87a7 Spanish (Spain) translation update 2025/09/22 (#3576)
- Added latest translation changes.
 - Resorted all of Qt->View->keyboard shortcuts to include the newest additions.
2025-09-22 20:50:31 +10:00
Stenzek
dc1882dd3e System: Fix patch setting override desync on safe mode toggle 2025-09-22 20:46:12 +10:00
Stenzek
c2bbef066d System: Simplify memory card opening
Now cards no longer reopen when changing discs in a multi-disc game.
2025-09-22 20:37:45 +10:00
Stenzek
790ac23515 GPU: Get present parameters before allocating command
Fixes corruption/crash when video frame rate changes with capture
active.
2025-09-22 17:12:16 +10:00
Stenzek
03cbfc2e3f CI: Auto-retry patch download
Should hopefully work around random failures at the download endpoint.
2025-09-22 16:18:16 +10:00
Stenzek
fcf67396cd Qt: Require non-zero displacement for reverse axis binding
Should hopefully work around controllers with digital triggers getting
flagged as inverted bindings.
2025-09-22 16:18:16 +10:00
Stenzek
055caf5cbe Qt: Log input state when binding 2025-09-22 15:32:04 +10:00
Stenzek
9baa09aace InputManager: Use TinyString for key-to-string function 2025-09-22 15:32:04 +10:00
Stenzek
ba0390f6e0 System: Fix patch settings not clearing on game change
Also the redundant memory card notification when loading state.
2025-09-22 15:32:03 +10:00
Stenzek
7de84817f8 System: Fix changing GPU thread state when inactive 2025-09-21 19:00:03 +10:00
Stenzek
0de2aafdb9 CPU/Interpreter: Memory read failures are unlikely 2025-09-21 19:00:03 +10:00
Stenzek
b106392da0 CPU/PGXP: Implement lwl/lwr/swl/swr
Fixes gaps in sky geometry in Kingsley's Adventure.
2025-09-21 19:00:03 +10:00
Stenzek
e183ec307a CPU/Interpreter: Use aligned address for membps in lwl/lwr 2025-09-21 16:29:39 +10:00
Stenzek
109bbf6289 GameDB: Recompiler ICache for Dotchi Mecha! 2025-09-21 16:26:46 +10:00
Stenzek
49b5ea3d07 DMA: Skip chopping on tiny blocks
My theory is if the DMAC uses burst transfers, then chopping will have
no effect.

Dotchi Mecha! transfers out the CD header then data separately, and if
the first transfer is delayed ends up in a read loop.

I suspect our handling of chopping is wrong anyway, since the calculated
cycle counts for a sector transfer are way too high regardless...
2025-09-21 16:25:10 +10:00
Stenzek
e877ae41b0 Qt: Fix display of uncompressed size
Derp.
2025-09-20 20:07:05 +10:00
Stenzek
85c4e02493 Qt: Remove redundant title update in Game Properties 2025-09-20 18:32:15 +10:00
Stenzek
77bc1ae3ca Qt: Fix incorrect size hint in FolderSettingsWidget 2025-09-20 18:32:15 +10:00
Stenzek
f1047afdac Qt: Make checked menu item visible in Darker Fusion 2025-09-20 18:32:14 +10:00
Stenzek
24bf2bc453 Qt: Default to darker fusion theme 2025-09-20 15:37:26 +10:00
Stenzek
5e32871288 CI: Remove unneeded install on Mac 2025-09-20 15:34:44 +10:00
Stenzek
c4069eed02 CMake: Avoid search path conflicts 2025-09-20 15:34:44 +10:00
Stenzek
81f5b7440f Qt: Add icon for multi-disc games 2025-09-20 14:25:18 +10:00
Stenzek
41a4f07cc5 CI: Remove Flatpak verification steps
Tired of flathub breaking my build.
2025-09-19 21:25:03 +10:00
Stenzek
e6c49f0b33 Qt: Fix uncentered toggle widget thumb 2025-09-19 20:47:14 +10:00
Stenzek
bb63bf92f0 Qt: Remove multiple sources of truth for dark theme 2025-09-19 20:40:16 +10:00
Stenzek
0d3c7751f1 Qt: Fix Cheats menu shortcut 2025-09-19 20:40:16 +10:00
Stenzek
95bcff8c06 Qt: Darker Fusion tweaks 2025-09-19 20:40:15 +10:00
Stenzek
fb318ca4b0 Qt: Fix toggle button not updating 2025-09-19 01:18:31 +10:00
Stenzek
a90184a658 CDROM: Tidy up warnings 2025-09-19 00:54:43 +10:00
Stenzek
5e253d0c2a Qt: Add toggle button class
And use it for patches
2025-09-19 00:54:43 +10:00
Stenzek
f1fe00c1cb Data: Update SDL game controller database 2025-09-19 00:54:43 +10:00
Stenzek
e3c4f77a05 Qt: Fix tab order in settings pages 2025-09-19 00:08:31 +10:00
Stenzek
1a4ca3be11 Qt: Add 'Darker Fusion' theme 2025-09-19 00:08:28 +10:00
Stenzek
749ce48b65 Qt: Theme colours can be constexpr 2025-09-19 00:08:28 +10:00
Stenzek
83d518c707 Qt: Fix about dialog link colour 2025-09-19 00:08:28 +10:00
Stenzek
1ac7fc258a SaveStateSelectorUI: Scale save state selector to LayoutScale
And some minor visual polish.
2025-09-18 22:58:24 +10:00
Stenzek
073335c09b Qt: Don't break size of larger game icons 2025-09-18 22:57:59 +10:00
jorge-607
a13aa8f292 Adicionada uma atualização da tradução para português europeu 2025-09-18 18:13:19 +10:00
Davide Pesavento
4c81a98213 Qt: Fix detection of system language (#3573) 2025-09-18 18:10:43 +10:00
Stenzek
6caf2d567b Qt: Resize fixed columns on theme change
Fixes columns being too small after change on MacOS.
2025-09-17 20:09:48 +10:00
Stenzek
3724a38d38 Qt: Remove MainWindow::updateTheme()
Instead pipe it through themeChanged().
2025-09-17 20:09:48 +10:00
Stenzek
ea3c8a3654 Qt: Add a theme changed event and use it for hotkey rows
Fixes black text when window inactive on MacOS.
2025-09-17 20:09:48 +10:00
Stenzek
05af0c1288 FullscreenUI: Fix title display in game properties 2025-09-17 20:09:48 +10:00
Stenzek
2369b329eb Qt: Partially revert "Remove Q_OBJECT where unnecessary"
This reverts commit 31c75a2b5a.

tr()'s context is defined by Q_OBJECT, so removing Q_OBJECT here
sadly breaks translations.
2025-09-17 20:09:48 +10:00
Stenzek
a39d370c51 Qt: Don't show main window when changing setup wizard options 2025-09-17 20:09:48 +10:00
Stenzek
ceb6757524 Qt: Work around broken dialogs in MacOS 26 2025-09-17 20:09:48 +10:00
Anderson Cardoso
1e41408753 Atualização Português do Brasil (#3571)
Atualizado para a última versão.
2025-09-17 20:09:45 +10:00
zkdpower
4bf2aa5620 Update the Simple-Chinese translation. (#3570) 2025-09-16 23:20:01 +10:00
Daniel Nylander
e138030f8f Updated Swedish translation (#3569) 2025-09-16 23:19:40 +10:00
Connor McLaughlin
eeb1555905 Qt: Fix tooltip typo 2025-09-16 23:19:10 +10:00
Stenzek
9a1a8c226a Qt: Allow transparent padding for covers
Need to use a custom paint delegate instead...
2025-09-16 02:16:04 +10:00
Stenzek
bb50fc9056 CDROM: Improve subchannel file detection
Look in the subchannels directory for serial, file title, game title and
save title.
2025-09-15 20:45:08 +10:00
Stenzek
8a431b7d22 GameDB: Disable PGXP on 2D polygons in Wipeout games
Fixes misaligned text.
2025-09-15 20:45:07 +10:00
Stenzek
ff23462113 dep/rcheevos: Bump to fae1e23 2025-09-15 20:45:07 +10:00
Ariel Nogueira Kovaljski
0088bb0abb Qt: Make titlebar match current UI theme (Light/Dark) (#3568) 2025-09-15 20:44:41 +10:00
Stenzek
66bef3e3ed Achievements: Allow background reads 2025-09-14 19:45:52 +10:00
Stenzek
9e3dda675c Qt: Remove unused variables 2025-09-14 17:56:11 +10:00
Stenzek
31c75a2b5a Qt: Remove Q_OBJECT where unnecessary
Shaves another 20KB off the binary, and more importantly improves
compile time since moc doesn't need to run for as many files.
2025-09-14 17:55:14 +10:00
Stenzek
339f4252ec Qt: Remove named slot declarations
Knocks 70KB or so off the release binary, ~0.8%.
2025-09-14 17:12:41 +10:00
Stenzek
577863077e Qt: Replace named slot usage with functors 2025-09-14 16:56:26 +10:00
Stenzek
328c93b786 FullscreenUI: Fix OOB on start+load state 2025-09-14 16:30:09 +10:00
Stenzek
2346f67c8c dep/fmt: Update to v11.2.0 2025-09-14 16:19:09 +10:00
Stenzek
ae77a82ba3 Common: Add helper for thread-safe localtime()
And use it with fmt instead of fmt::localtime.
2025-09-14 16:19:06 +10:00
Stenzek
aa929370ba Host: Pack locals in struct 2025-09-14 16:19:06 +10:00
Stenzek
640769c2b2 System: Remove unnecessary c_str() 2025-09-14 16:19:06 +10:00
Stenzek
cb7c33cf27 Qt: Synchronize horizontal header with sort actions 2025-09-14 15:17:17 +10:00
Stenzek
7807a6847b Misc: Fix a couple of code analysis warnings 2025-09-14 14:56:41 +10:00
Stenzek
ae570b0aca Qt: Remove multiple source of truth for column titles 2025-09-14 13:59:01 +10:00
Stenzek
08d54487e0 Qt: Disable capture frame option if not running 2025-09-14 13:48:37 +10:00
Stenzek
3554467988 Qt: Set status tip for actions to tooltips 2025-09-14 13:47:53 +10:00
Stenzek
f39a067260 Qt: Add tooltips to menu actions
Sorry translators.
2025-09-14 13:47:40 +10:00
Stenzek
9877cc0c2c Qt: Move list background config logic to GameListWidget 2025-09-14 13:02:40 +10:00
Stenzek
4d5b0473cf Qt: Don't show fractional sizes in game list
Arguably not very useful.
2025-09-14 12:54:50 +10:00
Stenzek
e038a1d355 Qt: Fix some size values truncated in game list 2025-09-14 12:54:50 +10:00
Stenzek
a790f521a0 Qt: Don't try to replace AppImage when running as Flatpak 2025-09-14 12:54:50 +10:00
Daniel Nylander
cdcfbea6d0 Updated Swedish translation (#3566) 2025-09-14 12:54:28 +10:00
ANK-dev
a9c36f39ad Use statusTip instead of toolTip for menus 2025-09-14 12:54:09 +10:00
ANK-dev
17a1b231af Keep Game List/Grid view options enabled if rendering to separate window 2025-09-14 12:54:09 +10:00
ANK-dev
df49eba478 Added icons and mnemonics in View menu
- Icons for Zoom In and Zoom Out
- Adjusted and added missing mnemonics
2025-09-14 12:54:09 +10:00
ANK-dev
1f07bfc9c7 Added "View > Sort By" menu
- Allows sorting by any column even when hidden
- Allows sorting in grid view
2025-09-14 12:54:09 +10:00
ANK-dev
456d341ec2 Enable/Disable View menu items according to state
- Disable all Game List/Grid related options while System Display is active.
  Reenable when switching back to List/Grid.
- Disable Game List/Grid exclusive options when switching to the opposite view;
- Disable "Clear List Background" when a background is not set;
- Enable tooltips for menu items;
2025-09-14 12:54:09 +10:00
Stenzek
ee9f32185e dep/rcheevos: Remove files deleted upstream 2025-09-13 16:52:42 +10:00
Stenzek
6126209a25 CMake: Remove Flatpak specific commands
Also no longer needed.
2025-09-13 16:52:42 +10:00
Stenzek
84c6be74d3 Deps: Simplify Linux build scripts
Optional system libs no longer needed since Flatpak specific build is
gone.
2025-09-13 16:52:42 +10:00
Stenzek
e0a51e117d CI/Flatpak: Replace with a wrapped AppImage
One less thing to maintain, fewer things to go wrong.

Especially since the number of users can apparently be counted
on one hand.

It's this or I remove it completely.
2025-09-13 16:52:30 +10:00
Stenzek
78bc53ff43 Qt: Stop slider tooltip showing on keyboard shortcut 2025-09-13 13:52:01 +10:00
Stenzek
8f247c909a Qt: Move zoom logic entirely to game list widget 2025-09-13 13:51:27 +10:00
Stenzek
56665d64af Achievements: Simplify hash-to-string routine 2025-09-13 13:39:18 +10:00
Stenzek
fe09b5d16f ISOReader: Allow zero-length root directory entries
BIOS can read them, so should we.
2025-09-13 13:39:18 +10:00
Stenzek
d8912cb3c3 System: Allow RVO in GetExecutableNameForImage() 2025-09-13 13:39:18 +10:00
Stenzek
edeaae613a dep/rcheevos: Bump to 4570cb7 2025-09-13 13:39:18 +10:00
Ariel Nogueira Kovaljski
c6666a388f Qt: Show tooltip when adjusting icon/cover scale (#3563)
* Qt: Show tooltip when adjusting icon/cover scale

* Qt: removed tooltip on hover, handle zoom via View menu and more

- Tooltip only shows when changing the scale;
- "View > Zoom In/Out" also works for the list view;
- Grid View scale percentage display value adjusted (10%-200%);
- Added translation support for the scale tooltip;
2025-09-13 13:39:08 +10:00
Anderson Cardoso
b95f2b16f2 Atualização Português do Brasil (#3564)
Atualizado para a última versão
2025-09-13 13:34:43 +10:00
Davide Pesavento
66d6e2827d GameDB: PGXP CPU mode for Tony Hawk's Pro Skater
And add a sort title for the PAL version of the first game so that
it gets sorted before the sequels.
2025-09-13 13:34:28 +10:00
Davide Pesavento
d694bc201b GameDB: Various fixes for Mega Man games 2025-09-13 13:34:28 +10:00
Davide Pesavento
9ae09a7693 GameDB: Disable widescreen and enable PGXPPreserveProjFP for Evil Dead 2025-09-13 13:34:28 +10:00
Davide Pesavento
65f6209010 GameDB: Various fixes for Einhänder 2025-09-13 13:34:28 +10:00
Stenzek
f0ff520a9d GameList: Improve custom title cover handling
Prefer the custom title path over the serial if one is present.

Also use sanitized names.
2025-09-12 23:29:47 +10:00
Stenzek
f45350898b GameList: Don't balk on cover titles that end in dot 2025-09-12 23:29:46 +10:00
Stenzek
1cdde2cab6 Path: Add IsFileNameValid() 2025-09-12 23:29:46 +10:00
Stenzek
a8bbd2c4a9 CrashHandler: Catch exceptions and std::terminate 2025-09-12 23:29:46 +10:00
Connor McLaughlin
2459ac7cc5 Achievements: Fix crash on unknown game 2025-09-12 14:13:10 +10:00
Daniel Nylander
5c7b976367 Updated Swedish translation (#3562) 2025-09-10 21:56:00 +10:00
Stenzek
96c90a4acd Qt: Use colorScheme() for dark mode detection on system themes 2025-09-10 21:52:43 +10:00
Stenzek
7bf3b7931b Qt: Fix hotkey alt row colours on Mac 2025-09-10 21:44:52 +10:00
Stenzek
aca4e6be42 Qt: Use Roboto for cover captions too
And don't do a full refresh when scale changes.
2025-09-09 20:56:51 +10:00
Stenzek
e2142419e1 Qt: Use Roboto for cover placeholder text
Consistency across platforms.
2025-09-09 20:47:58 +10:00
Stenzek
17aa588736 Qt: Add shadow to placeholder cover text 2025-09-09 20:47:58 +10:00
Stenzek
c9156fd7b5 Qt: Pack host local state in struct 2025-09-09 20:47:58 +10:00
Stenzek
c4ac3d195c Qt: Improve padding in hotkey rows
And fix incorrect parent widgets.
2025-09-09 20:47:58 +10:00
Stenzek
022d9f3083 Qt: Pass game list entry to settings window
Simplfies everything, makes restoring custom properties more reliable.
2025-09-09 20:47:58 +10:00
Ariel Nogueira Kovaljski
d367e7e4e0 Qt: Alternating row colors for Hotkeys settings (#3559) 2025-09-09 19:56:15 +10:00
Davide Pesavento
aee897e44a Qt: Disable UI of settings forced via gamedb, part two (#3561)
Missed these in the previous commit.
2025-09-09 19:53:06 +10:00
Stenzek
d0840c0615 GameList: Don't save custom titles to cache
Stops custom titles from being unremovable.
2025-09-09 19:15:04 +10:00
Stenzek
dc7eec7eac Qt: Use hasAlphaChannel() for ARGB32 check 2025-09-09 18:47:32 +10:00
Stenzek
e470269d01 FileSystem: Remove now-unused function 2025-09-09 14:17:20 +10:00
Stenzek
d944966db6 Qt: Use ARGB32_Premultiplied for transparent covers 2025-09-09 13:58:27 +10:00
Stenzek
6e4da72552 System: Remove use of CDImage title metadata
This way memory card filenames are consistent regardless of the
image format.

Also make GetGameMemoryCardPath() and GetMemoryCardForSlot()
behave the same.
2025-09-09 13:57:52 +10:00
Ariel Nogueira Kovaljski
caa865628d Qt: Expand Gamelist background to fill available area (#3560) 2025-09-09 13:53:17 +10:00
Davide Pesavento
0296c84add Qt: Disable UI of settings forced via gamedb traits (#3558) 2025-09-08 22:41:15 +10:00
Stenzek
ad3ad6065e Qt: Update Korean translation by Hack茶ん 2025-09-08 22:40:21 +10:00
Davide Pesavento
0be0500805 GameDB: Disable auto analog for Persona 2 - Innocent Sin (#3556) 2025-09-08 22:13:40 +10:00
Anderson Cardoso
5794746fa0 Atualização Português do Brasil (#3557)
Atualizado para a última versão
2025-09-08 22:13:29 +10:00
Stenzek
627fec4e30 FullscreenUI: Tweak text colours slightly 2025-09-08 22:11:39 +10:00
Stenzek
dfc650410e Qt: Use RGB32 format for covers/background
As per QPainter documentation, ARGB32 etc is not optimal.

https://doc.qt.io/qt-6/qpainter.html#performance
2025-09-08 22:11:39 +10:00
Stenzek
ec6a411bdf Qt: Use Window/AutoFillBackground for game list background
Fixes scrolling glitching out, as well as the background not showing in
the Qt Windows 11 theme.
2025-09-08 22:11:39 +10:00
Stenzek
0136f721c4 SDLInputSource: Fix possible negative input to SDL_GetJoystickButton() 2025-09-07 23:34:18 +10:00
Stenzek
babf4201d8 Settings: Default to notification achievement indicator mode
Makes more sense than an icon in the corner of the screen that you don't
notice half the time, and the other half is arguably annoying.
2025-09-07 15:16:09 +10:00
Davide Pesavento
81dca60aa9 GameDatabase: Use correct titles in compatibility report (#3555) 2025-09-07 15:15:25 +10:00
Stenzek
c3e5075c60 Achievements: Show notification when challenge fails
If mode is set to notifications.
2025-09-07 15:11:34 +10:00
Stenzek
d7ed9a736d Achievements: Show most recent progress update in pause menu 2025-09-07 15:04:31 +10:00
Ariel Nogueira Kovaljski
1275eb1f9b GPU/ShaderGen: Added Hybrid Bilinear scaling (#3554)
Middle ground between Smooth Bilinear and Sharp Bilinear.
Smooth horizontally and sharp vertically like a raster scan.
2025-09-07 11:54:27 +10:00
Stenzek
78d22b8852 Qt: Swap point size for pixel size in a few places
Make sizes consistent between Windows and MacOS.
2025-09-06 14:35:28 +10:00
Stenzek
4c6375adc9 Qt: Fix inconsistent cover caption size at startup 2025-09-06 13:39:07 +10:00
Stenzek
ca504bd0ed CMake: Set -fmacro-prefix-map and -ffile-prefix-map 2025-09-06 13:37:12 +10:00
Stenzek
843234f817 MSBuild: Set /d1trimfile and /PDBALTPATH
More steps to reproducible builds.

/d1trimfile only works on MSVC, so set -fmacro-prefix-map and
-ffile-prefix-map on Clang.
2025-09-06 13:21:11 +10:00
Stenzek
da64db69f2 System: Don't print __DATE__/__TIME__
Inhibits reproducible builds.
2025-09-06 13:11:40 +10:00
Stenzek
26c4eec874 Qt: Fix another compiler warning 2025-09-06 13:11:24 +10:00
Stenzek
0aa8374f73 MSBuild: Don't merge qt_LANG.qm when qtbase_LANG.qm exists
Stops qt_sv.qm being generated which references files that do not exist,
e.g. qtscript_sv.qm.
2025-09-06 12:38:15 +10:00
Stenzek
14b2302e29 Qt: Fix compile warning 2025-09-06 12:38:15 +10:00
Stenzek
5cd8444ad6 Qt: Consider title when sizing icon column 2025-09-06 12:35:44 +10:00
Ariel Nogueira Kovaljski
587e73d71d Sharper icon scaling (#3553)
* take ceiling instead of truncation for icon scaling

* #include <cmath> and change std::ceilf to std::ceil
2025-09-06 12:34:28 +10:00
Stenzek
3ff6287a82 GameList: Use size_t for indexing 2025-09-04 20:47:47 +10:00
Stenzek
7e04671644 GameList: Use fixed size for icon column
Fixes sluggish icon size change and speeds up startup since we
no longer need to load every icon.
2025-09-04 20:23:05 +10:00
Stenzek
393724abdc Qt: Save one lookup when loading covers 2025-09-04 20:22:34 +10:00
Stenzek
b5d5cfd9c2 GameList: Pack state in struct 2025-09-04 19:32:25 +10:00
Stenzek
f7edbdec22 Qt: Remove unused signal 2025-09-04 19:29:30 +10:00
Stenzek
21bede8123 ImGuiManager: Initialize to default text font order 2025-09-04 12:35:34 +10:00
Stenzek
979e850ea5 Qt: Include full binding text in tooltip 2025-09-04 12:29:21 +10:00
Stenzek
78fa54344e SmallString: Make constructors explicit
Catch more errors at compile-time.
2025-09-04 12:25:00 +10:00
Stenzek
d9dc5074df InputManager: Map 'old' key names to new on load
Can't really automigrate settings because of input profiles, but this
will keep the old ones loading.
2025-09-04 12:00:03 +10:00
Stenzek
c33131d153 InputManager: Use scancodes for key mapping 2025-09-04 11:59:28 +10:00
Stenzek
08901c0638 Qt: Fix scroll bar desyncing on icon size change 2025-09-03 22:33:00 +10:00
Stenzek
fb1bd1e283 FullscreenUI: Fix crash when toggling localized titles 2025-09-03 22:33:00 +10:00
Stenzek
76e386c2f6 CrashHandler: Debug break on abort() if debugger attached 2025-09-03 22:33:00 +10:00
Stenzek
8327282143 GameList: Fix covers for disc sets sometimes missing
Path field needs to be unique.
2025-09-03 22:33:00 +10:00
Stenzek
3d73c5cacc Qt: Fix possible cover loss during load 2025-09-03 22:33:00 +10:00
Davide Pesavento
e573f18b01 GameDB: Disable auto analog for Hellnight (#3551) 2025-09-03 20:01:24 +10:00
Stenzek
e02c991924 Deps: Patch Qt fusion style
Stop the checkboxes having such bright outlines, it looks terrible.
2025-09-03 20:00:33 +10:00
Stenzek
7c2585d265 Deps: Make Qt build options more consistent 2025-09-03 19:59:53 +10:00
Stenzek
25b44f4283 Qt: Wire up new key glyphs 2025-09-02 23:42:09 +10:00
Stenzek
a390797213 Data: Add new PromptFont glyphs 2025-09-02 23:42:09 +10:00
Stenzek
59542b0397 Deps: Update Qt, SDL and zlib-ng 2025-09-02 22:28:29 +10:00
Stenzek
2d3ebc867c System: Fix safe mode details not showing 2025-09-02 12:26:22 +10:00
zkdpower
d2a2a78237 Update the Simple-Chinese Translation to latest. (#3547) 2025-09-02 12:19:28 +10:00
Anderson Cardoso
fd9c3cd2fd Update duckstation-qt_pt-BR.ts (#3548) 2025-09-02 12:19:18 +10:00
Davide Pesavento
6d2f3dc6c2 Qt: Fix zooming with mouse wheel in game list (#3549) 2025-09-02 12:19:13 +10:00
Davide Pesavento
2514814bbb GameDB: A few more sort names 2025-09-02 12:18:55 +10:00
Davide Pesavento
2215f413e0 GameDB: Restore "(Soviet)" suffix on disc 2 of some C&C games
Accidentally dropped in 6e421b9d4a.
2025-09-02 12:18:55 +10:00
Stenzek
fc29fbab50 Qt: Don't try to load directory as background image 2025-09-02 12:12:10 +10:00
Stenzek
4b472dd51b GameList: Improve grid size calculations
Can't seem to get the width to compute incorrectly on my machine
anymore.
2025-09-02 12:07:39 +10:00
Stenzek
ddaac7eb4c GameList: Use save title for cover image lookup 2025-09-01 20:22:56 +10:00
Stenzek
0867decc87 Qt: Use widget-local device pixel ratio for game list
Fixes blurry icons in mixed DPI environments.

At least on Windows.
2025-09-01 20:16:13 +10:00
Stenzek
019636b71f Qt: Use DevicePixelRatioChange for DisplayWidget 2025-09-01 19:55:20 +10:00
Stenzek
126171f5de Qt: Fix memory card icons drawing on themselves
Also disable column title highlighting, and fix the width of the icon
column.
2025-09-01 19:39:43 +10:00
Stenzek
6dd78b1593 MediaCapture: Fix default video codec on MacOS 2025-09-01 19:39:43 +10:00
AM_Erizur
91f25b602e Controller: Add Start/Select bindings for the Pop'n Controller (#3546)
The Pop'n Controller has two small white buttons on the top which represent the normal PS Digital Start/Select buttons. These are needed for disc swaps inside Pop'n Music 2/5/6 as the game requests that you press the Start button (not the Red button) to startup the new disc inserted.
2025-09-01 19:39:34 +10:00
Davide Pesavento
6a0249b039 Qt: Hide game list vertical header (#3545)
Got lost in the refactoring in 5f8716a9f0.

Also remove two no-op function calls.
2025-09-01 19:20:30 +10:00
Davide Pesavento
e933716d21 GameDB: Add sort name to several more game series (#3544) 2025-09-01 19:20:24 +10:00
Stenzek
44908fe7f4 Qt: Respond to DPR change in memory card editor 2025-08-31 23:37:58 +10:00
Stenzek
e89590be4f Qt: Avoid QPixmap -> QIcon conversion in getIconForGame() 2025-08-31 23:02:13 +10:00
Stenzek
d69935eef0 Qt: Fix warning 2025-08-31 20:36:42 +10:00
Stenzek
e32e64420e StringUtil: Fix logical errors 2025-08-31 20:36:42 +10:00
Stenzek
faa75991a0 Tests: Add more unit tests for common classes 2025-08-31 20:36:42 +10:00
Stenzek
db2f563db6 dep/googletest: Update to v1.17.0 2025-08-31 18:34:49 +10:00
Stenzek
b8952dafac Qt: Don't use memcard icon cache for window icon when scaled
It'll get scaled up and down again otherwise.
2025-08-31 15:03:34 +10:00
Davide Pesavento
3cb275d878 Qt: Use grid layout in cheat code editor (#3543) 2025-08-31 14:55:22 +10:00
Stenzek
e1c0753d3d Qt: Use path as tie breaker when sort titles equal 2025-08-31 14:54:51 +10:00
Stenzek
f2f06a746b FullscreenUI: Fix game properties title 2025-08-31 14:46:37 +10:00
Stenzek
5f8716a9f0 Qt: Simplify icon scaling
- Merge the two sliders into one.
- Scale the type icons as well as the game icons.
- Remove redundant slots.
2025-08-31 14:46:36 +10:00
Stenzek
48ac353210 Qt: Disable game list toolbar when no games found 2025-08-31 14:45:43 +10:00
Stenzek
abde6e4316 Qt: Move scaling helper to cpp file 2025-08-31 14:45:43 +10:00
Davide Pesavento
d499d8e2d8 Qt: Avoid a full reset when toggling show cover titles / localized titles 2025-08-31 13:05:41 +10:00
Davide Pesavento
6765b2feb0 Qt: Delete some redundant code in GameListModel
The settings are already modified by the caller.
The cover cache is cleared by refreshCovers().
2025-08-31 13:05:41 +10:00
Ariel Nogueira Kovaljski
b0dd909cf8 Qt: Resizable game list icons (#3539)
* Qt: Sharp Bilinear scaling for gamelist icons

* Single function for Sharp Bilinear scaling of icons

* Qt: Resizable game list icons [PoC]

* Fixed dynamic row scaling and size slider

* fix some duplicate lines

* made scaleMemoryCardIconWithSharpBilinear inline and added constant for icon padding

* removed resizeEvent from GameListListView
2025-08-31 12:37:20 +10:00
Stenzek
56e1713e27 GameList: Support scanning and caching relative paths 2025-08-31 12:32:15 +10:00
Stenzek
0a271cd7d5 StringUtil: Fix CompareNoCase for prefixes 2025-08-31 12:05:45 +10:00
Stenzek
7cd0d412eb Settings: Fix portable mode for AppImages 2025-08-31 12:05:45 +10:00
Stenzek
c1bb183caa FullscreenUI: Fix selecting disc set entries in list/grid 2025-08-31 01:40:18 +10:00
zkdpower
92c056107c Update the Simple-Chinese translation to latest. (#3540) 2025-08-31 01:33:10 +10:00
Stenzek
d77c92de33 FullscreenUI: Fix incorrect disc set window title 2025-08-31 01:32:38 +10:00
Stenzek
86333e9977 System: Fix crash on starting non-database game 2025-08-31 01:32:36 +10:00
Stenzek
dec06fa67d GameDatabase: Use once_flag for thread-safe initialization 2025-08-30 23:50:39 +10:00
Stenzek
2b519b1a94 GameDatabase: Check timestamp of discsets.yaml 2025-08-30 23:30:24 +10:00
Stenzek
e35b49d6e5 GameDB: More instances of sort titles 2025-08-30 23:30:22 +10:00
Stenzek
17872fec89 Qt: Fix compile warning 2025-08-30 22:06:11 +10:00
Stenzek
970f2ed9d6 GameDB: Fix lint errors 2025-08-30 22:06:11 +10:00
Stenzek
39fcbf7a19 GameDB: Add sort name to Crash/Final Fantasy games
Now they're shown in chronological order.
2025-08-30 21:52:57 +10:00
Stenzek
2ed8c024a3 Qt: Show English and localized names in tooltip 2025-08-30 21:41:54 +10:00
Stenzek
29327b3e22 GameDB: Add localized names
Sourced from a combination of manual lookups, the Redump database
and the Retool clone list metadata.
2025-08-30 21:33:47 +10:00
Stenzek
8bfc31a59c GameDatabase: Refactor disc sets
Store the sets in a separate file, and use pointers to reference instead
of string matching. This allows us to use the unsuffixed display names.
2025-08-30 21:33:47 +10:00
Stenzek
d00b897257 GameDB: Add sortName for games starting with 'The' 2025-08-30 21:33:47 +10:00
Stenzek
6e421b9d4a GameDB: Add unsuffixed display names
No more '(USA)' and '(Europe)' suffixes.
2025-08-30 21:33:46 +10:00
Stenzek
a8b4bb3fce GameDatabase: Add sort title, localized title, and save title fields 2025-08-30 21:33:46 +10:00
Stenzek
1aa92c7667 GameDB: Normalize multi-line strings 2025-08-30 21:33:46 +10:00
Stenzek
d13d3d89f9 Resources: Relocate PromptFont key glyphs to high range
Stops them clashing with full-width characters used in Japanese titles.
2025-08-30 21:33:45 +10:00
Stenzek
4738fceb43 Updater: Fix pause until mouse move on Mac 2025-08-28 22:23:31 +10:00
zkdpower
2182a0d84d Update the Simple-Chinese Translation to latest. 2025-08-28 22:22:54 +10:00
Anderson Cardoso
f6fd1e9822 Atualização Português do Brasil (#3538)
Atualizado para a última versão
2025-08-28 22:21:01 +10:00
Stenzek
835390fa99 Cheats: Make message OSD key consistent 2025-08-27 22:31:24 +10:00
GregoireLD
2c28e457bc Updater Application Icon Update (#3535)
* Update Updater icons

* Small correction

* Shadow correction

* Box correction
2025-08-27 22:27:44 +10:00
AnthonyRyuki
7f36401145 Update duckstation-qt_it.ts (#3534) 2025-08-27 22:26:57 +10:00
Ariel Nogueira Kovaljski
b0a63f95c9 Qt: Sharp Bilinear scaling for memcard icons (#3536) 2025-08-27 22:18:46 +10:00
Davide Pesavento
f303d57447 GameDB: Disable auto analog mode on several SMT games (#3532) 2025-08-26 17:32:41 +10:00
zkdpower
c76a8911d2 Update the Simple-Chinese Translation to latest. (#3533) 2025-08-26 17:32:05 +10:00
Davide Pesavento
a46e43fb7e GameDB: Enable PGXPPreserveProjFP for Ghost in the Shell (#3531)
And add AnalogController to the NA version, the left stick works just fine.
2025-08-26 17:31:54 +10:00
Stenzek
87f2c54ddd FullscreenUI: Unify Prefer GLES option name 2025-08-26 17:31:22 +10:00
Stenzek
e5fd12acb3 Qt: Disable game widget while system is starting 2025-08-25 21:29:34 +10:00
Stenzek
eedf417f23 CMake: Add possible missing include directory 2025-08-25 21:29:34 +10:00
Stenzek
63350c3d83 GPU/HW: Fix uninitialized pipeline fields 2025-08-25 21:29:33 +10:00
Stenzek
de39ff5e9b GPUDevice: Fix ROV support being disabled
Regression from 6e926041e5
2025-08-25 21:29:33 +10:00
Ariel Nogueira Kovaljski
2bd7fe8786 Qt: Disable column sorting indicator and adjust labels in memcard editor (#3528) 2025-08-25 21:29:11 +10:00
Davide Pesavento
f0c0ca3e09 GameDB: Fix metadata for Nightmare Creatures I & II 2025-08-25 21:28:53 +10:00
Davide Pesavento
7c398c4a99 GameDB: Turn PGXPPreserveProjFP off for Persona 2025-08-25 21:28:53 +10:00
Víctor "IlDucci
dcb6730cd8 Spanish (Spain) translation update 2025/08/25 (#3530)
- Translated latest changes.
2025-08-25 21:28:31 +10:00
Stenzek
1ef1a2d3f4 System: Add XZ save state compression
For when space is really at a premium.

Also use CompressHelpers to reduce duplication.
2025-08-24 15:10:28 +10:00
Stenzek
bbd150823c CompressHelpers: Tidy up and add Deflate 2025-08-24 15:10:28 +10:00
Davide Pesavento
2f39820305 GameDB: PGXP CPU mode for Nightmare Creatures II 2025-08-24 15:10:08 +10:00
Davide Pesavento
fb56c99993 GameDB: Disable widescreen in Fear Effect 2
FMV backgrounds as in the first game.
2025-08-24 15:10:08 +10:00
Davide Pesavento
24e496164e GameDB: Fix metadata for Darkstone
And genre for a couple other games.
2025-08-24 15:10:08 +10:00
Davide Pesavento
4e96fde477 GameDB: Disable disc speedup on MDEC for Diablo
Also add AnalogController, which is technically supported by the game,
but disable auto analog mode because the sticks don't do anything.
2025-08-24 15:10:08 +10:00
Davide Pesavento
b3d6b3708b GameDB: PGXP CPU mode for Azure Dreams 2025-08-24 15:10:08 +10:00
Stenzek
8533ab7f21 Qt: Fix editing second memory card 2025-08-24 01:49:57 +10:00
Stenzek
3b1dcde36f Qt: Force memory card editor icons to 32x32 2025-08-24 01:31:58 +10:00
Stenzek
d4b85ef6f1 InputManager: Increase macros per pad
No overhead to doing so now.
2025-08-23 22:48:06 +10:00
Stenzek
7d8e11d3c0 InputManager: Make macro button storage dynamic 2025-08-23 22:48:06 +10:00
Stenzek
a1f81d99a9 InputManager: Pack state in struct 2025-08-23 22:17:01 +10:00
Stenzek
b67bf20335 Mini: Fix missing format in FormatNumber() 2025-08-23 21:29:27 +10:00
Stenzek
fda28eaea0 DMA: Decrease slice size when MDEC is active/decoding
Prevents the FIFO getting too large, which causes too large chunks of
CPU time to be stolen and leads to games losing interrupts.

Strangely, this doesn't seem to affect performance in most games, except
the one that it fixes which has a 10-15% hit.

Fixes videos locking up in Cinema Eikaiwa Series Dai-1-dan - Tengoku ni
Ikenai Papa.

Also fixes hangs in Simple 1500 Series Vol. 57 - The Meiro.
2025-08-23 21:29:27 +10:00
Stenzek
6bef5a41aa OpenGLDevice: Disable PBOs on Panfrost driver
On RK3588, it's almost twice as fast to not use PBOs with the
software renderer.

Prop driver is still about 20% faster.
2025-08-23 19:14:42 +10:00
Stenzek
e551a96278 Qt: Don't disable debugger code view while running
Gets rid of the flicker.
2025-08-23 15:53:36 +10:00
Stenzek
da18a9508b Qt: Sync debugger breakpoint list with main
Simpler, less error prone.
2025-08-23 15:48:38 +10:00
Stenzek
686c4b81c1 Qt: Add custom code view for debugger
Branch arrows, syntax highlighting.
2025-08-23 15:39:14 +10:00
Stenzek
e907bbf831 Qt: Use a delegate to lazily resize/render icon pixmaps 2025-08-23 14:53:02 +10:00
Ariel Nogueira Kovaljski
645344b8ff Animated icon in memcard editor (#3526) 2025-08-23 14:44:27 +10:00
Stenzek
19f17007ec GameDB: Max speedup cycles for Driver/Driver 2 2025-08-23 13:18:40 +10:00
Stenzek
80fcd14a26 CPU/Recompiler/RISCV64: Replace lwu with lw in a couple of places
Consistency.
2025-08-23 13:09:36 +10:00
Stenzek
7de367fc2b CPU/Recompiler: Remove unused function pointer 2025-08-23 13:00:46 +10:00
Stenzek
34e0eab9f1 CPU/Recompiler: Check downcount in interpret block
Fixes application locking up with CDS=Max in Driver.
2025-08-23 12:59:29 +10:00
Stenzek
6e926041e5 GPUDevice: Move options to create flags
And add prefer-GLES-context as a config setting, instead of
environment variable.
2025-08-20 23:07:56 +10:00
Stenzek
c1d0cf3906 GameDB: Titan Wars overrides
Game's CD code appears to be super dodgy, and relies on ack timing
being varingly significantly higher than the average on console.

If seeks are too fast, the game will crash too.

Underclocking by 5% apparently makes it run consistently.
2025-08-20 23:07:56 +10:00
Stenzek
6e864a36ed GameDatabase: Allow CPU overclock override 2025-08-20 23:07:56 +10:00
Stenzek
86006e3d0c System: Apply setting restrictions before gamedb
Allows overriding of more options.
2025-08-20 23:07:56 +10:00
Davide Pesavento
826eff35e8 GameDB: Set max speedup cycles to 70k for Resident Evil 3 too (#3524)
Same issues as RE2.
2025-08-20 16:45:56 +10:00
Davide Pesavento
c1e71820d7 Qt: Disable UI for fast boot & disc speedup if marked incompatible in the DB (#3525) 2025-08-20 16:45:10 +10:00
bl@ck_m@ge
28db2be7f6 GameDB: Disable auto analog on more games (#3523) 2025-08-20 16:44:22 +10:00
Davide Pesavento
0ff6a5c647 GameDB: Add compatibility rating to a few games 2025-08-20 16:43:59 +10:00
Davide Pesavento
ae99e8d31d GameDB: Disable widescreen on Suikoden 2025-08-20 16:43:59 +10:00
Davide Pesavento
40383f58f7 GameDB: Increase max speedup cycles for Breath of Fire III 2025-08-20 16:43:59 +10:00
Davide Pesavento
d3024019bd GameDB: Increase max speedup cycles for Brave Fencer Musashi 2025-08-20 16:43:59 +10:00
bl@ck_m@ge
e00d6960d2 GameDB: Disable auto analog mode on Backstreet Billiards (#3521) 2025-08-20 16:43:44 +10:00
Stenzek
c7a4505ad8 Qt: Check screen bounds when restoring window positions
Ensure that the geometry is not off-screen.

It won't work on Wankland, and apparently doesn't support multiple monitors on X11.

So I'm just going to disable the whole thing on Linux, not just because my care
levels are practically non-existant, but also because I don't want to deal with
people moaning that their window manager's behavior is causing positions to
revert to the primary monitor. Just yolo it and hope for the best....
2025-08-20 16:43:12 +10:00
Davide Pesavento
4c349ffd44 GameDB: Disable widescreen and speedup on MDEC for Legend of Mana (#3520) 2025-08-19 00:10:12 +10:00
Davide Pesavento
f5d668fea9 GameDB: Disable auto analog mode on Armored Core games (#3519) 2025-08-19 00:09:58 +10:00
bl@ck_m@ge
0fe6928d62 GameDB: disable auto analog for some shoot'em up games (#3518) 2025-08-19 00:09:47 +10:00
Stenzek
4e39c3061f GameDB: Rollcage Stage II
PGXP-CPU to fix gaps in geometry.
2025-08-17 18:02:58 +10:00
Stenzek
bcb6f98cbd Common: Eliminate more static functions in headers 2025-08-17 13:15:56 +10:00
Davide Pesavento
d526818d33 GameDB: Disable auto analog mode on Shadow Tower (#3516) 2025-08-17 12:15:43 +10:00
Anderson Cardoso
921190ae1b Atualização Português do Brasil (#3517)
Atualizado para a última versão.
2025-08-17 12:15:34 +10:00
Stenzek
a8fdeb82d7 GameDB: Tighten DMA for Hot Wheels Turbo Racing
Apparently it helps, but I couldn't reproduce this myself.
2025-08-17 12:15:05 +10:00
Stenzek
1743bfa5fe Qt: Fix double translation in GameListWidget 2025-08-17 12:15:05 +10:00
zkdpower
1bc9f1efe7 update the Simple-Chinese translation to latest. (#3515) 2025-08-17 02:17:43 +10:00
Davide Pesavento
276211b9fc GameDB: Disable auto analog mode on Echo Night (#3514) 2025-08-16 15:56:13 +10:00
Davide Pesavento
f7c334bd46 GameDB: Disable PGXP and widescreen on Lunar games 2025-08-16 15:56:03 +10:00
Davide Pesavento
edf9b53bf7 GameDB: Disable PGXP and widescreen for Chrono Trigger 2025-08-16 15:56:03 +10:00
Stenzek
414ddf78cc Achievements: Display warning for unsupported achievements 2025-08-16 13:32:21 +10:00
Stenzek
95ccd7cea2 FullscreenUI: Update translation strings 2025-08-16 13:28:51 +10:00
Stenzek
7a359e54be GPU: Add separate scaling and FMV scaling options 2025-08-16 13:11:36 +10:00
Stenzek
006de3a6df Qt: Don't manually populate combos for enums 2025-08-16 13:05:53 +10:00
Davide Pesavento
962198f769 GameDB: Adjust crop area for Final Fantasy IV (#3510) 2025-08-15 19:54:13 +10:00
Davide Pesavento
13ce6469f2 GameDB: Disable widescreen on Alone in the Dark - The New Nightmare (#3509) 2025-08-15 19:53:59 +10:00
Davide Pesavento
f340bdb2bc CI: Bump actions/checkout to v5 (#3508) 2025-08-15 19:53:44 +10:00
bl@ck_m@ge
d9d3b6a658 GameDB: disable auto analog mode for Pepsiman (#3511) 2025-08-15 19:53:07 +10:00
Connor McLaughlin
8597873330 SDLInputSource: Fix DirectInput 2025-08-15 01:02:23 +10:00
Stenzek
327e9b5ce0 XInputSource: Set initial state on connection
Instead of after polling.
2025-08-13 16:39:01 +10:00
Stenzek
c0c022591c System: Synchronize input binding state on startup
This means that buttons which are pushed should register as pushed when
the system starts, rather than requiring them to be released and pressed
again.

Hopefully will allow passthrough of controllers that ground/press button
combinations to indicate the type of controller present.
2025-08-13 16:39:01 +10:00
Stenzek
33b3a6efda InputSource: Support querying current values 2025-08-13 16:39:01 +10:00
Stenzek
5bdcde76ab Qt: Expose advanced SDL options 2025-08-13 16:39:01 +10:00
Stenzek
54ab073f1a SDLInputSource: Add options for XBox HIDAPI/rawinput 2025-08-13 16:39:01 +10:00
Stenzek
09a3c99c3b AudioStream: Fix crash with timestretch disabled 2025-08-13 16:39:01 +10:00
Davide Pesavento
0a53bc47c3 Qt: Remove redundant layout from AchievementSettingsWidget 2025-08-12 21:48:24 +10:00
Davide Pesavento
0fc9de781f Qt: Fix crash toggling achievements in per-game settings 2025-08-12 21:48:24 +10:00
Stenzek
47e8d90e25 GPU: Fix screenshot size when showing VRAM 2025-08-12 00:33:59 +10:00
Stenzek
a2c015b907 GameDB: Disable WS/PGXP on 2D Final Fantasy games 2025-08-11 22:39:01 +10:00
Stenzek
fc129a9733 GameDB: Alien Resurrection
Needs PGXP-CPU for gaps in geometry.
2025-08-11 13:20:04 +10:00
Stenzek
cdd0086c54 Qt: Fix toggling read/write breakpoints 2025-08-11 12:10:14 +10:00
Davide Pesavento
9576a3adf1 Achievements: Fix "beaten" condition (#3506)
Apparently there are sets (e.g. Colin McRae Rally) with zero
progression achievements.
2025-08-11 12:10:01 +10:00
Davide Pesavento
de2d6d1aa0 Qt: More accurate game list column width estimation (#3505)
Three main changes:
1. Use the pixel metrics of the style instead of hardcoded values.
2. Account for the potential sort indicator in the column header.
3. In the two "Size" columns, the largest numerical value does not
   necessarily result in the widest text string, so just use the
   value 8888.88 to estimate the width (we assume that 8 is the
   widest digit, which is true for many proportional fonts).
2025-08-11 12:09:52 +10:00
Stenzek
c519d3ca76 GameDB: Add analog joystick to supported games
Data from manual testing and https://docs.google.com/spreadsheets/d/11xMh5utlKDukC3sWWQUUWPj4NSrJH5ouvOsHFRC_egs/edit?usp=sharing
2025-08-10 14:41:00 +10:00
Stenzek
2a2a011854 FullscreenUI: Improve title padding of achievements
Need to redo this whole dialog's layout, but this'll do for now.
2025-08-09 21:19:43 +10:00
Davide Pesavento
d65c8a3073 Achievements: Keep track of the earliest unlocked win condition (#3504)
For sets that have more than one win condition, e.g. RE2.
2025-08-09 18:01:01 +10:00
Stenzek
9b99d997f5 Achievements: Fix display of game completion date 2025-08-09 17:03:50 +10:00
Davide Pesavento
b75be05971 Achievements: Fix counting progression achievements (#3503) 2025-08-09 16:40:31 +10:00
Stenzek
a84d583c42 CI: Missed one workflow 2025-08-09 16:40:10 +10:00
Stenzek
7830a6d236 Deps: Bump to SDL3 3.2.20 2025-08-09 13:53:26 +10:00
Davide Pesavento
a5c61383a8 GameDB: Disable disc speedup on MDEC for Star Ocean - The Second Story 2025-08-09 12:47:36 +10:00
Davide Pesavento
4e662f1fff GameDB: Add compatibility rating to a couple of games 2025-08-09 12:47:36 +10:00
Davide Pesavento
474d5dc9db GameDB: Delete obsolete comment
Works fine for me with fast boot and even with maximum disc speedup.
2025-08-09 12:47:36 +10:00
Davide Pesavento
2f8460b90c GameDB: Disable disc speedup on MDEC for Chrono Cross 2025-08-09 12:47:36 +10:00
Davide Pesavento
1984d8c85b GameDB: Disable widescreen for Arc the Lad II 2025-08-09 12:47:36 +10:00
KamFretoZ
20e9b8d271 Qt: Fix buffer size help text (#3501) 2025-08-09 12:47:16 +10:00
Stenzek
42dc5e416d CI: Fix PR builds failing 2025-08-09 12:46:45 +10:00
Stenzek
09e785555d Qt: Fix updater download size display 2025-08-08 23:54:39 +10:00
Stenzek
45a2257436 CMake: Update version requirements 2025-08-08 23:54:39 +10:00
Stenzek
5fc4fbcf36 Qt: Improve display of version in updater 2025-08-08 23:37:25 +10:00
Stenzek
aa2a0cddb5 Data: Update SDL game controller database 2025-08-08 23:32:33 +10:00
Stenzek
e38039873e Achievements: Infer and display beaten/completed time 2025-08-08 23:32:33 +10:00
Davide Pesavento
5c48f853da GameDB: Fix cropping in Tomb Raider 4 & 5 (#3500) 2025-08-08 23:15:26 +10:00
KamFretoZ
ebbc1e98b6 Qt/Updater: Move Download Size indicator to the top (#3499) 2025-08-08 23:15:08 +10:00
Stenzek
edd63dfd9c Qt: Remove now-unused resize column helpers 2025-08-07 21:26:40 +10:00
Stenzek
670027107e Qt: Use header resize mode for disc windows 2025-08-07 21:26:40 +10:00
Stenzek
93d6fc64da Qt: Use header resize mode for memory card editor 2025-08-07 21:26:40 +10:00
Stenzek
c6c8039211 Qt: Use header resize mode for settings panels 2025-08-07 21:26:40 +10:00
Stenzek
bb7833168e Qt: Use header resize mode for memory scanner 2025-08-07 21:03:06 +10:00
Stenzek
73f326cd75 Qt: Use header resize mode for game list column widths
Simpler code, no need for workarounds in showEvent() either.
2025-08-07 21:00:22 +10:00
Stenzek
76fdbb0b38 Qt: Add tooltips for more fields in game list 2025-08-07 20:49:46 +10:00
Stenzek
a080228ee5 Qt: Don't reset model for every scanned game
Make the UI a little more responsive.
2025-08-07 20:49:46 +10:00
Davide Pesavento
2669b026d7 Qt: Remove obsolete comment
The logic was changed in 281119b812
2025-08-07 20:49:36 +10:00
Davide Pesavento
bc908aa4cc GameDB: Adjust crop area for Silent Hill 2025-08-07 20:49:36 +10:00
Stenzek
d2caabd04a Qt: Fix exit on separate window close with FSUI active 2025-08-03 15:15:47 +10:00
Stenzek
a2222d805b Qt: Fix inability to exit with HC mode active 2025-08-03 15:15:47 +10:00
Stenzek
501380ec7c Achievements: Split up overlay setting
Split into challenge indicator modes, leaderboard trackers, and progress
indicators.
2025-08-03 15:15:47 +10:00
Stenzek
e98871ad47 Settings: Remove middle padding
Why did I do this...
2025-08-03 12:27:14 +10:00
Stenzek
5c682d2325 ImGuiOverlays: Frame time history is aligned 2025-08-02 17:44:53 +10:00
Stenzek
628e41f849 ImGuiManager: Don't render when skipping present
Fixes very slow scrolling in save state selector when fast forwarding,
and generally just giving a "true" DeltaTime is probably a good thing.
2025-08-02 14:41:01 +10:00
Stenzek
fe11c658ee ImGuiOverlays: Fix save state selector out-of-order drawing
Specifically the animated background appearing in front of the
thumbnails.
2025-08-02 14:41:01 +10:00
Stenzek
be48e5c681 dep/imgui: Demo window should not enabled 2025-08-02 14:41:01 +10:00
Stenzek
143ae49f2c AudioStream: Use larger target size only when intentionally running slow
Fixes buffer underruns at fast or slow speed settings.
2025-08-02 14:41:01 +10:00
Stenzek
d3f04dcda9 AudioStream: SIMD averaging window calculation 2025-08-02 14:15:43 +10:00
Stenzek
9b4698d48c AudioStream: Back off resets that don't pass threshold over time
That way a very occasional lag/overflow doesn't cascade into
unnecessary tempo adjustment.
2025-08-02 14:15:41 +10:00
Stenzek
f464d42be5 AudioStream: Fix glitches when disabling fast-forwarding
Usually happened at high frame rates.
2025-08-02 13:33:52 +10:00
Stenzek
6c9d339855 PerformanceCounters: Align to 4 elements
And use minv()/maxv().
2025-08-02 13:33:52 +10:00
Stenzek
b81dfa205c GPU: Simplify screenshot size calculation
And don't miscalculate it for some games.
2025-08-01 19:50:27 +10:00
Stenzek
4644db00ea GPU: Fix screenshot size in uncorrected mode 2025-07-31 23:30:07 +10:00
Stenzek
a27fedae86 Qt: Various fixes to memory scanner UI
Reduce repetition in formatting.
Make formatting consistent between saving/loading watches.
Fix description display.
2025-07-30 22:39:53 +10:00
Stenzek
02a1ccbcdc Qt: Persist memory scanner watch list across instances
i.e. save it to a file.
2025-07-30 22:21:35 +10:00
Stenzek
52d9f73f98 Misc: Replace a bunch of static qualifiers with inline
Allows deduplication, shaves a couple percent off the debug binary size.
Release binary size difference is negligible.
2025-07-30 21:43:12 +10:00
Stenzek
c8dd9995ec GameDatabase: Remove redundant SetRymlCallbacks() 2025-07-30 21:12:38 +10:00
Stenzek
fef553ff12 Qt: Display 'First Value' in memory scanner 2025-07-30 21:08:38 +10:00
Stenzek
a9ce005a20 Qt: Fix maximized state not saving to config
Restores the "old" position when restoring again. Except on Wayland,
where nothing works.
2025-07-30 20:30:55 +10:00
Stenzek
3768940fbb Qt: Fix assertion on shutdown after resize 2025-07-30 20:18:42 +10:00
Stenzek
690f843e2a Qt: Auto switch between any/changed values in memory scanner 2025-07-29 23:10:25 +10:00
Stenzek
5ed7961390 Qt: Refuse to start in known broken environments 2025-07-29 23:10:25 +10:00
Stenzek
30df16cc76 Scripts: Remove PKGBUILD
I originally provided this an alternative to the broken AUR packages.

However, it seems that Arch users would rather use broken packages and
keep complaining to me instead of their packager. I specifically forbid
packages for DuckStation (see README.md), and there's no way to request
removal of these packages without handing my details over to a
distribution I want nothing to do with.

So this is step one. Next step will be removing Linux support entirely,
because I'm sick of the headaches and hacks for an operating system that
only compromises 2% of the userbase, and I don't even use myself. But I'm
hoping the Linux community will be reasonable, because as someone giving
up my free time and not being compensated in any way, I shouldn't have
to deal with this.

Just grep the source for "wayland" and you'll see what I mean.
2025-07-29 23:10:22 +10:00
Stenzek
ce53e29997 Qt: Fix possible crash on shutdown 2025-07-29 20:56:58 +10:00
Stenzek
e5593c973f CI/Flatpak: Hopefully fix build cache
If this doesn't work, just going to remove it completely. So far past
the point of caring.
2025-07-29 17:37:09 +10:00
Stenzek
acf78970c6 Qt: Create main window before starting EmuThread
Stops signals such as achievements active changed being lost.
2025-07-29 17:23:18 +10:00
Stenzek
f569448ea1 System: Centralize pause checks 2025-07-29 17:23:18 +10:00
Davide Pesavento
fbca692629 GameDB: Set max speedup cycles to 70000 for Resident Evil 2 (#3496)
Freezes after (some) door transitions otherwise.
2025-07-29 17:23:05 +10:00
Davide Pesavento
e821b13ba2 GameDB: Tweak compat settings for Parasite Eve 2 (#3492)
We no longer need to disable read speedup all the time thanks to the
new DisableCDROMSpeedupOnMDEC trait. Unfortunately we still have to
increase the max speedup cycles to avoid other issues ranging from
the game simply freezing to audio glitches during area transitions.
2025-07-29 17:22:52 +10:00
Stenzek
188be7de05 Deps: Revert Harfbuzz to 11.2.1
Match Qt bundled version. Might help with crashes I can't reproduce in
text shaping.
2025-07-29 13:50:42 +10:00
Stenzek
042930d735 FullscreenUI: Fix focus loss with grid/list button 2025-07-28 20:42:50 +10:00
zkdpower
fac47b135a Update the Simple-Chinese translation to latest. (#3495) 2025-07-28 20:42:12 +10:00
Davide Pesavento
168b80dd49 Qt: Add tooltips to game list 2025-07-27 21:31:30 +10:00
Davide Pesavento
df65879d06 GPU: Fix typo 2025-07-27 21:31:30 +10:00
Stenzek
300d158320 FullscreenUI: Fix clock position in pause menu 2025-07-27 13:45:46 +10:00
Stenzek
5bfe5cf121 dep/imgui: Remap non-breaking space to space
MacOS likes to use them for formatting.
2025-07-27 13:45:08 +10:00
Stenzek
351f67a227 CMake: Use -g1 for Release builds 2025-07-27 13:03:55 +10:00
Davide Pesavento
70d6a2d1af Achievements: Revert back to long date format for unlock/submit time 2025-07-27 13:03:38 +10:00
Davide Pesavento
71591e8219 Qt: Use localized date/time formatting in a few more places 2025-07-27 13:03:38 +10:00
Stenzek
0de3ffab0c Data: Update SDL game controller database 2025-07-27 02:17:18 +10:00
Stenzek
36718c6e99 CMake: Force debug symbols on Linux
Fixes crash backtraces.
2025-07-27 02:15:49 +10:00
Stenzek
634fac4410 CrashHandler: Fix recursive backtrace on Linux 2025-07-27 02:01:58 +10:00
Stenzek
2b18df0910 MediaCapture: Don't crash if video codec supports 0 formats 2025-07-27 01:36:13 +10:00
Stenzek
44237146ef FullscreenUI: Fix remaining fixed date/time formatting locations 2025-07-27 01:25:08 +10:00
Stenzek
29e92705c4 FullscreenUI: Add option to hide grid view labels
Also handle titles that span multiple lines.
2025-07-26 23:24:02 +10:00
Stenzek
96c224497b Qt: Use selected language locale for formatting
But check the prefix against the system locale, so that e.g. en can use
the system country.
2025-07-26 22:33:10 +10:00
Stenzek
c82351a14a Qt: Implement 'System Language' language option 2025-07-26 22:33:10 +10:00
Stenzek
7f5f90338f Qt: Use application locale in most places 2025-07-26 22:33:10 +10:00
Stenzek
ef320c62a3 Qt: Cache app locale object 2025-07-26 22:33:10 +10:00
Stenzek
f91ee34fa4 Qt: Merge qttranslations.cpp with qthost.cpp
No need to keep it separate anymore since we're not precalculating glyph
ranges.
2025-07-26 22:33:10 +10:00
Stenzek
9b353f841e Misc: Use host locale formatting for dates
Fixes achievement unlocks and lasted played times being shown in US
format.
2025-07-26 22:33:09 +10:00
Stenzek
1c8699b8a0 Host: Add FormatNumber()
Formats the argument according to the system locale, instead of C.
2025-07-26 22:33:09 +10:00
Stenzek
e82218f823 Qt: Fix changing language while game running 2025-07-26 22:33:09 +10:00
Stenzek
47fe487c2e README: Add migration instructions for Flatpak->AppImage 2025-07-26 17:36:50 +10:00
Stenzek
83d521f3d8 CMake: Drop Flatpak workarounds
No longer needed since it is using self-contained.
2025-07-26 17:36:50 +10:00
Stenzek
6c4300c6c7 CI/Flatpak: Simplify deps build
I'll probably drop it in the future since there was only one or two
people who indicated that they're using it. But at least now I don't
have another file I need to keep up to date.

So consider the Flatpak package as deprecated.
2025-07-26 17:36:50 +10:00
Stenzek
3426bcdc71 Deps: Update for July 2025
SDL3 3.2.18
harfbuzz 11.3.2
libjpeg-turbo 3.1.1
libpng 1.6.50
libwebp 1.6.0
libzip 1.11.4
2025-07-26 17:36:50 +10:00
Stenzek
ad4a909aa4 FullscreenUI: Fix incorrect parent directory button 2025-07-26 14:03:43 +10:00
Stenzek
37efd34a99 Qt: Drop renderer option from setup wizard
No need when automatic renderer exists.
2025-07-26 14:03:43 +10:00
Davide Pesavento
d63ae9715f GameDB: Add missing controllers and metadata for The Legend of Dragoon 2025-07-26 14:03:32 +10:00
Davide Pesavento
6e63ceb5a2 GameDB: Add missing metadata for Koudelka
And fix the EU and NA release dates
2025-07-26 14:03:32 +10:00
Víctor "IlDucci
d28c0a00b4 Spanish (Spain) update 2025-07-25 (#3490)
- New strings have been translated.
- Corrected a typo in the "seconds" counter.
- Other minor changes.
2025-07-26 14:03:07 +10:00
Stenzek
d0e00178c3 Qt: Fix fullscreen action enabled on startup 2025-07-24 22:05:24 +10:00
Stenzek
a660c13625 System: Always adjust video size for capture
Fixes auto resolution size with non-multiple-of-4 window sizes.
2025-07-24 21:47:09 +10:00
Stenzek
22fb032f91 GPUThread: Fix very rare or impossible FIFO corruption
If the buffer wraps around once, and the GPU thread does not execute any
commands before the CPU thread reaches the end again, it could lose one
buffer's worth of commands.

Also don't keep incrementing the work count while this is happening.
Super unlikely unless a ton of data is being pushed through the FIFO.
2025-07-24 21:08:53 +10:00
Stenzek
13233cc82e PostProcessing/GLSL: Fix compile error with interface blocks 2025-07-24 12:08:53 +10:00
Stenzek
0522b6ffb5 CDImagePPF: Ignore out-of-range sectors 2025-07-23 22:00:13 +10:00
Stenzek
830b812fc7 GameDB: Set max speedup cycles to 40000 for FF8 2025-07-23 22:00:10 +10:00
Stenzek
fe51439c4b GameDB: Set DisableCDROMSpeedupOnMDEC for a couple of games 2025-07-22 23:04:01 +10:00
Stenzek
b6b1a5e33c CDROM: Add option to disable speedup on MDEC/FMVs 2025-07-22 23:03:22 +10:00
Stenzek
4f1af2f6eb Qt: Increase debugger column size 2025-07-22 22:16:25 +10:00
Stenzek
46cf8e68cd SPU: Display reverb environment in debug window 2025-07-22 22:16:25 +10:00
Stenzek
932104c581 SPU: Fix VU meter display when scrolling 2025-07-22 22:16:25 +10:00
Nahuel Gaitan
56b5b337aa PSFLoader: Fix recursive _lib loading (#3489) 2025-07-22 21:08:45 +10:00
Stenzek
46a071f3e7 Qt: Fix disabling of sprite texture filtering option 2025-07-22 20:30:34 +10:00
Stenzek
2e56f5d3ae Qt: Fix another usage of QObject::disconnect() 2025-07-22 20:28:53 +10:00
Stenzek
a5826ea6ae Qt: Hide apply image patches in game settings
Doesn't makes sense, because game settings are applied after
identification.
2025-07-22 20:18:20 +10:00
Davide Pesavento
a34aee68a7 Declare all namespace-scope constants as inline
This is the idiomatic way since C++17
2025-07-22 19:29:37 +10:00
Davide Pesavento
69da2df8e9 Make all single-argument constructors explicit 2025-07-22 19:29:37 +10:00
Davide Pesavento
9ab4e4d70c Qt: Add game list button to toggle game icons (#3488) 2025-07-21 19:05:04 +10:00
Stenzek
51ce5351d7 CI: Pin AppImageTool version
If it breaks something, I kinda don't care. Not worth it for 2% of
users..
2025-07-21 18:51:34 +10:00
Stenzek
cdd054702c CPU: Log on break exception without PCDrv 2025-07-20 21:10:00 +10:00
Stenzek
a5b46f7676 MediaCapture: Fix use-after-free when starting 2025-07-20 21:09:46 +10:00
Stenzek
161637e3b7 Qt: Disconnect safe mode widget on recreate 2025-07-20 16:58:36 +10:00
Stenzek
7c01bde94e Log: Remove redundant channel 2025-07-20 16:58:24 +10:00
Stenzek
9321a32d39 Qt: Fix startup cancellation on window close 2025-07-20 14:21:42 +10:00
Stenzek
f65ca0dab3 FullscreenUI: Don't round achievements inner progress bars 2025-07-20 14:21:42 +10:00
Stenzek
9e17e38c9d FullscreenUI: Custom draw loading screen 2025-07-20 14:21:42 +10:00
Stenzek
3199617124 FullscreenUI: Use layout scale for loading screen 2025-07-20 14:21:42 +10:00
Stenzek
df9506fbf6 FullscreenUI: Center loading screen logo 2025-07-20 14:21:42 +10:00
Stenzek
311e93fae4 FullscreenUI: Use game path for loading screen image
Makes it work with custom titles.
2025-07-20 14:21:42 +10:00
Stenzek
4440ae3b78 GPUThread: Store copy of game info
Don't save it in FullscreenUI.
2025-07-20 14:21:42 +10:00
Stenzek
5fd61b6e3a Qt: Fix disc icon being used for games without icons 2025-07-20 14:21:42 +10:00
Stenzek
df432c6c64 Qt: Fix crash booting unscanned games 2025-07-20 14:21:42 +10:00
shikulja
47d44701fe Update Russian translation (#3486)
* Update Russian translation

* Update Russian translation

* Update Russian translation

* Update Russian translation
2025-07-20 14:21:24 +10:00
Stenzek
a8506f4708 Qt: Disable more actions while system starting 2025-07-19 18:16:15 +10:00
Stenzek
ad53fc2345 Qt: Fix fullscreen UI shutdown on language change 2025-07-19 18:16:15 +10:00
Stenzek
278614a415 FullscreenUI: Display game cover when loading 2025-07-19 18:16:15 +10:00
Stenzek
75314f79de FullscreenUI: Localize base strings (e.g. dir selector) 2025-07-19 18:16:15 +10:00
Stenzek
63e0acbe9c FullscreenUI: Fix held colour in popup menus 2025-07-19 17:20:37 +10:00
Stenzek
3453c897d1 FullscreenUI: Add native cover download 2025-07-19 17:20:37 +10:00
Stenzek
a9862461f3 FullscreenUI: Add modal progress callback 2025-07-19 17:07:34 +10:00
Stenzek
c922893b6f GameDB: Bump MGS max speedup cycles to 100k
Causes screen flickering at 80k, game crash at 70k, still some
flickering at 90k.
2025-07-19 15:11:04 +10:00
Stenzek
3e232b76b3 Qt: Improve more window close behaviour
- Closing FSUI display window without a game running should not exit the
  application.
- Closing display window with FSUI started should exit the application
  in nogui mode.
2025-07-19 14:34:30 +10:00
Stenzek
8bd493eae0 Qt: Re-update main window geometry on nogui exit
Also fix the game list refresh executing on the incorrect thread.
2025-07-19 13:46:33 +10:00
Davide Pesavento
1b56940ad0 Qt: Update menu and toolbar state when toggling fullscreen via double click
Amends 1289e045b9
2025-07-19 12:14:02 +10:00
Davide Pesavento
f446e24b20 Qt: Don't exit fullscreen when switching to game list with RenderToSeparateWindow
Amends 24a16db437
2025-07-19 12:14:02 +10:00
Davide Pesavento
4c12dc8ab9 Qt: Don't enable window size menu if system isn't running (#3484) 2025-07-19 12:10:34 +10:00
Stenzek
24a16db437 Qt: Handle fullscreen cases on MacOS
If the user exits fullscreen with the window button, restore
render to main.
2025-07-19 01:04:22 +10:00
Stenzek
b545671d67 MetalDevice: Retain references to layer
Apparently the allocate method returns +0 references.
2025-07-19 01:04:19 +10:00
Stenzek
210f492487 MetalDevice: Remove pipeline cache
It seems to be broken when appending using from-source created
libraries.

Similar issues have been described in:
- https://bugreports.qt.io/browse/QTBUG-114338
- https://bugreports.qt.io/browse/QTBUG-108216
2025-07-19 01:04:19 +10:00
Stenzek
05dcb17334 Qt: Fix unused lambda capture warning 2025-07-18 20:29:44 +10:00
Stenzek
6615fc79d6 Qt: Work around autouic bug causing unnecessary recompiles 2025-07-18 20:29:24 +10:00
Stenzek
a002fd2672 Qt: Include moc sources in main source
Saves compiling a bunch of files with MSBuild.
2025-07-18 19:59:13 +10:00
Stenzek
fc613a5267 Qt: Fix incorrect placeholders in translations 2025-07-18 18:04:46 +10:00
Stenzek
9e15fe176c CI: Check placeholders in translation strings 2025-07-18 18:04:22 +10:00
Stenzek
9442ba74af Qt: Remove window state save
Instead, explicitly save the toolbar area. Also adds it to the context
menu.
2025-07-18 17:42:01 +10:00
Stenzek
b2ad193178 Qt: Store window geometry in human-readable form 2025-07-18 17:42:01 +10:00
Stenzek
6b969a0b94 Qt: Refactor and remove multiple sources of truth for render-to-main 2025-07-18 16:14:29 +10:00
Stenzek
0f2ef98747 Qt: Turn cover downloader into a non-modal window
Same as the others.
2025-07-18 13:06:01 +10:00
Stenzek
3f2b6995bc Qt: Fix timestamps in log window if file timestamps on 2025-07-18 12:46:58 +10:00
Davide Pesavento
1289e045b9 Qt: Make "Fullscreen" toolbar button and menu item checkable 2025-07-18 12:44:20 +10:00
Davide Pesavento
2f13538cc0 Qt: Fix game list icons when toggling disc set merging
Also, make sure we call beginFilterChange() in the proxy model
as mentioned in the Qt docs.
2025-07-18 12:44:20 +10:00
Davide Pesavento
4b5be29eb2 Qt: Hide GameListWidget buttons instead of disabling them 2025-07-18 12:44:20 +10:00
Davide Pesavento
21f44b3782 Qt: Refactor GameListWidget tool buttons and corresponding menu actions 2025-07-18 12:44:20 +10:00
Davide Pesavento
01b81c74ef Qt: Fix crash on triggering certain actions before display widget is created (#3482) 2025-07-18 12:43:45 +10:00
Stenzek
67381754fa Qt: Fix game start flicker with hide-main-window checked 2025-07-17 21:46:05 +10:00
Stenzek
c6cb3cdd68 Qt: Update Korean translation by Hack茶ん 2025-07-17 21:46:05 +10:00
Stenzek
6ae334b30c Qt: Avoid wildcard disconnect
See https://bugreports.qt.io/browse/QTBUG-134610
2025-07-17 21:46:05 +10:00
Stenzek
4b62ccf2ff Qt: Redirect Qt messages to logger 2025-07-17 21:46:05 +10:00
Stenzek
6f65a15bb9 CrashHandler: Catch SIGABRT 2025-07-17 21:46:05 +10:00
Stenzek
9c81425043 Qt: Fix format strings in es-ES 2025-07-17 21:46:05 +10:00
Stenzek
2aaeaf6f99 Qt: Add missing event type check 2025-07-17 21:46:05 +10:00
Daniel Nylander
da6ba416c9 Updated Swedish translation (#3481) 2025-07-16 17:11:13 +10:00
Stenzek
a890902d5b Qt: Further eliminate redundant window shows
And remove a couple of hacks.
2025-07-16 17:10:31 +10:00
Anderson Cardoso
40b081c8ff Atualiazação Português do Brasil (#3480)
Atualizado para a última versão
2025-07-16 16:39:16 +10:00
Stenzek
b07998512e Qt: Refactor render window lifecycle
Remove multiple sources of truth, eliminate bugs in handling edge cases
when switching between modes.
2025-07-16 16:38:31 +10:00
Stenzek
a5e3f163a5 Misc: Make bitfield unions trivially copyable 2025-07-13 20:29:00 +10:00
Stenzek
8ca68a052a GPUDevice: Remove unused fields 2025-07-13 20:29:00 +10:00
Stenzek
5c7a599cad Qt: Couple of consistency fixes 2025-07-13 20:29:00 +10:00
Stenzek
cd77ace12a FullscreenUI: Fix going back to root directory on Linux 2025-07-13 20:29:00 +10:00
Stenzek
2dc25a07ac NeGconRumble: Remove unused fields 2025-07-13 19:55:38 +10:00
Stenzek
b93353647f Qt: Clear help text map on reload
Saves keeping messages around for pointers that are no longer valid.
2025-07-13 17:32:56 +10:00
Stenzek
8ef97b9b46 FullscreenUI: Sort unlocked achievements by unlock time 2025-07-13 17:29:52 +10:00
Stenzek
be867c815d FullscreenUI: Minor polish to achievements list 2025-07-13 17:29:37 +10:00
Stenzek
43543ddedc FullscreenUI: Improve icons in file selector 2025-07-13 16:54:54 +10:00
Stenzek
3bb67c785e D3DCommon: Load d3d12.dll dynamically 2025-07-13 16:31:49 +10:00
Stenzek
4ead72747b D3DCommon: Load dxgi.lib dynamically 2025-07-13 16:13:19 +10:00
Stenzek
0195b2886e D3DCommon: Load d3d11.dll dynamically 2025-07-13 16:12:44 +10:00
Stenzek
3928eaff54 D3DCommon: Load D3DCompiler dynamically 2025-07-13 16:11:59 +10:00
Stenzek
5e2e39f642 VulkanDevice: Use driver type enum for auto selection 2025-07-13 15:40:53 +10:00
Stenzek
792b72b955 Qt: Reenable WinPanel style for patches
Partial revert of 7eb2b07.

Looks much worse in Fusion/default style.
2025-07-13 15:33:21 +10:00
Stenzek
97a0f4669f ShaderGen: Fix use of reserved 'packed' keyword 2025-07-13 15:28:46 +10:00
Stenzek
1cad6389aa AnalogController: Fix flipped log message 2025-07-13 15:28:46 +10:00
Davide Pesavento
7eb2b07e39 Qt: Don't draw a frame if there are no patches 2025-07-13 15:27:29 +10:00
Davide Pesavento
d0c3f7d5a2 Qt: Reduce layout margins in postprocessing settings
And remove a redundant VBoxLayout
2025-07-13 15:27:29 +10:00
Davide Pesavento
0e9f116a2e Qt: Turn retroachievements.org into a hyperlink 2025-07-13 15:27:29 +10:00
Stenzek
2fad6478b4 CDImage: Include the WAV file's details when incompatible 2025-07-11 21:25:10 +10:00
Stenzek
2308c5ddc6 Qt: Check cache when getting game icon for window
Apparently forgot this...
2025-07-10 21:33:28 +10:00
Stenzek
9e319ff495 FullscreenUI: Avoid ID duplication in choice dialogs
If two items, e.g. discs happen to have the same display name.
2025-07-10 20:39:14 +10:00
Stenzek
00623ebf8b FullscreenUI: Fix rounding on widget grab rects 2025-07-10 20:37:37 +10:00
Stenzek
f21ab0b70a GPUDevice: Fix ARM GPU detection 2025-07-10 19:36:14 +10:00
Stenzek
13e4515118 GPU: Send read command in SW if stats are enabled
Won't do anything, but it does update the counter.
2025-07-10 19:30:35 +10:00
Stenzek
5d42bbc49f GameDB: Force software for X2 - No Relief
Lots of readbacks.
2025-07-10 19:29:50 +10:00
Stenzek
cd2d0503da System: Fix frame advance+runahead stepping 2 frames 2025-07-10 12:43:23 +10:00
Stenzek
e4e57c674d GPUDevice: Use driver type fields 2025-07-10 12:17:11 +10:00
Stenzek
ef26d5cb74 GPUDevice: Backport driver type detection 2025-07-09 22:17:14 +10:00
Stenzek
1e930c4063 ShaderGen: Drop DRIVER_V3D and DRIVER_POWERVR macros
They're not needed anymore.
2025-07-09 22:12:46 +10:00
Stenzek
cc3bc120a4 OpenGLContext: Prefer GLES over GL<3.2
Ends up having a larger feature set in GLSL.
2025-07-09 21:46:45 +10:00
Stenzek
63adf475d4 VulkanDevice: Avoid defaulting to Vulkan for V3D driver
Image copies are broken.

https://discord.com/channels/695640472202379425/695823554712698962/1392128815689629707
2025-07-09 21:20:43 +10:00
Stenzek
b9a9ea220e PostProcessing/FX: Don't try to compile for GL<3.2
No interface blocks or binding layouts. Get a better driver for gosh
sake.
2025-07-09 21:17:25 +10:00
Stenzek
80a689257c PostProcessing/GLSL: Support OpenGL 3.1 2025-07-09 21:16:43 +10:00
Stenzek
742cfcb12b ShaderGen: Emit location qualifiers for SPV without interface blocks
Required for GLSL post-processing with OpenGL 3.1.
2025-07-09 21:15:56 +10:00
Stenzek
2d29c63708 ShaderGen: Emit fallback functions for GLSL < 4.0 2025-07-09 21:15:10 +10:00
Stenzek
601173b01e ShaderGen: Add UseGLSLInterfaceBlocks() 2025-07-09 21:14:51 +10:00
Stenzek
f273dcff18 GameList: Fix possible bad optional unwrap in ApplyCustomAttributes() 2025-07-09 20:05:50 +10:00
Stenzek
6f3a6d7934 Qt: Remove unused includes 2025-07-09 20:05:50 +10:00
Davide Pesavento
1bf248b299 Qt: Swap order of read/seek speedup cycles in Advanced settings
To match the order in Console settings.
2025-07-09 20:05:31 +10:00
Davide Pesavento
a012d496ea Qt: Fix resetting per-game CDROM speedup and SIO settings
Amends d2c09dfaff and 0098c60ee8
2025-07-09 20:05:31 +10:00
Davide Pesavento
cacd174642 Qt: Rearrange log settings checkboxes 2025-07-09 20:05:31 +10:00
Davide Pesavento
002cb942bb Qt: Fix initial UI state of log timestamps checkboxes 2025-07-09 20:05:31 +10:00
Davide Pesavento
d8a267162d Qt: Set default button in settings and ISO browser (#3475) 2025-07-07 22:14:58 +10:00
zkdpower
9ba3129b67 Update the Simple-Chinese translation to latest. (#3474) 2025-07-07 22:12:44 +10:00
Davide Pesavento
041145d336 GameDB: Increase max read speedup cycles for Dino Crisis 1 & 2 (#3473)
Both games freeze almost immediately otherwise.

Also add AnalogController to the first game, but disable auto analog
mode because vibration is supported but the sticks don't do anything.
2025-07-07 22:12:29 +10:00
Davide Pesavento
3f7e5ca1cb Qt: Always connect the open folder button (#3472)
And make the line edit read-only instead of disabling it.
2025-07-07 22:12:07 +10:00
Stenzek
fb7772871c GameDatabase: Use string_view for disc sets
Avoid the allocations, apparently forgot this one.
2025-07-05 14:12:29 +10:00
Stenzek
0a267ce158 Common: Add more tests 2025-07-05 14:12:29 +10:00
Davide Pesavento
9b3a29fb5c GameDB: Increase max read speedup cycles for Castlevania - SotN (#3471)
Allows the game to progress past the first loading screen.
2025-07-05 13:02:45 +10:00
Davide Pesavento
ffe05c853f Increase max read speedup cycles for Breath of Fire IV (#3470)
* GameDB: Increase max read speedup cycles for Breath of Fire IV

Otherwise the game hangs before reaching the start menu.

* GameDB: Drop seek speedup setting already at its default value
2025-07-05 13:02:32 +10:00
Stenzek
7dcdff35cb Qt: Include 'Refresh Progress' button in achievement settings 2025-07-03 19:13:07 +10:00
Davide Pesavento
b08ca9430e GameDB: Disable read speedup in Spyro 2 & 3 (#3464) 2025-07-03 19:12:57 +10:00
Davide Pesavento
3e61a12b0e GameDB: Consistently use title case in genre 2025-07-03 19:12:40 +10:00
Davide Pesavento
66341a12d4 FullscreenUI: Swap file size and uncompressed size in game details 2025-07-03 19:12:40 +10:00
Stenzek
d4cf7f248c FullscreenUI: Fix default displayed value for FF volume 2025-07-02 20:46:50 +10:00
Stenzek
d852149809 FullscreenUI: Add icons to game list detail lines 2025-07-02 20:44:48 +10:00
Stenzek
38022afa25 FullscreenUI: Fix focus loss on F4 to switch view 2025-07-02 20:01:09 +10:00
zkdpower
8484170ece Update the Simple-Chinese translation to latest. (#3468) 2025-07-01 21:20:32 +10:00
Stenzek
c8087204c4 FullscreenUI: Fix highlighted option with 'None' background 2025-07-01 19:45:44 +10:00
Stenzek
ca322449da FullscreenUI: Add 'Compact Mode' for game list 2025-07-01 19:41:02 +10:00
Stenzek
0098c60ee8 SIO: Add debugging option to redirect to TTY
Until I bother to finish my sio branch...
2025-07-01 19:00:17 +10:00
Stenzek
d0f4f579e1 FullscreenUI: Add missing log timestamp preferences 2025-07-01 18:40:33 +10:00
Stenzek
2a6aa89efb FullscreenUI: Avoid more conflicts between emoji and PromptFont
By moving them to the unused range.
2025-07-01 18:38:18 +10:00
Stenzek
5b3e843b08 Qt: Separate window and file log timestamp options 2025-07-01 18:08:41 +10:00
Stenzek
eb503c4029 Qt: Fix 'Log To File' in Debug menu 2025-07-01 17:57:49 +10:00
Stenzek
f123677df4 Log: Fix file log timestamps always enabled 2025-07-01 17:57:38 +10:00
Stenzek
36518a8df5 Bus: Use log colour abstraction for TTY 2025-07-01 17:40:13 +10:00
Davide Pesavento
9e045755a6 FullscreenUI: Add missing std::move (#3467) 2025-06-30 11:49:55 +10:00
Stenzek
b35beb6f24 Qt: Update Korean translation by Hack茶ん 2025-06-30 11:49:24 +10:00
Stenzek
e4761823ad FullscreenUI: Fix fade on system reset/shutdown 2025-06-30 00:42:42 +10:00
Stenzek
518e0194bc MediaCapture: Fix compiler warning 2025-06-30 00:42:33 +10:00
Stenzek
0978e6ecee MediaCatpure: Ensure there are no gaps in sample time 2025-06-29 16:32:49 +10:00
Stenzek
a59b6357b3 MediaCapture: Don't repeat frame rate calculations 2025-06-29 16:30:26 +10:00
Stenzek
ebf5c9d0c1 MediaCapture: Fix HEVC encoding with Media Foundation 2025-06-29 14:20:06 +10:00
Stenzek
9d686f7baf Qt: Hide fullscreen combo if unsupported 2025-06-29 13:20:32 +10:00
Anderson Cardoso
d603e3bc0c Atualização | Idioma Turco (#3466)
* Atualização Português do Brasil

Atualizado para a última versão.

* Atualização | Idioma Turco

Atualizado para a última versão.
Validado por um nativo.
--
Update to the latest version. 
Validated by native speaker.
2025-06-29 13:20:17 +10:00
Stenzek
355c17bde9 FullscreenUI: Fix fade on system start/stop 2025-06-28 12:46:27 +10:00
Stenzek
376a2e8d4d FullscreenUI: Fix crash when loading/saving state
Also fix fade transition.
2025-06-28 12:43:29 +10:00
Stenzek
33b1e82e34 Achievements: Fix imgui assertion in leaderboard view 2025-06-28 12:31:19 +10:00
Stenzek
71a60f95df Data: Update SDL game controller database 2025-06-27 23:41:39 +10:00
Stenzek
5df28de340 Qt: Fix hotkey category heading size on MacOS 2025-06-27 23:40:38 +10:00
Víctor "IlDucci
866b77e229 Spanish (Spain) 2025-06-27 translation update (#3465)
- Translated all new strings.
2025-06-27 21:48:50 +10:00
Stenzek
1b740efc10 FullscreenUI: Avoid ID clash in controller settings 2025-06-27 21:48:00 +10:00
Stenzek
889df1d8be VulkanDevice: Only reset descriptor pool if used
Save a tiny fraction of overhead.
2025-06-27 19:47:15 +10:00
Stenzek
2bff2098a1 FullscreenUI: Fix returning to wrong window after back 2025-06-27 17:14:07 +10:00
Stenzek
ebf97c26b8 dep/imgui: Sync to 5ee9c2a
And fix a bunch of local bugs, including random large-font-size glyphs.
2025-06-27 17:07:45 +10:00
Davide Pesavento
280c0036eb FullscreenUI: Change a few icons for improved consistency (#3463) 2025-06-27 17:07:24 +10:00
Stenzek
281119b812 Qt: Always perform update check on startup 2025-06-24 15:34:05 +10:00
Daniel Nylander
a7d0a8a485 Updated Swedish translation (#3461) 2025-06-23 12:41:49 +10:00
Anderson Cardoso
c679ffbac0 Atualização Português do Brasil (#3462)
Atualizado para a última versão.
2025-06-23 12:41:35 +10:00
Stenzek
5b18455536 Qt: Eliminate unnecessary includes in settingwidgetbinder.h 2025-06-22 20:28:05 +10:00
zkdpower
96d0851365 Update the Simple-Chinese translation to latest. (#3460) 2025-06-22 20:25:44 +10:00
Davide Pesavento
9347c00d95 Qt: Refine use of ellipsis in game list context menu (#3459) 2025-06-22 15:26:33 +10:00
Stenzek
cdc9206b6a Qt: Fix typo in toolbar icon action 2025-06-22 14:30:01 +10:00
Stenzek
ba799f4f88 Qt: Disable toolbar related actions if hidden 2025-06-22 14:05:01 +10:00
Stenzek
6fcb1194d5 FullscreenUI: Further icon improvements 2025-06-22 14:01:56 +10:00
Davide Pesavento
29ec2fea19 Qt: Fix saving toolbar locked state (#3458) 2025-06-22 13:25:26 +10:00
Davide Pesavento
40c495cd19 Qt: Remove last use of SLOT 2025-06-22 13:07:56 +10:00
Davide Pesavento
b67a8c3127 Common: Don't include deprecated (and unused) codecvt header
<codecvt> was deprecated in C++17 and removed in C++26
2025-06-22 13:07:56 +10:00
Davide Pesavento
976bf834ed Qt: Use QDialog::Accepted/Rejected in more places 2025-06-22 13:07:56 +10:00
Davide Pesavento
842f7414d9 Qt: Simplify connecting to QDialogButtonBox signals 2025-06-22 13:07:56 +10:00
Davide Pesavento
175ed8caf3 Qt: Fix default button in ControllerLEDSettingsDialog 2025-06-22 13:07:56 +10:00
Davide Pesavento
f6d10eb5d2 Qt: Fix default button in InputBindingDialog 2025-06-22 13:07:56 +10:00
Davide Pesavento
74f697eb62 Qt: Add button icons to InputBindingDialog 2025-06-22 13:07:56 +10:00
Davide Pesavento
e469e33aac Qt: Fix default button in AudioStretchSettingsDialog 2025-06-22 13:07:56 +10:00
Stenzek
a7f5105073 Qt: Fix toolbar context menu lock inversion 2025-06-22 03:04:09 +10:00
Stenzek
7b1c8a0407 System: Log init/boot time 2025-06-22 02:43:58 +10:00
Stenzek
ee0cb6076c Qt: Add additional toolbar properties for labels/icons 2025-06-22 02:33:00 +10:00
Stenzek
bf36432432 Qt: Swap console/emulation icons
Better match I think.
2025-06-22 02:32:57 +10:00
Stenzek
aafd72efba FullscreenUI: Add cheats/patches icons 2025-06-22 02:32:57 +10:00
Stenzek
f9fb591dc8 Data: Add missing file 2025-06-22 01:11:04 +10:00
Stenzek
82bb29d186 FullscreenUI: Fix extra padding in resume state popup 2025-06-22 01:02:59 +10:00
Stenzek
11bc1935c8 FullscreenUI: Skip drawing background if transparent
Save that fill rate.
2025-06-22 00:59:08 +10:00
Stenzek
f775a6d066 Qt: Fix achievement login tab order 2025-06-22 00:50:40 +10:00
Stenzek
5dd64c89c0 FullscreenUI: Bump animation time for theme change 2025-06-22 00:42:51 +10:00
Stenzek
68fa33e075 FullscreenUI: Polish achievements page 2025-06-22 00:39:00 +10:00
Stenzek
d18910a619 Achievements: Release lock while waiting for HTTP requests 2025-06-22 00:27:48 +10:00
Stenzek
ac9be0110f FullscreenUI: Snap CenterImage() to integer coordinates 2025-06-22 00:03:44 +10:00
Stenzek
11cb2217e0 FullscreenUI: Polish range dialogs 2025-06-21 22:08:33 +10:00
Stenzek
7b03b54539 FullscreenUI: Eliminate last of layout height constants 2025-06-21 22:08:33 +10:00
Stenzek
88a63f04be FullscreenUI: More hardcoded size removal
In achievements and elsewhere.
2025-06-21 22:08:33 +10:00
Stenzek
5063a49f2a FullscreenUI: Remove hardcoded sizes for menu items
Make it dynamic based on content instead.
2025-06-21 22:08:33 +10:00
Stenzek
9127198be7 ImGuiManager: Move font awesome to last priority
Too many glyph conflicts. Fixes coloured icons.
2025-06-21 22:08:32 +10:00
Davide Pesavento
3b90d18c6a Qt: Fix return code confusion in AchievementLoginDialog
We were passing the wrong code to QDialog::done(). Qt defines 0 as Rejected
and 1 as Accepted. This had no practical impact because callers were also
using the inverted logic. The accepted()/rejected() signals were emitted
incorrectly but nothing is using them at the moment.

Still, to prevent further issues and improve code readability, flip the logic
and prefer accept()/reject() over done().
2025-06-21 13:13:31 +10:00
Stenzek
1026902389 Data: Update SDL game controller database 2025-06-19 22:22:08 +10:00
Stenzek
2ac481d2c1 Qt: Fix setup wizard achievements page title 2025-06-19 22:22:00 +10:00
Stenzek
ff0add2ed0 ImGuiManager: Load PF before FA
Works around code point conflicts, for now.

Probably should just reallocate PF in the future though.
2025-06-19 22:17:11 +10:00
Stenzek
6c6cc910e6 DMA: Invalidate code pages on CD-ROM DMA write
Avoids page faulting by invalidating the pages in advance.

Might help with frame time spikes on super low-spec devices.
2025-06-19 21:15:26 +10:00
KamFretoZ
fa0a926133 Deps: Bump FontAwesome to 6.7.2 (#3456) 2025-06-19 20:38:41 +10:00
Stenzek
49d5d8e9a7 Qt: Fix achievement login dialog sizing on MacOS 2025-06-19 19:59:00 +10:00
Stenzek
1653cf82a2 GPU/HW: Fix GLSL ES compile error 2025-06-18 19:28:24 +10:00
Stenzek
42a9d8c353 Qt: Raise updater window if already shown
Too bad it won't work on Wayland. I'm trying to give a good
user experience on a platform that is so developer hostile.
2025-06-18 19:07:37 +10:00
Stenzek
5f885b83b8 Settings: Add missing case statement 2025-06-18 19:03:29 +10:00
Davide Pesavento
6ef3df5a5c Achievements: Use gethostuuid() as machine key on macOS (#3452) 2025-06-18 18:29:26 +10:00
crashGG
99268f22ec Separate mmpx enhance from mmpx (#3453)
Use conditional weak blending instead of pixel copying to eliminate artifacts on straight lines
Reduce algorithm overhead
use explicitly initialize to fix dx11 fxc uninitialized variable false positive

Update gpu_hw_shadergen.cpp

Update gpu_hw_shadergen.cpp
2025-06-18 18:28:19 +10:00
Stenzek
d83ecb0582 Qt: Fix return to desktop mode with -nogui -bigpicture 2025-06-17 18:44:27 +10:00
Stenzek
ce6924df21 Qt: AutoUpdaterDialog -> AutoUpdaterWindow in translations
Hopefully avoid some manual updates.
2025-06-17 18:44:27 +10:00
Stenzek
fa7b4ae9f1 Qt: Convert auto updater to window
And remove the application modality.

Fixes fights between the auto updater and achievement relogin window.
2025-06-17 18:44:27 +10:00
Davide Pesavento
a2bf5b4f50 GameDatabase: Drop "GPU" prefix from PGXP settings in compatibility report 2025-06-17 14:53:45 +10:00
Davide Pesavento
2edcb20930 GameDatabase: Add three missing settings to compatibility report 2025-06-17 14:53:45 +10:00
Davide Pesavento
69399f3449 GameDatabase: Missing newline in compatibility report
And refactor the Append*Setting() functions to reduce duplication.
2025-06-17 14:53:45 +10:00
Davide Pesavento
0c3ad8a78b GameDB: Fix number of players for Syphon Filter 2 & 3 (#3451) 2025-06-17 14:52:46 +10:00
Stenzek
f5c3280202 ImGuiOverlays: Remove unused code 2025-06-15 13:58:09 +10:00
Stenzek
4616dd3293 Qt: Avoid heap string copy for each context menu action
QString is copy-on-write.
2025-06-15 13:57:06 +10:00
Stenzek
308bc5f356 ImGuiOverlays: Warning fixes 2025-06-15 13:31:46 +10:00
Stenzek
35a8bfa469 FullscreenUI: Warning fixes 2025-06-15 13:31:43 +10:00
Stenzek
0c8cf0a4d7 Qt: Fix incorrect help text 2025-06-15 13:24:15 +10:00
Stenzek
466ccc5d88 CI: Use maximum compression for zip builds 2025-06-15 13:24:15 +10:00
Stenzek
7f066c2864 ImGuiOverlays: Fix display with only GPU/latency stats 2025-06-15 13:24:15 +10:00
bl@ck_m@ge
61f3f86bbc GameDB: exclude analog support for Final Fantasy Origins (#3449) 2025-06-15 13:24:02 +10:00
zkdpower
42bf2b3360 update the Simple-Chinese translation to latest. (#3448) 2025-06-15 13:23:49 +10:00
Stenzek
c32e590808 Qt: Don't hold lock while game list context menu active 2025-06-14 15:08:45 +10:00
Stenzek
20b353535d ImGuiOverlays: Backport condition tidy-up 2025-06-14 15:08:28 +10:00
Stenzek
ba6309c458 FullscreenUI: Keep a one-deep previous window stack
Fixes settings close returning to wrong window if opened from game list.
2025-06-14 14:39:22 +10:00
Stenzek
1a39dece6a FullscreenUI: Don't tint background in landing/game list
But keep it for settings etc, since it needs it for readability.
2025-06-14 14:33:07 +10:00
Stenzek
3a7cbc20d9 FullscreenUI: Use horizotal layout for about dialog 2025-06-14 14:10:29 +10:00
Stenzek
e19817c7f9 README: Fix typo 2025-06-14 13:42:02 +10:00
Stenzek
233c342d68 README: Recommend AppImage over Flatpak
Tired of Flathub's infrastructure randomly failing builds, and portal
paths being invalidated every update.

Does anyone actually use this?
2025-06-14 13:37:27 +10:00
Stenzek
3ba05f182f Qt: Use same size for serial across platforms
And center the field to compensate.
2025-06-14 13:25:52 +10:00
Stenzek
b98d521ff9 ImGuiOverlays: Draw larger status indicator icons
Always bugged me, but couldn't justify the rasterization time before
dynamic fonts.
2025-06-14 13:25:22 +10:00
Stenzek
bf4a89e82e Qt: Use GameList::FormatTimespan()
No point duplicating the logic since the core can handle
plural translations now.
2025-06-14 13:12:21 +10:00
Stenzek
9ffded0e73 SmallString: Fix size bug in assign(SmallStringBase&&) 2025-06-14 13:12:02 +10:00
Stenzek
a31d67921b SmallString: Use L instead of L+1
Keep the stack aligned to power of 2.
2025-06-14 13:11:39 +10:00
Davide Pesavento
70225f8345 Always use CTAD with std::unique_lock 2025-06-14 13:10:57 +10:00
Davide Pesavento
2c7d07b245 Qt: Implement reset play time for disc sets 2025-06-14 13:10:57 +10:00
Anderson Cardoso
74838e9bd8 Atualização Português do Brasil (#3444)
Atualizado para a última versão
2025-06-14 13:09:28 +10:00
KamFretoZ
bb76d7cce8 Update Indonesian Translation (#3445) 2025-06-14 13:09:18 +10:00
Davide Pesavento
873c7c9dc3 Qt: Right align size columns in game list view 2025-06-14 13:08:38 +10:00
Davide Pesavento
00330ca391 Qt: Avoid truncating Serial column in game list view on macOS 2025-06-14 13:08:38 +10:00
Davide Pesavento
5dc55bb4a1 Qt: Avoid showing "0 minutes" of played time (#3447) 2025-06-14 13:00:19 +10:00
Stenzek
9c4e15ef1c Host: Remove now-unused ReadCompressedResourceFile() 2025-06-14 02:30:11 +10:00
Stenzek
9ff3edd317 Qt: Disable unmaintained translations
These haven't been touched in 4+ years, and there are very few strings
still valid.

They'll still be built, so you can use them via the ini, but they will
not appear in the dropdown list.
2025-06-14 02:30:11 +10:00
Stenzek
0cf5618a05 FullscreenUI: Fix crash in JogCon controller settings 2025-06-14 02:30:11 +10:00
Stenzek
65ed9b51ab Data: Fix glyph conflict with vibration icon 2025-06-14 02:30:11 +10:00
Stenzek
0026615eb9 Data: Remove unused base fonts 2025-06-14 02:30:10 +10:00
Stenzek
c06da318d6 FullscreenUI: Fix trophy placement on non-square covers 2025-06-14 02:30:10 +10:00
Stenzek
06da45b3f2 FullscreenUI: Polish dialogs 2025-06-14 02:30:10 +10:00
Stenzek
77457a3b1d ImGuiManager: Switch to dynamic fonts 2025-06-14 02:30:10 +10:00
Stenzek
5945153e67 Data: Add variable weight fonts 2025-06-13 22:37:11 +10:00
Stenzek
9c4aaca7c8 FullscreenUI: Avoid losing game list selection inbetween mouse move and popups 2025-06-13 21:42:40 +10:00
Stenzek
a2d351ca90 FullscreenUI: Improve title truncation in game grid
Use the computed text length, rather than an arbitrary size.
2025-06-13 21:26:54 +10:00
Stenzek
39a5bd6e54 FullscreenUI: Remove padding from CD icon
It wasn't even.
2025-06-13 21:26:34 +10:00
Stenzek
94b88fad23 GPU/HW: Avoid texture filter dual-source output when unnecessary
Because we all know how much mobile drivers crapping themselves
whenever anyone mutters dual-source blending.
2025-06-13 21:02:07 +10:00
Stenzek
d37048e4e4 FullscreenUI: Fix animation glitch on choice select 2025-06-13 20:54:50 +10:00
Stenzek
a8db46a6b8 GPU/HW: Use signed difference in luma_distance()
Fixes the warning, and also underflowing, since both were unsigned
it would overflow if the second was greater the first.
2025-06-13 20:54:48 +10:00
Stenzek
ac0c4544e1 GPU/HW: Work around fxc uninitialized variable false positive 2025-06-13 20:54:48 +10:00
Stenzek
824b91a1f8 GPU/HW: Split MMPX to MMPX and MMPX Enhanced 2025-06-13 16:42:32 +10:00
crashGG
98798fec66 mmpx enhance (#3443)
enhance MMPX algorithm, fix some minor graphics defects.

Update gpu_hw_shadergen.cpp
2025-06-13 16:34:54 +10:00
Stenzek
9112e38f4e GPUDevice: Fix incorrect close call during symbol lookup
Not actually hit since all symbols should be present, but just in
case...
2025-06-13 16:29:06 +10:00
Davide Pesavento
36b869003a Qt: Use standard key sequences for main window shortcuts
Notably, this enables command+R to refresh on macOS, where F5
is not commonly used.
2025-06-11 19:51:12 +10:00
Davide Pesavento
e45c04e0dd Qt: Simplify grid layout in game summary widget 2025-06-11 19:51:12 +10:00
Davide Pesavento
5ea64810dc Qt: Consistently use QToolButton for "restore default" action 2025-06-11 19:51:12 +10:00
Davide Pesavento
7752b2bd2d Qt: Remove redundant nested layouts 2025-06-09 22:18:13 +10:00
Davide Pesavento
c7052a1903 Qt: Use restart-line icon for "restore defaults" buttons 2025-06-09 22:18:13 +10:00
Davide Pesavento
a4977f986c Qt: Add icons to buttons in patch settings widget
Similar to the cheat settings page
2025-06-09 22:18:13 +10:00
Davide Pesavento
ba78714d4f Qt: More consistent icon handling 2025-06-09 22:18:13 +10:00
Stenzek
5eb8578edc System: Save undo state on reset 2025-06-08 17:08:52 +10:00
Stenzek
cb2dfabeeb Qt: Backport undo load state timestamps 2025-06-08 17:08:50 +10:00
Stenzek
29e55a2e5b FullscreenUI: Use system scroll rate and layout scale
Makes scrolling feel much more responsive, and doesn't vary
depending on the size of the window.
2025-06-08 16:50:51 +10:00
Stenzek
38aebd0a3e dep/imgui: Add overridable scroll rate 2025-06-08 16:47:34 +10:00
Stenzek
bd9e206165 FullscreenUI: Fix layout calculations in game grid 2025-06-08 12:04:06 +10:00
Daniel Nylander
8d2dec4632 Updated Swedish translation (#3439) 2025-06-08 12:03:56 +10:00
Anderson Cardoso
595f8d0624 Atualização Português do Brasil (#3438)
Atualizado para a última versão.
2025-06-08 12:03:43 +10:00
Davide Pesavento
2326fc20d1 README: Fix typo (#3437) 2025-06-08 12:03:25 +10:00
Stenzek
6bea16b6eb INISettingsInterface: Only set changed if the value actually changes 2025-06-05 20:39:07 +10:00
Stenzek
5f2355510b Qt: Only write settings ini if it is changed
Save some disk writes.
2025-06-05 20:37:57 +10:00
Stenzek
d0b7d9d027 Host: Get rid of base settings interface indirection 2025-06-05 20:37:14 +10:00
Stenzek
9cd371d5ff SettingsInterface: Drop some unused virtual methods 2025-06-05 20:37:14 +10:00
Stenzek
59f7d0b2ff Cheats: Fix compiler warnings 2025-06-05 19:58:45 +10:00
Stenzek
d54077e345 Achievements: Add 'Refresh Progress' option
Manually refreshes the all progress database if you have completed
unlocks on other devices/machines.
2025-06-05 19:58:45 +10:00
Stenzek
0a0379f31f Qt: Make game list scrollbar only visible as-needed 2025-06-05 19:17:07 +10:00
Stenzek
95e085584c Qt: Move list/grid setup to subclasses 2025-06-05 19:16:46 +10:00
Stenzek
808c51b3ce CMake: Bump version requirements
Can't do it for Qt because of course flatpak....
2025-06-05 18:23:36 +10:00
Stenzek
f518b8492c Deps: Version updates
- HarfBuzz 11.2.0
- SDL3 3.2.16
- libpng 1.6.48
- Qt 6.9.1
2025-06-05 17:42:00 +10:00
Stenzek
22089e9b75 Qt: Improve game grid layout calculations
Use grid size instead of icon size/spacing.

Fixes the number of columns changing when different items are visible.

Also restores the old behaviour of dynamic scroll bar visibility.
2025-06-05 17:23:16 +10:00
Stenzek
cb751b0990 Data: Update SDL controller database 2025-06-05 13:35:04 +10:00
Stenzek
0205f9fa04 Achievements: Update progress database unconditionally on unlock
Doesn't make sense to preserve the greater count, since it can be
reset through the RA webpage, and SC/HC seems to work fine here.
2025-06-05 13:35:04 +10:00
BlueInterlude
2f2dcb43cc GameDB: Fix incorrect controller information + Add PlayStation Mouse for Jingle Cats (#3436) 2025-06-04 03:13:10 +10:00
BlueInterlude
52cf394bb2 GameDB: Add PlayStation Mouse Support for Jingle Cats (#3435) 2025-06-04 02:04:23 +10:00
Stenzek
9ab2608ba0 GPU/TextureCache: Fix replacement background name length 2025-06-03 22:55:21 +10:00
Stenzek
5b40d7902a System: Shut down GPU backend before other components
Prevents a rare crash on shutdown if OSD stats were enabled.
2025-06-03 19:06:17 +10:00
Stenzek
7fde697118 GPU/TextureCache: Add merging of adjacent palette records
So a texture spanning multiple pages can be merged at dump time.

Doing a merge instead of a union on the original palette rect
is safer, because gaps won't dump as larger textures with garbage
in the middle.
2025-06-03 19:05:22 +10:00
Stenzek
eee67a30da GPU/HW: Fix off-by-one in sprite UV rect calculation
CheckForTexPageOverlap() makes it exclusive already.

Fixes replacements for FF8 title screen not applying in the third
texture page, because it thought it was sampling from an unwritten
area of VRAM.
2025-06-03 18:54:29 +10:00
Davide Pesavento
e55dabfaa4 GameDB: Two fixes for Alone in the Dark - The New Nightmare (#3434) 2025-06-03 17:59:09 +10:00
Mark Zhuang
62c0a1e7d4 RISCV: fix flush cache for linux riscv when clang <= 18
for __builtin___clear_cache, clang-18 generates __clear_cache:
https://godbolt.org/z/K5Kx6EEhq, which is an empty function.
clang-19 can generates __riscv_flush_icache:
https://godbolt.org/z/TKe6Kh61a
2025-06-03 17:58:38 +10:00
Stenzek
d9367229e9 Achievements: Avoid duplicate tracker display 2025-06-03 17:57:29 +10:00
Stenzek
42813e8840 GameDatabase: Actually disable auto scale for DisableUpdating 2025-06-01 21:19:07 +10:00
Stenzek
ae3b295d95 FullscreenUI: Disable menu item borders by default
Looks nicer.
2025-06-01 15:10:40 +10:00
Stenzek
47405b081c GameDatabase: Disable MSAA with DisableUpscaling 2025-06-01 14:37:16 +10:00
Stenzek
2cc0851116 GameDatabase: Fix DisableUpscaling trait with auto res 2025-06-01 14:37:16 +10:00
Stenzek
fc7934a2be FullscreenUI: Fix nav focus loss in leaderboards
Stops hotkeys triggering when using mouse navigation.

Also fixes the first leaderboard entry not focusing on page swap.
2025-06-01 14:37:16 +10:00
Stenzek
1ad9ca7e90 FullscreenUI: Cancel pending nav on focus reset 2025-06-01 14:37:16 +10:00
CRASHARKI
9d59763bad GameDB: Disable upscaling and filtering in Constructor (#3432) 2025-05-31 14:27:13 +10:00
Davide Pesavento
02d8e14752 ImGuiManager: Avoid deprecated std::memory_order_consume (#3433) 2025-05-31 14:27:02 +10:00
Stenzek
0a0ad3f9e2 Qt: Improve clarity of unknown dump hashes 2025-05-31 03:00:59 +10:00
Stenzek
f2caec801d GameDB: Force full boot for Lomax games
Crashes after FMVs if fast boot is disabled.
2025-05-30 19:26:50 +10:00
Stenzek
2018eb77fe GPU: Adjust draw timing approximation
Cache seems to be able to go up to 128x8? Constructor draws sprites that
fit exactly in the texture cache, and does so within vblank, so it can't
take too long to draw.
2025-05-30 19:26:49 +10:00
CRASHARKI
6d8e111d72 GameDB: Add ForcePGXPCPUMode to all remaining versions of Aladdin (#3431) 2025-05-28 21:42:25 +10:00
Sheng Jiang 蒋晟
b195f747cf implement ExtConstantBitClear/Set on ExtImprovedSlide (#3430) 2025-05-28 21:42:11 +10:00
CRASHARKI
af803eefc1 GameDB: Various fixes to GTA games (#3429) 2025-05-27 22:24:16 +10:00
CRASHARKI
fff7654bc6 GameDB: Asterix does not support analog mode (#3428) 2025-05-27 18:21:54 +10:00
Stenzek
4164b95cb3 ImGuiManager: Make OSD message animation match notifications 2025-05-27 17:58:22 +10:00
Stenzek
2da46f83bb dep/imgui: Fix smooth scrolling with >60hz 2025-05-27 17:21:31 +10:00
Stenzek
6b811df6d0 CDROM: Add "Switch to Next Disc on Stop" option.
NOTE: THIS WILL NOT WORK FOR ALL GAMES.

Plenty of games don't stop the CD-ROM drive when they're expecting a
disc change, leaving us with no way of knowing when it's needed.
2025-05-27 17:10:11 +10:00
Stenzek
24cd6fa11b Hotkeys: Add switch to previous/next disc hotkeys 2025-05-27 17:03:39 +10:00
Stenzek
d885446672 VulkanDevice: Fix manual device selection 2025-05-27 17:03:39 +10:00
Stenzek
1c54047cd1 Qt: Remove redundant vertical layout in console settings 2025-05-27 17:03:39 +10:00
Davide Pesavento
8fa6336a90 Qt: Further polish the layout of some widgets (#3427) 2025-05-27 17:02:46 +10:00
Anderson Cardoso
09a1bfdde3 Atualização Português do Brasil (#3426)
- Novas linhas adicionadas/movidas traduzidas.
- Confirmação de novas linhas de texto.
2025-05-25 13:00:16 +10:00
Víctor "IlDucci
492ff51f40 Spanish (Spain) translation update 2025/05/24 (#3425)
- Translated all the new strings.
- Minor edits on existing ones.
2025-05-25 12:59:58 +10:00
Davide Pesavento
80c9a8d399 Qt: Remove unused ui file 2025-05-24 15:57:05 +10:00
Davide Pesavento
e30c1b53ad Qt: Use grid layout for audio stretch settings dialog 2025-05-24 15:57:05 +10:00
Stenzek
f6aa3eb5b0 Qt: Update glyph ranges 2025-05-24 12:55:59 +10:00
Stenzek
64dfe003b2 Qt: Update status bar visibility on shutdown
Fixes empty widgets being displayed.
2025-05-24 12:55:44 +10:00
zkdpower
7e37849378 update the Simple-Chinese translation to latest. (#3422) 2025-05-24 12:54:37 +10:00
Davide Pesavento
0f5204b31e CI: Pin action-automatic-releases to latest commit (#3423) 2025-05-24 12:54:15 +10:00
Davide Pesavento
c12e7fcc0b Qt: Fix minor typos in graphics settings help text (#3421) 2025-05-23 17:08:53 +10:00
Stenzek
4d5ba3b4e6 VulkanDevice: Tidy up device/extension initialization
Single pass, avoids enabling extensions that will not be used.
2025-05-23 17:06:59 +10:00
Stenzek
32b3ade56c VulkanDevice: Allocate N semaphores for N swap chains 2025-05-23 15:21:49 +10:00
Stenzek
cdadda85b5 Qt: Fix application exiting on fullscreen+lang change 2025-05-23 15:21:49 +10:00
Stenzek
66934cc5b8 System: Include queued frames in input latency stats 2025-05-23 15:16:15 +10:00
Stenzek
03111befb9 Settings: Correct a couple of default values 2025-05-23 15:15:58 +10:00
Stenzek
461c51ff6a Qt: Fix updater crash while game running
Or while fullscreen.
2025-05-20 00:00:41 +10:00
Stenzek
1667179f78 Qt: Updater shouldn't confirm shutdown
Otherwise if it's cancelled we end up in a funky state.
2025-05-20 00:00:38 +10:00
Stenzek
b27e5ac26a Qt: Fix incorrect lock parent 2025-05-19 23:52:11 +10:00
Stenzek
a422402014 CPU: Fix bgez/blez disassembly with non-standard pattern 2025-05-18 13:43:41 +10:00
Stenzek
c7ed3239b7 Qt: Use grid layout for second audio settings panel 2025-05-18 13:33:38 +10:00
Stenzek
54444475f5 Qt: Fix sizing of patch detail widgets 2025-05-18 13:33:21 +10:00
Stenzek
0ee3f235b6 Qt: Fix swapped parameter order in patch info 2025-05-18 12:47:03 +10:00
Stenzek
5e339c8975 dep/rcheevos: Fix buffer reserve estimate 2025-05-18 12:17:53 +10:00
Anderson Cardoso
4748a93b8a Atualização Português do Brasil (#3420)
Atualizaod para a última versão.
2025-05-18 12:14:47 +10:00
Davide Pesavento
06c950c06a GameDB: Disable disc read speedup for Parasite Eve 2 (#3419) 2025-05-18 12:14:32 +10:00
Stenzek
8ee0daaa17 GameDatabase: Bump cache version
Forgot to do this before.
2025-05-17 23:06:36 +10:00
Stenzek
5eedecd811 System: Swap back gamesettings->safe mode order
Fixes e.g. round texcoords warning being shown on games that need it.

But don't display CD speedup warnings if the gamedb will disable them.
2025-05-17 23:06:36 +10:00
Stenzek
9b17e1485d MediaCapture/FFmpeg: Log when dynlib open fails 2025-05-17 23:06:36 +10:00
Stenzek
0aa789d6c9 MediaCapture/FFmpeg: Default to VP9 2025-05-17 23:06:30 +10:00
Stenzek
6baea54e9d MediaCapture/FFMpeg: Re-introduce v7.0.x support
I hate this... thanks flatpak.
2025-05-17 21:48:32 +10:00
Stenzek
84999e0bc9 FileSystem: Handle BOM in ReadFileToString()
Works with UTF-8 BOM, UTF-16 LE + BE.

Fixes DisplayDepth ReShade shader not loading.
2025-05-17 20:27:01 +10:00
Stenzek
e3c0eed3df StringUtil: Add DecodeUTF16String() and BE variants 2025-05-17 20:25:45 +10:00
Stenzek
17dfb95d6a GPU/HW: Fix MSAA+depth buffer combination
Clear should wipe out all samples, copy should copy all samples.
2025-05-17 19:44:23 +10:00
Stenzek
4a707afae1 System: Show safe mode warning after applying gamesettings
Prevents warning about things that have already been disabled.
2025-05-17 18:44:03 +10:00
Stenzek
a6b59f9efe GameDatabase: Add traits for disabling disc speedup 2025-05-17 18:40:58 +10:00
Stenzek
c729515118 AnalogController: Add option to use right stick as shoulder buttons 2025-05-17 18:40:38 +10:00
Stenzek
db80f6fbc5 CI/Flatpak: Disable ffmpeg support
So sick of dealing with fragmented bullshit because different packaging
systems and operating systems have different library versions.

Freedesktop SDK is stuck at ffmpeg 7.0, so it loses support.
2025-05-17 18:11:20 +10:00
Stenzek
22109fc8e0 MediaCapture/FFmpeg: Tidy up format selection
And remove use of deprecated fields.
2025-05-17 18:11:13 +10:00
Stenzek
e439ebc1c6 Deps: Update bundled ffmpeg headers to v7.1.1 2025-05-17 18:10:03 +10:00
Stenzek
d35cefb02a GPU/HW: Check for depth clears for lines 2025-05-17 15:22:01 +10:00
Stenzek
844869c0c1 GPU/HW: Fix precise lines failing depth test 2025-05-17 15:04:22 +10:00
Stenzek
a375d558f6 GPU/HW: ScaleNx/MMPX do not require blending 2025-05-17 14:05:56 +10:00
Stenzek
3d8f6bf7aa GPU/HW: Fix filtered alpha blending in ROV path 2025-05-17 14:05:55 +10:00
Davide Pesavento
401f2652ca Achievements: Use round instead of ceil for unlocked percentage (#3418) 2025-05-17 14:05:41 +10:00
Stenzek
21aaec99f1 Qt: Note when patches are not allowed for achievements 2025-05-17 01:07:55 +10:00
Stenzek
871323f4e1 Cheats: Fix setting overrides applying for blacklisted patches 2025-05-17 00:59:20 +10:00
Stenzek
1547de2b3c Deps: Build Vulkan-Headers before ffmpeg
CI system headers are too old.
2025-05-17 00:05:33 +10:00
Stenzek
481fba357c dep/rcheevos: Sync with branch 2025-05-16 23:51:44 +10:00
Daniel Nylander
4ec372cd4e Updated Swedish translation (#3417) 2025-05-16 23:51:22 +10:00
Stenzek
a5987878be Deps: Version updates
SDL3, ffmpeg.
2025-05-16 22:27:37 +10:00
Stenzek
93e4913f11 Qt: Fix additional padding in patch list 2025-05-16 19:21:37 +10:00
Stenzek
cfb24f930d Qt: Fix revision-specific patches showing in list
It was already filtered in Big Picture Mode.
2025-05-16 19:20:26 +10:00
Stenzek
7368047b49 ImGuiManager: Upload software cursor textures on GPU thread 2025-05-16 19:13:38 +10:00
Stenzek
4ea90f948d CDROM: Display OSD message on backend read fail 2025-05-16 19:06:55 +10:00
Stenzek
7310aa509a CDROM: Stop reading on backend read fail
Instead of panicing. Game's probably just going to crash anyway.
2025-05-16 18:14:08 +10:00
Stenzek
f8b8963776 CDImageDevice: Fix possible invalid optional access 2025-05-16 17:54:02 +10:00
Stenzek
44729000af Qt: Update Korean translation by Hack茶ん 2025-05-14 23:18:23 +10:00
Stenzek
7932618424 Bus: Enable SIO2 on any unknown BIOS
Not all PS2 BIOSes are in the list.
2025-05-14 23:18:23 +10:00
Stenzek
2ed7aa5536 CPU: Clear pending bus error when interpreting block
It can get set from a failed rec access much earlier.

Also eliminates a redundant store from the main interpreter loop.
2025-05-14 23:18:22 +10:00
JukePlz
8382a1ac7b GameDB: Pop'n Tanks! does not support analog mode (#3416)
Only supports vibration.
2025-05-13 21:44:30 +10:00
Stenzek
4bacbc8958 Qt: Eliminate heap allocations in GameListSortModel
More of an issue since the filter is now checking multiple fields.
2025-05-13 21:43:32 +10:00
Stenzek
b91d219524 Qt: Clarify that XInput should only be used for wrappers 2025-05-13 21:31:00 +10:00
Stenzek
2b280bddd0 GPU/TextureCache: Display replacement info on game start 2025-05-13 21:21:16 +10:00
JukePlz
0483117c70 GameDB: Disable auto analog mode for Gex - Deep Cover Gecko (PAL) (#3415)
Language selector only works in digital mode.
2025-05-12 20:58:54 +10:00
zkdpower
2c67c7d287 Update the Simple-Chinese translation to latest. (#3413) 2025-05-12 20:58:43 +10:00
KamFretoZ
085ef31ee8 Qt: Search more things! (#3414)
Co-authored-by: KrossX <2485237+krossx@users.noreply.github.com>
2025-05-12 20:58:36 +10:00
Stenzek
4530301820 dep/rcheevos: Bump to 8a0178d 2025-05-11 14:08:24 +10:00
Stenzek
6cde51b7b5 Achievements: Tidy up API calls 2025-05-11 14:07:31 +10:00
Stenzek
aee66edd6e Achievements: Unload RAIntegration on UI thread
Fixes crash when toggling it on/off.
2025-05-09 20:58:38 +10:00
Stenzek
303ad7cdce Data: Update SDL Game Controller Database 2025-05-07 21:30:49 +10:00
Stenzek
18c5608f7d Qt: Work around MacOS disc change menu bug
QActionGroup usage here was incorrect.
2025-05-07 21:29:39 +10:00
Stenzek
b2dcf39f8b FullscreenUI: Fix possible crash with RAIntegration 2025-05-06 22:50:32 +10:00
Stenzek
e67ce7b54d GameDB: DisablePGXP => DisablePGXPCulling for Cool Boarders 2025-05-06 22:42:06 +10:00
Stenzek
2aea3e1c3c FullscreenUI: Add vertical padding to several windows
Looks less cluttered.

- Achievement/leaderboard lists.
- Game list/game grid.
- Save state selector.
2025-05-06 22:42:06 +10:00
Stenzek
30fe7f3e4a Achievements: Manually generate badge URLs when using RAIntegration
It doesn't fill in these fields (currently at least).
2025-05-06 22:42:06 +10:00
Stenzek
942316b2d0 Log: Fix inconsistent enum ordering 2025-05-06 22:40:21 +10:00
JukePlz
994dd18739 GameDB: Fixes for Cool Boarders and Welcome House (#3412)
* GameDB: Welcome House hash

* GameDB: Force disable PGXP in Cool Boarders

With PGXP on, it crashes, hangs or otherwise renders incorrectly in stage select menu.
2025-05-06 22:40:08 +10:00
Stenzek
03db7ea8ea GPUThread: Remove unnecessary padding 2025-05-05 02:22:57 +10:00
Stenzek
c8a5712c10 FullscreenUI: Fix possible crash with achievements/leaderboards hotkey 2025-05-05 02:22:57 +10:00
Stenzek
d326d307b4 Achievements: Fix memory writes using CPU addresses 2025-05-05 02:22:57 +10:00
Anderson Cardoso
ea58cd1d57 Atualização Português do Brasil (#3411)
Atualizado para a última versão.
2025-05-05 02:22:40 +10:00
Stenzek
ad13b17bea FullscreenUI: Fix slow fadeout on fast forward toggle 2025-05-03 00:46:18 +10:00
Stenzek
6cafb5cdea FullscreenUI: Fix resume state dialog height at some window sizes 2025-05-03 00:45:45 +10:00
Víctor "IlDucci
af5fb6961c Spanish (Spain) translation update 2025/04/26 (#3410)
- Translated latest strings.
- Minor tweaks related to the Game Settings.
2025-05-03 00:44:51 +10:00
1073 changed files with 242540 additions and 159372 deletions

View File

@@ -1,22 +0,0 @@
name: Flathub Publish
on:
workflow_dispatch:
inputs:
flathub_branch:
description: "Flathub branch to push to"
required: true
default: "stable"
type: "choice"
options:
- "stable"
- "beta"
jobs:
linux-flatpak:
name: Build Flatpak
uses: "./.github/workflows/linux-flatpak-build.yml"
with:
flathub_publish: true
flathub_branch: ${{ inputs.flathub_branch }}
secrets: inherit

View File

@@ -4,6 +4,7 @@ on:
pull_request:
paths:
- 'data/resources/gamedb.yaml'
- 'data/resources/discsets.yaml'
- 'data/resources/discdb.yaml'
push:
branches:
@@ -11,17 +12,19 @@ on:
- dev
paths:
- 'data/resources/gamedb.yaml'
- 'data/resources/discsets.yaml'
- 'data/resources/discdb.yaml'
workflow_dispatch:
permissions:
contents: read
jobs:
gamedb-lint:
runs-on: ubuntu-22.04
runs-on: ubuntu-slim
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/checkout@v6
- name: Install Packages
shell: bash
@@ -33,6 +36,10 @@ jobs:
shell: bash
run: yamllint -c extras/yamllint-config.yaml -s -f github data/resources/gamedb.yaml
- name: Check Disc Sets
shell: bash
run: yamllint -c extras/yamllint-config.yaml -s -f github data/resources/discsets.yaml
- name: Check DiscDB
shell: bash
run: yamllint -c extras/yamllint-config.yaml -s -f github data/resources/discdb.yaml

View File

@@ -4,13 +4,27 @@ on:
workflow_call:
workflow_dispatch:
permissions:
contents: read
jobs:
linux-x64-appimage-build:
name: "x64"
linux-appimage-build:
name: "${{ matrix.name }}"
runs-on: ubuntu-22.04
timeout-minutes: 120
timeout-minutes: 240
strategy:
matrix:
include:
- name: "x64"
asset: "DuckStation-x64.AppImage"
artifact: "linux-x64-appimage"
cmakeoptions: ""
- name: "x64 SSE2"
asset: "DuckStation-x64-SSE2.AppImage"
artifact: "linux-x64-sse2-appimage"
cmakeoptions: "-DDISABLE_SSE4=ON"
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
@@ -19,10 +33,10 @@ jobs:
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/deps
key: deps ${{ hashFiles('scripts/deps/build-dependencies-linux.sh', 'scripts/deps/build-ffmpeg-linux.sh') }}
key: deps ${{ hashFiles('scripts/deps/build-dependencies-linux.sh', 'scripts/deps/build-ffmpeg-linux.sh', 'scripts/deps/versions') }}
- name: Build Dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
@@ -32,116 +46,39 @@ jobs:
if: steps.cache-deps.outputs.cache-hit != 'true'
run: scripts/deps/build-ffmpeg-linux.sh "$HOME/deps"
- name: Initialize Build Tag
run: |
echo '#pragma once' > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_ASSET "DuckStation-x64.AppImage"' >> src/scmversion/tag.h
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
- name: Tag as Preview Release
if: github.ref == 'refs/heads/master'
run: |
echo '#define SCM_RELEASE_TAG "preview"' >> src/scmversion/tag.h
echo '#pragma once' > src/scmversion/tag.h
echo '#define UPDATER_RELEASE_CHANNEL "preview"' >> src/scmversion/tag.h
echo '#define UPDATER_RELEASE_IS_OFFICIAL 1' >> src/scmversion/tag.h
- name: Tag as Rolling Release
- name: Tag as Stable Release
if: github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_TAG "latest"' >> src/scmversion/tag.h
echo '#pragma once' > src/scmversion/tag.h
echo '#define UPDATER_RELEASE_CHANNEL "latest"' >> src/scmversion/tag.h
echo '#define UPDATER_RELEASE_IS_OFFICIAL 1' >> src/scmversion/tag.h
- name: Download Patch Archives
shell: bash
run: |
cd data/resources
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
curl --retry 5 --retry-all-errors -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl --retry 5 --retry-all-errors -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
- name: Compile Build
shell: bash
run: |
mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" ..
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ${{ matrix.cmakeoptions }} -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" ..
cmake --build . --parallel
cd ..
scripts/packaging/appimage/make-appimage.sh $(realpath .) $(realpath ./build) $HOME/deps DuckStation-x64
scripts/packaging/appimage/make-appimage.sh $(realpath .) $(realpath ./build) $HOME/deps "${{ matrix.asset }}"
- name: Upload Qt AppImage
uses: actions/upload-artifact@v4
- name: Upload AppImage
uses: actions/upload-artifact@v6
with:
name: "linux-x64-appimage"
path: "DuckStation-x64.AppImage"
linux-x64-sse2-appimage-build:
name: "x64 SSE2"
runs-on: ubuntu-22.04
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Packages
run: scripts/packaging/appimage/install-packages.sh
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4
with:
path: ~/deps
key: deps ${{ hashFiles('scripts/deps/build-dependencies-linux.sh', 'scripts/deps/build-ffmpeg-linux.sh') }}
- name: Build Dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
run: scripts/deps/build-dependencies-linux.sh "$HOME/deps"
- name: Build FFmpeg
if: steps.cache-deps.outputs.cache-hit != 'true'
run: scripts/deps/build-ffmpeg-linux.sh "$HOME/deps"
- name: Initialize Build Tag
run: |
echo '#pragma once' > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_ASSET "DuckStation-x64-SSE2.AppImage"' >> src/scmversion/tag.h
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
- name: Tag as Preview Release
if: github.ref == 'refs/heads/master'
run: |
echo '#define SCM_RELEASE_TAG "preview"' >> src/scmversion/tag.h
- name: Tag as Rolling Release
if: github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_TAG "latest"' >> src/scmversion/tag.h
- name: Download Patch Archives
shell: bash
run: |
cd data/resources
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
- name: Compile Build
shell: bash
run: |
mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DDISABLE_SSE4=ON -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" ..
cmake --build . --parallel
cd ..
scripts/packaging/appimage/make-appimage.sh $(realpath .) $(realpath ./build) $HOME/deps DuckStation-x64-SSE2
- name: Upload Qt AppImage
uses: actions/upload-artifact@v4
with:
name: "linux-x64-sse2-appimage"
path: "DuckStation-x64-SSE2.AppImage"
name: "${{ matrix.artifact }}"
path: "${{ matrix.asset }}"

View File

@@ -4,9 +4,12 @@ on:
workflow_call:
workflow_dispatch:
permissions:
contents: read
jobs:
build:
name: "Build"
name: "${{ matrix.arch }}"
strategy:
fail-fast: true
matrix:
@@ -16,18 +19,18 @@ jobs:
container:
image: ghcr.io/duckstation/cross-build-${{ matrix.arch }}:latest
timeout-minutes: 120
timeout-minutes: 240
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/deps
key: deps-cross ${{ matrix.arch }} ${{ hashFiles('scripts/deps/build-dependencies-linux.sh', 'scripts/deps/build-dependencies-linux-cross.sh') }}
key: deps-cross ${{ matrix.arch }} ${{ hashFiles('scripts/deps/build-dependencies-linux.sh', 'scripts/deps/build-dependencies-linux-cross.sh', 'scripts/deps/versions') }}
- name: Build Dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
@@ -57,37 +60,31 @@ jobs:
echo 'set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=lld")' >> "$HOME/toolchain.cmake"
echo 'set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=lld")' >> "$HOME/toolchain.cmake"
- name: Initialize Build Tag
run: |
echo '#pragma once' > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_ASSET "DuckStation-${{ matrix.arch }}.AppImage"' >> src/scmversion/tag.h
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
- name: Tag as Preview Release
if: github.ref == 'refs/heads/master'
run: |
echo '#define SCM_RELEASE_TAG "preview"' >> src/scmversion/tag.h
echo '#pragma once' > src/scmversion/tag.h
echo '#define UPDATER_RELEASE_CHANNEL "preview"' >> src/scmversion/tag.h
echo '#define UPDATER_RELEASE_IS_OFFICIAL 1' >> src/scmversion/tag.h
- name: Tag as Rolling Release
- name: Tag as Stable Release
if: github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_TAG "latest"' >> src/scmversion/tag.h
echo '#pragma once' > src/scmversion/tag.h
echo '#define UPDATER_RELEASE_CHANNEL "latest"' >> src/scmversion/tag.h
echo '#define UPDATER_RELEASE_IS_OFFICIAL 1' >> src/scmversion/tag.h
- name: Download Patch Archives
shell: bash
run: |
cd data/resources
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
curl --retry 5 --retry-all-errors -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl --retry 5 --retry-all-errors -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
- name: Generate CMake
shell: bash
run: |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_TOOLCHAIN_FILE="$HOME/toolchain.cmake" -DLCONVERT_EXE="$HOME/deps/host/bin/lconvert" -DHOST_MIN_PAGE_SIZE=4096 -DHOST_MAX_PAGE_SIZE=16384 -DHOST_CACHE_LINE_SIZE=64 -DBUILD_QT_FRONTEND=ON -DBUILD_MINI_FRONTEND=ON
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_TOOLCHAIN_FILE="$HOME/toolchain.cmake" -DCMAKE_PREFIX_PATH="$HOME/deps/cross" -DLCONVERT_EXE="$HOME/deps/host/bin/lconvert" -DHOST_MIN_PAGE_SIZE=4096 -DHOST_MAX_PAGE_SIZE=16384 -DHOST_CACHE_LINE_SIZE=64 -DBUILD_QT_FRONTEND=ON -DBUILD_MINI_FRONTEND=ON
- name: Compile Build
shell: bash
@@ -97,7 +94,7 @@ jobs:
scripts/packaging/appimage/make-cross-appimage.sh -inject-libc duckstation-mini ${{ matrix.arch }} "$(realpath build)" "$HOME/deps/cross" "/${{ matrix.arch }}-chroot"
- name: Upload AppImages
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: "linux-${{ matrix.arch }}-appimage"
path: "DuckStation-*.AppImage"

View File

@@ -1,118 +0,0 @@
name: 📦 Linux Flatpak
on:
workflow_call:
inputs:
flathub_publish:
required: false
type: boolean
default: false
flathub_branch:
required: false
type: string
default: "stable"
workflow_dispatch:
jobs:
linux-flatpak-build:
name: "Build"
strategy:
fail-fast: true
matrix:
setup: [{arch: "x86_64", runner: "ubuntu-22.04"}, {arch: "aarch64", runner: "ubuntu-24.04-arm"}]
runs-on: ${{ matrix.setup.runner }}
container:
image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.9
options: --privileged
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
set-safe-directory: ${{ env.GITHUB_WORKSPACE }}
# Work around container ownership issue
- name: Set Safe Directory
shell: bash
run: git config --global --add safe.directory "*"
- name: Initialize Build Tag
run: |
echo '#pragma once' > src/scmversion/tag.h
- name: Set Build Tags
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
- name: Tag as Preview Release
if: github.ref == 'refs/heads/master'
run: |
echo '#define SCM_RELEASE_TAG "preview"' >> src/scmversion/tag.h
- name: Tag as Rolling Release
if: github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_TAG "latest"' >> src/scmversion/tag.h
- name: Download Patch Archives
shell: bash
run: |
cd data/resources
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
- name: Generate AppStream XML
run: |
scripts/packaging/generate-metainfo.sh scripts/packaging/flatpak
cat scripts/packaging/flatpak/org.duckstation.DuckStation.metainfo.xml
- name: Validate AppStream XML
run: flatpak-builder-lint appstream scripts/packaging/flatpak/org.duckstation.DuckStation.metainfo.xml
- name: Validate Manifest
run: flatpak-builder-lint manifest scripts/packaging/flatpak/org.duckstation.DuckStation.yaml
- name: Build Flatpak
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: duckstation-${{ matrix.setup.arch }}.flatpak
upload-artifact: false
manifest-path: scripts/packaging/flatpak/org.duckstation.DuckStation.yaml
arch: ${{ matrix.setup.arch }}
build-bundle: true
verbose: true
mirror-screenshots-url: https://dl.flathub.org/media
branch: stable
cache: true
restore-cache: true
cache-key: flatpak-${{ hashFiles('scripts/packaging/flatpak/**/*.yaml') }}
- name: Validate Build
run: |
flatpak-builder-lint repo repo
- name: Push To Flathub Beta
if: inputs.flathub_publish && inputs.flathub_branch == 'beta'
uses: flatpak/flatpak-github-actions/flat-manager@v6
with:
flat-manager-url: https://hub.flathub.org/
repository: stable
token: ${{ secrets.FLATHUB_BETA_TOKEN }}
build-log-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- name: Push To Flathub Stable
if: inputs.flathub_publish && inputs.flathub_branch == 'stable'
uses: flatpak/flatpak-github-actions/flat-manager@v6
with:
flat-manager-url: https://hub.flathub.org/
repository: stable
token: ${{ secrets.FLATHUB_STABLE_TOKEN }}
build-log-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- name: Upload Flatpak
uses: actions/upload-artifact@v4
with:
name: "linux-flatpak-${{ matrix.setup.arch }}"
path: "duckstation-${{ matrix.setup.arch }}.flatpak"

View File

@@ -4,76 +4,71 @@ on:
workflow_call:
workflow_dispatch:
permissions:
contents: read
jobs:
macos-build:
name: "Universal"
runs-on: macos-14
timeout-minutes: 120
runs-on: macos-15
timeout-minutes: 240
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Use Xcode 16.1
run: sudo xcode-select -s /Applications/Xcode_16.1.app
- name: Use Xcode 26
run: sudo xcode-select -s /Applications/Xcode_26.0.app
- name: Install packages
shell: bash
run: |
brew install ninja
- name: Download Metal Toolchain
run: xcodebuild -downloadComponent MetalToolchain
- name: Cache Dependencies
id: cache-deps-mac
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/deps
key: deps-mac ${{ hashFiles('scripts/deps/build-dependencies-mac.sh') }}
key: deps-mac ${{ hashFiles('scripts/deps/build-dependencies-mac.sh', 'scripts/deps/versions') }}
- name: Build Dependencies
if: steps.cache-deps-mac.outputs.cache-hit != 'true'
run: scripts/deps/build-dependencies-mac.sh "$HOME/deps"
- name: Initialize Build Tag
run: |
echo '#pragma once' > src/scmversion/tag.h
- name: Set Build Tags
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_ASSET "duckstation-mac-release.zip"' >> src/scmversion/tag.h
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
- name: Tag as Preview Release
if: github.ref == 'refs/heads/master'
run: |
echo '#define SCM_RELEASE_TAG "preview"' >> src/scmversion/tag.h
echo '#pragma once' > src/scmversion/tag.h
echo '#define UPDATER_RELEASE_CHANNEL "preview"' >> src/scmversion/tag.h
echo '#define UPDATER_RELEASE_IS_OFFICIAL 1' >> src/scmversion/tag.h
- name: Tag as Rolling Release
- name: Tag as Stable Release
if: github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_TAG "latest"' >> src/scmversion/tag.h
echo '#pragma once' > src/scmversion/tag.h
echo '#define UPDATER_RELEASE_CHANNEL "latest"' >> src/scmversion/tag.h
echo '#define UPDATER_RELEASE_IS_OFFICIAL 1' >> src/scmversion/tag.h
- name: Download Patch Archives
shell: bash
run: |
cd data/resources
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
curl --retry 5 --retry-all-errors -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl --retry 5 --retry-all-errors -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
- name: Compile and Zip .app
shell: bash
run: |
mkdir build
cd build
export MACOSX_DEPLOYMENT_TARGET=11.0
export MACOSX_DEPLOYMENT_TARGET=13.3
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENGL=OFF -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -G Ninja ..
cmake --build . --parallel
mv bin/DuckStation.app .
codesign -s - --deep -f -v DuckStation.app
zip -r duckstation-mac-release.zip DuckStation.app/
zip -9 -r duckstation-mac-release.zip DuckStation.app/
- name: Upload MacOS .app
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: "macos"
path: "build/duckstation-mac-release.zip"

View File

@@ -6,8 +6,8 @@ on:
paths-ignore:
- '**.md'
- 'appveyor.yml'
- 'extras/yamllint-config.yaml'
- 'scripts/*'
- '.github/ISSUE_TEMPLATE/*'
push:
branches:
- master
@@ -15,8 +15,11 @@ on:
paths-ignore:
- '**.md'
- 'appveyor.yml'
- 'extras/yamllint-config.yaml'
- 'scripts/*'
- '.github/ISSUE_TEMPLATE/*'
permissions:
contents: write
jobs:
windows:
@@ -28,74 +31,73 @@ jobs:
linux-cross-appimage:
name: 🐧 Linux Cross-Compiled AppImage
uses: "./.github/workflows/linux-cross-appimage-build.yml"
linux-flatpak:
name: 📦 Linux Flatpak
uses: "./.github/workflows/linux-flatpak-build.yml"
macos:
name: 🍎 MacOS
uses: "./.github/workflows/macos-build.yml"
create-release:
name: 📤 Create Release
needs: [windows, linux-appimage, linux-cross-appimage, linux-flatpak, macos]
needs: [windows, linux-appimage, linux-cross-appimage, macos]
runs-on: ubuntu-22.04
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
path: ./artifacts/
merge-multiple: true
- name: Display Downloaded Artifacts
run: find ./artifacts/
run: find ./artifacts/ -type f | sort
- name: Create Preview Release
if: github.ref == 'refs/heads/master'
uses: "marvinpinto/action-automatic-releases@latest"
uses: marvinpinto/action-automatic-releases@d68defdd11f9dcc7f52f35c1b7c236ee7513bcc1
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "preview"
prerelease: true
title: "Latest Preview Build"
files: |
./artifacts/windows-x64/duckstation-windows-x64-release.zip
./artifacts/windows-x64/duckstation-windows-x64-release-symbols.zip
./artifacts/windows-x64-sse2/duckstation-windows-x64-sse2-release.zip
./artifacts/windows-x64-sse2/duckstation-windows-x64-sse2-release-symbols.zip
./artifacts/windows-arm64/duckstation-windows-arm64-release.zip
./artifacts/windows-arm64/duckstation-windows-arm64-release-symbols.zip
./artifacts/linux-x64-appimage/DuckStation-x64.AppImage
./artifacts/linux-x64-sse2-appimage/DuckStation-x64-SSE2.AppImage
./artifacts/linux-arm64-appimage/DuckStation-arm64.AppImage
./artifacts/linux-arm64-appimage/DuckStation-Mini-arm64.AppImage
./artifacts/linux-armhf-appimage/DuckStation-armhf.AppImage
./artifacts/linux-armhf-appimage/DuckStation-Mini-armhf.AppImage
./artifacts/linux-flatpak-x86_64/duckstation-x86_64.flatpak
./artifacts/linux-flatpak-aarch64/duckstation-aarch64.flatpak
./artifacts/macos/duckstation-mac-release.zip
./artifacts/duckstation-windows-x64-installer.exe
./artifacts/duckstation-windows-x64-release.zip
./artifacts/duckstation-windows-x64-release-symbols.zip
./artifacts/duckstation-windows-x64-sse2-installer.exe
./artifacts/duckstation-windows-x64-sse2-release.zip
./artifacts/duckstation-windows-x64-sse2-release-symbols.zip
./artifacts/duckstation-windows-arm64-installer.exe
./artifacts/duckstation-windows-arm64-release.zip
./artifacts/duckstation-windows-arm64-release-symbols.zip
./artifacts/DuckStation-x64.AppImage
./artifacts/DuckStation-x64-SSE2.AppImage
./artifacts/DuckStation-arm64.AppImage
./artifacts/DuckStation-Mini-arm64.AppImage
./artifacts/DuckStation-armhf.AppImage
./artifacts/DuckStation-Mini-armhf.AppImage
./artifacts/duckstation-mac-release.zip
- name: Create Rolling Release
if: github.ref == 'refs/heads/dev'
uses: "marvinpinto/action-automatic-releases@latest"
uses: marvinpinto/action-automatic-releases@d68defdd11f9dcc7f52f35c1b7c236ee7513bcc1
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: false
title: "Latest Rolling Release"
files: |
./artifacts/windows-x64/duckstation-windows-x64-release.zip
./artifacts/windows-x64/duckstation-windows-x64-release-symbols.zip
./artifacts/windows-x64-sse2/duckstation-windows-x64-sse2-release.zip
./artifacts/windows-x64-sse2/duckstation-windows-x64-sse2-release-symbols.zip
./artifacts/windows-arm64/duckstation-windows-arm64-release.zip
./artifacts/windows-arm64/duckstation-windows-arm64-release-symbols.zip
./artifacts/linux-x64-appimage/DuckStation-x64.AppImage
./artifacts/linux-x64-sse2-appimage/DuckStation-x64-SSE2.AppImage
./artifacts/linux-arm64-appimage/DuckStation-arm64.AppImage
./artifacts/linux-arm64-appimage/DuckStation-Mini-arm64.AppImage
./artifacts/linux-armhf-appimage/DuckStation-armhf.AppImage
./artifacts/linux-armhf-appimage/DuckStation-Mini-armhf.AppImage
./artifacts/linux-flatpak-x86_64/duckstation-x86_64.flatpak
./artifacts/linux-flatpak-aarch64/duckstation-aarch64.flatpak
./artifacts/macos/duckstation-mac-release.zip
./artifacts/duckstation-windows-x64-installer.exe
./artifacts/duckstation-windows-x64-release.zip
./artifacts/duckstation-windows-x64-release-symbols.zip
./artifacts/duckstation-windows-x64-sse2-installer.exe
./artifacts/duckstation-windows-x64-sse2-release.zip
./artifacts/duckstation-windows-x64-sse2-release-symbols.zip
./artifacts/duckstation-windows-arm64-installer.exe
./artifacts/duckstation-windows-arm64-release.zip
./artifacts/duckstation-windows-arm64-release-symbols.zip
./artifacts/DuckStation-x64.AppImage
./artifacts/DuckStation-x64-SSE2.AppImage
./artifacts/DuckStation-arm64.AppImage
./artifacts/DuckStation-Mini-arm64.AppImage
./artifacts/DuckStation-armhf.AppImage
./artifacts/DuckStation-Mini-armhf.AppImage
./artifacts/duckstation-mac-release.zip

31
.github/workflows/translation-lint.yml vendored Normal file
View File

@@ -0,0 +1,31 @@
name: Translation Lint
on:
pull_request:
paths:
- 'src/duckstation-qt/translations/*.ts'
push:
branches:
- master
- dev
paths:
- 'src/duckstation-qt/translations/*.ts'
workflow_dispatch:
permissions:
contents: read
jobs:
translation-lint:
runs-on: ubuntu-slim
timeout-minutes: 120
steps:
- uses: actions/checkout@v6
# Meh, can't be bothered to work out exactly which one was modified, just check them all.
- name: Check Translation Placeholders
shell: bash
run: |
for i in src/duckstation-qt/translations/*.ts; do
python scripts/verify_translation_placeholders.py "$i"
done

View File

@@ -3,23 +3,26 @@ name: Upload Caches
on:
workflow_dispatch:
permissions:
contents: read
jobs:
upload-windows-cache:
runs-on: windows-2022
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: |
dep/msvc/deps-arm64
dep/msvc/deps-x64
key: deps ${{ hashFiles('scripts/deps/build-dependencies-windows-arm64.bat', 'scripts/deps/build-dependencies-windows-x64.bat') }}
key: deps ${{ hashFiles('scripts/deps/build-dependencies-windows-arm64.bat', 'scripts/deps/build-dependencies-windows-x64.bat', 'scripts/deps/versions') }}
- name: Zip Cache Files
if: steps.cache-deps.outputs.cache-hit == 'true'
@@ -30,7 +33,7 @@ jobs:
- name: Upload Cache Files
if: steps.cache-deps.outputs.cache-hit == 'true'
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: "windows"
path: "deps-*.zip"

View File

@@ -4,24 +4,63 @@ on:
workflow_call:
workflow_dispatch:
permissions:
contents: read
jobs:
windows-x64-build:
name: "x64"
windows-build:
name: "${{ matrix.name }}"
runs-on: windows-2022
timeout-minutes: 120
timeout-minutes: 240
strategy:
matrix:
include:
- name: "x64"
arch: "x64"
vcvars: "x64"
config: "ReleaseLTCG-Clang"
platform: "x64"
bindir: "x64"
assetname: "duckstation-windows-x64-release.zip"
installerassetname: "duckstation-windows-x64-installer.exe"
updatername: "updater-x64-ReleaseLTCG.exe"
installername: "installer-x64-ReleaseLTCG.exe"
uninstallername: "uninstaller-x64-ReleaseLTCG.exe"
- name: "x64 SSE2"
arch: "x64-sse2"
vcvars: "x64"
config: "ReleaseLTCG-Clang-SSE2"
platform: "x64"
bindir: "x64"
assetname: "duckstation-windows-x64-sse2-release.zip"
installerassetname: "duckstation-windows-x64-sse2-installer.exe"
updatername: "updater-x64-ReleaseLTCG-SSE2.exe"
installername: "installer-x64-ReleaseLTCG-SSE2.exe"
uninstallername: "uninstaller-x64-ReleaseLTCG-SSE2.exe"
- name: "ARM64"
arch: "arm64"
vcvars: "amd64_arm64"
config: "ReleaseLTCG-Clang"
platform: "ARM64"
bindir: "ARM64"
assetname: "duckstation-windows-arm64-release.zip"
installerassetname: "duckstation-windows-arm64-installer.exe"
updatername: "updater-ARM64-ReleaseLTCG.exe"
installername: "installer-ARM64-ReleaseLTCG.exe"
uninstallername: "uninstaller-ARM64-ReleaseLTCG.exe"
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: |
dep/msvc/deps-arm64
dep/msvc/deps-x64
key: deps ${{ hashFiles('scripts/deps/build-dependencies-windows-arm64.bat', 'scripts/deps/build-dependencies-windows-x64.bat') }}
key: deps ${{ hashFiles('scripts/deps/build-dependencies-windows-arm64.bat', 'scripts/deps/build-dependencies-windows-x64.bat', 'scripts/deps/versions') }}
- name: Build x64 Dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
@@ -35,29 +74,21 @@ jobs:
DEBUG: 0
run: scripts/deps/build-dependencies-windows-arm64.bat
- name: Initialize Build Tag
shell: cmd
run: |
echo #pragma once > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
shell: cmd
run: |
echo #define SCM_RELEASE_ASSET "duckstation-windows-x64-release.zip" >> src/scmversion/tag.h
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h
- name: Tag as Preview Release
if: github.ref == 'refs/heads/master'
shell: cmd
run: |
echo #define SCM_RELEASE_TAG "preview" >> src/scmversion/tag.h
echo #pragma once > src/scmversion/tag.h
echo #define UPDATER_RELEASE_CHANNEL "preview" >> src/scmversion/tag.h
echo #define UPDATER_RELEASE_IS_OFFICIAL 1 >> src/scmversion/tag.h
- name: Tag as Rolling Release Build
- name: Tag as Stable Build
if: github.ref == 'refs/heads/dev'
shell: cmd
run: |
echo #define SCM_RELEASE_TAG "latest" >> src/scmversion/tag.h
echo #pragma once > src/scmversion/tag.h
echo #define UPDATER_RELEASE_CHANNEL "latest" >> src/scmversion/tag.h
echo #define UPDATER_RELEASE_IS_OFFICIAL 1 >> src/scmversion/tag.h
- name: Update RC Version Fields
shell: cmd
@@ -71,230 +102,46 @@ jobs:
shell: cmd
run: |
cd data/resources
aria2c -Z "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
aria2c -Z "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
curl --retry 5 --retry-all-errors -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl --retry 5 --retry-all-errors -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
- name: Compile x64 Release Build
- name: Compile ${{ matrix.name }} Release Build
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
msbuild duckstation.sln -t:Build -p:Platform=x64;Configuration=ReleaseLTCG-Clang
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.vcvars }}
msbuild duckstation.sln -t:Build -p:Platform=${{ matrix.platform }};Configuration=${{ matrix.config }}
- name: Create x64 Symbols Archive
- name: Create ${{ matrix.name }} Symbols Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-release-symbols.zip ./bin/x64/*.pdb
"C:\Program Files\7-Zip\7z.exe" a -mx9 -r duckstation-windows-${{ matrix.arch }}-release-symbols.zip ./bin/${{ matrix.bindir }}/*.pdb
- name: Remove Extra Bloat Before Archiving
shell: cmd
run: |
del /Q bin\x64\*.pdb bin\x64\*.exp bin\x64\*.lib bin\x64\*.iobj bin\x64\*.ipdb bin\x64\common-tests*
rename bin\x64\updater-x64-ReleaseLTCG.exe updater.exe
del /Q bin\${{ matrix.bindir }}\*.pdb bin\${{ matrix.bindir }}\*.exp bin\${{ matrix.bindir }}\*.lib bin\${{ matrix.bindir }}\*.iobj bin\${{ matrix.bindir }}\*.ipdb bin\${{ matrix.bindir }}\common-tests*
- name: Create x64 Release Archive
- name: Rename Updater and Installer Programs
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-release.zip ./bin/x64/*
rename bin\${{ matrix.bindir }}\${{ matrix.updatername }} updater.exe
rename bin\${{ matrix.bindir }}\${{ matrix.uninstallername }} uninstaller.exe
move bin\${{ matrix.bindir }}\${{ matrix.installername }} ${{ matrix.installerassetname }}.tmp
- name: Upload x64 Release Artifact
uses: actions/upload-artifact@v4
- name: Create ${{ matrix.name }} Release Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -mx9 -r ${{ matrix.assetname }} ./bin/${{ matrix.bindir }}/*
- name: Create ${{ matrix.name }} Installer Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -mx9 -r installer.7z ./bin/${{ matrix.bindir }}/*
copy /B ${{ matrix.installerassetname }}.tmp + installer.7z ${{ matrix.installerassetname }}
del /Q ${{ matrix.installerassetname }}.tmp
- name: Upload ${{ matrix.name }} Artifacts
uses: actions/upload-artifact@v6
with:
name: "windows-x64"
path: "duckstation-windows-x64-release*.zip"
windows-x64-sse2-build:
name: "x64 SSE2"
runs-on: windows-2022
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4
with:
path: |
dep/msvc/deps-arm64
dep/msvc/deps-x64
key: deps ${{ hashFiles('scripts/deps/build-dependencies-windows-arm64.bat', 'scripts/deps/build-dependencies-windows-x64.bat') }}
- name: Build x64 Dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
env:
DEBUG: 0
run: scripts/deps/build-dependencies-windows-x64.bat
- name: Build ARM64 Dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
env:
DEBUG: 0
run: scripts/deps/build-dependencies-windows-arm64.bat
- name: Initialize Build Tag
shell: cmd
run: |
echo #pragma once > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
shell: cmd
run: |
echo #define SCM_RELEASE_ASSET "duckstation-windows-x64-sse2-release.zip" >> src/scmversion/tag.h
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h
- name: Tag as Preview Release
if: github.ref == 'refs/heads/master'
shell: cmd
run: |
echo #define SCM_RELEASE_TAG "preview" >> src/scmversion/tag.h
- name: Tag as Rolling Release Build
if: github.ref == 'refs/heads/dev'
shell: cmd
run: |
echo #define SCM_RELEASE_TAG "latest" >> src/scmversion/tag.h
- name: Update RC Version Fields
shell: cmd
run: |
cd src\scmversion
call update_rc_version.bat
cd ..\..
git update-index --assume-unchanged src/duckstation-qt/duckstation-qt.rc
- name: Download Patch Archives
shell: cmd
run: |
cd data/resources
aria2c -Z "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
aria2c -Z "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
- name: Compile x64 Release Build
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
msbuild duckstation.sln -t:Build -p:Platform=x64;Configuration=ReleaseLTCG-Clang-SSE2
- name: Create x64 Symbols Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-sse2-release-symbols.zip ./bin/x64/*.pdb
- name: Remove Extra Bloat Before Archiving
shell: cmd
run: |
del /Q bin\x64\*.pdb bin\x64\*.exp bin\x64\*.lib bin\x64\*.iobj bin\x64\*.ipdb bin\x64\common-tests*
rename bin\x64\updater-x64-ReleaseLTCG-SSE2.exe updater.exe
- name: Create x64 Release Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-sse2-release.zip ./bin/x64/*
- name: Upload x64 Release Artifact
uses: actions/upload-artifact@v4
with:
name: "windows-x64-sse2"
path: "duckstation-windows-x64-sse2-release*.zip"
windows-arm64-build:
name: "ARM64"
runs-on: windows-2022
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4
with:
path: |
dep/msvc/deps-arm64
dep/msvc/deps-x64
key: deps ${{ hashFiles('scripts/deps/build-dependencies-windows-arm64.bat', 'scripts/deps/build-dependencies-windows-x64.bat') }}
- name: Build x64 Dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
env:
DEBUG: 0
run: scripts/deps/build-dependencies-windows-x64.bat
- name: Build ARM64 Dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
env:
DEBUG: 0
run: scripts/deps/build-dependencies-windows-arm64.bat
- name: Initialize Build Tag
shell: cmd
run: |
echo #pragma once > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
shell: cmd
run: |
echo #define SCM_RELEASE_ASSET "duckstation-windows-arm64-release.zip" >> src/scmversion/tag.h
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h
- name: Tag as Preview Release
if: github.ref == 'refs/heads/master'
shell: cmd
run: |
echo #define SCM_RELEASE_TAG "preview" >> src/scmversion/tag.h
- name: Tag as Rolling Release
if: github.ref == 'refs/heads/dev'
shell: cmd
run: |
echo #define SCM_RELEASE_TAG "latest" >> src/scmversion/tag.h
- name: Update RC Version Fields
shell: cmd
run: |
cd src\scmversion
call update_rc_version.bat
cd ..\..
git update-index --assume-unchanged src/duckstation-qt/duckstation-qt.rc
- name: Download Patch Archives
shell: cmd
run: |
cd data/resources
aria2c -Z "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
aria2c -Z "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
- name: Compile ARM64 Release Build
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
msbuild duckstation.sln -t:Build -p:Platform=ARM64;Configuration=ReleaseLTCG-Clang
- name: Create ARM64 symbols archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-arm64-release-symbols.zip ./bin/ARM64/*.pdb
- name: Remove Extra Bloat Before Archiving
shell: cmd
run: |
del /Q bin\ARM64\*.pdb bin\ARM64\*.exp bin\ARM64\*.lib bin\ARM64\*.iobj bin\ARM64\*.ipdb bin\ARM64\common-tests*
rename bin\ARM64\updater-ARM64-ReleaseLTCG.exe updater.exe
- name: Create ARM64 Release Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-arm64-release.zip ./bin/ARM64/*
- name: Upload ARM64 Release Artifact
uses: actions/upload-artifact@v4
with:
name: "windows-arm64"
path: "duckstation-windows-arm64-release*.zip"
name: "windows-${{ matrix.arch }}"
path: "duckstation-windows-${{ matrix.arch }}-*.*"

View File

@@ -1,3 +1,13 @@
# SPDX-FileCopyrightText: 2019-2026 Connor McLaughlin <stenzek@gmail.com>
# SPDX-License-Identifier: CC-BY-NC-ND-4.0 + Packaging Restriction
#
# NOTE: In addition to the terms of CC-BY-NC-ND-4.0, you may not use this file to create
# packages or build recipes without explicit permission from the copyright holder.
#
# Unless otherwise specified, other files supporting the build system are covered under
# the same terms.
#
cmake_minimum_required(VERSION 3.19)
project(duckstation C CXX)
@@ -12,8 +22,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
endif()
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug|Devel|MinSizeRel|RelWithDebInfo|Release")
message(STATUS "CMAKE_BUILD_TYPE not set, defaulting to Release.")
set(CMAKE_BUILD_TYPE "Release")
message(FATAL_ERROR "CMAKE_BUILD_TYPE not set. Please set it first.")
endif()
# Pull in modules.
@@ -41,11 +50,8 @@ endif()
# Release build optimizations for MSVC.
if(MSVC)
add_definitions("/D_CRT_SECURE_NO_WARNINGS")
add_compile_definitions("_UNICODE" "UNICODE" "_CRT_NONSTDC_NO_DEPRECATE" "_CRT_SECURE_NO_WARNINGS")
foreach(config CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
# Set warning level 3 instead of 4.
string(REPLACE "/W3" "/W4" ${config} "${${config}}")
# Enable intrinsic functions, disable minimal rebuild, UTF-8 source, set __cplusplus version.
set(${config} "${${config}} /Oi /Gm- /utf-8 /Zc:__cplusplus")
endforeach()
@@ -64,6 +70,10 @@ if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /OPT:ICF")
set(CMAKE_EXE_LINKER_FLAGS_DEVEL "${CMAKE_EXE_LINKER_FLAGS_DEVEL} /OPT:REF /OPT:ICF")
else()
# Force debug symbols for Linux builds.
add_debug_symbol_flag(CMAKE_C_FLAGS_RELEASE)
add_debug_symbol_flag(CMAKE_CXX_FLAGS_RELEASE)
endif()
# Warning disables.
@@ -89,21 +99,20 @@ else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti")
endif()
# Rewrite paths in macros to be relative to the source directory.
# Helpful for reproducible builds.
if("${CMAKE_BUILD_TYPE}" STREQUAL "Release" AND NOT CMAKE_GENERATOR MATCHES "Xcode" AND
(COMPILER_CLANG OR COMPILER_CLANG_CL OR COMPILER_GCC))
file(RELATIVE_PATH source_dir_remap "${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}")
string(REGEX REPLACE "\/+$" "" source_dir_remap "${source_dir_remap}")
set(source_dir_remap_str "\"${CMAKE_SOURCE_DIR}\"=\"${source_dir_remap}\"")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffile-prefix-map=${source_dir_remap_str}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffile-prefix-map=${source_dir_remap_str}")
endif()
# Write binaries to a seperate directory.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
# Installation directories. If INSTALL_SELF_CONTAINED is set, everything goes
# into one directory, otherwise CMAKE_INSTALL_PREFIX/bin is used (for Flatpak).
if(ALLOW_INSTALL)
if(INSTALL_SELF_CONTAINED)
set(CMAKE_INSTALL_BINDIR "${CMAKE_INSTALL_PREFIX}")
set(CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}")
else()
# Let GNUInstallDirs set the destinations.
include(GNUInstallDirs)
endif()
endif()
# Enable large file support on Linux 32-bit platforms.
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
add_definitions("-D_FILE_OFFSET_BITS=64")
@@ -114,9 +123,6 @@ if(BUILD_TESTS)
enable_testing()
endif()
# Prevent fmt from being built with exceptions, or being thrown at call sites.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFMT_EXCEPTIONS=0")
# Recursively include the source tree.
add_subdirectory(dep)
add_subdirectory(src)

View File

@@ -1,47 +0,0 @@
# Borrowed from PCSX2.
if(APPLE)
function(add_metal_sources target sources)
if(CMAKE_GENERATOR MATCHES "Xcode")
# If we're generating an xcode project, you can just add the shaders to the main pcsx2 target and xcode will deal with them properly
# This will make sure xcode supplies code completion, etc (if you use a custom command, it won't)
set_target_properties(${target} PROPERTIES
XCODE_ATTRIBUTE_MTL_ENABLE_DEBUG_INFO INCLUDE_SOURCE
)
foreach(shader IN LISTS sources)
target_sources(${target} PRIVATE ${shader})
set_source_files_properties(${shader} PROPERTIES LANGUAGE METAL)
endforeach()
else()
function(generateMetallib std triple outputName)
set(MetalShaderOut)
set(flags
-ffast-math
$<$<NOT:$<CONFIG:Release,MinSizeRel>>:-gline-tables-only>
$<$<NOT:$<CONFIG:Release,MinSizeRel>>:-MO>
)
foreach(shader IN LISTS sources)
file(RELATIVE_PATH relativeShader "${CMAKE_SOURCE_DIR}" "${shader}")
set(shaderOut ${CMAKE_CURRENT_BINARY_DIR}/${outputName}/${relativeShader}.air)
list(APPEND MetalShaderOut ${shaderOut})
get_filename_component(shaderDir ${shaderOut} DIRECTORY)
add_custom_command(OUTPUT ${shaderOut}
COMMAND ${CMAKE_COMMAND} -E make_directory ${shaderDir}
COMMAND xcrun metal ${flags} -std=${std} -target ${triple} -o ${shaderOut} -c ${shader}
DEPENDS ${shader}
)
set(metallib ${CMAKE_CURRENT_BINARY_DIR}/${outputName}.metallib)
endforeach()
add_custom_command(OUTPUT ${metallib}
COMMAND xcrun metallib -o ${metallib} ${MetalShaderOut}
DEPENDS ${MetalShaderOut}
)
target_sources(${target} PRIVATE ${metallib})
set_source_files_properties(${metallib} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
endfunction()
generateMetallib(macos-metal2.0 air64-apple-macos10.13 default)
generateMetallib(macos-metal2.2 air64-apple-macos10.15 Metal22)
generateMetallib(macos-metal2.3 air64-apple-macos11.0 Metal23)
endif()
endfunction()
endif()

View File

@@ -42,8 +42,6 @@ function(copy_base_translations target)
target_sources(${target} PRIVATE ${path})
if(APPLE)
set_source_files_properties(${path} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/translations)
elseif(ALLOW_INSTALL)
install(FILES "${path}" DESTINATION "${CMAKE_INSTALL_BINDIR}/translations")
else()
add_custom_command(TARGET ${target} POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${path}" "$<TARGET_FILE_DIR:${target}>/translations")

View File

@@ -10,8 +10,6 @@ option(DISABLE_SSE4 "Build with SSE4 instructions disabled, reduces performance"
if(LINUX OR BSD)
option(ENABLE_X11 "Support X11 window system" ON)
option(ENABLE_WAYLAND "Support Wayland window system" ON)
option(ALLOW_INSTALL "Allow installation to CMAKE_INSTALL_PREFIX" OFF)
option(INSTALL_SELF_CONTAINED "Make self-contained install, i.e. everything in one directory" ON)
endif()
if(APPLE)
option(SKIP_POSTPROCESS_BUNDLE "Disable bundle post-processing, including Qt additions" OFF)

View File

@@ -26,18 +26,23 @@ if(BUILD_TESTS)
message(STATUS "Building unit tests.")
endif()
if(ALLOW_INSTALL)
message(WARNING "Install target is enabled. This will install all DuckStation files into:
${CMAKE_INSTALL_PREFIX}
It does **not** use the LSB subdirectories of bin, share, etc, so you should disable this option if it is set to /usr or /usr/local.")
if(INSTALL_SELF_CONTAINED)
message(STATUS "Creating self-contained install at ${CMAKE_INSTALL_PREFIX}")
else()
message(STATUS "Creating relative install at ${CMAKE_INSTALL_PREFIX}")
message(STATUS " CMAKE_INSTALL_BINDIR: ${CMAKE_INSTALL_BINDIR}")
# Refuse to build in hostile package environments. The code and build script licenses do not allow for
# packages, and I'm sick of dealing with people complaining about things broken by packagers, and then
# being attacked by package maintainers who violate their distribution's codes of conduct. Attempts to
# request removal of these packages have been unsuccessful, so we have to resort to this.
# NOTE: You do NOT have permission to distribute build scripts or patches that modify the build system
# without explicit permission from the copyright holder.
# DuckStation's code is public so it can be audited and learned from. Not to repackage.
# This is why we can't have nice things.
if(EXISTS /etc/os-release)
file(READ /etc/os-release OS_RELEASE_CONTENT)
if(OS_RELEASE_CONTENT MATCHES "ID=arch" OR OS_RELEASE_CONTENT MATCHES "ID_LIKE=arch" OR OS_RELEASE_CONTENT MATCHES "ID=nixos")
message(FATAL_ERROR "Unsupported environment.")
endif()
endif()
if(DEFINED ENV{NIX_BUILD_TOP} OR DEFINED ENV{NIX_STORE} OR DEFINED ENV{IN_NIX_SHELL} OR EXISTS "/etc/NIXOS")
message(FATAL_ERROR "Unsupported environment.")
endif()
if(DEFINED HOST_MIN_PAGE_SIZE AND DEFINED HOST_MAX_PAGE_SIZE)
message(STATUS "Building with a dynamic page size of ${HOST_MIN_PAGE_SIZE} - ${HOST_MAX_PAGE_SIZE} bytes.")

View File

@@ -1,52 +1,60 @@
# From PCSX2: On macOS, Mono.framework contains an ancient version of libpng. We don't want that.
# Avoid it by telling cmake to avoid finding frameworks while we search for libpng.
if(APPLE)
set(FIND_FRAMEWORK_BACKUP ${CMAKE_FIND_FRAMEWORK})
set(CMAKE_FIND_FRAMEWORK NEVER)
# Set prefix path to look for our bundled dependencies first on Windows.
if(WIN32 AND CPU_ARCH_X64)
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/dep/msvc/deps-x64")
elseif(WIN32 AND CPU_ARCH_ARM64)
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/dep/msvc/deps-arm64")
endif()
# Enable threads everywhere.
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
find_package(SDL3 3.2.0 REQUIRED)
find_package(zstd 1.5.6 REQUIRED)
# pkg-config gets pulled transitively on some platforms.
if(NOT WIN32 AND NOT APPLE)
find_package(PkgConfig REQUIRED)
endif()
# libpng relies on zlib, which we need the system version for on Mac.
if(APPLE OR CPU_ARCH_ARM32 OR CPU_ARCH_ARM64)
find_package(ZLIB REQUIRED)
endif()
# Enforce use of bundled dependencies to avoid conflicts with system libraries.
set(FIND_ROOT_PATH_BACKUP ${CMAKE_FIND_ROOT_PATH})
set(FIND_ROOT_PATH_MODE_INCLUDE_BACKUP ${CMAKE_FIND_ROOT_PATH_MODE_INCLUDE})
set(FIND_ROOT_PATH_MODE_LIBRARY_BACKUP ${CMAKE_FIND_ROOT_PATH_MODE_LIBRARY})
set(FIND_ROOT_PATH_MODE_PACKAGE_BACKUP ${CMAKE_FIND_ROOT_PATH_MODE_PACKAGE})
set(FIND_ROOT_PATH_MODE_PROGRAM_BACKUP ${CMAKE_FIND_ROOT_PATH_MODE_PROGRAM})
set(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH})
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
# Search for local zlib version outside of Mac.
if(NOT APPLE AND NOT CPU_ARCH_ARM32 AND NOT CPU_ARCH_ARM64)
find_package(ZLIB 1.3.1 REQUIRED)
endif()
# Bundled dependencies.
find_package(zstd 1.5.7 REQUIRED)
find_package(WebP REQUIRED) # v1.4.0, spews an error on Linux because no pkg-config.
find_package(ZLIB REQUIRED) # 1.3, but Mac currently doesn't use it.
find_package(PNG 1.6.40 REQUIRED)
find_package(PNG 1.6.54 REQUIRED)
find_package(JPEG REQUIRED)
find_package(Freetype 2.13.2 REQUIRED) # 2.13.3, but flatpak is still on 2.13.2.
find_package(SDL3 3.4.0 REQUIRED)
find_package(Freetype 2.14.1 REQUIRED)
find_package(harfbuzz REQUIRED)
find_package(plutosvg 0.0.6 REQUIRED)
find_package(cpuinfo REQUIRED)
find_package(DiscordRPC 3.4.0 REQUIRED)
find_package(SoundTouch 2.3.3 REQUIRED)
find_package(libzip 1.11.1 REQUIRED)
if(NOT WIN32)
find_package(CURL REQUIRED)
endif()
if(ENABLE_X11)
find_package(X11 REQUIRED)
if (NOT X11_xcb_FOUND OR NOT X11_xcb_randr_FOUND OR NOT X11_X11_xcb_FOUND)
message(FATAL_ERROR "XCB, XCB-randr and X11-xcb are required")
endif()
endif()
if(ENABLE_WAYLAND)
find_package(ECM REQUIRED NO_MODULE)
list(APPEND CMAKE_MODULE_PATH "${ECM_MODULE_PATH}")
find_package(Wayland REQUIRED Egl)
endif()
if(BUILD_QT_FRONTEND)
find_package(Qt6 6.8.0 COMPONENTS Core Gui Widgets LinguistTools REQUIRED)
endif()
find_package(libzip 1.11.4 REQUIRED)
find_package(Shaderc REQUIRED)
find_package(spirv_cross_c_shared REQUIRED)
if(LINUX AND NOT (ALLOW_INSTALL AND INSTALL_SELF_CONTAINED))
if(NOT WIN32 AND NOT APPLE)
find_package(Libbacktrace REQUIRED)
# We need to add the rpath for shaderc to the executable.
get_target_property(SHADERC_LIBRARY Shaderc::shaderc_shared IMPORTED_LOCATION)
get_filename_component(SHADERC_LIBRARY_DIRECTORY ${SHADERC_LIBRARY} DIRECTORY)
@@ -56,24 +64,59 @@ if(LINUX AND NOT (ALLOW_INSTALL AND INSTALL_SELF_CONTAINED))
list(APPEND CMAKE_BUILD_RPATH ${SPIRV_CROSS_LIBRARY_DIRECTORY})
endif()
if(LINUX)
find_package(UDEV REQUIRED)
# Restore system package search path.
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ${FIND_ROOT_PATH_MODE_INCLUDE_BACKUP})
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ${FIND_ROOT_PATH_MODE_LIBRARY_BACKUP})
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ${FIND_ROOT_PATH_MODE_PACKAGE_BACKUP})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ${FIND_ROOT_PATH_MODE_PROGRAM_BACKUP})
set(CMAKE_FIND_ROOT_PATH ${FIND_ROOT_PATH_BACKUP})
# Qt has transitive dependencies on system libs, so do it afterwards.
if(BUILD_QT_FRONTEND)
# All our builds include Qt, so this is not a problem.
set(QT_NO_PRIVATE_MODULE_WARNING ON)
if(LINUX)
find_package(Qt6 6.10.2 COMPONENTS Core Gui GuiPrivate Widgets LinguistTools DBus REQUIRED)
else()
find_package(Qt6 6.10.2 COMPONENTS Core Gui GuiPrivate Widgets LinguistTools REQUIRED)
endif()
# Have to verify it down here, don't want users using unpatched Qt.
if(NOT Qt6_DIR MATCHES "^${CMAKE_PREFIX_PATH}")
message(FATAL_ERROR "Using incorrect Qt library. Check your dependencies.")
endif()
endif()
if(NOT WIN32 AND NOT APPLE)
find_package(Libbacktrace REQUIRED)
# Libraries that are pulled in from host.
if(NOT WIN32)
find_package(CURL REQUIRED)
if(LINUX)
find_package(UDEV REQUIRED)
endif()
if(NOT APPLE)
if(ENABLE_X11)
find_package(X11 REQUIRED)
if (NOT X11_xcb_FOUND OR NOT X11_xcb_randr_FOUND OR NOT X11_X11_xcb_FOUND)
message(FATAL_ERROR "XCB, XCB-randr and X11-xcb are required")
endif()
endif()
if(ENABLE_WAYLAND)
find_package(ECM REQUIRED NO_MODULE)
list(APPEND CMAKE_MODULE_PATH "${ECM_MODULE_PATH}")
find_package(Wayland REQUIRED Egl)
endif()
endif()
endif()
if(NOT ANDROID AND NOT WIN32)
find_package(FFMPEG COMPONENTS avcodec avformat avutil swresample swscale)
if(NOT WIN32)
find_package(FFMPEG 8.0.1 COMPONENTS avcodec avformat avutil swresample swscale)
if(NOT FFMPEG_FOUND)
message(WARNING "FFmpeg not found, using bundled headers.")
endif()
endif()
if(NOT ANDROID AND NOT FFMPEG_FOUND)
if(NOT FFMPEG_FOUND)
set(FFMPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/dep/ffmpeg/include")
endif()
if(APPLE)
set(CMAKE_FIND_FRAMEWORK ${FIND_FRAMEWORK_BACKUP})
endif()

View File

@@ -76,8 +76,8 @@ function(detect_architecture)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1" PARENT_SCOPE)
elseif(MSVC AND NOT DISABLE_SSE4)
# Clang defines these macros, MSVC does not.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D__SSE3__ /D__SSE4_1__")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D__SSE3__ /D__SSE4_1__")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D__SSE3__ /D__SSE4_1__" PARENT_SCOPE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D__SSE3__ /D__SSE4_1__" PARENT_SCOPE)
endif()
elseif(("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm64") AND
CMAKE_SIZEOF_VOID_P EQUAL 8) # Might have an A64 kernel, e.g. Raspbian.
@@ -246,10 +246,13 @@ function(get_scm_version)
endif()
endfunction()
function(install_imported_dep_library name)
get_target_property(SONAME "${name}" IMPORTED_SONAME_RELEASE)
get_target_property(LOCATION "${name}" IMPORTED_LOCATION_RELEASE)
install(FILES "${LOCATION}" RENAME "${SONAME}" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
function(add_debug_symbol_flag var)
# CMake's regex engine is missing so many features...
set(value "${${var}}")
if (NOT " ${value} " MATCHES " -g[1-3]? ")
message(STATUS "Adding -g1 to ${var}.")
set(${var} "${value} -g1" PARENT_SCOPE)
endif()
endfunction()
function(check_cpp20_feature MACRO MINIMUM_VALUE)
@@ -296,3 +299,79 @@ function(check_cpp20_attribute ATTRIBUTE MINIMUM_VALUE)
message(FATAL_ERROR "${ATTRIBUTE} is not supported by your compiler, at least ${MINIMUM_VALUE} is required.")
endif()
endfunction()
if(APPLE)
function(add_metal_sources target sources library_name metal_std)
set(air_files)
set(compile_flags -std=${metal_std} -ffast-math)
foreach(source IN LISTS sources)
get_filename_component(source_name ${source} NAME)
set(air_file ${CMAKE_CURRENT_BINARY_DIR}/${library_name}/${source_name}.air)
list(APPEND air_files ${air_file})
add_custom_command(
OUTPUT ${air_file}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${library_name}
COMMAND xcrun metal ${compile_flags} -o ${air_file} -c ${source}
DEPENDS ${source}
COMMENT "Compiling Metal shader ${source_name}"
)
endforeach()
set(metallib_file ${CMAKE_CURRENT_BINARY_DIR}/${library_name}.metallib)
add_custom_command(
OUTPUT ${metallib_file}
COMMAND xcrun metallib -o ${metallib_file} ${air_files}
DEPENDS ${air_files}
COMMENT "Linking Metal library ${library_name}.metallib"
)
target_sources(${target} PRIVATE ${metallib_file})
set_source_files_properties(${metallib_file} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
endfunction()
endif()
function(add_resources TARGET DEST_SUBDIR SOURCE_DIR)
# Recursively find all files in the source directory
file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS "${SOURCE_DIR}/*")
foreach(SOURCE_FILE IN LISTS SOURCE_FILES)
# Skip directories
if(IS_DIRECTORY "${SOURCE_FILE}")
continue()
endif()
# Get the path relative to SOURCE_DIR
file(RELATIVE_PATH REL_PATH "${SOURCE_DIR}" "${SOURCE_FILE}")
# Get the subdirectory portion (if any)
get_filename_component(REL_SUBDIR "${REL_PATH}" DIRECTORY)
if(APPLE)
# On macOS, add as source with MACOSX_PACKAGE_LOCATION
target_sources(${TARGET} PRIVATE "${SOURCE_FILE}")
if(REL_SUBDIR)
set_source_files_properties("${SOURCE_FILE}" PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources/${REL_SUBDIR}")
else()
set_source_files_properties("${SOURCE_FILE}" PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources")
endif()
else()
# On other platforms, use custom command to copy files
if(REL_SUBDIR)
set(DEST_PATH "$<TARGET_FILE_DIR:${TARGET}>/${DEST_SUBDIR}/${REL_SUBDIR}")
else()
set(DEST_PATH "$<TARGET_FILE_DIR:${TARGET}>/${DEST_SUBDIR}")
endif()
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${DEST_PATH}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SOURCE_FILE}" "${DEST_PATH}/"
COMMENT "Copying ${REL_PATH} to ${DEST_SUBDIR}"
)
endif()
endforeach()
endfunction()

107
README.md
View File

@@ -1,9 +1,8 @@
# DuckStation - PlayStation 1, aka. PSX Emulator
[Features](#features) | [Downloading and Running](#downloading-and-running) | [Building](#building) | [Disclaimers](#disclaimers)
**Latest Builds for Windows 10/11 (x64/ARM64), Linux (AppImage/Flatpak x64/ARM32/ARM64), and macOS (11.0+ Universal):** https://github.com/stenzek/duckstation/releases/tag/latest
**Game Compatibility List:** https://docs.google.com/spreadsheets/d/e/2PACX-1vRE0jjiK_aldpICoy5kVQlpk2f81Vo6P4p9vfg4d7YoTOoDlH4PQHoXjTD2F7SdN8SSBLoEAItaIqQo/pubhtml
**Latest Builds for Windows 10/11 (x64/ARM64), Linux (AppImage x64/ARM32/ARM64), and macOS (13.3+ Universal):** https://github.com/stenzek/duckstation/releases/tag/latest
**Discord Server:** https://www.duckstation.org/discord.html
@@ -32,7 +31,7 @@ Other features include:
- Motion adaptive deinterlacing.
- Adaptive downsampling filter.
- Screen rotation for vertical or "TATE" shmup games.
- Post processing shader chains (GLSL and Reshade FX).
- Post processing shader chains (GLSL, Reshade FX and Slang Presets).
- Border overlays/bezels displayed around game content.
- "Fast boot" for skipping BIOS splash/intro.
- Save state support, with runahead and rewind.
@@ -65,11 +64,11 @@ Other features include:
## System Requirements
- A CPU faster than a potato. But it needs to be x86_64, AArch32/armv7, AArch64/ARMv8, or RISC-V/RV64.
- For the hardware renderers, a GPU capable of OpenGL 3.1/OpenGL ES 3.1/Direct3D 11 Feature Level 10.0 (or Vulkan 1.0) and above. So, basically anything made in the last 10 years or so.
- A GPU capable of OpenGL 3.1/OpenGL ES 3.1/Direct3D 11 Feature Level 10.0/Vulkan 1.0. So, basically anything made in the last 10 years or so.
- SDL, XInput or DInput compatible game controller (e.g. XB360/XBOne/XBSeries). DualShock 3 users on Windows will need to install the official DualShock 3 drivers included as part of PlayStation Now.
## Downloading and running
Binaries of DuckStation for Windows x64/ARM64, Linux x86_64/ARM32/ARM64 (in AppImage/Flatpak formats), and macOS Universal Binaries are available via GitHub Releases and are automatically built with every commit/push.
Binaries of DuckStation for Windows x64/ARM64, Linux x86_64/ARM32/ARM64 (in AppImage format), and macOS Universal Binaries are available via GitHub Releases and are automatically built with every commit/push.
As per the terms of CC-BY-NC-ND, redistribution of **unmodified releases and code** is permitted. However, we would prefer if you linked to https://www.duckstation.org/ instead. Please note that pre-configured settings and packages are considered modifications.
@@ -77,61 +76,82 @@ For x86 machines (most systems), you will need a CPU that supports the SSE4.1 in
The main releases page is limited to the last 30 releases due to automatic updater limitations. Older releases can be downloaded from https://github.com/duckstation/old-releases/releases.
### Update Channels
The automatic updater in DuckStation has two channels: "Stable" and "Preview".
- "Stable Releases": Less frequent updates, and tracks the "latest" release on GitHub. Releases in this channel have had more testing.
- "Preview Releases": Built whenever a commit is pushed to the repository, and tracks the pre-release on GitHub. This channel contains builds which have had minimal testing, and may contain bugs or issues.
By default, the updater will track the channel you downloaded from. You can change the channel in `Settings -> Interface -> Updates`.
### Windows
DuckStation **requires** Windows 10/11, specifically version 1809 or newer. If you are still using Windows 7/8/8.1, DuckStation **will not run** on your operating system. Running these operating systems in 2023 should be considered a security risk, and I would recommend updating to something which receives vendor support.
If you must use an older operating system, [v0.1-5624](https://github.com/duckstation/old-releases/releases/tag/v0.1-5624) is the last version which will run. But do not expect to recieve any assistance, these builds are no longer supported.
DuckStation **requires** Windows 10/11, specifically version 1809 or newer. If you are still using Windows 7/8/8.1, DuckStation **will not run** on your operating system. Running these operating systems in 2026 should be considered a security risk, and I would recommend updating to something which receives vendor support.
If you must use an older operating system, [v0.1-5624](https://github.com/duckstation/old-releases/releases/tag/v0.1-5624) is the last version which will run. But do not expect to receive any assistance, these builds are no longer supported.
To download:
- Go to https://github.com/stenzek/duckstation/releases/tag/latest, and download the Windows x64 build. This is a zip archive containing the prebuilt binary. If you have an ARM64 Windows machine such as Snapdragon, download the Windows ARM64 build.
- Alternatively, direct download link: https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-x64-release.zip
- Extract the archive **to a subdirectory**. The archive has no root subdirectory, so extracting to the current directory will drop a bunch of files in your download directory if you do not extract to a subdirectory.
Windows builds are provided in two formats:
- **Installer (.exe, recommended):** An installer which extracts DuckStation to your user-local programs directory, and optionally creates Start Menu/Desktop shortcuts.
- **Archive (.zip):** A zip archive containing the prebuilt binary. Choose this option if you want a "portable" installation, or do not want to run an installer.
Once downloaded and extracted, you can launch the emulator with `duckstation-qt-x64-ReleaseLTCG.exe`. Follow the Setup Wizard to get started.
To use the installer, simply download the installer from the releases page, run it, and follow the prompts.
- Direct download link: https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-x64-installer.exe
- ARM64 download link (Snapdragon laptops): https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-arm64-installer.exe
- Legacy SSE2 installer (for pre-2008 CPUs): https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-x64-sse2-installer.exe
The installer is still a new addition, so if you encounter issues please let us know via Discord.
To use the archive or portable installation, follow these steps:
1. Download https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-x64-release.zip. If you have an ARM64 Windows machine such as Snapdragon, download `duckstation-windows-arm64-release.zip` instead.
2. Extract the archive **to a subdirectory**. The archive has no root subdirectory, so extracting to the current directory will drop a bunch of files in your download directory if you do not extract to a subdirectory.
3. If you want a portable installation (see [User Directories](#user-directories)), create an empty file named `portable.txt` in the same directory as the executable.
4. Once downloaded and extracted, you can launch the emulator with `duckstation-qt-x64-ReleaseLTCG.exe`. Follow the Setup Wizard to get started.
**If you get an error about `vcruntime140_1.dll` being missing, you will need to update your Visual C++ runtime.** You can do that from this page: https://support.microsoft.com/en-au/help/2977003/the-latest-supported-visual-c-downloads. Specifically, you want the x64 runtime, which can be downloaded from https://aka.ms/vs/17/release/vc_redist.x64.exe.
### Linux
DuckStation is provided for x86_64/ARM32/ARM64 Linux in AppImage and Flatpak formats. The release on [Flathub](https://flathub.org/apps/org.duckstation.DuckStation) is official, and synchronized with the latest rolling/stable release on GitHub.
DuckStation is provided for x86_64/ARM32/ARM64 Linux in AppImage formats.
#### AppImage
The AppImages require a distribution equivalent to Ubuntu 22.04 or newer to run.
- Go to https://github.com/stenzek/duckstation/releases/tag/latest, and download `duckstation-x64.AppImage`.
- Run `chmod a+x` on the downloaded AppImage -- following this step, the AppImage can be run like a typical executable.
1. Download https://github.com/stenzek/duckstation/releases/download/latest/DuckStation-x64.AppImage. If you have an ARM64 Linux machine, you should download `DuckStation-arm64.AppImage`.
2. Run `chmod a+x` on the downloaded AppImage -- following this step, the AppImage can be run like a typical executable. Alternatively, in your file manager of choice, enable execute permissions via the file properties dialog.
3. When running the AppImage for the first time, it will prompt to create a launcher shortcut.
#### Flatpak
If you were previously using the Flatpak package, to migrate your data from the Flatpak to the AppImage, you can run the following command:
```bash
mv ~/.var/app/org.duckstation.DuckStation/config/duckstation ~/.local/share
```
- Go to https://github.com/stenzek/duckstation/releases/tag/latest, and download `duckstation-x64.flatpak`.
- Run `flatpak install ./duckstation-x64.flatpak`.
You will need to re-add your game directories after switching to the AppImage.
or, if you have FlatHub set up:
- Run `flatpak install org.duckstation.DuckStation`.
Use `flatpak run org.duckstation.DuckStation` to start, or select `DuckStation` in the launcher of your desktop environment. Follow the Setup Wizard to get started.
### macOS
Universal MacOS builds are provided for both x64 and ARM64 (Apple Silicon).
Universal macOS builds are provided for both x86_64 (Intel) and ARM64 (Apple Silicon).
MacOS Big Sir (11.0) is required, as this is also the minimum requirement for Qt.
macOS Ventura (13.3) is required, as this is also the minimum requirement for Qt.
To download:
- Go to https://github.com/stenzek/duckstation/releases/tag/latest, and download `duckstation-mac-release.zip`.
- Extract the zip by double-clicking it.
- Open DuckStation.app, optionally moving it to your desired location first.
- Depending on GateKeeper configuration, you may need to right click -> Open the first time you run it, as code signing certificates are out of the question for a project which brings in zero revenue.
1. Download https://github.com/stenzek/duckstation/releases/download/latest/duckstation-mac-release.zip.
2. Extract the zip by double-clicking it.
3. Open `DuckStation.app`, optionally moving it to your desired location first.
If you receive a message about the app being from an unidentified developer:
1. Open System Settings -> Privacy & Security, or enter "Gatekeeper" in the search bar.
2. Under the "Security" section, there should be a message about DuckStation being blocked. Click "Open Anyway".
Unfortunately this is required as Apple requires code signing for apps to be run without warnings, and I do not have a code signing certificate since a yearly cost is out of the question for a project which brings in zero revenue.
### Android
You will need a device with armv7 (32-bit ARM), AArch64 (64-bit ARM), or x86_64 (64-bit x86). 64-bit is preferred, the requirements are higher for 32-bit, you'll probably want at least a 1.5GHz CPU.
Download from Google Play: https://play.google.com/store/apps/details?id=com.github.stenzek.duckstation
APK and Beta Downloads: https://www.duckstation.org/android/
**No support is provided for the Android app**, it is free and your expectations should be in line with that. Please **do not** email me about issues about it, or ask for help, you will be ignored.
To use:
@@ -150,7 +170,7 @@ For example, if your disc image was named `Spyro3.cue`, you would place the SBI
CHD images with built-in subchannel information are also supported.
If you are playing directly from a disc and your CD/DVD drive does not support subchannel reading, or has a skew with the returned SubQ, you can place the SBI file in the `subchannel` directory under the user directory, with the serial or title of the game.
If you are playing directly from a disc and your CD/DVD drive does not support subchannel reading, or has a skew with the returned SubQ, you can place the SBI file in the `subchannels` directory under the user directory, with the serial or title of the game.
### Cheats and patch database
@@ -162,7 +182,7 @@ Each release includes the latest version of the database, however you are free t
### Windows
Requirements:
- Visual Studio 2022
- Visual Studio 2026 or newer with the "Desktop development with C++" workload installed.
1. Clone the respository: `git clone https://github.com/stenzek/duckstation.git`.
2. Download the dependencies pack from https://github.com/stenzek/duckstation-ext-qt-minimal/releases/download/latest/deps-x64.7z, and extract it to `dep\msvc`.
@@ -177,17 +197,12 @@ Requirements:
Ubuntu/Debian package names:
```
autoconf automake build-essential clang cmake curl extra-cmake-modules git libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdecor-0-dev libegl-dev libevdev-dev libfontconfig-dev libfreetype-dev libgtk-3-dev libgudev-1.0-dev libharfbuzz-dev libinput-dev libopengl-dev libpipewire-0.3-dev libpulse-dev libssl-dev libudev-dev libwayland-dev libx11-dev libx11-xcb-dev libxcb1-dev libxcb-composite0-dev libxcb-cursor-dev libxcb-damage0-dev libxcb-glx0-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-shape0-dev libxcb-shm0-dev libxcb-sync-dev libxcb-util-dev libxcb-xfixes0-dev libxcb-xinput-dev libxcb-xkb-dev libxext-dev libxkbcommon-x11-dev libxrandr-dev libtool lld llvm nasm ninja-build pkg-config zlib1g-dev
autoconf automake build-essential clang cmake curl extra-cmake-modules git libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdecor-0-dev libegl-dev libevdev-dev libfontconfig-dev libfreetype-dev libgtk-3-dev libgudev-1.0-dev libharfbuzz-dev libinput-dev libopengl-dev libpipewire-0.3-dev libpulse-dev libssl-dev libudev-dev libwayland-dev libx11-dev libx11-xcb-dev libxcb1-dev libxcb-composite0-dev libxcb-cursor-dev libxcb-damage0-dev libxcb-glx0-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-shape0-dev libxcb-shm0-dev libxcb-sync-dev libxcb-util-dev libxcb-xfixes0-dev libxcb-xinput-dev libxcb-xkb-dev libxext-dev libxkbcommon-x11-dev libxrandr-dev libxss-dev libtool lld llvm nasm ninja-build pkg-config zlib1g-dev
```
Fedora package names:
```
alsa-lib-devel autoconf automake brotli-devel clang cmake dbus-devel egl-wayland-devel extra-cmake-modules fontconfig-devel gcc-c++ gtk3-devel libavcodec-free-devel libavformat-free-devel libavutil-free-devel libcurl-devel libdecor-devel libevdev-devel libICE-devel libinput-devel libSM-devel libswresample-free-devel libswscale-free-devel libX11-devel libXau-devel libxcb-devel libXcomposite-devel libXcursor-devel libXext-devel libXfixes-devel libXft-devel libXi-devel libxkbcommon-devel libxkbcommon-x11-devel libXpresent-devel libXrandr-devel libXrender-devel libtool lld llvm make mesa-libEGL-devel mesa-libGL-devel nasm ninja-build openssl-devel patch pcre2-devel perl-Digest-SHA pipewire-devel pulseaudio-libs-devel systemd-devel wayland-devel xcb-util-cursor-devel xcb-util-devel xcb-util-errors-devel xcb-util-image-devel xcb-util-keysyms-devel xcb-util-renderutil-devel xcb-util-wm-devel xcb-util-xrm-devel zlib-devel
```
Arch package names:
```
base-devel clang cmake curl dbus extra-cmake-modules freetype git libjpeg-turbo libpng libwebp libx11 libxrandr lld llvm ninja qt6-base qt6-imageformats qt6-svg qt6-tools wayland zstd
alsa-lib-devel autoconf automake brotli-devel clang cmake dbus-devel egl-wayland-devel extra-cmake-modules fontconfig-devel gcc-c++ gtk3-devel libavcodec-free-devel libavformat-free-devel libavutil-free-devel libcurl-devel libdecor-devel libevdev-devel libICE-devel libinput-devel libSM-devel libswresample-free-devel libswscale-free-devel libX11-devel libXau-devel libxcb-devel libXcomposite-devel libXcursor-devel libXext-devel libXfixes-devel libXft-devel libXi-devel libxkbcommon-devel libxkbcommon-x11-devel libXpresent-devel libXrandr-devel libXrender-devel libXScrnSaver-devel libtool lld llvm make mesa-libEGL-devel mesa-libGL-devel nasm ninja-build openssl-devel patch pcre2-devel perl-Digest-SHA pipewire-devel pulseaudio-libs-devel systemd-devel wayland-devel xcb-util-cursor-devel xcb-util-devel xcb-util-errors-devel xcb-util-image-devel xcb-util-keysyms-devel xcb-util-renderutil-devel xcb-util-wm-devel xcb-util-xrm-devel zlib-devel
```
#### Building
@@ -216,7 +231,7 @@ An optional [SDL game controller database file](#sdl-game-controller-database) c
This is located in the following places depending on the platform you're using:
- Windows: My Documents\DuckStation
- Windows: `AppData\Local\DuckStation` (old installs will use `Documents\DuckStation`).
- Linux: `$XDG_DATA_HOME/duckstation`, or `~/.local/share/duckstation`.
- macOS: `~/Library/Application Support/DuckStation`.
@@ -224,10 +239,14 @@ So, if you were using Linux, you would place your BIOS images in `~/.local/share
If you wish to use a "portable" build, where the user directory is the same as where the executable is located, create an empty file named `portable.txt` in the same directory as the DuckStation executable.
A shortcut to open the user directory is available by selecting `Open Data Directory` from the `Tools` menu.
DuckStation allows you to override certain resources by placing files in the `resources` subdirectory of the user directory. This includes images and sound effects (e.g. menu navigation/achievement unlock). Please refer to https://github.com/stenzek/duckstation/wiki/Resource-Overrides for more information.
## Bindings for Qt frontend
Your keyboard or game controller can be used to simulate a variety of PlayStation controllers. Controller input is supported through DInput, XInput, and SDL backends and can be changed through `Settings -> Controllers`.
To bind your input device, go to `Settings -> Controllers`, and select the virtual controller you want to map. Automatic mapping handles the majority of ocntrollers. However, if you need to manually bind a controller, click the box below the button/axis name, and press the key or button on your input device that you wish to bind to.
To bind your input device, go to `Settings -> Controllers`, and select the virtual controller you want to map. Automatic mapping handles the majority of controllers. However, if you need to manually bind a controller, click the box below the button/axis name, and press the key or button on your input device that you wish to bind to.
## SDL Game Controller Database
DuckStation releases ship with a database of game controller mappings for the SDL controller backend, courtesy of https://github.com/mdqinc/SDL_GameControllerDB. The included `gamecontrollerdb.txt` file can be found in the `resources` subdirectory of the DuckStation program directory.

View File

@@ -1,6 +1,7 @@
Tradução:
# DuckStation - Emulador de PlayStation 1, também conhecido como PSX
[Últimas Notícias](#latest-news) | [Recursos](#features) | [Download e Execução](#downloading-and-running) | [Compilação](#building) | [Avisos Legais](#disclaimers)
**Últimas Versões para Windows 10/11, Linux (AppImage/Flatpak) e macOS:** https://github.com/stenzek/duckstation/releases/tag/latest
@@ -93,19 +94,19 @@ ou, se você tiver o FlatHub configurado:
- Execute `flatpak install org.duckstation.DuckStation`.
Use `flatpak run org.duckstation.DuckStation` para iniciar, ou selecione `DuckStation` no lançador do seu ambiente de desktop. Siga o Assistente de Configuração para começar.
### macOS
São fornecidas compilações universais do MacOS para x64 e ARM64 (Apple Silicon).
São fornecidas compilações universais do macOS para x86_64 (Intel) e ARM64 (Apple Silicon).
MacOS Big Sir (11.0) é necessário, pois também é o requisito mínimo para o Qt.
macOS Ventura (13.3) é necessário, pois também é o requisito mínimo para o Qt.
Para baixar:
- Acesse https://github.com/stenzek/duckstation/releases/tag/latest e baixe `duckstation-mac-release.zip`.
- Extraia o arquivo ZIP dando um duplo clique nele.
- Abra o DuckStation.app, opcionalmente movendo-o para a localização desejada antes.
- Abra o `DuckStation.app`, opcionalmente movendo-o para a localização desejada antes.
- Dependendo da configuração do GateKeeper, você pode precisar clicar com o botão direito -> Abrir na primeira vez que executá-lo, já que certificados de assinatura de código estão fora de questão para um projeto que não gera receita alguma.
### Android
Você precisará de um dispositivo com armv7 (32 bits ARM), AArch64 (64 bits ARM) ou x86_64 (64 bits x86). 64 bits são preferíveis, os requisitos são mais altos para 32 bits, você provavelmente vai querer pelo menos um CPU de 1,5 GHz.

View File

@@ -80434,6 +80434,13 @@ LSP-180210:
- tracks:
- size: 142627632
md5: "92389d0f95fd92337a3a53831a5dbfd7"
LSP-90535200:
name: "P.K.'s Place 2 - Hoopo at Sea! (USA) (Rev 1)"
trackData:
- version: Rev 1
tracks:
- size: 123830448
md5: "1b8a72c9b778392ab55b5cb91afd9ce3"
LSP-180310:
name: "P.K.'s Place 3 - Carlos at the Races! (USA)"
trackData:

3291
data/resources/discsets.yaml Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,202 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 238 KiB

View File

@@ -1,5 +1,5 @@
# Game Controller DB for SDL in 2.0.16 format
# Source: https://github.com/gabomdq/SDL_GameControllerDB
# Source: https://github.com/mdqinc/SDL_GameControllerDB
# Windows
03000000300f00000a01000000000000,3 In 1 Conversion Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b8,x:b3,y:b0,platform:Windows,
@@ -10,6 +10,7 @@
03000000d0160000060d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
03000000d0160000070d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
03000000d0160000600a000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
03000000c82d00001930000000000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b11,platform:Windows,
03000000c82d00000031000000000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000531000000000000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000951000000000000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a2,rightx:a3,righty:a5,start:b11,platform:Windows,
@@ -20,7 +21,7 @@
03000000801000000900000000000000,8BitDo F30 Arcade Stick,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00001038000000000000,8BitDo F30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
05000000c82d00006a28000000000000,8BitDo GameCube,a:b0,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b9,paddle2:b8,rightshoulder:b10,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b1,y:b4,platform:Windows,
03000000c82d00006a28000000000000,8BitDo GameCube,a:b0,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b9,paddle2:b8,rightshoulder:b10,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b1,y:b4,platform:Windows,
03000000c82d00001251000000000000,8BitDo Lite 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00001151000000000000,8BitDo Lite SE,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000150000000000000,8BitDo M30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
@@ -50,6 +51,7 @@
03000000c82d00000360000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000361000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000660000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000960000000000000,8BitDo Pro 3,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000131000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000231000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000331000000000000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
@@ -74,7 +76,9 @@
03000000c82d00000260000000000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000261000000000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00001230000000000000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00001260000000000000,8BitDo Ultimate 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00001b30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00001c30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00001d30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00001530000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00001630000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
@@ -112,6 +116,7 @@
03000000020500000913000000000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000373500000710000000000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000373500004610000000000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000190e00000110000000000000,Aquaplus Piece,a:b1,b:b0,back:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b2,platform:Windows,
03000000830500000160000000000000,Arcade,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b4,platform:Windows,
03000000120c0000100e000000000000,Armor 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000490b00004406000000000000,ASCII Seamic Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
@@ -137,13 +142,13 @@
030000000d0500000208000000000000,Belkin Nostromo N40,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000bc2000000055000000000000,Betop BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000790000000700000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
03000000808300000300000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000bc2000006321000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000c01100000555000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000c01100000655000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000790000000700000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
03000000808300000300000000000000,Betop Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
030000006f0e00006401000000000000,BF One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
03000000300f00000202000000000000,Bigben,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a5,righty:a2,start:b7,x:b2,y:b3,platform:Windows,
030000006b1400000209000000000000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
@@ -154,6 +159,7 @@
03000000120c0000f10e000000000000,Brook PS2 Adapter,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000120c0000310c000000000000,Brook Super Converter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
03000000d81d00000b00000000000000,Buffalo BSGP1601 Series,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows,
030000005a1c00002400000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows,
030000005b1c00002400000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows,
030000005b1c00002500000000000000,Capcom Home Arcade Controller,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows,
030000006d04000042c2000000000000,ChillStream,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
@@ -170,7 +176,6 @@
030000001a1c00000001000000000000,Datel Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000791d00000103000000000000,Dual Box Wii,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000c0160000e105000000000000,Dual Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
030000004f040000070f000000000000,Dual Power,a:b8,b:b9,back:b4,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,leftshoulder:b13,leftstick:b6,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b12,rightstick:b7,righttrigger:b15,start:b5,x:b10,y:b11,platform:Windows,
030000004f04000012b3000000000000,Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
030000004f04000020b3000000000000,Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
@@ -182,7 +187,11 @@
030000006e0500000a20000000000000,Elecom DUX60 MMO,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows,
03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
03000095090000010000000000000000,Elecom JC-U609,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows,
0300004112000000e500000000000000,Elecom JC-U909Z,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows,
03000041120000001050000000000000,Elecom JC-U911,a:b1,b:b2,back:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b0,x:b4,y:b5,platform:Windows,
030000006e0500000520000000000000,Elecom P301U PlayStation Controller Adapter,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
03000000250900000218000000000000,Elecom PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000411200004450000000000000,Elecom U1012,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
030000006e0500000320000000000000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
030000006e0500000e20000000000000,Elecom U3912T,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
@@ -193,6 +202,7 @@
030000007d0400000640000000000000,Eliminator AfterShock,a:b1,b:b2,back:b9,dpdown:+a3,dpleft:-a5,dpright:+a5,dpup:-a3,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a4,righty:a2,start:b8,x:b0,y:b3,platform:Windows,
03000000120c0000f61c000000000000,Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000430b00000300000000000000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
03000000062000001801000000000000,EMS TrioLinker Plus II,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Windows,
03000000242f000000b7000000000000,ESM 9110,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows,
03000000101c0000181c000000000000,Essential,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b4,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
@@ -226,7 +236,8 @@
03000000ac0500005b05000000000000,GameSir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000ac0500002d02000000000000,GameSir G4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000ac0500004d04000000000000,GameSir G4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000ac0500001a06000000000000,GameSir-T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000ac0500001a06000000000000,GameSir T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000373500009410000000000000,GameSir Tegenaria Lite,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
030000004c0e00001035000000000000,Gamester,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
030000000d0f00001110000000000000,GameStick Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
0300000047530000616d000000000000,GameStop,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
@@ -234,7 +245,8 @@
03000000b62500000100000000000000,Gametel GT004 01,a:b3,b:b0,dpdown:b10,dpleft:b9,dpright:b8,dpup:b11,leftshoulder:b4,rightshoulder:b5,start:b7,x:b1,y:b2,platform:Windows,
030000008f0e00001411000000000000,Gamo2 Divaller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000120c0000a857000000000000,Gator Claw,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000c9110000f055000000000000,GC100XF,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000c21100000791000000000000,Be1 GC101 Controller 1.03,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000c9110000f055000000000000,Be1 GC100XF Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000008305000009a0000000000000,Genius,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
@@ -255,6 +267,8 @@
030000008f0e00000610000000000000,GreenAsia,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a5,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
03000000ac0500006b05000000000000,GT2a,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000341a00000302000000000000,Hama Scorpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000008a2e0000dd10000000000000,Hand Held Legend GC Ultimate,a:b0,b:b2,back:b17,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,guide:b18,leftshoulder:b10,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b19,misc2:b24,paddle1:b13,paddle2:b12,rightshoulder:b11,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b1,y:b3,platform:Windows,
030000008a2e0000df10000000000000,Hand Held Legend ProGCC,a:b1,b:b0,back:b17,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,guide:b18,leftshoulder:b10,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b19,paddle1:b13,paddle2:b12,rightshoulder:b11,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b3,y:b2,platform:Windows,
030000000d0f00004900000000000000,Hatsune Miku Sho PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000001008000001e1000000000000,Havit HV G60,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows,
030000000d0f00000c00000000000000,HEXT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
@@ -324,6 +338,7 @@
030000000d0f0000ee00000000000000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f0000c100000000000000,Horipad Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f0000f600000000000000,Horipad Nintendo Switch Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000000d0f00000202000000000000,Horipad O Nintendo Switch 2 Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,misc2:b14,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
030000000d0f00006700000000000000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000000d0f00009601000000000000,Horipad Steam,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc2:b2,paddle1:b5,paddle2:b15,paddle3:b18,paddle4:b19,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
030000000d0f0000dc00000000000000,Horipad Switch,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
@@ -332,7 +347,9 @@
03000000790000004e95000000000000,Hyperkin N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Windows,
03000000242e00006a48000000000000,Hyperkin RetroN Sq,a:b3,b:b7,back:b5,dpdown:+a4,dpleft:-a0,dpright:+a0,dpup:-a4,leftshoulder:b0,rightshoulder:b1,start:b4,x:b2,y:b6,platform:Windows,
03000000242f00000a20000000000000,Hyperkin Scout,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
03000000242e00000a20000000000000,Hyperkin Scout Premium SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
03000000242e00006a38000000000000,Hyperkin Trooper 2,a:b0,b:b1,back:b4,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b3,start:b5,platform:Windows,
03000000f00300008d04000000000000,HyperX Clutch,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:-a2,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:+a5,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000d81d00000e00000000000000,iBuffalo AC02 Arcade Joystick,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,rightx:a2,righty:a5,start:b8,x:b4,y:b5,platform:Windows,
03000000d81d00000f00000000000000,iBuffalo BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000d81d00001000000000000000,iBuffalo BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
@@ -414,7 +431,7 @@
03000000242f00007300000000000000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
0300000079000000d218000000000000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000d620000010a7000000000000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000242e0000f500000000000000,Mayflash N64 Adapter,a:b2,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows,
03000000242f0000f500000000000000,Mayflash N64 Adapter,a:b2,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows,
03000000242f0000f400000000000000,Mayflash N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows,
03000000790000007918000000000000,Mayflash N64 Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,righttrigger:b7,rightx:a3,righty:a2,start:b8,platform:Windows,
030000008f0e00001030000000000000,Mayflash Saturn Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
@@ -463,8 +480,11 @@
030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Windows,
03000000050b00000045000000000000,Nexus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Windows,
03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
03000000ec110000e1a7000000000000,Nintendo Switch,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000007e0500006920000000000000,Nintendo Switch 2 Pro Controller,a:b0,b:b1,back:b14,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b12,leftstick:b15,lefttrigger:b13,leftx:a0,lefty:a1~,misc1:b17,misc2:b20,paddle1:b18,paddle2:b19,rightshoulder:b4,rightstick:b7,righttrigger:b5,rightx:a2,righty:a3~,start:b6,x:b2,y:b3,platform:Windows,
030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows,
030000007e0500007320000000000000,NSO GameCube Controller,a:b1,b:b3,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b13,lefttrigger:b12,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b4,rightx:a2,righty:a3~,start:b6,x:b0,y:b2,platform:Windows,
030000007e0500001920000000000000,NSO N64 Controller,+rightx:b8,+righty:b2,-rightx:b3,-righty:b7,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Windows,
030000007e0500001720000000000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Windows,
03000000550900001472000000000000,NVIDIA Controller,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows,
@@ -480,7 +500,7 @@
030000008916000000fd000000000000,Onza TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
0300000009120000072f000000000000,OrangeFox86 DreamPicoPort,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:-a2,leftx:a0,lefty:a1,righttrigger:-a5,start:b11,x:b3,y:b4,platform:Windows,
0300000009120000072f000000000000,OrangeFox86 DreamPicoPort,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:-a2,leftx:a0,lefty:a1,righttrigger:-a5,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000362800000100000000000000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows,
03000000120c0000f60e000000000000,P4 Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
03000000790000002201000000000000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
@@ -518,7 +538,6 @@
03000000120c00001cf1000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000120c0000f90e000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000250900000118000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000250900000218000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000250900000500000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,
030000004c0500006802000000000000,PS3 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b10,lefttrigger:a3~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:a4~,rightx:a2,righty:a5,start:b8,x:b3,y:b0,platform:Windows,
030000004f1f00000800000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
@@ -576,8 +595,10 @@
030000009b2800003200000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
030000009b2800006000000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
030000009b2800001800000000000000,Raphnet Jaguar Adapter,a:b2,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b10,start:b3,x:b11,y:b12,platform:Windows,
030000009b2800003c00000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows,
030000009b2800006100000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows,
030000009b2800006300000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows,
030000009b2800006400000000000000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Windows,
030000009b2800000200000000000000,Raphnet NES Adapter,a:b7,b:b6,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b4,platform:Windows,
030000009b2800004400000000000000,Raphnet PS1 and PS2 Adapter,a:b1,b:b2,back:b5,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b9,rightx:a3,righty:a4,start:b4,x:b0,y:b3,platform:Windows,
030000009b2800004300000000000000,Raphnet Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
@@ -628,6 +649,7 @@
030000006f0e00001e01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000830500007030000000000000,Rockfire Space Ranger,a:b0,b:b1,back:b5,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b9,righttrigger:b8,start:b2,x:b3,y:b4,platform:Windows,
03000000050b0000e318000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows,
03000000050b0000e518000000000000,ROG Chakram,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows,
03000000050b00005819000000000000,ROG Chakram Core,a:b1,b:b0,leftx:a0,lefty:a1,x:b2,y:b3,platform:Windows,
@@ -661,6 +683,7 @@
03000000c01100004150000000000000,Sanwa Micro Grip Pro,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
03000000c01100004450000000000000,Sanwa Online Grip,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b14,x:b3,y:b4,platform:Windows,
03000000730700000401000000000000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Windows,
030000009d0d00001130000000000000,Sanwa PlayStation Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000830500006120000000000000,Sanwa Smart Grip II,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,x:b1,y:b3,platform:Windows,
03000000c01100000051000000000000,Satechi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
030000004f04000028b3000000000000,Score A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
@@ -684,6 +707,7 @@
03000000317300000100000000000000,Sony DualShock 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000666600006706000000000000,Sony PlayStation Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows,
03000000e30500009605000000000000,Sony PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000fe1400002a23000000000000,Sony PlayStation Adapter,a:b0,b:b1,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,x:b2,y:b3,platform:Windows,
030000004c050000da0c000000000000,Sony PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
03000000632500002306000000000000,Sony PlayStation Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,
03000000f0250000c183000000000000,Sony PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
@@ -804,7 +828,7 @@
030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000fd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000ff02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000ff02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000006f0e0000a802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000006f0e0000c802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000c62400003a54000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
@@ -816,15 +840,20 @@
03000000172700004431000000000000,Xiaomi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000172700003350000000000000,Xiaomi XMGP01YM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000bc2000005060000000000000,Xiaomi XMGP01YM,+lefty:+a2,+righty:+a5,-lefty:-a1,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows,
03000000c0160000e105000000000000,XinMo Dual Arcade,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000007d0400000340000000000000,Xterminator Digital Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:-a4,lefttrigger:+a4,leftx:a0,lefty:a1,paddle1:b7,paddle2:b6,rightshoulder:b5,rightstick:b9,righttrigger:b2,rightx:a3,righty:a5,start:b8,x:b3,y:b4,platform:Windows,
030000002c3600000100000000000000,Yawman Arrow,+rightx:h0.2,+righty:h0.4,-rightx:h0.8,-righty:h0.1,a:b4,b:b5,back:b6,dpdown:b15,dpleft:b14,dpright:b16,dpup:b13,leftshoulder:b10,leftstick:b0,lefttrigger:-a4,leftx:a0,lefty:a1,paddle1:b11,paddle2:b12,rightshoulder:b8,rightstick:b9,righttrigger:+a4,start:b3,x:b1,y:b2,platform:Windows,
03000000790000004f18000000000000,ZDT Android Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000073500000400000000000000,Zenaim Arcade Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
03000000120c00000500000000000000,Zeroplus Adapter,a:b2,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b0,righttrigger:b5,rightx:a3,righty:a2,start:b8,x:b3,y:b0,platform:Windows,
03000000120c0000101e000000000000,Zeroplus P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
# Mac OS X
030000008f0e00000300000009010000,2 In 1 Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000c82d00001930000000000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X,
03000000c82d00001930000000020000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X,
03000000c82d00001930000001000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Mac OS X,
03000000c82d00000031000001000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00000531000000020000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00000951000000010000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Mac OS X,
@@ -868,7 +897,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000c82d00001290000001000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00004028000000010000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000260000001000000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000261000000010000,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00001230000000010000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
@@ -878,8 +907,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000c82d00001630000001000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00001730000001000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00001130000000020000,8BitDo Ultimate Wired,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00001330000000020000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00001330000001000000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00001330000000020000,8BitDo Ultimate Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000a00500003232000008010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000a00500003232000009010000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00001890000001000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
@@ -917,7 +946,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000b40400001124000001040000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000b40400001224000003030000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b2,paddle1:b16,paddle2:b17,paddle3:b14,paddle4:b15,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000790000004618000000010000,GameCube Controller Adapter,a:b4,b:b0,dpdown:b56,dpleft:b60,dpright:b52,dpup:b48,lefttrigger:a12,leftx:a0,lefty:a4,rightshoulder:b28,righttrigger:a16,rightx:a20,righty:a8,start:b36,x:b8,y:b12,platform:Mac OS X,
03000000ac0500001a06000002020000,GameSir-T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000ac0500001a06000002020000,GameSir T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000373500000411000023000000,GameSir X4A Xbox Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000ad1b000001f9000000000000,Gamestop BB070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000c01100000140000000010000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X,
@@ -957,6 +987,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000242f00002d00000007010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
030000006d04000019c2000000000000,Logitech Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000019c2000000020000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
@@ -990,17 +1021,22 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
03000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c62400002b89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000853200008906000000010000,Nacon Revolution X Unlimited,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000632500007505000000020000,NeoGeo mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000921200004b46000003020000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Mac OS X,
030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000ec110000e1a7000001010000,Nintendo Switch,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
030000007e0500006920000001010000,Nintendo Switch 2 Pro Controller,a:b0,b:b1,back:b14,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b12,leftstick:b15,lefttrigger:b13,leftx:a0,lefty:a1~,misc1:b17,misc2:b20,paddle1:b18,paddle2:b19,rightshoulder:b4,rightstick:b7,righttrigger:b5,rightx:a2,righty:a3~,start:b6,x:b2,y:b3,platform:Mac OS X,
030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
030000007e0500000920000010020000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X,
050000007e05000009200000ff070000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:Mac OS X,
030000007e0500007320000001010000,NSO GameCube Controller,a:b1,b:b3,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b13,lefttrigger:b12,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b4,rightx:a2,righty:a3~,start:b6,x:b0,y:b2,platform:Mac OS X,
030000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Mac OS X,
030000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b15,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000550900001472000025050000,NVIDIA Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X,
030000004b120000014d000000010000,Nyko Airflo EX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Mac OS X,
0300000009120000072f000000010000,OrangeFox86 DreamPicoPort,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a2,leftx:a0,lefty:a1,righttrigger:a5,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Mac OS X,
030000006f0e00000901000002010000,PDP PS3 Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
030000008f0e00000300000000000000,Piranha Xtreme PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000d620000011a7000000020000,PowerA Core Plus Gamecube Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
@@ -1034,6 +1070,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
03000000632500008005000000010000,Redgear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000632500002305000000010000,Redragon Saturn,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000921200004547000000020000,Retro Bit Sega Genesis Controller Adapter,a:b0,b:b2,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,lefttrigger:b14,rightshoulder:b10,righttrigger:b4,start:b12,x:b6,y:b8,platform:Mac OS X,
03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000790000001100000005010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Mac OS X,
@@ -1086,12 +1123,14 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000005f140000c501000000020000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X,
03000000632500002605000000010000,Uberwith Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c0160000e105000000040000,Ultimate Atari Fight Stick,a:b2,b:b4,back:b18,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,rightshoulder:b8,righttrigger:b10,start:b16,x:b0,y:b6,platform:Mac OS X,
03000000151900005678000010010000,Uniplay U6,a:b3,b:b6,back:b25,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,leftstick:b31,lefttrigger:b21,leftx:a1,lefty:a3,rightshoulder:b19,rightstick:b33,righttrigger:b23,rightx:a4,righty:a5,start:b27,x:b11,y:b13,platform:Mac OS X,
030000006f0e00000302000025040000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X,
030000006f0e00000702000003060000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X,
050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X,
050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X,
030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e0400008e02000010010000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4~,start:b8,x:b2,y:b3,platform:Mac OS X,
030000006f0e00000104000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
03000000c6240000045d000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
@@ -1107,6 +1146,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
030000005e040000220b000013050000,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
03000000c62400003a54000000000000,Xbox One PowerA Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
@@ -1117,11 +1157,14 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000005e040000130b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
030000005e040000130b000022050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
030000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
030000005e040000220b000021050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000120c0000100e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000120c0000101e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
# Linux
03000000c82d00001930000011010000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Linux,
05000000c82d00001930000001000000,8BitDo 64,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,platform:Linux,
03000000c82d00000031000011010000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000c82d00000631000000010000,8BitDo Adapter 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c82d00000951000000010000,8BitDo Dogbone,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b11,platform:Linux,
@@ -1159,6 +1202,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
05000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000020000000000000,8BitDo Pro 2 for Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
06000000c82d00000020000006010000,8BitDo Pro 2 for Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c82d00000960000011010000,8BitDo Pro 3,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000131000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000231000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000331000011010000,8BitDo Receiver,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
@@ -1191,10 +1235,10 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000c82d00001730000011010000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000c82d00001130000011010000,8BitDo Ultimate Wired,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b24,paddle2:b25,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000c82d00000631000010010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c82d00000631000014010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c82d00000760000011010000,8BitDo Ultimate Wireless,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00001230000011010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000c82d00001330000011010000,8BitDo Ultimate Wireless,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000c82d00000631000014010000,8BitDo Ultimate Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c82d00000121000011010000,8BitDo Xbox One SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000c82d00000121000000010000,8BitDo Xbox One SN30 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000a00500003232000001000000,8BitDo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
@@ -1216,6 +1260,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000020500000913000010010000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000373500000710000010010000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000373500004610000001000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000190e00000110000010010000,Aquaplus Piece,a:b1,b:b0,back:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b2,platform:Linux,
03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
03000000a30c00002700000011010000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
03000000a30c00002800000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
@@ -1252,9 +1297,11 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000120c0000200e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
03000000120c0000210e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
03000000120c0000f70e000011010000,Brook Universal Fighting Board,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
03000000d81d00000b00000010010000,Buffalo BSGP1601,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b14,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Linux,
03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000af1e00002400000010010000,Clockwork Pi DevTerm,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b9,x:b3,y:b0,platform:Linux,
030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux,
03000000632500007a05000001020000,Cosmic Byte Ares Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux,
03000000a306000022f6000011010000,Cyborg V3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
030000005e0400008e02000002010000,Data Frog S80,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
@@ -1269,24 +1316,29 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000006f0e00008401000011010000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006f0e00008101000011010000,Faceoff Deluxe Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006f0e00008001000011010000,Faceoff Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03005036852100000201000010010000,Final Fantasy XIV Online Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000852100000201000010010000,FF GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
05000000b40400001224000001010000,Flydigi APEX 4,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b14,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b20,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000b40400001124000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000b40400001224000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b2,paddle1:b16,paddle2:b17,paddle3:b14,paddle4:b15,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000151900004000000001000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b14,paddle1:b2,paddle2:b5,paddle3:b16,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000007e0500003703000000000000,GameCube Adapter,a:b0,b:b1,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
19000000030000000300000002030000,GameForce Controller,a:b1,b:b0,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b14,lefttrigger:b6,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b15,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
03000000373500000b10000019010000,GameSir Cyclone 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000ac0500005b05000010010000,GameSir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000bc2000000055000011010000,GameSir G3w,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000558500001b06000010010000,GameSir G4 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000ac0500002d0200001b010000,GameSir G4s,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b33,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000ac0500007a05000011010000,GameSir G5,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b16,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000373500009710000001020000,GameSir Kaleid Flux,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000ac0500001a06000011010000,GameSir T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000bc2000005656000011010000,GameSir T4w,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000ac0500001a06000011010000,GameSir-T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000373500009410000010010000,GameSir Tegenaria Lite,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000008f0e00000800000010010000,Gasia PlayStation Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000f025000021c1000010010000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000f0250000c283000010010000,Gioteck VX2 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
190000004b4800000010000000010000,GO-Advance Controller,a:b1,b:b0,back:b10,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,leftshoulder:b4,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b13,start:b15,x:b2,y:b3,platform:Linux,
190000004b4800000010000001010000,GO-Advance Controller,a:b1,b:b0,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b13,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b16,righttrigger:b15,start:b17,x:b2,y:b3,platform:Linux,
190000004b4800000011000000010000,GO-Super Gamepad,a:b0,b:b1,back:b12,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b16,leftshoulder:b4,leftstick:b14,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b3,y:b2,platform:Linux,
@@ -1301,6 +1353,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000008f0e00001200000010010000,GreenAsia Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000f0250000c383000010010000,GT VX2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
030000008a2e0000dd10000011010000,Hand Held Legend GC Ultimate,a:b0,b:b2,back:b17,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,guide:b18,leftshoulder:b10,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b19,misc2:b24,paddle1:b13,paddle2:b12,rightshoulder:b11,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b1,y:b3,platform:Linux,
030000008a2e0000df10000011010000,Hand Held Legend ProGCC,a:b1,b:b0,back:b17,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,guide:b18,leftshoulder:b10,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b19,paddle1:b13,paddle2:b12,rightshoulder:b11,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b3,y:b2,platform:Linux,
06000000adde0000efbe000002010000,Hidromancer Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000d81400000862000011010000,HitBox PS3 PC Analog Mode,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux,
03000000c9110000f055000011010000,HJC Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
@@ -1343,6 +1397,10 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000f00300008d03000011010000,HyperX Clutch,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000830500006020000010010000,iBuffalo Super Famicom Controller,a:b1,b:b0,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,
03000000d80400004bea000011010000,icedragon.io STAC Dance Pad,a:b0,b:b1,x:b2,y:b3,back:b4,platform:Linux,
03000000d80400004aea000011010000,icedragon.io STAC Dance Pad,a:b0,b:b1,x:b2,y:b3,back:b4,platform:Linux,
030000008a2e0000d910000011010000,icedragon.io STAC2 Dance Pad,a:b0,b:b1,x:b2,y:b3,back:b4,platform:Linux,
030000008a2e0000e910000011010000,icedragon.io STAC2 Dance Pad,a:b8,b:b9,x:b10,y:b11,back:b12,platform:Linux,
030000008f0e00001330000001010000,iCode Retro Adapter,b:b3,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b9,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b1,start:b7,x:b2,y:b0,platform:Linux,
050000006964726f69643a636f6e0000,idroidcon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000b50700001503000010010000,Impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
@@ -1463,8 +1521,9 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000790000004518000010010000,Nexilux GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Linux,
060000007e0500003713000000000000,Nintendo 3DS,a:b0,b:b1,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,platform:Linux,
03000000790000004618000010010000,Nintendo GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5~,righty:a2~,start:b9,x:b2,y:b3,platform:Linux,
03000000ec110000e1a7000010010000,Nintendo Switch,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000007e0500006920000011010000,Nintendo Switch 2 Pro Controller,a:b0,b:b1,back:b14,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b12,leftstick:b15,lefttrigger:b13,leftx:a0,lefty:a1~,misc1:b17,misc2:b20,paddle1:b18,paddle2:b19,rightshoulder:b4,rightstick:b7,righttrigger:b5,rightx:a2,righty:a3~,start:b6,x:b2,y:b3,platform:Linux,
060000004e696e74656e646f20537700,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
060000007e0500000620000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,misc1:b4,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
@@ -1477,13 +1536,16 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux,
05000000010000000100000003000000,Nintendo Wii Remote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
050000007e0500003003000001000000,Nintendo Wii U Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
050000005a1d00000218000003000000,Nokia GC 5000,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000000d0500000308000010010000,Nostromo n45 Dual Analog,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux,
030000007e0500001920000011810000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux,
030000007e0500007320000011010000,NSO GameCube Controller,a:b1,b:b3,dpdown:b8,dpleft:b10,dpright:b9,dpup:b11,guide:b16,leftshoulder:b13,lefttrigger:b12,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b4,rightx:a2,righty:a3~,start:b6,x:b0,y:b2,platform:Linux,
030000007e0500001920000011810000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux,
050000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Linux,
050000007e0500001920000001800000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux,
030000007e0500001720000011810000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
050000007e0500001920000001800000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux,
030000007e0500001e20000011810000,NSO Sega Genesis Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,misc1:b3,rightshoulder:b2,righttrigger:b4,start:b5,platform:Linux,
030000007e0500001720000011810000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
050000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b8,start:b10,x:b3,y:b2,platform:Linux,
050000007e0500001720000001800000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
050000007e0500001720000001800000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
03000000550900001472000011010000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
05000000550900001472000001000000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
@@ -1535,6 +1597,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000250900000017000010010000,PS/SS/N64 Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b5,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2~,righty:a3,start:b8,platform:Linux,
03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
03000000120c0000160e000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
@@ -1588,7 +1651,12 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
0300132d9b2800006500000001010000,Raphnet GameCube Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
030000009b2800003200000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
030000009b2800006000000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
030000009b2800003c00000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux,
030000009b2800006100000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux,
030000009b2800006300000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux,
030000009b2800006400000001010000,Raphnet N64 Adapter,+rightx:b9,+righty:b7,-rightx:b8,-righty:b6,a:b0,b:b1,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,lefttrigger:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Linux,
030000009b2800008000000020020000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Linux,
030000009b2800008000000001010000,Raphnet Wii Classic Adapter V3,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Linux,
03000000f8270000bf0b000011010000,Razer Kishi,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000321500000204000011010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
@@ -1607,7 +1675,6 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000321500000b10000011010000,Razer Wolverine PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
0300000032150000140a000001010000,Razer Wolverine Ultimate Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000000d0f0000c100000010010000,Retro Bit Legacy16,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b12,leftshoulder:b4,lefttrigger:b6,misc1:b13,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
030000000d0f0000c100000072056800,Retro Bit Legacy16,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,guide:b5,leftshoulder:b9,lefttrigger:+a4,misc1:b11,rightshoulder:b10,righttrigger:+a5,start:b6,x:b3,y:b2,platform:Linux,
03000000790000001100000010010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Linux,
0300000003040000c197000011010000,Retrode Adapter,a:b0,b:b4,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux,
190000004b4800000111000000010000,RetroGame Joypad,a:b1,b:b0,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
@@ -1641,13 +1708,11 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000952e00004e43000011010000,Scuf Envision,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux,
03000000a30c00002500000011010000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Linux,
03000000790000001100000011010000,Sega Saturn,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Linux,
03000000790000002201000011010000,Sega Saturn,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,
03000000b40400000a01000000010000,Sega Saturn,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux,
03000000632500002305000010010000,ShanWan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000632500002605000010010000,Shanwan Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000632500007505000010010000,Shanwan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000bc2000000055000010010000,Shanwan Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000f025000021c1000010010000,Shanwan Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000632500002605000010010000,ShanWan Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000632500007505000010010000,ShanWan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000bc2000000055000010010000,ShanWan Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000341a00000908000010010000,SL6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000004b2900000430000011000000,Snakebyte Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000004c050000cc09000001000000,Sony DualShock 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
@@ -1719,6 +1784,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000005f140000c501000010010000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
06000000f51000000870000003010000,Turtle Beach Recon,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000100800000100000010010000,Twin PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
03000000c0160000e105000010010000,Ultimate Atari Fight Stick,a:b1,b:b2,back:b9,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b8,x:b0,y:b3,platform:Linux,
03000000151900005678000010010000,Uniplay U6,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,
@@ -1752,11 +1818,13 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
050000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000fd02000030110000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
060000005e040000dd02000003020000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000005e040000e302000002090000,Xbox One Elite,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000220b000013050000,Xbox One Elite 2 Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000005e040000ea02000011050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e040000ea02000015050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e040000ea02000017050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
060000005e040000ea0200000b050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
060000005e040000ea0200000d050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
060000005e040000ea02000016050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
@@ -1782,8 +1850,11 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
060000005e040000120b00000b050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
060000005e040000120b00000d050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
060000005e040000120b00000f050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000005e040000130b000022050000,Xbox Series X Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
060000005e040000120b000011050000,Xbox Series X Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000005e040000200b000013050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000200b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000200b000023050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000220b000017050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000450c00002043000010010000,XEOX SL6556 BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
05000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux,
@@ -1792,6 +1863,8 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000120c0000100e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000120c0000101e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000120c0000182e000011010000,Zeroplus PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000790000002201000011010000,ZhiXu GuliKit D,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
# Android
38653964633230666463343334313533,8BitDo Adapter,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
@@ -1803,7 +1876,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
33313433353539306634656436353432,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
38426974446f20446f67626f6e65204d,8BitDo Dogbone,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,start:b6,platform:Android,
34343439373236623466343934376233,8BitDo FC30 Pro,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b28,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b29,righttrigger:b7,start:b5,x:b30,y:b2,platform:Android,
38426974446f204e4743204d6f646b69,8BitDo GameCube,a:b0,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b18,paddle2:b17,rightshoulder:b15,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b1,y:b3,platform:Android,
38426974446f204e4743204d6f646b69,8BitDo GameCube,a:b0,b:b2,back:b4,dpdown:b12,dpleft:b13,dpright:b14,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b18,paddle2:b17,rightshoulder:b15,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b1,y:b3,platform:Android,
38426974446f2038426974446f204c69,8BitDo Lite,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
30643332373663313263316637356631,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
38426974446f204c6974652032000000,8BitDo Lite 2,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
@@ -1917,6 +1990,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
4a6f792d436f6e20284c290000000000,Joy-Con (L),a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android,
38383665633039363066383334653465,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
39363561613936303237333537383931,Joy-Con (R),a:b0,b:b1,back:b5,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
39373064396565646338333134303131,Joy-Con (R),a:b1,b:b2,back:b5,leftstick:b8,leftx:a1~,lefty:a0,start:b6,x:b0,y:b3,platform:Android,
4a6f792d436f6e202852290000000000,Joy-Con (R),a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
39656136363638323036303865326464,JYS Aapter,a:b1,b:b19,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
63316564383539663166353034616434,JYS Adapter,a:b1,b:b3,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android,
@@ -1950,6 +2024,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
39306635663061636563316166303966,Mocute M053,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
7573622067616d657061642020202020,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Android,
050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,platform:Android,
31316661666466633938376335383661,Nintendo Switch Pro Controller,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,start:b6,x:b3,y:b2,platform:Android,
34323437396534643531326161633738,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
50726f20436f6e74726f6c6c65720000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b2,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b10,rightx:a2,righty:a3,start:b18,y:b3,platform:Android,
36326533353166323965623661303933,NSO N64 Controller,+rightx:b17,+righty:b10,-rightx:b2,-righty:b19,a:b1,b:b0,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,misc1:b7,rightshoulder:b20,righttrigger:b15,start:b18,platform:Android,
@@ -2013,6 +2088,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
61343739353764363165343237303336,Retro Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b17,lefttrigger:b18,leftx:a0,lefty:a1,start:b10,x:b2,y:b3,platform:Android,
526574726f696420506f636b65742043,Retroid Pocket,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
582d426f7820436f6e74726f6c6c6572,Retroid Pocket,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
64633735616665613536653363336132,Retroid Pocket,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b19,paddle2:b20,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
38653130373365613538333235303036,Retroid Pocket 2,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
64363363336633363736393038313463,Retrolink,a:b1,b:b0,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,start:b6,platform:Android,
37393234373533633333323633646531,RetroUSB N64 RetroPort,+rightx:b17,+righty:b15,-rightx:b18,-righty:b6,a:b10,b:b9,dpdown:b19,dpleft:b1,dpright:b0,dpup:b2,leftshoulder:b7,lefttrigger:b20,leftx:a0,lefty:a1,rightshoulder:b5,start:b3,platform:Android,
@@ -2073,8 +2149,9 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
33356661323266333733373865656366,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
34356136633366613530316338376136,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android,
35623965373264386238353433656138,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
36616131643361333337396261666433,Xbox One Controller,a:b0,b:b1,back:b15,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
36616131643361333337396261666433,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
58626f7820576972656c65737320436f,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
65316262316265373335666131623538,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000000b000000783f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
050000005e040000000b000000783f80,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000050b0000ffff3f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
@@ -2095,7 +2172,9 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
05000000ac05000001000000ff076d01,*,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
05000000ac0500000200000000006d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS,
05000000ac050000020000004f066d02,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b2,y:b3,platform:iOS,
05000000ac05000004000000a8986d04,8BitDo Micro gamepad,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,lefttrigger:b12,rightshoulder:b13,righttrigger:b14,start:b3,x:b6,y:b5,platform:iOS,
05000000ac05000004000000a8986d04,8BitDo Micro,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,lefttrigger:b12,rightshoulder:b13,righttrigger:b14,start:b3,x:b6,y:b5,platform:iOS,
05000000ac05000004000000fd216d04,8BitDo Pro 2,a:b3,b:b2,back:b6,dpdown:b9,dpleft:b10,dpright:b11,dpup:b12,guide:b4,leftshoulder:b13,leftstick:b14,lefttrigger:+a2,leftx:a0,lefty:a1~,paddle1:b1,paddle2:b0,rightshoulder:b16,rightstick:b17,righttrigger:+a5,rightx:a3,righty:a4~,start:b5,x:b8,y:b7,platform:iOS,
05000000ac05000004000000209f6d04,8Bitdo SN30 Pro,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,leftstick:b12,lefttrigger:b13,leftx:a0,lefty:a1~,rightshoulder:b14,rightstick:b15,righttrigger:b16,rightx:a2,righty:a3~,start:b3,x:b6,y:b5,platform:iOS,
05000000ac050000040000003b8a6d04,8BitDo SN30 Pro+,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,leftstick:b12,lefttrigger:b13,leftx:a0,lefty:a1~,rightshoulder:b14,rightstick:b15,righttrigger:b16,rightx:a2,righty:a3~,start:b3,x:b6,y:b5,platform:iOS,
050000008a35000003010000ff070000,Backbone One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
050000008a35000004010000ff070000,Backbone One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
@@ -2103,11 +2182,14 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:iOS,
050000007e050000062000000f060000,Nintendo Switch Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS,
050000007e050000062000004f060000,Nintendo Switch Joy-Con (L),+leftx:h0.1,+lefty:h0.2,-leftx:h0.4,-lefty:h0.8,dpdown:b2,dpleft:b0,dpright:b3,dpup:b1,leftshoulder:b4,misc1:b6,rightshoulder:b5,platform:iOS,
050000007e05000008200000df070000,Nintendo Switch Joy-Con (L/R),a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000007e05000008200000df070000,Nintendo Switch Joy-Con (L/R),a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS,
050000007e0500000e200000df070000,Nintendo Switch Joy-Con (L/R),a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS,
050000007e050000072000004f060000,Nintendo Switch Joy-Con (R),+rightx:h0.4,+righty:h0.8,-rightx:h0.1,-righty:h0.2,a:b1,b:b0,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b3,y:b2,platform:iOS,
050000007e050000072000000f060000,Nintendo Switch Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS,
050000007e050000072000004f060000,Nintendo Switch Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b2,guide:b6,leftshoulder:b4,rightshoulder:b5,x:b1,y:b3,platform:iOS,
050000007e05000009200000df870000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:iOS,
050000007e05000009200000ff870000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
050000007e05000009200000ff870000,Nintendo Switch Pro Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b3,y:b2,platform:iOS,
05000000ac050000040000008e586d04,PlayStation VR2 Sense Controller (L),+leftx:+a3,+lefty:+a1,-leftx:+a2,-lefty:+a4,back:b2,leftstick:b4,lefttrigger:+a7,paddle2:b3,x:b0,y:b1,platform:iOS,
05000000ac050000040000000eb86d04,PlayStation VR2 Sense Controller (R),+rightx:+a3,+righty:+a1,-rightx:+a2,-righty:+a4,a:b0,b:b1,paddle1:b3,rightstick:b4,righttrigger:+a7,start:b2,platform:iOS,
050000004c050000cc090000df070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000004c050000cc090000df870001,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000004c050000cc090000ff070000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
@@ -2119,9 +2201,9 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
05000000ac0500000300000043006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS,
05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS,
05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS,
050000005e040000050b0000df070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000005e040000050b0000ff070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
050000005e040000e0020000df070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000005e040000e0020000ff070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
050000005e040000130b0000df870001,Xbox Series Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000005e040000130b0000ff870001,Xbox Series Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
050000005e040000050b0000df070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000005e040000050b0000ff070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
050000005e040000130b0000df870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000005e040000130b0000ff870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
050000005e040000e0020000df070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000005e040000e0020000ff070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,4 @@
nav_activate.wav: BBRS_SFX_MenuItemScrolling by FairSonicStudio -- https://freesound.org/s/744322/ -- License: Attribution 4.0
nav_back.wav: menu_target by ZeltBolt -- https://freesound.org/s/833056/ -- License: Attribution 4.0
nav_move.wav: Click / Tick / Menu Navigation by Foxfire- -- https://freesound.org/s/702168/ -- License: Creative Commons 0
content_start.wav: sf3-sfx-menu-validate.wav by broumbroum -- https://freesound.org/s/50565/ -- License: Attribution 3.0

View File

@@ -1,9 +1,8 @@
<!DOCTYPE html>
<html>
<body>
<pre>
DuckStation PS1 Emulator
Copyright (C) 2019-2024 Connor McLaughlin &lt;stenzek@gmail.com&gt;
<pre>DuckStation PS1 Emulator
Copyright (C) 2019-2026 Connor McLaughlin &lt;stenzek@gmail.com&gt;
This program is licensed under the terms of the Creative Commons<br>
Attribution-NonCommercial-NoDerivatives International License<br>
@@ -965,8 +964,8 @@ commercial products, provided that all warranty or liability claims are
assumed by the product vendor.
Copyright (C)2009-2024 D. R. Commander. All Rights Reserved.
Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
Copyright (C)2009-2025 D. R. Commander. All Rights Reserved.
Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
@@ -1322,7 +1321,11 @@ either in source code form or as a compiled binary, for any purpose, commercial
and by any means.
</pre>
<h3>PromptFont - </h3><a href="https://shinmera.github.io/promptfont/">https://shinmera.github.io/promptfont/</a></h3>
<h3>Roboto - <a href="https://fonts.google.com/specimen/Roboto">https://fonts.google.com/specimen/Roboto</a></h3>
<h3>Noto Sans - <a href="https://fonts.google.com/noto/specimen/Noto+Sans">https://fonts.google.com/noto/specimen/Noto+Sans</a></h3>
<h3>Google Sans Code - <a href="https://github.com/googlefonts/googlesans-code">https://github.com/googlefonts/googlesans-code</a></h3>
<h3>PromptFont - <a href="https://shinmera.github.io/promptfont/">https://shinmera.github.io/promptfont/</a></h3>
<h3>Font Awesome 7 - <a href="https://fontawesome.com/">https://fontawesome.com/</a></h3>
<pre>
This Font Software is licensed under the SIL Open Font License,
Version 1.1. This license is copied below, and is also available
@@ -2566,7 +2569,7 @@ SOFTWARE.
<h3>Texture Decompression Routines</h3>
<pre>
Copyright (C) 2009 Benjamin Dobell, Glass Echidna
Copyright (C) 2012 - 2022, Matthäus G. "Anteru" Chajdas (https://anteru.net)
Copyright (C) 2012 - 2022, Matthäus G. "Anteru" Chajdas (https://anteru.net)
Copyright (C) 2020 Richard Geldreich, Jr.
Permission is hereby granted, free of charge, to any person obtaining a copy of

View File

@@ -1,9 +1,15 @@
set(_saved_CMAKE_MESSAGE_LOG_LEVEL ${CMAKE_MESSAGE_LOG_LEVEL})
set(CMAKE_MESSAGE_LOG_LEVEL NOTICE)
set(FMT_INSTALL OFF CACHE BOOL "")
add_subdirectory(fmt EXCLUDE_FROM_ALL)
disable_compiler_warnings_for_target(fmt)
# Prevent fmt from being built with exceptions, or being thrown at call sites.
target_compile_definitions(fmt PUBLIC
"FMT_EXCEPTIONS=0"
"FMT_USE_RTTI=0"
"FMT_CPP_LIB_FILESYSTEM=0"
)
add_subdirectory(minizip EXCLUDE_FROM_ALL)
disable_compiler_warnings_for_target(minizip)
add_subdirectory(lzma EXCLUDE_FROM_ALL)

View File

@@ -46,6 +46,8 @@ target_include_directories(cubeb
EXPORT=
RANDOM_PREFIX=speex
)
add_library(speex_resampler_headers INTERFACE)
target_include_directories(speex_resampler_headers INTERFACE subprojects)
# $<BUILD_INTERFACE:> required because of https://gitlab.kitware.com/cmake/cmake/-/issues/15415
target_link_libraries(cubeb PRIVATE $<BUILD_INTERFACE:speex>)
@@ -178,4 +180,4 @@ if(HAVE_SYS_SOUNDCARD_H)
endif()
endif()
endif()
endif()
endif()

View File

@@ -55,7 +55,7 @@ modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
@@ -111,7 +111,7 @@ modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@@ -158,7 +158,7 @@ Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
@@ -216,7 +216,7 @@ instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
@@ -267,7 +267,7 @@ Library will still fall under Section 6.)
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
@@ -329,7 +329,7 @@ restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
@@ -370,7 +370,7 @@ subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
@@ -422,7 +422,7 @@ conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
@@ -456,7 +456,7 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest

View File

@@ -1 +1 @@
7.0.2
8.0

View File

@@ -187,17 +187,6 @@ struct AVCodecParameters;
* @{
*/
#if FF_API_BUFFER_MIN_SIZE
/**
* @ingroup lavc_encoding
* minimum encoding buffer size
* Used to avoid some checks during header writing.
* @deprecated Unused: avcodec_receive_packet() does not work
* with preallocated packet buffers.
*/
#define AV_INPUT_BUFFER_MIN_SIZE 16384
#endif
/**
* @ingroup lavc_encoding
*/
@@ -234,18 +223,9 @@ typedef struct RcOverride{
* Use qpel MC.
*/
#define AV_CODEC_FLAG_QPEL (1 << 4)
#if FF_API_DROPCHANGED
/**
* Don't output frames whose parameters differ from first
* decoded frame in stream.
*
* @deprecated callers should implement this functionality in their own code
*/
#define AV_CODEC_FLAG_DROPCHANGED (1 << 5)
#endif
/**
* Request the encoder to output reconstructed frames, i.e.\ frames that would
* be produced by decoding the encoded bistream. These frames may be retrieved
* be produced by decoding the encoded bitstream. These frames may be retrieved
* by calling avcodec_receive_frame() immediately after a successful call to
* avcodec_receive_packet().
*
@@ -419,6 +399,12 @@ typedef struct RcOverride{
*/
#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3)
/**
* Decoding only.
* Do not apply picture enhancement layers, export them instead.
*/
#define AV_CODEC_EXPORT_DATA_ENHANCEMENTS (1 << 4)
/**
* The decoder will keep a reference to the frame and may reuse it later.
*/
@@ -509,16 +495,21 @@ typedef struct AVCodecContext {
int flags2;
/**
* some codecs need / can use extradata like Huffman tables.
* MJPEG: Huffman tables
* rv10: additional flags
* MPEG-4: global headers (they can be in the bitstream or here)
* The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger
* than extradata_size to avoid problems if it is read with the bitstream reader.
* The bytewise contents of extradata must not depend on the architecture or CPU endianness.
* Must be allocated with the av_malloc() family of functions.
* - encoding: Set/allocated/freed by libavcodec.
* - decoding: Set/allocated/freed by user.
* Out-of-band global headers that may be used by some codecs.
*
* - decoding: Should be set by the caller when available (typically from a
* demuxer) before opening the decoder; some decoders require this to be
* set and will fail to initialize otherwise.
*
* The array must be allocated with the av_malloc() family of functions;
* allocated size must be at least AV_INPUT_BUFFER_PADDING_SIZE bytes
* larger than extradata_size.
*
* - encoding: May be set by the encoder in avcodec_open2() (possibly
* depending on whether the AV_CODEC_FLAG_GLOBAL_HEADER flag is set).
*
* After being set, the array is owned by the codec and freed in
* avcodec_free_context().
*/
uint8_t *extradata;
int extradata_size;
@@ -559,23 +550,6 @@ typedef struct AVCodecContext {
*/
AVRational framerate;
#if FF_API_TICKS_PER_FRAME
/**
* For some codecs, the time base is closer to the field rate than the frame rate.
* Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
* if no telecine is used ...
*
* Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
*
* @deprecated
* - decoding: Use AVCodecDescriptor.props & AV_CODEC_PROP_FIELDS
* - encoding: Set AVCodecContext.framerate instead
*
*/
attribute_deprecated
int ticks_per_frame;
#endif
/**
* Codec delay.
*
@@ -1175,6 +1149,10 @@ typedef struct AVCodecContext {
* this callback and filled with the extra buffers if there are more
* buffers than buf[] can hold. extended_buf will be freed in
* av_frame_unref().
* Decoders will generally initialize the whole buffer before it is output
* but it can in rare error conditions happen that uninitialized data is passed
* through. \important The buffers returned by get_buffer* should thus not contain sensitive
* data.
*
* If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call
* avcodec_default_get_buffer2() instead of providing buffers allocated by
@@ -1538,6 +1516,7 @@ typedef struct AVCodecContext {
#define FF_DCT_MMX 3
#define FF_DCT_ALTIVEC 5
#define FF_DCT_FAAN 6
#define FF_DCT_NEON 7
/**
* IDCT algorithm, see FF_IDCT_* below.
@@ -1637,165 +1616,29 @@ typedef struct AVCodecContext {
* See the AV_PROFILE_* defines in defs.h.
*/
int profile;
#if FF_API_FF_PROFILE_LEVEL
/** @deprecated The following defines are deprecated; use AV_PROFILE_*
* in defs.h instead. */
#define FF_PROFILE_UNKNOWN -99
#define FF_PROFILE_RESERVED -100
#define FF_PROFILE_AAC_MAIN 0
#define FF_PROFILE_AAC_LOW 1
#define FF_PROFILE_AAC_SSR 2
#define FF_PROFILE_AAC_LTP 3
#define FF_PROFILE_AAC_HE 4
#define FF_PROFILE_AAC_HE_V2 28
#define FF_PROFILE_AAC_LD 22
#define FF_PROFILE_AAC_ELD 38
#define FF_PROFILE_MPEG2_AAC_LOW 128
#define FF_PROFILE_MPEG2_AAC_HE 131
#define FF_PROFILE_DNXHD 0
#define FF_PROFILE_DNXHR_LB 1
#define FF_PROFILE_DNXHR_SQ 2
#define FF_PROFILE_DNXHR_HQ 3
#define FF_PROFILE_DNXHR_HQX 4
#define FF_PROFILE_DNXHR_444 5
#define FF_PROFILE_DTS 20
#define FF_PROFILE_DTS_ES 30
#define FF_PROFILE_DTS_96_24 40
#define FF_PROFILE_DTS_HD_HRA 50
#define FF_PROFILE_DTS_HD_MA 60
#define FF_PROFILE_DTS_EXPRESS 70
#define FF_PROFILE_DTS_HD_MA_X 61
#define FF_PROFILE_DTS_HD_MA_X_IMAX 62
#define FF_PROFILE_EAC3_DDP_ATMOS 30
#define FF_PROFILE_TRUEHD_ATMOS 30
#define FF_PROFILE_MPEG2_422 0
#define FF_PROFILE_MPEG2_HIGH 1
#define FF_PROFILE_MPEG2_SS 2
#define FF_PROFILE_MPEG2_SNR_SCALABLE 3
#define FF_PROFILE_MPEG2_MAIN 4
#define FF_PROFILE_MPEG2_SIMPLE 5
#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag
#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag
#define FF_PROFILE_H264_BASELINE 66
#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
#define FF_PROFILE_H264_MAIN 77
#define FF_PROFILE_H264_EXTENDED 88
#define FF_PROFILE_H264_HIGH 100
#define FF_PROFILE_H264_HIGH_10 110
#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_MULTIVIEW_HIGH 118
#define FF_PROFILE_H264_HIGH_422 122
#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_STEREO_HIGH 128
#define FF_PROFILE_H264_HIGH_444 144
#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244
#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_CAVLC_444 44
#define FF_PROFILE_VC1_SIMPLE 0
#define FF_PROFILE_VC1_MAIN 1
#define FF_PROFILE_VC1_COMPLEX 2
#define FF_PROFILE_VC1_ADVANCED 3
#define FF_PROFILE_MPEG4_SIMPLE 0
#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1
#define FF_PROFILE_MPEG4_CORE 2
#define FF_PROFILE_MPEG4_MAIN 3
#define FF_PROFILE_MPEG4_N_BIT 4
#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5
#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6
#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7
#define FF_PROFILE_MPEG4_HYBRID 8
#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9
#define FF_PROFILE_MPEG4_CORE_SCALABLE 10
#define FF_PROFILE_MPEG4_ADVANCED_CODING 11
#define FF_PROFILE_MPEG4_ADVANCED_CORE 12
#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14
#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15
#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1
#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2
#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768
#define FF_PROFILE_JPEG2000_DCINEMA_2K 3
#define FF_PROFILE_JPEG2000_DCINEMA_4K 4
#define FF_PROFILE_VP9_0 0
#define FF_PROFILE_VP9_1 1
#define FF_PROFILE_VP9_2 2
#define FF_PROFILE_VP9_3 3
#define FF_PROFILE_HEVC_MAIN 1
#define FF_PROFILE_HEVC_MAIN_10 2
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3
#define FF_PROFILE_HEVC_REXT 4
#define FF_PROFILE_HEVC_SCC 9
#define FF_PROFILE_VVC_MAIN_10 1
#define FF_PROFILE_VVC_MAIN_10_444 33
#define FF_PROFILE_AV1_MAIN 0
#define FF_PROFILE_AV1_HIGH 1
#define FF_PROFILE_AV1_PROFESSIONAL 2
#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0
#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1
#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2
#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3
#define FF_PROFILE_MJPEG_JPEG_LS 0xf7
#define FF_PROFILE_SBC_MSBC 1
#define FF_PROFILE_PRORES_PROXY 0
#define FF_PROFILE_PRORES_LT 1
#define FF_PROFILE_PRORES_STANDARD 2
#define FF_PROFILE_PRORES_HQ 3
#define FF_PROFILE_PRORES_4444 4
#define FF_PROFILE_PRORES_XQ 5
#define FF_PROFILE_ARIB_PROFILE_A 0
#define FF_PROFILE_ARIB_PROFILE_C 1
#define FF_PROFILE_KLVA_SYNC 0
#define FF_PROFILE_KLVA_ASYNC 1
#define FF_PROFILE_EVC_BASELINE 0
#define FF_PROFILE_EVC_MAIN 1
#endif
/**
* Encoding level descriptor.
* - encoding: Set by user, corresponds to a specific level defined by the
* codec, usually corresponding to the profile level, if not specified it
* is set to FF_LEVEL_UNKNOWN.
* is set to AV_LEVEL_UNKNOWN.
* - decoding: Set by libavcodec.
* See AV_LEVEL_* in defs.h.
*/
int level;
#if FF_API_FF_PROFILE_LEVEL
/** @deprecated The following define is deprecated; use AV_LEVEL_UNKOWN
* in defs.h instead. */
#define FF_LEVEL_UNKNOWN -99
#endif
#if FF_API_CODEC_PROPS
/**
* Properties of the stream that gets decoded
* - encoding: unused
* - decoding: set by libavcodec
*/
attribute_deprecated
unsigned properties;
#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001
#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002
#define FF_CODEC_PROPERTY_FILM_GRAIN 0x00000004
#endif
/**
* Skip loop filtering for selected frames.
@@ -1884,8 +1727,13 @@ typedef struct AVCodecContext {
* For SUBTITLE_ASS subtitle type, it should contain the whole ASS
* [Script Info] and [V4+ Styles] section, plus the [Events] line and
* the Format line following. It shouldn't include any Dialogue line.
* - encoding: Set/allocated/freed by user (before avcodec_open2())
* - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
*
* - encoding: May be set by the caller before avcodec_open2() to an array
* allocated with the av_malloc() family of functions.
* - decoding: May be set by libavcodec in avcodec_open2().
*
* After being set, the array is owned by the codec and freed in
* avcodec_free_context().
*/
int subtitle_header_size;
uint8_t *subtitle_header;
@@ -2071,7 +1919,7 @@ typedef struct AVCodecContext {
* - encoding: may be set by user before calling avcodec_open2() for
* encoder configuration. Afterwards owned and freed by the
* encoder.
* - decoding: unused
* - decoding: may be set by libavcodec in avcodec_open2().
*/
AVFrameSideData **decoded_side_data;
int nb_decoded_side_data;
@@ -2369,24 +2217,6 @@ int avcodec_parameters_to_context(AVCodecContext *codec,
*/
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
#if FF_API_AVCODEC_CLOSE
/**
* Close a given AVCodecContext and free all the data associated with it
* (but not the AVCodecContext itself).
*
* Calling this function on an AVCodecContext that hasn't been opened will free
* the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL
* codec. Subsequent calls will do nothing.
*
* @deprecated Do not use this function. Use avcodec_free_context() to destroy a
* codec context (either open or closed). Opening and closing a codec context
* multiple times is not supported anymore -- use multiple codec contexts
* instead.
*/
attribute_deprecated
int avcodec_close(AVCodecContext *avctx);
#endif
/**
* Free all allocated data in the given subtitle struct.
*
@@ -2690,6 +2520,36 @@ int avcodec_get_hw_frames_parameters(AVCodecContext *avctx,
enum AVPixelFormat hw_pix_fmt,
AVBufferRef **out_frames_ref);
enum AVCodecConfig {
AV_CODEC_CONFIG_PIX_FORMAT, ///< AVPixelFormat, terminated by AV_PIX_FMT_NONE
AV_CODEC_CONFIG_FRAME_RATE, ///< AVRational, terminated by {0, 0}
AV_CODEC_CONFIG_SAMPLE_RATE, ///< int, terminated by 0
AV_CODEC_CONFIG_SAMPLE_FORMAT, ///< AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE
AV_CODEC_CONFIG_CHANNEL_LAYOUT, ///< AVChannelLayout, terminated by {0}
AV_CODEC_CONFIG_COLOR_RANGE, ///< AVColorRange, terminated by AVCOL_RANGE_UNSPECIFIED
AV_CODEC_CONFIG_COLOR_SPACE, ///< AVColorSpace, terminated by AVCOL_SPC_UNSPECIFIED
};
/**
* Retrieve a list of all supported values for a given configuration type.
*
* @param avctx An optional context to use. Values such as
* `strict_std_compliance` may affect the result. If NULL,
* default values are used.
* @param codec The codec to query, or NULL to use avctx->codec.
* @param config The configuration to query.
* @param flags Currently unused; should be set to zero.
* @param out_configs On success, set to a list of configurations, terminated
* by a config-specific terminator, or NULL if all
* possible values are supported.
* @param out_num_configs On success, set to the number of elements in
*out_configs, excluding the terminator. Optional.
*/
int avcodec_get_supported_config(const AVCodecContext *avctx,
const AVCodec *codec, enum AVCodecConfig config,
unsigned flags, const void **out_configs,
int *out_num_configs);
/**
@@ -3040,7 +2900,7 @@ int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
*
* @note for encoders, this function will only do something if the encoder
* declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder
* will drain any remaining packets, and can then be re-used for a different
* will drain any remaining packets, and can then be reused for a different
* stream (as opposed to sending a null frame which will leave the encoder
* in a permanent EOF state after draining). This can be desirable if the
* cost of tearing down and replacing the encoder instance is high.
@@ -3075,8 +2935,8 @@ void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size);
void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size);
/**
* @return a positive value if s is open (i.e. avcodec_open2() was called on it
* with no corresponding avcodec_close()), 0 otherwise.
* @return a positive value if s is open (i.e. avcodec_open2() was called on it),
* 0 otherwise.
*/
int avcodec_is_open(AVCodecContext *s);

View File

@@ -1,149 +0,0 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_AVFFT_H
#define AVCODEC_AVFFT_H
#include "libavutil/attributes.h"
#include "version_major.h"
#if FF_API_AVFFT
/**
* @file
* @ingroup lavc_fft
* FFT functions
*/
/**
* @defgroup lavc_fft FFT functions
* @ingroup lavc_misc
*
* @{
*/
typedef float FFTSample;
typedef struct FFTComplex {
FFTSample re, im;
} FFTComplex;
typedef struct FFTContext FFTContext;
/**
* Set up a complex FFT.
* @param nbits log2 of the length of the input array
* @param inverse if 0 perform the forward transform, if 1 perform the inverse
* @deprecated use av_tx_init from libavutil/tx.h with a type of AV_TX_FLOAT_FFT
*/
attribute_deprecated
FFTContext *av_fft_init(int nbits, int inverse);
/**
* Do the permutation needed BEFORE calling ff_fft_calc().
* @deprecated without replacement
*/
attribute_deprecated
void av_fft_permute(FFTContext *s, FFTComplex *z);
/**
* Do a complex FFT with the parameters defined in av_fft_init(). The
* input data must be permuted before. No 1.0/sqrt(n) normalization is done.
* @deprecated use the av_tx_fn value returned by av_tx_init, which also does permutation
*/
attribute_deprecated
void av_fft_calc(FFTContext *s, FFTComplex *z);
attribute_deprecated
void av_fft_end(FFTContext *s);
/**
* @deprecated use av_tx_init from libavutil/tx.h with a type of AV_TX_FLOAT_MDCT,
* with a flag of AV_TX_FULL_IMDCT for a replacement to av_imdct_calc.
*/
attribute_deprecated
FFTContext *av_mdct_init(int nbits, int inverse, double scale);
attribute_deprecated
void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
attribute_deprecated
void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input);
attribute_deprecated
void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
attribute_deprecated
void av_mdct_end(FFTContext *s);
/* Real Discrete Fourier Transform */
enum RDFTransformType {
DFT_R2C,
IDFT_C2R,
IDFT_R2C,
DFT_C2R,
};
typedef struct RDFTContext RDFTContext;
/**
* Set up a real FFT.
* @param nbits log2 of the length of the input array
* @param trans the type of transform
*
* @deprecated use av_tx_init from libavutil/tx.h with a type of AV_TX_FLOAT_RDFT
*/
attribute_deprecated
RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans);
attribute_deprecated
void av_rdft_calc(RDFTContext *s, FFTSample *data);
attribute_deprecated
void av_rdft_end(RDFTContext *s);
/* Discrete Cosine Transform */
typedef struct DCTContext DCTContext;
enum DCTTransformType {
DCT_II = 0,
DCT_III,
DCT_I,
DST_I,
};
/**
* Set up DCT.
*
* @param nbits size of the input array:
* (1 << nbits) for DCT-II, DCT-III and DST-I
* (1 << nbits) + 1 for DCT-I
* @param type the type of transform
*
* @note the first element of the input of DST-I is ignored
*
* @deprecated use av_tx_init from libavutil/tx.h with an appropriate type of AV_TX_FLOAT_DCT
*/
attribute_deprecated
DCTContext *av_dct_init(int nbits, enum DCTTransformType type);
attribute_deprecated
void av_dct_calc(DCTContext *s, FFTSample *data);
attribute_deprecated
void av_dct_end (DCTContext *s);
/**
* @}
*/
#endif /* FF_API_AVFFT */
#endif /* AVCODEC_AVFFT_H */

View File

@@ -80,21 +80,6 @@
*/
#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6)
#if FF_API_SUBFRAMES
/**
* Codec can output multiple frames per AVPacket
* Normally demuxers return one frame at a time, demuxers which do not do
* are connected to a parser to split what they return into proper frames.
* This flag is reserved to the very rare category of codecs which have a
* bitstream that cannot be split into frames without timeconsuming
* operations like full decoding. Demuxers carrying such bitstreams thus
* may return multiple frames in a packet. This has many disadvantages like
* prohibiting stream copy in many cases thus it should only be considered
* as a last resort.
*/
#define AV_CODEC_CAP_SUBFRAMES (1 << 8)
#endif
/**
* Codec is experimental and is thus avoided in favor of non experimental
* encoders
@@ -205,10 +190,19 @@ typedef struct AVCodec {
*/
int capabilities;
uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
/**
* Deprecated codec capabilities.
*/
attribute_deprecated
const AVRational *supported_framerates; ///< @deprecated use avcodec_get_supported_config()
attribute_deprecated
const enum AVPixelFormat *pix_fmts; ///< @deprecated use avcodec_get_supported_config()
attribute_deprecated
const int *supported_samplerates; ///< @deprecated use avcodec_get_supported_config()
attribute_deprecated
const enum AVSampleFormat *sample_fmts; ///< @deprecated use avcodec_get_supported_config()
const AVClass *priv_class; ///< AVClass for the private context
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {AV_PROFILE_UNKNOWN}
@@ -226,7 +220,9 @@ typedef struct AVCodec {
/**
* Array of supported channel layouts, terminated with a zeroed layout.
* @deprecated use avcodec_get_supported_config()
*/
attribute_deprecated
const AVChannelLayout *ch_layouts;
} AVCodec;

View File

@@ -206,7 +206,9 @@ enum AVCodecID {
AV_CODEC_ID_BMV_VIDEO,
AV_CODEC_ID_VBLE,
AV_CODEC_ID_DXTORY,
#if FF_API_V408_CODECID
AV_CODEC_ID_V410,
#endif
AV_CODEC_ID_XWD,
AV_CODEC_ID_CDXL,
AV_CODEC_ID_XBM,
@@ -254,8 +256,10 @@ enum AVCodecID {
AV_CODEC_ID_012V,
AV_CODEC_ID_AVUI,
AV_CODEC_ID_TARGA_Y216,
#if FF_API_V408_CODECID
AV_CODEC_ID_V308,
AV_CODEC_ID_V408,
#endif
AV_CODEC_ID_YUV4,
AV_CODEC_ID_AVRN,
AV_CODEC_ID_CPIA,
@@ -322,6 +326,11 @@ enum AVCodecID {
AV_CODEC_ID_RTV1,
AV_CODEC_ID_VMIX,
AV_CODEC_ID_LEAD,
AV_CODEC_ID_DNXUC,
AV_CODEC_ID_RV60,
AV_CODEC_ID_JPEGXL_ANIM,
AV_CODEC_ID_APV,
AV_CODEC_ID_PRORES_RAW,
/* various PCM "codecs" */
AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
@@ -416,6 +425,8 @@ enum AVCodecID {
AV_CODEC_ID_ADPCM_IMA_MOFLEX,
AV_CODEC_ID_ADPCM_IMA_ACORN,
AV_CODEC_ID_ADPCM_XMD,
AV_CODEC_ID_ADPCM_IMA_XBOX,
AV_CODEC_ID_ADPCM_SANYO,
/* AMR */
AV_CODEC_ID_AMR_NB = 0x12000,
@@ -543,6 +554,8 @@ enum AVCodecID {
AV_CODEC_ID_AC4,
AV_CODEC_ID_OSQ,
AV_CODEC_ID_QOA,
AV_CODEC_ID_LC3,
AV_CODEC_ID_G728,
/* subtitle codecs */
AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
@@ -572,6 +585,7 @@ enum AVCodecID {
AV_CODEC_ID_HDMV_TEXT_SUBTITLE,
AV_CODEC_ID_TTML,
AV_CODEC_ID_ARIB_CAPTION,
AV_CODEC_ID_IVTV_VBI,
/* other specific kind of codecs (generally used for attachments) */
AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs.
@@ -588,6 +602,8 @@ enum AVCodecID {
AV_CODEC_ID_TIMED_ID3,
AV_CODEC_ID_BIN_DATA,
AV_CODEC_ID_SMPTE_2038,
AV_CODEC_ID_LCEVC,
AV_CODEC_ID_SMPTE_436M_ANC,
AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it

View File

@@ -148,7 +148,7 @@ typedef struct AVCodecParameters {
* durations. Should be set to { 0, 1 } when some frames have differing
* durations or if the value is not known.
*
* @note This field correponds to values that are stored in codec-level
* @note This field corresponds to values that are stored in codec-level
* headers and is typically overridden by container/transport-layer
* timestamps, when available. It should thus be used only as a last resort,
* when no higher-level timing information is available.

View File

@@ -0,0 +1,130 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_CONTAINER_FIFO_H
#define AVUTIL_CONTAINER_FIFO_H
#include <stddef.h>
/**
* AVContainerFifo is a FIFO for "containers" - dynamically allocated reusable
* structs (e.g. AVFrame or AVPacket). AVContainerFifo uses an internal pool of
* such containers to avoid allocating and freeing them repeatedly.
*/
typedef struct AVContainerFifo AVContainerFifo;
enum AVContainerFifoFlags {
/**
* Signal to av_container_fifo_write() that it should make a new reference
* to data in src rather than consume its contents.
*
* @note you must handle this flag manually in your own fifo_transfer()
* callback
*/
AV_CONTAINER_FIFO_FLAG_REF = (1 << 0),
/**
* This and all higher bits in flags may be set to any value by the caller
* and are guaranteed to be passed through to the fifo_transfer() callback
* and not be interpreted by AVContainerFifo code.
*/
AV_CONTAINER_FIFO_FLAG_USER = (1 << 16),
};
/**
* Allocate a new AVContainerFifo for the container type defined by provided
* callbacks.
*
* @param opaque user data that will be passed to the callbacks provided to this
* function
* @param container_alloc allocate a new container instance and return a pointer
* to it, or NULL on failure
* @param container_reset reset the provided container instance to a clean state
* @param container_free free the provided container instance
* @param fifo_transfer Transfer the contents of container src to dst.
* @param flags currently unused
*
* @return newly allocated AVContainerFifo, or NULL on failure
*/
AVContainerFifo*
av_container_fifo_alloc(void *opaque,
void* (*container_alloc)(void *opaque),
void (*container_reset)(void *opaque, void *obj),
void (*container_free) (void *opaque, void *obj),
int (*fifo_transfer) (void *opaque, void *dst, void *src, unsigned flags),
unsigned flags);
/**
* Allocate an AVContainerFifo instance for AVFrames.
*
* @param flags currently unused
*/
AVContainerFifo *av_container_fifo_alloc_avframe(unsigned flags);
/**
* Free a AVContainerFifo and everything in it.
*/
void av_container_fifo_free(AVContainerFifo **cf);
/**
* Write the contents of obj to the FIFO.
*
* The fifo_transfer() callback previously provided to av_container_fifo_alloc()
* will be called with obj as src in order to perform the actual transfer.
*/
int av_container_fifo_write(AVContainerFifo *cf, void *obj, unsigned flags);
/**
* Read the next available object from the FIFO into obj.
*
* The fifo_read() callback previously provided to av_container_fifo_alloc()
* will be called with obj as dst in order to perform the actual transfer.
*/
int av_container_fifo_read(AVContainerFifo *cf, void *obj, unsigned flags);
/**
* Access objects stored in the FIFO without retrieving them. The
* fifo_transfer() callback will NOT be invoked and the FIFO state will not be
* modified.
*
* @param pobj Pointer to the object stored in the FIFO will be written here on
* success. The object remains owned by the FIFO and the caller may
* only access it as long as the FIFO is not modified.
* @param offset Position of the object to retrieve - 0 is the next item that
* would be read, 1 the one after, etc. Must be smaller than
* av_container_fifo_can_read().
*
* @retval 0 success, a pointer was written into pobj
* @retval AVERROR(EINVAL) invalid offset value
*/
int av_container_fifo_peek(AVContainerFifo *cf, void **pobj, size_t offset);
/**
* Discard the specified number of elements from the FIFO.
*
* @param nb_elems number of elements to discard, MUST NOT be larger than
* av_fifo_can_read(f)
*/
void av_container_fifo_drain(AVContainerFifo *cf, size_t nb_elems);
/**
* @return number of objects available for reading
*/
size_t av_container_fifo_can_read(const AVContainerFifo *cf);
#endif // AVCODEC_CONTAINER_FIFO_H

View File

@@ -73,6 +73,7 @@
#define AV_PROFILE_AAC_HE_V2 28
#define AV_PROFILE_AAC_LD 22
#define AV_PROFILE_AAC_ELD 38
#define AV_PROFILE_AAC_USAC 41
#define AV_PROFILE_MPEG2_AAC_LOW 128
#define AV_PROFILE_MPEG2_AAC_HE 131
@@ -159,6 +160,7 @@
#define AV_PROFILE_HEVC_MAIN_10 2
#define AV_PROFILE_HEVC_MAIN_STILL_PICTURE 3
#define AV_PROFILE_HEVC_REXT 4
#define AV_PROFILE_HEVC_MULTIVIEW_MAIN 6
#define AV_PROFILE_HEVC_SCC 9
#define AV_PROFILE_VVC_MAIN_10 1
@@ -183,6 +185,9 @@
#define AV_PROFILE_PRORES_4444 4
#define AV_PROFILE_PRORES_XQ 5
#define AV_PROFILE_PRORES_RAW 0
#define AV_PROFILE_PRORES_RAW_HQ 1
#define AV_PROFILE_ARIB_PROFILE_A 0
#define AV_PROFILE_ARIB_PROFILE_C 1
@@ -192,6 +197,14 @@
#define AV_PROFILE_EVC_BASELINE 0
#define AV_PROFILE_EVC_MAIN 1
#define AV_PROFILE_APV_422_10 33
#define AV_PROFILE_APV_422_12 44
#define AV_PROFILE_APV_444_10 55
#define AV_PROFILE_APV_444_12 66
#define AV_PROFILE_APV_4444_10 77
#define AV_PROFILE_APV_4444_12 88
#define AV_PROFILE_APV_400_10 99
#define AV_LEVEL_UNKNOWN -99
@@ -323,6 +336,20 @@ typedef struct AVProducerReferenceTime {
int flags;
} AVProducerReferenceTime;
/**
* RTCP SR (Sender Report) information
*
* The received sender report information for an RTSP
* stream, exposed as AV_PKT_DATA_RTCP_SR side data.
*/
typedef struct AVRTCPSenderReport {
uint32_t ssrc; ///< Synchronization source identifier
uint64_t ntp_timestamp; ///< NTP time when the report was sent
uint32_t rtp_timestamp; ///< RTP time when the report was sent
uint32_t sender_nb_packets; ///< Total number of packets sent
uint32_t sender_nb_bytes; ///< Total number of bytes sent (excluding headers or padding)
} AVRTCPSenderReport;
/**
* Encode extradata length to a buffer. Used by xiph codecs.
*

View File

@@ -1,6 +1,4 @@
/*
* Version macros.
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
@@ -18,23 +16,31 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVFILTER_VERSION_MAJOR_H
#define AVFILTER_VERSION_MAJOR_H
#ifndef AVUTIL_HWCONTEXT_AMF_H
#define AVUTIL_HWCONTEXT_AMF_H
#include "pixfmt.h"
#include "hwcontext.h"
#include <AMF/core/Factory.h>
#include <AMF/core/Context.h>
#include <AMF/core/Trace.h>
#include <AMF/core/Debug.h>
/**
* @file
* @ingroup lavfi
* Libavfilter version macros
* This struct is allocated as AVHWDeviceContext.hwctx
*/
typedef struct AVAMFDeviceContext {
void * library;
AMFFactory *factory;
void *trace_writer;
#define LIBAVFILTER_VERSION_MAJOR 10
int64_t version; ///< version of AMF runtime
AMFContext *context;
AMF_MEMORY_TYPE memory_type;
} AVAMFDeviceContext;
/**
* FF_API_* defines may be placed below to indicate public API that will be
* dropped at a future version bump. The defines themselves are not part of
* the public API and may change, break or disappear at any time.
*/
enum AMF_SURFACE_FORMAT av_av_to_amf_format(enum AVPixelFormat fmt);
enum AVPixelFormat av_amf_to_av_format(enum AMF_SURFACE_FORMAT fmt);
#define FF_API_LINK_PUBLIC (LIBAVFILTER_VERSION_MAJOR < 11)
#endif /* AVFILTER_VERSION_MAJOR_H */
#endif /* AVUTIL_HWCONTEXT_AMF_H */

View File

@@ -1,8 +1,8 @@
/*
* Version macros.
*
* This file is part of FFmpeg.
*
* Copyright (c) 2025 Zhao Zhili <quinkblack@foxmail.com>
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
@@ -18,14 +18,17 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef POSTPROC_VERSION_MAJOR_H
#define POSTPROC_VERSION_MAJOR_H
#ifndef AVUTIL_HWCONTEXT_OH_H
#define AVUTIL_HWCONTEXT_OH_H
/**
* @file
* Libpostproc version macros
* OpenHarmony codec device
*/
typedef struct AVOHCodecDeviceContext {
/**
* Pointer to OHNativeWindow
*/
void *native_window;
} AVOHCodecDeviceContext;
#define LIBPOSTPROC_VERSION_MAJOR 58
#endif /* POSTPROC_VERSION_MAJOR_H */
#endif /* AVUTIL_HWCONTEXT_OH_H */

View File

@@ -59,10 +59,6 @@ enum AVPacketSideDataType {
* An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
* @code
* u32le param_flags
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
* s32le channel_count
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
* u64le channel_layout
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
* s32le sample_rate
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
@@ -146,7 +142,7 @@ enum AVPacketSideDataType {
AV_PKT_DATA_CPB_PROPERTIES,
/**
* Recommmends skipping the specified number of samples
* Recommends skipping the specified number of samples
* @code
* u32le number of samples to skip from start of this packet
* u32le number of samples to skip from end of this packet
@@ -330,6 +326,42 @@ enum AVPacketSideDataType {
*/
AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT,
/**
* The number of pixels to discard from the top/bottom/left/right border of the
* decoded frame to obtain the sub-rectangle intended for presentation.
*
* @code
* u32le crop_top
* u32le crop_bottom
* u32le crop_left
* u32le crop_right
* @endcode
*/
AV_PKT_DATA_FRAME_CROPPING,
/**
* Raw LCEVC payload data, as a uint8_t array, with NAL emulation
* bytes intact.
*/
AV_PKT_DATA_LCEVC,
/**
* This side data contains information about the reference display width(s)
* and reference viewing distance(s) as well as information about the
* corresponding reference stereo pair(s), i.e., the pair(s) of views to be
* displayed for the viewer's left and right eyes on the reference display
* at the reference viewing distance.
* The payload is the AV3DReferenceDisplaysInfo struct defined in
* libavutil/tdrdi.h.
*/
AV_PKT_DATA_3D_REFERENCE_DISPLAYS,
/**
* Contains the last received RTCP SR (Sender Report) information
* in the form of the AVRTCPSenderReport struct.
*/
AV_PKT_DATA_RTCP_SR,
/**
* The number of side data types.
* This is not part of the public API/ABI in the sense that it may
@@ -341,8 +373,6 @@ enum AVPacketSideDataType {
AV_PKT_DATA_NB
};
#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
/**
* This structure stores auxiliary information for decoding, presenting, or
* otherwise processing the coded stream. It is typically exported by demuxers
@@ -351,11 +381,11 @@ enum AVPacketSideDataType {
*
* Global side data is handled as follows:
* - During demuxing, it may be exported through
* @ref AVStream.codecpar.side_data "AVStream's codec parameters", which can
* @ref AVCodecParameters.coded_side_data "AVStream's codec parameters", which can
* then be passed as input to decoders through the
* @ref AVCodecContext.coded_side_data "decoder context's side data", for
* initialization.
* - For muxing, it can be fed through @ref AVStream.codecpar.side_data
* - For muxing, it can be fed through @ref AVCodecParameters.coded_side_data
* "AVStream's codec parameters", typically the output of encoders through
* the @ref AVCodecContext.coded_side_data "encoder context's side data", for
* initialization.
@@ -863,6 +893,13 @@ int av_packet_make_writable(AVPacket *pkt);
*/
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);
/**
* Allocate an AVContainerFifo instance for AVPacket.
*
* @param flags currently unused
*/
struct AVContainerFifo *av_container_fifo_alloc_avpacket(unsigned flags);
/**
* @}
*/

View File

@@ -0,0 +1,297 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_REFSTRUCT_H
#define AVUTIL_REFSTRUCT_H
#include <stddef.h>
/**
* RefStruct is an API for creating reference-counted objects
* with minimal overhead. The API is designed for objects,
* not buffers like the AVBuffer API. The main differences
* to the AVBuffer API are as follows:
*
* - It uses void* instead of uint8_t* as its base type due to
* its focus on objects.
* - There are no equivalents of AVBuffer and AVBufferRef.
* E.g. there is no way to get the usable size of the object:
* The user is supposed to know what is at the other end of
* the pointer. It also avoids one level of indirection.
* - Custom allocators are not supported. This allows to simplify
* the implementation and reduce the amount of allocations.
* - It also has the advantage that the user's free callback need
* only free the resources owned by the object, but not the
* object itself.
* - Because referencing (and replacing) an object managed by the
* RefStruct API does not involve allocations, they can not fail
* and therefore need not be checked.
*
* @note Referencing and unreferencing the buffers is thread-safe and thus
* may be done from multiple threads simultaneously without any need for
* additional locking.
*/
/**
* This union is used for all opaque parameters in this API to spare the user
* to cast const away in case the opaque to use is const-qualified.
*
* The functions provided by this API with an AVRefStructOpaque come in pairs
* named foo_c and foo. The foo function accepts void* as opaque and is just
* a wrapper around the foo_c function; "_c" means "(potentially) const".
*/
typedef union {
void *nc;
const void *c;
} AVRefStructOpaque;
/**
* If this flag is set in av_refstruct_alloc_ext_c(), the object will not
* be initially zeroed.
*/
#define AV_REFSTRUCT_FLAG_NO_ZEROING (1 << 0)
/**
* Allocate a refcounted object of usable size `size` managed via
* the RefStruct API.
*
* By default (in the absence of flags to the contrary),
* the returned object is initially zeroed.
*
* @param size Desired usable size of the returned object.
* @param flags A bitwise combination of AV_REFSTRUCT_FLAG_* flags.
* @param opaque A pointer that will be passed to the free_cb callback.
* @param free_cb A callback for freeing this object's content
* when its reference count reaches zero;
* it must not free the object itself.
* @return A pointer to an object of the desired size or NULL on failure.
*/
void *av_refstruct_alloc_ext_c(size_t size, unsigned flags, AVRefStructOpaque opaque,
void (*free_cb)(AVRefStructOpaque opaque, void *obj));
/**
* A wrapper around av_refstruct_alloc_ext_c() for the common case
* of a non-const qualified opaque.
*
* @see av_refstruct_alloc_ext_c()
*/
static inline
void *av_refstruct_alloc_ext(size_t size, unsigned flags, void *opaque,
void (*free_cb)(AVRefStructOpaque opaque, void *obj))
{
return av_refstruct_alloc_ext_c(size, flags, (AVRefStructOpaque){.nc = opaque},
free_cb);
}
/**
* Equivalent to av_refstruct_alloc_ext(size, 0, NULL, NULL)
*/
static inline
void *av_refstruct_allocz(size_t size)
{
return av_refstruct_alloc_ext(size, 0, NULL, NULL);
}
/**
* Decrement the reference count of the underlying object and automatically
* free the object if there are no more references to it.
*
* `*objp == NULL` is legal and a no-op.
*
* @param objp Pointer to a pointer that is either NULL or points to an object
* managed via this API. `*objp` is set to NULL on return.
*/
void av_refstruct_unref(void *objp);
/**
* Create a new reference to an object managed via this API,
* i.e. increment the reference count of the underlying object
* and return obj.
* @return a pointer equal to obj.
*/
void *av_refstruct_ref(void *obj);
/**
* Analog of av_refstruct_ref(), but for constant objects.
* @see av_refstruct_ref()
*/
const void *av_refstruct_ref_c(const void *obj);
/**
* Ensure `*dstp` refers to the same object as src.
*
* If `*dstp` is already equal to src, do nothing. Otherwise unreference `*dstp`
* and replace it with a new reference to src in case `src != NULL` (this
* involves incrementing the reference count of src's underlying object) or
* with NULL otherwise.
*
* @param dstp Pointer to a pointer that is either NULL or points to an object
* managed via this API.
* @param src A pointer to an object managed via this API or NULL.
*/
void av_refstruct_replace(void *dstp, const void *src);
/**
* Check whether the reference count of an object managed
* via this API is 1.
*
* @param obj A pointer to an object managed via this API.
* @return 1 if the reference count of obj is 1; 0 otherwise.
*/
int av_refstruct_exclusive(const void *obj);
/**
* AVRefStructPool is an API for a thread-safe pool of objects managed
* via the RefStruct API.
*
* Frequently allocating and freeing large or complicated objects may be slow
* and wasteful. This API is meant to solve this in cases when the caller
* needs a set of interchangeable objects.
*
* At the beginning, the user must call allocate the pool via
* av_refstruct_pool_alloc() or its analogue av_refstruct_pool_alloc_ext().
* Then whenever an object is needed, call av_refstruct_pool_get() to
* get a new or reused object from the pool. This new object works in all
* aspects the same way as the ones created by av_refstruct_alloc_ext().
* However, when the last reference to this object is unreferenced, it is
* (optionally) reset and returned to the pool instead of being freed and
* will be reused for subsequent av_refstruct_pool_get() calls.
*
* When the caller is done with the pool and no longer needs to create any new
* objects, av_refstruct_pool_uninit() must be called to mark the pool as
* freeable. Then entries returned to the pool will then be freed.
* Once all the entries are freed, the pool will automatically be freed.
*
* Allocating and releasing objects with this API is thread-safe as long as
* the user-supplied callbacks (if provided) are thread-safe.
*/
/**
* The buffer pool. This structure is opaque and not meant to be accessed
* directly. It is allocated with the allocators below and freed with
* av_refstruct_pool_uninit().
*/
typedef struct AVRefStructPool AVRefStructPool;
/**
* If this flag is not set, every object in the pool will be zeroed before
* the init callback is called or before it is turned over to the user
* for the first time if no init callback has been provided.
*/
#define AV_REFSTRUCT_POOL_FLAG_NO_ZEROING AV_REFSTRUCT_FLAG_NO_ZEROING
/**
* If this flag is set and both init_cb and reset_cb callbacks are provided,
* then reset_cb will be called if init_cb fails.
* The object passed to reset_cb will be in the state left by init_cb.
*/
#define AV_REFSTRUCT_POOL_FLAG_RESET_ON_INIT_ERROR (1 << 16)
/**
* If this flag is set and both init_cb and free_entry_cb callbacks are
* provided, then free_cb will be called if init_cb fails.
*
* It will be called after reset_cb in case reset_cb and the
* AV_REFSTRUCT_POOL_FLAG_RESET_ON_INIT_ERROR flag are also set.
*
* The object passed to free_cb will be in the state left by
* the callbacks applied earlier (init_cb potentially followed by reset_cb).
*/
#define AV_REFSTRUCT_POOL_FLAG_FREE_ON_INIT_ERROR (1 << 17)
/**
* If this flag is set, the entries will be zeroed before
* being returned to the user (after the init or reset callbacks
* have been called (if provided)). Furthermore, to avoid zeroing twice
* it also makes the pool behave as if the AV_REFSTRUCT_POOL_FLAG_NO_ZEROING
* flag had been provided.
*/
#define AV_REFSTRUCT_POOL_FLAG_ZERO_EVERY_TIME (1 << 18)
/**
* Equivalent to av_refstruct_pool_alloc(size, flags, NULL, NULL, NULL, NULL, NULL)
*/
AVRefStructPool *av_refstruct_pool_alloc(size_t size, unsigned flags);
/**
* Allocate an AVRefStructPool, potentially using complex callbacks.
*
* @param size size of the entries of the pool
* @param flags a bitwise combination of AV_REFSTRUCT_POOL_FLAG_* flags
* @param opaque A pointer that will be passed to the callbacks below.
* @param init A callback that will be called directly after a new entry
* has been allocated. obj has already been zeroed unless
* the AV_REFSTRUCT_POOL_FLAG_NO_ZEROING flag is in use.
* @param reset A callback that will be called after an entry has been
* returned to the pool and before it is reused.
* @param free_entry A callback that will be called when an entry is freed
* after the pool has been marked as to be uninitialized.
* @param free A callback that will be called when the pool itself is
* freed (after the last entry has been returned and freed).
*/
AVRefStructPool *av_refstruct_pool_alloc_ext_c(size_t size, unsigned flags,
AVRefStructOpaque opaque,
int (*init_cb)(AVRefStructOpaque opaque, void *obj),
void (*reset_cb)(AVRefStructOpaque opaque, void *obj),
void (*free_entry_cb)(AVRefStructOpaque opaque, void *obj),
void (*free_cb)(AVRefStructOpaque opaque));
/**
* A wrapper around av_refstruct_pool_alloc_ext_c() for the common case
* of a non-const qualified opaque.
*
* @see av_refstruct_pool_alloc_ext_c()
*/
static inline
AVRefStructPool *av_refstruct_pool_alloc_ext(size_t size, unsigned flags,
void *opaque,
int (*init_cb)(AVRefStructOpaque opaque, void *obj),
void (*reset_cb)(AVRefStructOpaque opaque, void *obj),
void (*free_entry_cb)(AVRefStructOpaque opaque, void *obj),
void (*free_cb)(AVRefStructOpaque opaque))
{
return av_refstruct_pool_alloc_ext_c(size, flags, (AVRefStructOpaque){.nc = opaque},
init_cb, reset_cb, free_entry_cb, free_cb);
}
/**
* Get an object from the pool, reusing an old one from the pool when
* available.
*
* Every call to this function must happen before av_refstruct_pool_uninit().
* Otherwise undefined behaviour may occur.
*
* @param pool the pool from which to get the object
* @return a reference to the object on success, NULL on error.
*/
void *av_refstruct_pool_get(AVRefStructPool *pool);
/**
* Mark the pool as being available for freeing. It will actually be freed
* only once all the allocated buffers associated with the pool are released.
* Thus it is safe to call this function while some of the allocated buffers
* are still in use.
*
* It is illegal to try to get a new entry after this function has been called.
*
* @param poolp pointer to a pointer to either NULL or a pool to be freed.
* `*poolp` will be set to NULL.
*/
static inline void av_refstruct_pool_uninit(AVRefStructPool **poolp)
{
av_refstruct_unref(poolp);
}
#endif /* AVUTIL_REFSTRUCT_H */

View File

@@ -0,0 +1,254 @@
/*
* MXF SMPTE-436M VBI/ANC parsing functions
* Copyright (c) 2025 Jacob Lifshay
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_SMPTE_436M_H
#define AVCODEC_SMPTE_436M_H
#include <stdint.h>
/**
* Iterator over the ANC packets in a single AV_CODEC_ID_SMPTE_436M_ANC AVPacket's data
*/
typedef struct AVSmpte436mAncIterator {
uint16_t anc_packets_left;
int size_left;
const uint8_t *data_left;
} AVSmpte436mAncIterator;
/**
* Wrapping Type from Table 7 (page 13) of:
* https://pub.smpte.org/latest/st436/s436m-2006.pdf
*/
typedef enum AVSmpte436mWrappingType
{
AV_SMPTE_436M_WRAPPING_TYPE_VANC_FRAME = 1,
AV_SMPTE_436M_WRAPPING_TYPE_VANC_FIELD_1 = 2,
AV_SMPTE_436M_WRAPPING_TYPE_VANC_FIELD_2 = 3,
AV_SMPTE_436M_WRAPPING_TYPE_VANC_PROGRESSIVE_FRAME = 4,
AV_SMPTE_436M_WRAPPING_TYPE_HANC_FRAME = 0x11,
AV_SMPTE_436M_WRAPPING_TYPE_HANC_FIELD_1 = 0x12,
AV_SMPTE_436M_WRAPPING_TYPE_HANC_FIELD_2 = 0x13,
AV_SMPTE_436M_WRAPPING_TYPE_HANC_PROGRESSIVE_FRAME = 0x14,
/** not a real wrapping type, just here to guarantee the enum is big enough */
AV_SMPTE_436M_WRAPPING_TYPE_MAX = 0xFF,
} AVSmpte436mWrappingType;
/**
* Payload Sample Coding from Table 4 (page 10) and Table 7 (page 13) of:
* https://pub.smpte.org/latest/st436/s436m-2006.pdf
*/
typedef enum AVSmpte436mPayloadSampleCoding
{
/** only used for VBI */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_1BIT_LUMA = 1,
/** only used for VBI */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_1BIT_COLOR_DIFF = 2,
/** only used for VBI */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_1BIT_LUMA_AND_COLOR_DIFF = 3,
/** used for VBI and ANC */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_8BIT_LUMA = 4,
/** used for VBI and ANC */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_8BIT_COLOR_DIFF = 5,
/** used for VBI and ANC */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_8BIT_LUMA_AND_COLOR_DIFF = 6,
/** used for VBI and ANC */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_10BIT_LUMA = 7,
/** used for VBI and ANC */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_10BIT_COLOR_DIFF = 8,
/** used for VBI and ANC */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_10BIT_LUMA_AND_COLOR_DIFF = 9,
/** only used for ANC */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_8BIT_LUMA_WITH_PARITY_ERROR = 10,
/** only used for ANC */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_8BIT_COLOR_DIFF_WITH_PARITY_ERROR = 11,
/** only used for ANC */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_8BIT_LUMA_AND_COLOR_DIFF_WITH_PARITY_ERROR = 12,
/** not a real sample coding, just here to guarantee the enum is big enough */
AV_SMPTE_436M_PAYLOAD_SAMPLE_CODING_MAX = 0xFF,
} AVSmpte436mPayloadSampleCoding;
/** the payload capacity of AVSmpte291mAnc8bit (and of AVSmpte291mAnc10bit when that gets added) */
#define AV_SMPTE_291M_ANC_PAYLOAD_CAPACITY 0xFF
/**
* An ANC packet with an 8-bit payload.
* This can be decoded from AVSmpte436mCodedAnc::payload.
*
* Note: Some ANC packets need a 10-bit payload, if stored in this struct,
* the most-significant 2 bits of each sample are discarded.
*/
typedef struct AVSmpte291mAnc8bit {
uint8_t did;
uint8_t sdid_or_dbn;
uint8_t data_count;
uint8_t payload[AV_SMPTE_291M_ANC_PAYLOAD_CAPACITY];
uint8_t checksum;
} AVSmpte291mAnc8bit;
/** max number of samples that can be stored in the payload of AVSmpte436mCodedAnc */
#define AV_SMPTE_436M_CODED_ANC_SAMPLE_CAPACITY \
(AV_SMPTE_291M_ANC_PAYLOAD_CAPACITY + 4) /* 4 for did, sdid_or_dbn, data_count, and checksum */
/** max number of bytes that can be stored in the payload of AVSmpte436mCodedAnc */
#define AV_SMPTE_436M_CODED_ANC_PAYLOAD_CAPACITY (((AV_SMPTE_436M_CODED_ANC_SAMPLE_CAPACITY + 2) / 3) * 4)
/**
* An encoded ANC packet within a single AV_CODEC_ID_SMPTE_436M_ANC AVPacket's data.
* The repeated section of Table 7 (page 13) of:
* https://pub.smpte.org/latest/st436/s436m-2006.pdf
*/
typedef struct AVSmpte436mCodedAnc {
uint16_t line_number;
AVSmpte436mWrappingType wrapping_type;
AVSmpte436mPayloadSampleCoding payload_sample_coding;
uint16_t payload_sample_count;
uint32_t payload_array_length;
/** the payload, has size payload_array_length.
* can be decoded into AVSmpte291mAnc8bit
*/
uint8_t payload[AV_SMPTE_436M_CODED_ANC_PAYLOAD_CAPACITY];
} AVSmpte436mCodedAnc;
/**
* Validate a AVSmpte436mCodedAnc structure. Doesn't check if the payload is valid.
* @param[in] anc ANC packet to validate
* @return 0 on success, AVERROR codes otherwise.
*/
int av_smpte_436m_coded_anc_validate(const AVSmpte436mCodedAnc *anc);
/**
* Encode ANC packets into a single AV_CODEC_ID_SMPTE_436M_ANC AVPacket's data.
* @param[in] anc_packet_count number of ANC packets to encode
* @param[in] anc_packets the ANC packets to encode
* @param[in] size the size of out. ignored if out is NULL.
* @param[out] out Output bytes. Doesn't write anything if out is NULL.
* @return the number of bytes written on success, AVERROR codes otherwise.
* If out is NULL, returns the number of bytes it would have written.
*/
int av_smpte_436m_anc_encode(uint8_t *out, int size, int anc_packet_count, const AVSmpte436mCodedAnc *anc_packets);
struct AVPacket;
/**
* Append more ANC packets to a single AV_CODEC_ID_SMPTE_436M_ANC AVPacket's data.
* @param[in] anc_packet_count number of ANC packets to encode
* @param[in] anc_packets the ANC packets to encode
* @param pkt the AVPacket to append to.
* it must either be size 0 or contain valid SMPTE_436M_ANC data.
* @return 0 on success, AVERROR codes otherwise.
*/
int av_smpte_436m_anc_append(struct AVPacket *pkt, int anc_packet_count, const AVSmpte436mCodedAnc *anc_packets);
/**
* Set up iteration over the ANC packets in a single AV_CODEC_ID_SMPTE_436M_ANC AVPacket's data.
* @param[in] buf Pointer to the data from a AV_CODEC_ID_SMPTE_436M_ANC AVPacket.
* @param[in] buf_size Size of the data from a AV_CODEC_ID_SMPTE_436M_ANC AVPacket.
* @param[out] iter Pointer to the iterator.
* @return 0 on success, AVERROR codes otherwise.
*/
int av_smpte_436m_anc_iter_init(AVSmpte436mAncIterator *iter, const uint8_t *buf, int buf_size);
/**
* Get the next ANC packet from the iterator, advancing the iterator.
* @param[in,out] iter Pointer to the iterator.
* @param[out] anc The returned ANC packet.
* @return 0 on success, AVERROR_EOF when the iterator has reached the end, AVERROR codes otherwise.
*/
int av_smpte_436m_anc_iter_next(AVSmpte436mAncIterator *iter, AVSmpte436mCodedAnc *anc);
/**
* Get the minimum number of bytes needed to store a AVSmpte436mCodedAnc payload.
* @param sample_coding the payload sample coding
* @param sample_count the number of samples stored in the payload
* @return returns the minimum number of bytes needed, on error returns < 0.
* always <= SMPTE_436M_CODED_ANC_PAYLOAD_CAPACITY
*/
int av_smpte_436m_coded_anc_payload_size(AVSmpte436mPayloadSampleCoding sample_coding, uint16_t sample_count);
/**
* Decode a AVSmpte436mCodedAnc payload into AVSmpte291mAnc8bit
* @param[in] sample_coding the payload sample coding
* @param[in] sample_count the number of samples stored in the payload
* @param[in] payload the bytes storing the payload,
* the needed size can be obtained from
avpriv_smpte_436m_coded_anc_payload_size
* @param[in] log_ctx context pointer for av_log
* @param[out] out The decoded ANC packet.
* @return returns 0 on success, otherwise < 0.
*/
int av_smpte_291m_anc_8bit_decode(AVSmpte291mAnc8bit *out,
AVSmpte436mPayloadSampleCoding sample_coding,
uint16_t sample_count,
const uint8_t *payload,
void *log_ctx);
/**
* Fill in the correct checksum for a AVSmpte291mAnc8bit
* @param[in,out] anc The ANC packet.
*/
void av_smpte_291m_anc_8bit_fill_checksum(AVSmpte291mAnc8bit *anc);
/**
* Compute the sample count needed to encode a AVSmpte291mAnc8bit into a AVSmpte436mCodedAnc payload
* @param[in] anc The ANC packet.
* @param[in] sample_coding The sample coding.
* @param[in] log_ctx context pointer for av_log
* @return returns the sample count on success, otherwise < 0.
*/
int av_smpte_291m_anc_8bit_get_sample_count(const AVSmpte291mAnc8bit *anc,
AVSmpte436mPayloadSampleCoding sample_coding,
void *log_ctx);
/**
* Encode a AVSmpte291mAnc8bit into a AVSmpte436mCodedAnc
* @param[in] line_number the line number the ANC packet is on
* @param[in] wrapping_type the wrapping type
* @param[in] sample_coding the payload sample coding
* @param[in] payload the ANC packet to encode.
* @param[in] log_ctx context pointer for av_log
* @param[out] out The encoded ANC packet.
* @return returns 0 on success, otherwise < 0.
*/
int av_smpte_291m_anc_8bit_encode(AVSmpte436mCodedAnc *out,
uint16_t line_number,
AVSmpte436mWrappingType wrapping_type,
AVSmpte436mPayloadSampleCoding sample_coding,
const AVSmpte291mAnc8bit *payload,
void *log_ctx);
/** AVSmpte291mAnc8bit::did when carrying CTA-708 data (for AV_CODEC_ID_EIA_608) */
#define AV_SMPTE_291M_ANC_DID_CTA_708 0x61
/** AVSmpte291mAnc8bit::sdid_or_dbn when carrying CTA-708 data (for AV_CODEC_ID_EIA_608) */
#define AV_SMPTE_291M_ANC_SDID_CTA_708 0x1
/**
* Try to decode an ANC packet into EIA-608/CTA-708 data (AV_CODEC_ID_EIA_608). This
* @param[in] anc The ANC packet.
* @param[in] log_ctx Context pointer for av_log
* @param[out] cc_data the buffer to store the extracted EIA-608/CTA-708 data,
* you can pass NULL to not store the data.
* the required size is 3 * cc_count bytes.
* SMPTE_291M_ANC_PAYLOAD_CAPACITY is always enough size.
* @return returns cc_count (>= 0) on success, AVERROR(EAGAIN) if it wasn't a CTA-708 ANC packet, < 0 on error.
*/
int av_smpte_291m_anc_8bit_extract_cta_708(const AVSmpte291mAnc8bit *anc, uint8_t *cc_data, void *log_ctx);
#endif /* AVCODEC_SMPTE_436M_H */

View File

@@ -0,0 +1,164 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* @ingroup lavu_video_3d_reference_displays_info
* Spherical video
*/
#ifndef AVUTIL_TDRDI_H
#define AVUTIL_TDRDI_H
#include <stddef.h>
#include <stdint.h>
#include "libavutil/avassert.h"
/**
* @defgroup lavu_video_3d_reference_displays_info 3D Reference Displays Information
* @ingroup lavu_video
*
* The 3D Reference Displays Information describes information about the reference display
* width(s) and reference viewing distance(s) as well as information about the corresponding
* reference stereo pair(s).
* @{
*/
#define AV_TDRDI_MAX_NUM_REF_DISPLAY 32
/**
* This structure describes information about the reference display width(s) and reference
* viewing distance(s) as well as information about the corresponding reference stereo pair(s).
* See section G.14.3.2.3 of ITU-T H.265 for more information.
*
* @note The struct must be allocated with av_tdrdi_alloc() and
* its size is not a part of the public ABI.
*/
typedef struct AV3DReferenceDisplaysInfo {
/**
* The exponent of the maximum allowable truncation error for
* {exponent,mantissa}_ref_display_width as given by 2<sup>(-prec_ref_display_width)</sup>.
*/
uint8_t prec_ref_display_width;
/**
* A flag to indicate the presence of reference viewing distance.
* If false, the values of prec_ref_viewing_dist, exponent_ref_viewing_distance,
* and mantissa_ref_viewing_distance are undefined.
*/
uint8_t ref_viewing_distance_flag;
/**
* The exponent of the maximum allowable truncation error for
* {exponent,mantissa}_ref_viewing_distance as given by 2<sup>^(-prec_ref_viewing_dist)</sup>.
* The value of prec_ref_viewing_dist shall be in the range of 0 to 31, inclusive.
*/
uint8_t prec_ref_viewing_dist;
/**
* The number of reference displays that are signalled in this struct.
* Allowed range is 1 to 32, inclusive.
*/
uint8_t num_ref_displays;
/**
* Offset in bytes from the beginning of this structure at which the array
* of reference displays starts.
*/
size_t entries_offset;
/**
* Size of each entry in bytes. May not match sizeof(AV3DReferenceDisplay).
*/
size_t entry_size;
} AV3DReferenceDisplaysInfo;
/**
* Data structure for single deference display information.
* It is allocated as a part of AV3DReferenceDisplaysInfo and should be retrieved with
* av_tdrdi_get_display().
*
* sizeof(AV3DReferenceDisplay) is not a part of the ABI and new fields may be
* added to it.
*/
typedef struct AV3DReferenceDisplay {
/**
* The ViewId of the left view of a stereo pair corresponding to the n-th reference display.
*/
uint16_t left_view_id;
/**
* The ViewId of the left view of a stereo pair corresponding to the n-th reference display.
*/
uint16_t right_view_id;
/**
* The exponent part of the reference display width of the n-th reference display.
*/
uint8_t exponent_ref_display_width;
/**
* The mantissa part of the reference display width of the n-th reference display.
*/
uint8_t mantissa_ref_display_width;
/**
* The exponent part of the reference viewing distance of the n-th reference display.
*/
uint8_t exponent_ref_viewing_distance;
/**
* The mantissa part of the reference viewing distance of the n-th reference display.
*/
uint8_t mantissa_ref_viewing_distance;
/**
* An array of flags to indicates that the information about additional horizontal shift of
* the left and right views for the n-th reference display is present.
*/
uint8_t additional_shift_present_flag;
/**
* The recommended additional horizontal shift for a stereo pair corresponding to the n-th
* reference baseline and the n-th reference display.
*/
int16_t num_sample_shift;
} AV3DReferenceDisplay;
static av_always_inline AV3DReferenceDisplay*
av_tdrdi_get_display(AV3DReferenceDisplaysInfo *tdrdi, unsigned int idx)
{
av_assert0(idx < tdrdi->num_ref_displays);
return (AV3DReferenceDisplay *)((uint8_t *)tdrdi + tdrdi->entries_offset +
idx * tdrdi->entry_size);
}
/**
* Allocate a AV3DReferenceDisplaysInfo structure and initialize its fields to default
* values.
*
* @return the newly allocated struct or NULL on failure
*/
AV3DReferenceDisplaysInfo *av_tdrdi_alloc(unsigned int nb_displays, size_t *size);
/**
* @}
*/
#endif /* AVUTIL_TDRDI_H */

View File

@@ -93,28 +93,6 @@ typedef struct AVVDPAUContext {
AVVDPAU_Render2 render2;
} AVVDPAUContext;
#if FF_API_VDPAU_ALLOC_GET_SET
/**
* @brief allocation function for AVVDPAUContext
*
* Allows extending the struct without breaking API/ABI
* @deprecated use av_vdpau_bind_context() instead
*/
attribute_deprecated
AVVDPAUContext *av_alloc_vdpaucontext(void);
/**
* @deprecated render2 is public and can be accessed directly
*/
attribute_deprecated
AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *);
/**
* @deprecated render2 is public and can be accessed directly
*/
attribute_deprecated
void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2);
#endif
/**
* Associate a VDPAU device with a codec context for hardware acceleration.
* This function is meant to be called from the get_format() codec callback,
@@ -155,17 +133,6 @@ int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type,
uint32_t *width, uint32_t *height);
#if FF_API_VDPAU_ALLOC_GET_SET
/**
* Allocate an AVVDPAUContext.
*
* @return Newly-allocated AVVDPAUContext or NULL on failure.
* @deprecated use av_vdpau_bind_context() instead
*/
attribute_deprecated
AVVDPAUContext *av_vdpau_alloc_context(void);
#endif
/** @} */
#endif /* AVCODEC_VDPAU_H */

View File

@@ -29,7 +29,7 @@
#include "version_major.h"
#define LIBAVCODEC_VERSION_MINOR 3
#define LIBAVCODEC_VERSION_MINOR 11
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \

View File

@@ -25,7 +25,7 @@
* Libavcodec version macros.
*/
#define LIBAVCODEC_VERSION_MAJOR 61
#define LIBAVCODEC_VERSION_MAJOR 62
/**
* FF_API_* defines may be placed below to indicate public API that will be
@@ -37,15 +37,19 @@
* at once through the bump. This improves the git bisect-ability of the change.
*/
#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_SUBFRAMES (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_TICKS_PER_FRAME (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_DROPCHANGED (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 63)
#define FF_API_AVFFT (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_FF_PROFILE_LEVEL (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_AVCODEC_CLOSE (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_BUFFER_MIN_SIZE (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_VDPAU_ALLOC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_V408_CODECID (LIBAVCODEC_VERSION_MAJOR < 63)
#define FF_API_CODEC_PROPS (LIBAVCODEC_VERSION_MAJOR < 63)
#define FF_API_EXR_GAMMA (LIBAVCODEC_VERSION_MAJOR < 63)
#define FF_API_NVDEC_OLD_PIX_FMTS (LIBAVCODEC_VERSION_MAJOR < 63)
// reminder to remove the OMX encoder on next major bump
#define FF_CODEC_OMX (LIBAVCODEC_VERSION_MAJOR < 63)
// reminder to remove Sonic Lossy/Lossless encoders on next major bump
#define FF_CODEC_SONIC_ENC (LIBAVCODEC_VERSION_MAJOR < 63)
// reminder to remove Sonic decoder on next-next major bump
#define FF_CODEC_SONIC_DEC (LIBAVCODEC_VERSION_MAJOR < 63)
#endif /* AVCODEC_VERSION_MAJOR_H */

View File

@@ -1,397 +0,0 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVDEVICE_AVDEVICE_H
#define AVDEVICE_AVDEVICE_H
#include "version_major.h"
#ifndef HAVE_AV_CONFIG_H
/* When included as part of the ffmpeg build, only include the major version
* to avoid unnecessary rebuilds. When included externally, keep including
* the full version information. */
#include "version.h"
#endif
/**
* @file
* @ingroup lavd
* Main libavdevice API header
*/
/**
* @defgroup lavd libavdevice
* Special devices muxing/demuxing library.
*
* Libavdevice is a complementary library to @ref libavf "libavformat". It
* provides various "special" platform-specific muxers and demuxers, e.g. for
* grabbing devices, audio capture and playback etc. As a consequence, the
* (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own
* I/O functions). The filename passed to avformat_open_input() often does not
* refer to an actually existing file, but has some special device-specific
* meaning - e.g. for xcbgrab it is the display name.
*
* To use libavdevice, simply call avdevice_register_all() to register all
* compiled muxers and demuxers. They all use standard libavformat API.
*
* @{
*/
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/dict.h"
#include "libavformat/avformat.h"
/**
* Return the LIBAVDEVICE_VERSION_INT constant.
*/
unsigned avdevice_version(void);
/**
* Return the libavdevice build-time configuration.
*/
const char *avdevice_configuration(void);
/**
* Return the libavdevice license.
*/
const char *avdevice_license(void);
/**
* Initialize libavdevice and register all the input and output devices.
*/
void avdevice_register_all(void);
/**
* Audio input devices iterator.
*
* If d is NULL, returns the first registered input audio/video device,
* if d is non-NULL, returns the next registered input audio/video device after d
* or NULL if d is the last one.
*/
const AVInputFormat *av_input_audio_device_next(const AVInputFormat *d);
/**
* Video input devices iterator.
*
* If d is NULL, returns the first registered input audio/video device,
* if d is non-NULL, returns the next registered input audio/video device after d
* or NULL if d is the last one.
*/
const AVInputFormat *av_input_video_device_next(const AVInputFormat *d);
/**
* Audio output devices iterator.
*
* If d is NULL, returns the first registered output audio/video device,
* if d is non-NULL, returns the next registered output audio/video device after d
* or NULL if d is the last one.
*/
const AVOutputFormat *av_output_audio_device_next(const AVOutputFormat *d);
/**
* Video output devices iterator.
*
* If d is NULL, returns the first registered output audio/video device,
* if d is non-NULL, returns the next registered output audio/video device after d
* or NULL if d is the last one.
*/
const AVOutputFormat *av_output_video_device_next(const AVOutputFormat *d);
typedef struct AVDeviceRect {
int x; /**< x coordinate of top left corner */
int y; /**< y coordinate of top left corner */
int width; /**< width */
int height; /**< height */
} AVDeviceRect;
/**
* Message types used by avdevice_app_to_dev_control_message().
*/
enum AVAppToDevMessageType {
/**
* Dummy message.
*/
AV_APP_TO_DEV_NONE = MKBETAG('N','O','N','E'),
/**
* Window size change message.
*
* Message is sent to the device every time the application changes the size
* of the window device renders to.
* Message should also be sent right after window is created.
*
* data: AVDeviceRect: new window size.
*/
AV_APP_TO_DEV_WINDOW_SIZE = MKBETAG('G','E','O','M'),
/**
* Repaint request message.
*
* Message is sent to the device when window has to be repainted.
*
* data: AVDeviceRect: area required to be repainted.
* NULL: whole area is required to be repainted.
*/
AV_APP_TO_DEV_WINDOW_REPAINT = MKBETAG('R','E','P','A'),
/**
* Request pause/play.
*
* Application requests pause/unpause playback.
* Mostly usable with devices that have internal buffer.
* By default devices are not paused.
*
* data: NULL
*/
AV_APP_TO_DEV_PAUSE = MKBETAG('P', 'A', 'U', ' '),
AV_APP_TO_DEV_PLAY = MKBETAG('P', 'L', 'A', 'Y'),
AV_APP_TO_DEV_TOGGLE_PAUSE = MKBETAG('P', 'A', 'U', 'T'),
/**
* Volume control message.
*
* Set volume level. It may be device-dependent if volume
* is changed per stream or system wide. Per stream volume
* change is expected when possible.
*
* data: double: new volume with range of 0.0 - 1.0.
*/
AV_APP_TO_DEV_SET_VOLUME = MKBETAG('S', 'V', 'O', 'L'),
/**
* Mute control messages.
*
* Change mute state. It may be device-dependent if mute status
* is changed per stream or system wide. Per stream mute status
* change is expected when possible.
*
* data: NULL.
*/
AV_APP_TO_DEV_MUTE = MKBETAG(' ', 'M', 'U', 'T'),
AV_APP_TO_DEV_UNMUTE = MKBETAG('U', 'M', 'U', 'T'),
AV_APP_TO_DEV_TOGGLE_MUTE = MKBETAG('T', 'M', 'U', 'T'),
/**
* Get volume/mute messages.
*
* Force the device to send AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED or
* AV_DEV_TO_APP_MUTE_STATE_CHANGED command respectively.
*
* data: NULL.
*/
AV_APP_TO_DEV_GET_VOLUME = MKBETAG('G', 'V', 'O', 'L'),
AV_APP_TO_DEV_GET_MUTE = MKBETAG('G', 'M', 'U', 'T'),
};
/**
* Message types used by avdevice_dev_to_app_control_message().
*/
enum AVDevToAppMessageType {
/**
* Dummy message.
*/
AV_DEV_TO_APP_NONE = MKBETAG('N','O','N','E'),
/**
* Create window buffer message.
*
* Device requests to create a window buffer. Exact meaning is device-
* and application-dependent. Message is sent before rendering first
* frame and all one-shot initializations should be done here.
* Application is allowed to ignore preferred window buffer size.
*
* @note: Application is obligated to inform about window buffer size
* with AV_APP_TO_DEV_WINDOW_SIZE message.
*
* data: AVDeviceRect: preferred size of the window buffer.
* NULL: no preferred size of the window buffer.
*/
AV_DEV_TO_APP_CREATE_WINDOW_BUFFER = MKBETAG('B','C','R','E'),
/**
* Prepare window buffer message.
*
* Device requests to prepare a window buffer for rendering.
* Exact meaning is device- and application-dependent.
* Message is sent before rendering of each frame.
*
* data: NULL.
*/
AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER = MKBETAG('B','P','R','E'),
/**
* Display window buffer message.
*
* Device requests to display a window buffer.
* Message is sent when new frame is ready to be displayed.
* Usually buffers need to be swapped in handler of this message.
*
* data: NULL.
*/
AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER = MKBETAG('B','D','I','S'),
/**
* Destroy window buffer message.
*
* Device requests to destroy a window buffer.
* Message is sent when device is about to be destroyed and window
* buffer is not required anymore.
*
* data: NULL.
*/
AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER = MKBETAG('B','D','E','S'),
/**
* Buffer fullness status messages.
*
* Device signals buffer overflow/underflow.
*
* data: NULL.
*/
AV_DEV_TO_APP_BUFFER_OVERFLOW = MKBETAG('B','O','F','L'),
AV_DEV_TO_APP_BUFFER_UNDERFLOW = MKBETAG('B','U','F','L'),
/**
* Buffer readable/writable.
*
* Device informs that buffer is readable/writable.
* When possible, device informs how many bytes can be read/write.
*
* @warning Device may not inform when number of bytes than can be read/write changes.
*
* data: int64_t: amount of bytes available to read/write.
* NULL: amount of bytes available to read/write is not known.
*/
AV_DEV_TO_APP_BUFFER_READABLE = MKBETAG('B','R','D',' '),
AV_DEV_TO_APP_BUFFER_WRITABLE = MKBETAG('B','W','R',' '),
/**
* Mute state change message.
*
* Device informs that mute state has changed.
*
* data: int: 0 for not muted state, non-zero for muted state.
*/
AV_DEV_TO_APP_MUTE_STATE_CHANGED = MKBETAG('C','M','U','T'),
/**
* Volume level change message.
*
* Device informs that volume level has changed.
*
* data: double: new volume with range of 0.0 - 1.0.
*/
AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED = MKBETAG('C','V','O','L'),
};
/**
* Send control message from application to device.
*
* @param s device context.
* @param type message type.
* @param data message data. Exact type depends on message type.
* @param data_size size of message data.
* @return >= 0 on success, negative on error.
* AVERROR(ENOSYS) when device doesn't implement handler of the message.
*/
int avdevice_app_to_dev_control_message(struct AVFormatContext *s,
enum AVAppToDevMessageType type,
void *data, size_t data_size);
/**
* Send control message from device to application.
*
* @param s device context.
* @param type message type.
* @param data message data. Can be NULL.
* @param data_size size of message data.
* @return >= 0 on success, negative on error.
* AVERROR(ENOSYS) when application doesn't implement handler of the message.
*/
int avdevice_dev_to_app_control_message(struct AVFormatContext *s,
enum AVDevToAppMessageType type,
void *data, size_t data_size);
/**
* Structure describes basic parameters of the device.
*/
typedef struct AVDeviceInfo {
char *device_name; /**< device name, format depends on device */
char *device_description; /**< human friendly name */
enum AVMediaType *media_types; /**< array indicating what media types(s), if any, a device can provide. If null, cannot provide any */
int nb_media_types; /**< length of media_types array, 0 if device cannot provide any media types */
} AVDeviceInfo;
/**
* List of devices.
*/
typedef struct AVDeviceInfoList {
AVDeviceInfo **devices; /**< list of autodetected devices */
int nb_devices; /**< number of autodetected devices */
int default_device; /**< index of default device or -1 if no default */
} AVDeviceInfoList;
/**
* List devices.
*
* Returns available device names and their parameters.
*
* @note: Some devices may accept system-dependent device names that cannot be
* autodetected. The list returned by this function cannot be assumed to
* be always completed.
*
* @param s device context.
* @param[out] device_list list of autodetected devices.
* @return count of autodetected devices, negative on error.
*/
int avdevice_list_devices(struct AVFormatContext *s, AVDeviceInfoList **device_list);
/**
* Convenient function to free result of avdevice_list_devices().
*
* @param device_list device list to be freed.
*/
void avdevice_free_list_devices(AVDeviceInfoList **device_list);
/**
* List devices.
*
* Returns available device names and their parameters.
* These are convinient wrappers for avdevice_list_devices().
* Device context is allocated and deallocated internally.
*
* @param device device format. May be NULL if device name is set.
* @param device_name device name. May be NULL if device format is set.
* @param device_options An AVDictionary filled with device-private options. May be NULL.
* The same options must be passed later to avformat_write_header() for output
* devices or avformat_open_input() for input devices, or at any other place
* that affects device-private options.
* @param[out] device_list list of autodetected devices
* @return count of autodetected devices, negative on error.
* @note device argument takes precedence over device_name when both are set.
*/
int avdevice_list_input_sources(const AVInputFormat *device, const char *device_name,
AVDictionary *device_options, AVDeviceInfoList **device_list);
int avdevice_list_output_sinks(const AVOutputFormat *device, const char *device_name,
AVDictionary *device_options, AVDeviceInfoList **device_list);
/**
* @}
*/
#endif /* AVDEVICE_AVDEVICE_H */

View File

@@ -1,45 +0,0 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVDEVICE_VERSION_H
#define AVDEVICE_VERSION_H
/**
* @file
* @ingroup lavd
* Libavdevice version macros
*/
#include "libavutil/version.h"
#include "version_major.h"
#define LIBAVDEVICE_VERSION_MINOR 1
#define LIBAVDEVICE_VERSION_MICRO 100
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
LIBAVDEVICE_VERSION_MINOR, \
LIBAVDEVICE_VERSION_MICRO)
#define LIBAVDEVICE_VERSION AV_VERSION(LIBAVDEVICE_VERSION_MAJOR, \
LIBAVDEVICE_VERSION_MINOR, \
LIBAVDEVICE_VERSION_MICRO)
#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT
#define LIBAVDEVICE_IDENT "Lavd" AV_STRINGIFY(LIBAVDEVICE_VERSION)
#endif /* AVDEVICE_VERSION_H */

View File

@@ -1,43 +0,0 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVDEVICE_VERSION_MAJOR_H
#define AVDEVICE_VERSION_MAJOR_H
/**
* @file
* @ingroup lavd
* Libavdevice version macros
*/
#define LIBAVDEVICE_VERSION_MAJOR 61
/**
* FF_API_* defines may be placed below to indicate public API that will be
* dropped at a future version bump. The defines themselves are not part of
* the public API and may change, break or disappear at any time.
*/
// reminder to remove the bktr device on next major bump
#define FF_API_BKTR_DEVICE (LIBAVDEVICE_VERSION_MAJOR < 62)
// reminder to remove the opengl device on next major bump
#define FF_API_OPENGL_DEVICE (LIBAVDEVICE_VERSION_MAJOR < 62)
// reminder to remove the sdl2 device on next major bump
#define FF_API_SDL2_DEVICE (LIBAVDEVICE_VERSION_MAJOR < 62)
#endif /* AVDEVICE_VERSION_MAJOR_H */

File diff suppressed because it is too large Load Diff

View File

@@ -1,173 +0,0 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVFILTER_BUFFERSINK_H
#define AVFILTER_BUFFERSINK_H
/**
* @file
* @ingroup lavfi_buffersink
* memory buffer sink API for audio and video
*/
#include "avfilter.h"
/**
* @defgroup lavfi_buffersink Buffer sink API
* @ingroup lavfi
* @{
*
* The buffersink and abuffersink filters are there to connect filter graphs
* to applications. They have a single input, connected to the graph, and no
* output. Frames must be extracted using av_buffersink_get_frame() or
* av_buffersink_get_samples().
*
* The format negotiated by the graph during configuration can be obtained
* using the accessor functions:
* - av_buffersink_get_time_base(),
* - av_buffersink_get_format(),
* - av_buffersink_get_frame_rate(),
* - av_buffersink_get_w(),
* - av_buffersink_get_h(),
* - av_buffersink_get_sample_aspect_ratio(),
* - av_buffersink_get_channels(),
* - av_buffersink_get_ch_layout(),
* - av_buffersink_get_sample_rate().
*
* The layout returned by av_buffersink_get_ch_layout() must de uninitialized
* by the caller.
*
* The format can be constrained by setting options, using av_opt_set() and
* related functions with the AV_OPT_SEARCH_CHILDREN flag.
* - pix_fmts (int list),
* - color_spaces (int list),
* - color_ranges (int list),
* - sample_fmts (int list),
* - sample_rates (int list),
* - ch_layouts (string),
* - channel_counts (int list),
* - all_channel_counts (bool).
* Most of these options are of type binary, and should be set using
* av_opt_set_int_list() or av_opt_set_bin(). If they are not set, all
* corresponding formats are accepted.
*
* As a special case, if ch_layouts is not set, all valid channel layouts are
* accepted except for UNSPEC layouts, unless all_channel_counts is set.
*/
/**
* Get a frame with filtered data from sink and put it in frame.
*
* @param ctx pointer to a buffersink or abuffersink filter context.
* @param frame pointer to an allocated frame that will be filled with data.
* The data must be freed using av_frame_unref() / av_frame_free()
* @param flags a combination of AV_BUFFERSINK_FLAG_* flags
*
* @return >= 0 in for success, a negative AVERROR code for failure.
*/
int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags);
/**
* Tell av_buffersink_get_buffer_ref() to read video/samples buffer
* reference, but not remove it from the buffer. This is useful if you
* need only to read a video/samples buffer, without to fetch it.
*/
#define AV_BUFFERSINK_FLAG_PEEK 1
/**
* Tell av_buffersink_get_buffer_ref() not to request a frame from its input.
* If a frame is already buffered, it is read (and removed from the buffer),
* but if no frame is present, return AVERROR(EAGAIN).
*/
#define AV_BUFFERSINK_FLAG_NO_REQUEST 2
/**
* Set the frame size for an audio buffer sink.
*
* All calls to av_buffersink_get_buffer_ref will return a buffer with
* exactly the specified number of samples, or AVERROR(EAGAIN) if there is
* not enough. The last buffer at EOF will be padded with 0.
*/
void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size);
/**
* @defgroup lavfi_buffersink_accessors Buffer sink accessors
* Get the properties of the stream
* @{
*/
enum AVMediaType av_buffersink_get_type (const AVFilterContext *ctx);
AVRational av_buffersink_get_time_base (const AVFilterContext *ctx);
int av_buffersink_get_format (const AVFilterContext *ctx);
AVRational av_buffersink_get_frame_rate (const AVFilterContext *ctx);
int av_buffersink_get_w (const AVFilterContext *ctx);
int av_buffersink_get_h (const AVFilterContext *ctx);
AVRational av_buffersink_get_sample_aspect_ratio (const AVFilterContext *ctx);
enum AVColorSpace av_buffersink_get_colorspace (const AVFilterContext *ctx);
enum AVColorRange av_buffersink_get_color_range (const AVFilterContext *ctx);
int av_buffersink_get_channels (const AVFilterContext *ctx);
int av_buffersink_get_ch_layout (const AVFilterContext *ctx,
AVChannelLayout *ch_layout);
int av_buffersink_get_sample_rate (const AVFilterContext *ctx);
AVBufferRef * av_buffersink_get_hw_frames_ctx (const AVFilterContext *ctx);
/** @} */
/**
* Get a frame with filtered data from sink and put it in frame.
*
* @param ctx pointer to a context of a buffersink or abuffersink AVFilter.
* @param frame pointer to an allocated frame that will be filled with data.
* The data must be freed using av_frame_unref() / av_frame_free()
*
* @return
* - >= 0 if a frame was successfully returned.
* - AVERROR(EAGAIN) if no frames are available at this point; more
* input frames must be added to the filtergraph to get more output.
* - AVERROR_EOF if there will be no more output frames on this sink.
* - A different negative AVERROR code in other failure cases.
*/
int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame);
/**
* Same as av_buffersink_get_frame(), but with the ability to specify the number
* of samples read. This function is less efficient than
* av_buffersink_get_frame(), because it copies the data around.
*
* @param ctx pointer to a context of the abuffersink AVFilter.
* @param frame pointer to an allocated frame that will be filled with data.
* The data must be freed using av_frame_unref() / av_frame_free()
* frame will contain exactly nb_samples audio samples, except at
* the end of stream, when it can contain less than nb_samples.
*
* @return The return codes have the same meaning as for
* av_buffersink_get_frame().
*
* @warning do not mix this function with av_buffersink_get_frame(). Use only one or
* the other with a single sink, not both.
*/
int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples);
/**
* @}
*/
#endif /* AVFILTER_BUFFERSINK_H */

View File

@@ -1,215 +0,0 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVFILTER_BUFFERSRC_H
#define AVFILTER_BUFFERSRC_H
/**
* @file
* @ingroup lavfi_buffersrc
* Memory buffer source API.
*/
#include "avfilter.h"
/**
* @defgroup lavfi_buffersrc Buffer source API
* @ingroup lavfi
* @{
*/
enum {
/**
* Do not check for format changes.
*/
AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1,
/**
* Immediately push the frame to the output.
*/
AV_BUFFERSRC_FLAG_PUSH = 4,
/**
* Keep a reference to the frame.
* If the frame if reference-counted, create a new reference; otherwise
* copy the frame data.
*/
AV_BUFFERSRC_FLAG_KEEP_REF = 8,
};
/**
* Get the number of failed requests.
*
* A failed request is when the request_frame method is called while no
* frame is present in the buffer.
* The number is reset when a frame is added.
*/
unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src);
/**
* This structure contains the parameters describing the frames that will be
* passed to this filter.
*
* It should be allocated with av_buffersrc_parameters_alloc() and freed with
* av_free(). All the allocated fields in it remain owned by the caller.
*/
typedef struct AVBufferSrcParameters {
/**
* video: the pixel format, value corresponds to enum AVPixelFormat
* audio: the sample format, value corresponds to enum AVSampleFormat
*/
int format;
/**
* The timebase to be used for the timestamps on the input frames.
*/
AVRational time_base;
/**
* Video only, the display dimensions of the input frames.
*/
int width, height;
/**
* Video only, the sample (pixel) aspect ratio.
*/
AVRational sample_aspect_ratio;
/**
* Video only, the frame rate of the input video. This field must only be
* set to a non-zero value if input stream has a known constant framerate
* and should be left at its initial value if the framerate is variable or
* unknown.
*/
AVRational frame_rate;
/**
* Video with a hwaccel pixel format only. This should be a reference to an
* AVHWFramesContext instance describing the input frames.
*/
AVBufferRef *hw_frames_ctx;
/**
* Audio only, the audio sampling rate in samples per second.
*/
int sample_rate;
/**
* Audio only, the audio channel layout
*/
AVChannelLayout ch_layout;
/**
* Video only, the YUV colorspace and range.
*/
enum AVColorSpace color_space;
enum AVColorRange color_range;
} AVBufferSrcParameters;
/**
* Allocate a new AVBufferSrcParameters instance. It should be freed by the
* caller with av_free().
*/
AVBufferSrcParameters *av_buffersrc_parameters_alloc(void);
/**
* Initialize the buffersrc or abuffersrc filter with the provided parameters.
* This function may be called multiple times, the later calls override the
* previous ones. Some of the parameters may also be set through AVOptions, then
* whatever method is used last takes precedence.
*
* @param ctx an instance of the buffersrc or abuffersrc filter
* @param param the stream parameters. The frames later passed to this filter
* must conform to those parameters. All the allocated fields in
* param remain owned by the caller, libavfilter will make internal
* copies or references when necessary.
* @return 0 on success, a negative AVERROR code on failure.
*/
int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param);
/**
* Add a frame to the buffer source.
*
* @param ctx an instance of the buffersrc filter
* @param frame frame to be added. If the frame is reference counted, this
* function will make a new reference to it. Otherwise the frame data will be
* copied.
*
* @return 0 on success, a negative AVERROR on error
*
* This function is equivalent to av_buffersrc_add_frame_flags() with the
* AV_BUFFERSRC_FLAG_KEEP_REF flag.
*/
av_warn_unused_result
int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame);
/**
* Add a frame to the buffer source.
*
* @param ctx an instance of the buffersrc filter
* @param frame frame to be added. If the frame is reference counted, this
* function will take ownership of the reference(s) and reset the frame.
* Otherwise the frame data will be copied. If this function returns an error,
* the input frame is not touched.
*
* @return 0 on success, a negative AVERROR on error.
*
* @note the difference between this function and av_buffersrc_write_frame() is
* that av_buffersrc_write_frame() creates a new reference to the input frame,
* while this function takes ownership of the reference passed to it.
*
* This function is equivalent to av_buffersrc_add_frame_flags() without the
* AV_BUFFERSRC_FLAG_KEEP_REF flag.
*/
av_warn_unused_result
int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame);
/**
* Add a frame to the buffer source.
*
* By default, if the frame is reference-counted, this function will take
* ownership of the reference(s) and reset the frame. This can be controlled
* using the flags.
*
* If this function returns an error, the input frame is not touched.
*
* @param buffer_src pointer to a buffer source context
* @param frame a frame, or NULL to mark EOF
* @param flags a combination of AV_BUFFERSRC_FLAG_*
* @return >= 0 in case of success, a negative AVERROR code
* in case of failure
*/
av_warn_unused_result
int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src,
AVFrame *frame, int flags);
/**
* Close the buffer source after EOF.
*
* This is similar to passing NULL to av_buffersrc_add_frame_flags()
* except it takes the timestamp of the EOF, i.e. the timestamp of the end
* of the last frame.
*/
int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags);
/**
* @}
*/
#endif /* AVFILTER_BUFFERSRC_H */

View File

@@ -1,48 +0,0 @@
/*
* Version macros.
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVFILTER_VERSION_H
#define AVFILTER_VERSION_H
/**
* @file
* @ingroup lavfi
* Libavfilter version macros
*/
#include "libavutil/version.h"
#include "version_major.h"
#define LIBAVFILTER_VERSION_MINOR 1
#define LIBAVFILTER_VERSION_MICRO 100
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \
LIBAVFILTER_VERSION_MICRO)
#define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \
LIBAVFILTER_VERSION_MICRO)
#define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT
#define LIBAVFILTER_IDENT "Lavfi" AV_STRINGIFY(LIBAVFILTER_VERSION)
#endif /* AVFILTER_VERSION_H */

View File

@@ -146,8 +146,8 @@
* consumed). The calling program can handle such unrecognized options as it
* wishes, e.g.
* @code
* AVDictionaryEntry *e;
* if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) {
* const AVDictionaryEntry *e;
* if ((e = av_dict_iterate(options, NULL))) {
* fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key);
* abort();
* }
@@ -459,7 +459,7 @@ typedef struct AVProbeData {
#define AVPROBE_SCORE_STREAM_RETRY (AVPROBE_SCORE_MAX/4-1)
#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension
#define AVPROBE_SCORE_MIME 75 ///< score for file mime type
#define AVPROBE_SCORE_MIME_BONUS 30 ///< score added for matching mime type
#define AVPROBE_SCORE_MAX 100 ///< maximum score
#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer
@@ -470,8 +470,7 @@ typedef struct AVProbeData {
/**
* The muxer/demuxer is experimental and should be used with caution.
*
* - demuxers: will not be selected automatically by probing, must be specified
* explicitly.
* It will not be selected automatically, and must be specified explicitly.
*/
#define AVFMT_EXPERIMENTAL 0x0004
#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */
@@ -485,9 +484,6 @@ typedef struct AVProbeData {
#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */
#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */
#define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */
#if FF_API_ALLOW_FLUSH
#define AVFMT_ALLOW_FLUSH 0x10000 /**< @deprecated: Just send a NULL packet if you want to flush a muxer. */
#endif
#define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly
increasing timestamps, but they must
still be monotonic */
@@ -713,6 +709,11 @@ typedef struct AVIndexEntry {
* The video stream contains still images.
*/
#define AV_DISPOSITION_STILL_IMAGE (1 << 20)
/**
* The video stream contains multiple layers, e.g. stereoscopic views (cf. H.264
* Annex G/H, or HEVC Annex F).
*/
#define AV_DISPOSITION_MULTILAYER (1 << 21)
/**
* @return The AV_DISPOSITION_* flag corresponding to disp or a negative error
@@ -842,38 +843,6 @@ typedef struct AVStream {
*/
AVPacket attached_pic;
#if FF_API_AVSTREAM_SIDE_DATA
/**
* An array of side data that applies to the whole stream (i.e. the
* container does not allow it to change between packets).
*
* There may be no overlap between the side data in this array and side data
* in the packets. I.e. a given side data is either exported by the muxer
* (demuxing) / set by the caller (muxing) in this array, then it never
* appears in the packets, or the side data is exported / sent through
* the packets (always in the first packet where the value becomes known or
* changes), then it does not appear in this array.
*
* - demuxing: Set by libavformat when the stream is created.
* - muxing: May be set by the caller before avformat_write_header().
*
* Freed by libavformat in avformat_free_context().
*
* @deprecated use AVStream's @ref AVCodecParameters.coded_side_data
* "codecpar side data".
*/
attribute_deprecated
AVPacketSideData *side_data;
/**
* The number of elements in the AVStream.side_data array.
*
* @deprecated use AVStream's @ref AVCodecParameters.nb_coded_side_data
* "codecpar side data".
*/
attribute_deprecated
int nb_side_data;
#endif
/**
* Flags indicating events happening on the stream, a combination of
* AVSTREAM_EVENT_FLAG_*.
@@ -957,7 +926,7 @@ typedef struct AVStream {
* the sixth @ref AVStreamGroup.streams "stream" in the group is "512,512",
* etc.
*
* The following is an example of a canvas with overlaping tiles:
* The following is an example of a canvas with overlapping tiles:
*
* +-----------+
* | %%%%% |
@@ -1077,13 +1046,52 @@ typedef struct AVStreamGroupTileGrid {
* final image before presentation.
*/
int height;
/**
* Additional data associated with the grid.
*
* Should be allocated with av_packet_side_data_new() or
* av_packet_side_data_add(), and will be freed by avformat_free_context().
*/
AVPacketSideData *coded_side_data;
/**
* Amount of entries in @ref coded_side_data.
*/
int nb_coded_side_data;
} AVStreamGroupTileGrid;
/**
* AVStreamGroupLCEVC is meant to define the relation between video streams
* and a data stream containing LCEVC enhancement layer NALUs.
*
* No more than one stream of @ref AVCodecParameters.codec_type "codec_type"
* AVMEDIA_TYPE_DATA shall be present, and it must be of
* @ref AVCodecParameters.codec_id "codec_id" AV_CODEC_ID_LCEVC.
*/
typedef struct AVStreamGroupLCEVC {
const AVClass *av_class;
/**
* Index of the LCEVC data stream in AVStreamGroup.
*/
unsigned int lcevc_index;
/**
* Width of the final stream for presentation.
*/
int width;
/**
* Height of the final image for presentation.
*/
int height;
} AVStreamGroupLCEVC;
enum AVStreamGroupParamsType {
AV_STREAM_GROUP_PARAMS_NONE,
AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT,
AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION,
AV_STREAM_GROUP_PARAMS_TILE_GRID,
AV_STREAM_GROUP_PARAMS_LCEVC,
};
struct AVIAMFAudioElement;
@@ -1125,6 +1133,7 @@ typedef struct AVStreamGroup {
struct AVIAMFAudioElement *iamf_audio_element;
struct AVIAMFMixPresentation *iamf_mix_presentation;
struct AVStreamGroupTileGrid *tile_grid;
struct AVStreamGroupLCEVC *lcevc;
} params;
/**
@@ -1411,7 +1420,7 @@ typedef struct AVFormatContext {
#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input.
#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS
#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container
#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled
#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the filling code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled
#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible
#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted
@@ -1425,9 +1434,6 @@ typedef struct AVFormatContext {
#define AVFMT_FLAG_BITEXACT 0x0400
#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
#define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats
#if FF_API_LAVF_SHORTEST
#define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops.
#endif
#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer
/**
@@ -1439,7 +1445,7 @@ typedef struct AVFormatContext {
*
* @note this is \e not used for determining the \ref AVInputFormat
* "input format"
* @sa format_probesize
* @see format_probesize
*/
int64_t probesize;
@@ -1664,9 +1670,11 @@ typedef struct AVFormatContext {
int use_wallclock_as_timestamps;
/**
* Skip duration calcuation in estimate_timings_from_pts.
* Skip duration calculation in estimate_timings_from_pts.
* - encoding: unused
* - decoding: set by user
*
* @see duration_probesize
*/
int skip_estimate_duration_from_pts;
@@ -1729,7 +1737,7 @@ typedef struct AVFormatContext {
*
* Demuxing only, set by the caller before avformat_open_input().
*
* @sa probesize
* @see probesize
*/
int format_probesize;
@@ -1765,7 +1773,7 @@ typedef struct AVFormatContext {
/**
* IO repositioned flag.
* This is set by avformat when the underlaying IO context read pointer
* This is set by avformat when the underlying IO context read pointer
* is repositioned, for example when doing byte based seeking.
* Demuxers can use the flag to detect such changes.
*/
@@ -1861,40 +1869,23 @@ typedef struct AVFormatContext {
/**
* A callback for closing the streams opened with AVFormatContext.io_open().
*
* Using this is preferred over io_close, because this can return an error.
* Therefore this callback is used instead of io_close by the generic
* libavformat code if io_close is NULL or the default.
*
* @param s the format context
* @param pb IO context to be closed and freed
* @return 0 on success, a negative AVERROR code on failure
*/
int (*io_close2)(struct AVFormatContext *s, AVIOContext *pb);
/**
* Maximum number of bytes read from input in order to determine stream durations
* when using estimate_timings_from_pts in avformat_find_stream_info().
* Demuxing only, set by the caller before avformat_find_stream_info().
* Can be set to 0 to let avformat choose using a heuristic.
*
* @see skip_estimate_duration_from_pts
*/
int64_t duration_probesize;
} AVFormatContext;
/**
* This function will cause global side data to be injected in the next packet
* of each stream as well as after any subsequent seek.
*
* @note global side data is always available in every AVStream's
* @ref AVCodecParameters.coded_side_data "codecpar side data" array, and
* in a @ref AVCodecContext.coded_side_data "decoder's side data" array if
* initialized with said stream's codecpar.
* @see av_packet_side_data_get()
*/
void av_format_inject_global_side_data(AVFormatContext *s);
#if FF_API_GET_DUR_ESTIMATE_METHOD
/**
* Returns the method used to set ctx->duration.
*
* @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE.
* @deprecated duration_estimation_method is public and can be read directly.
*/
attribute_deprecated
enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx);
#endif
/**
* @defgroup lavf_core Core functions
* @ingroup libavf
@@ -2072,57 +2063,6 @@ AVStream *avformat_new_stream(AVFormatContext *s, const struct AVCodec *c);
*/
int avformat_stream_group_add_stream(AVStreamGroup *stg, AVStream *st);
#if FF_API_AVSTREAM_SIDE_DATA
/**
* Wrap an existing array as stream side data.
*
* @param st stream
* @param type side information type
* @param data the side data array. It must be allocated with the av_malloc()
* family of functions. The ownership of the data is transferred to
* st.
* @param size side information size
*
* @return zero on success, a negative AVERROR code on failure. On failure,
* the stream is unchanged and the data remains owned by the caller.
* @deprecated use av_packet_side_data_add() with the stream's
* @ref AVCodecParameters.coded_side_data "codecpar side data"
*/
attribute_deprecated
int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type,
uint8_t *data, size_t size);
/**
* Allocate new information from stream.
*
* @param stream stream
* @param type desired side information type
* @param size side information size
*
* @return pointer to fresh allocated data or NULL otherwise
* @deprecated use av_packet_side_data_new() with the stream's
* @ref AVCodecParameters.coded_side_data "codecpar side data"
*/
attribute_deprecated
uint8_t *av_stream_new_side_data(AVStream *stream,
enum AVPacketSideDataType type, size_t size);
/**
* Get side information from stream.
*
* @param stream stream
* @param type desired side information type
* @param size If supplied, *size will be set to the size of the side data
* or to zero if the desired side data is not present.
*
* @return pointer to data if present or NULL otherwise
* @deprecated use av_packet_side_data_get() with the stream's
* @ref AVCodecParameters.coded_side_data "codecpar side data"
*/
attribute_deprecated
uint8_t *av_stream_get_side_data(const AVStream *stream,
enum AVPacketSideDataType type, size_t *size);
#endif
AVProgram *av_new_program(AVFormatContext *s, int id);
/**
@@ -2231,7 +2171,7 @@ int av_probe_input_buffer(AVIOContext *pb, const AVInputFormat **fmt,
* which case an AVFormatContext is allocated by this
* function and written into ps.
* Note that a user-supplied AVFormatContext will be freed
* on failure.
* on failure and its pointer set to NULL.
* @param url URL of the stream to open.
* @param fmt If non-NULL, this parameter forces a specific input format.
* Otherwise the format is autodetected.
@@ -2240,7 +2180,8 @@ int av_probe_input_buffer(AVIOContext *pb, const AVInputFormat **fmt,
* On return this parameter will be destroyed and replaced with
* a dict containing options that were not found. May be NULL.
*
* @return 0 on success, a negative AVERROR on failure.
* @return 0 on success; on failure: frees ps, sets its pointer to NULL,
* and returns a negative AVERROR.
*
* @note If you want to use custom IO, preallocate the format context and set its pb field.
*/
@@ -3030,6 +2971,7 @@ int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st,
int avformat_queue_attached_pictures(AVFormatContext *s);
#if FF_API_INTERNAL_TIMING
enum AVTimebaseSource {
AVFMT_TBCF_AUTO = -1,
AVFMT_TBCF_DECODER,
@@ -3040,25 +2982,20 @@ enum AVTimebaseSource {
};
/**
* Transfer internal timing information from one stream to another.
*
* This function is useful when doing stream copy.
*
* @param ofmt target output format for ost
* @param ost output stream which needs timings copy and adjustments
* @param ist reference input stream to copy timings from
* @param copy_tb define from where the stream codec timebase needs to be imported
* @deprecated do not call this function
*/
attribute_deprecated
int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt,
AVStream *ost, const AVStream *ist,
enum AVTimebaseSource copy_tb);
/**
* Get the internal codec timebase from a stream.
*
* @param st input stream to extract the timebase from
* @deprecated do not call this function
*/
attribute_deprecated
AVRational av_stream_get_codec_timebase(const AVStream *st);
#endif
/**
* @}

View File

@@ -31,7 +31,7 @@
#include "version_major.h"
#define LIBAVFORMAT_VERSION_MINOR 1
#define LIBAVFORMAT_VERSION_MINOR 3
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \

View File

@@ -29,7 +29,7 @@
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 61
#define LIBAVFORMAT_VERSION_MAJOR 62
/**
* FF_API_* defines may be placed below to indicate public API that will be
@@ -41,12 +41,11 @@
* at once through the bump. This improves the git bisect-ability of the change.
*
*/
#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 62)
#define FF_API_LAVF_SHORTEST (LIBAVFORMAT_VERSION_MAJOR < 62)
#define FF_API_ALLOW_FLUSH (LIBAVFORMAT_VERSION_MAJOR < 62)
#define FF_API_AVSTREAM_SIDE_DATA (LIBAVFORMAT_VERSION_MAJOR < 62)
#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 63)
#define FF_API_GET_DUR_ESTIMATE_METHOD (LIBAVFORMAT_VERSION_MAJOR < 62)
#define FF_API_INTERNAL_TIMING (LIBAVFORMAT_VERSION_MAJOR < 63)
#define FF_API_NO_DEFAULT_TLS_VERIFY (LIBAVFORMAT_VERSION_MAJOR < 63)
#define FF_API_R_FRAME_RATE 1

View File

@@ -159,9 +159,11 @@
#if defined(__GNUC__) || defined(__clang__)
# define av_builtin_constant_p __builtin_constant_p
# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos)))
# define av_scanf_format(fmtpos, attrpos) __attribute__((__format__(__scanf__, fmtpos, attrpos)))
#else
# define av_builtin_constant_p(x) 0
# define av_printf_format(fmtpos, attrpos)
# define av_scanf_format(fmtpos, attrpos)
#endif
#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__)

View File

@@ -31,6 +31,7 @@
#ifdef HAVE_AV_CONFIG_H
# include "config.h"
#endif
#include "attributes.h"
#include "log.h"
#include "macros.h"
@@ -75,4 +76,48 @@
*/
void av_assert0_fpu(void);
/**
* Asserts that are used as compiler optimization hints depending
* upon ASSERT_LEVEL and NBDEBUG.
*
* Undefined behaviour occurs if execution reaches a point marked
* with av_unreachable() or if a condition used with av_assume()
* is false.
*
* The condition used with av_assume() should not have side-effects
* and should be visible to the compiler.
*/
#if defined(ASSERT_LEVEL) ? ASSERT_LEVEL > 0 : !defined(HAVE_AV_CONFIG_H) && !defined(NDEBUG)
#define av_unreachable(msg) \
do { \
av_log(NULL, AV_LOG_PANIC, \
"Reached supposedly unreachable code at %s:%d: %s\n", \
__FILE__, __LINE__, msg); \
abort(); \
} while (0)
#define av_assume(cond) av_assert0(cond)
#else
#if AV_GCC_VERSION_AT_LEAST(4, 5) || AV_HAS_BUILTIN(__builtin_unreachable)
#define av_unreachable(msg) __builtin_unreachable()
#elif defined(_MSC_VER)
#define av_unreachable(msg) __assume(0)
#elif __STDC_VERSION__ >= 202311L
#include <stddef.h>
#define av_unreachable(msg) unreachable()
#else
#define av_unreachable(msg) ((void)0)
#endif
#if AV_HAS_BUILTIN(__builtin_assume)
#define av_assume(cond) __builtin_assume(cond)
#elif defined(_MSC_VER)
#define av_assume(cond) __assume(cond)
#else
#define av_assume(cond) do { \
if (!(cond)) \
av_unreachable(); \
} while (0)
#endif
#endif
#endif /* AVUTIL_AVASSERT_H */

View File

@@ -419,7 +419,7 @@ int av_match_list(const char *name, const char *list, char separator);
* See libc sscanf manual for more information.
* Locale-independent sscanf implementation.
*/
int av_sscanf(const char *string, const char *format, ...);
int av_sscanf(const char *string, const char *format, ...) av_scanf_format(2, 3);
/**
* @}

View File

@@ -41,7 +41,6 @@
* @li @ref lavd "libavdevice" special devices muxing/demuxing library
* @li @ref lavu "libavutil" common utility library
* @li @ref lswr "libswresample" audio resampling, format conversion and mixing
* @li @ref lpp "libpostproc" post processing library
* @li @ref libsws "libswscale" color conversion and scaling library
*
* @section ffmpeg_versioning Versioning and compatibility
@@ -314,6 +313,7 @@ static inline void *av_x_if_null(const void *p, const void *x)
return (void *)(intptr_t)(p ? p : x);
}
#if FF_API_OPT_INT_LIST
/**
* Compute the length of an integer list.
*
@@ -322,6 +322,7 @@ static inline void *av_x_if_null(const void *p, const void *x)
* @param list pointer to the list
* @return length of the list, in elements, not counting the terminator
*/
attribute_deprecated
unsigned av_int_list_length_for_size(unsigned elsize,
const void *list, uint64_t term) av_pure;
@@ -334,6 +335,7 @@ unsigned av_int_list_length_for_size(unsigned elsize,
*/
#define av_int_list_length(list, term) \
av_int_list_length_for_size(sizeof(*(list)), list, term)
#endif
/**
* Return the fractional representation of the internal time base.

View File

@@ -34,16 +34,10 @@
#include "config.h"
#if ARCH_AARCH64
# include "aarch64/bswap.h"
#elif ARCH_ARM
#if ARCH_ARM
# include "arm/bswap.h"
#elif ARCH_AVR32
# include "avr32/bswap.h"
#elif ARCH_RISCV
# include "riscv/bswap.h"
#elif ARCH_SH4
# include "sh4/bswap.h"
#elif ARCH_X86
# include "x86/bswap.h"
#endif

View File

@@ -45,7 +45,7 @@
*/
enum AVChannel {
///< Invalid channel index
/// Invalid channel index
AV_CHAN_NONE = -1,
AV_CHAN_FRONT_LEFT,
AV_CHAN_FRONT_RIGHT,
@@ -79,6 +79,13 @@ enum AVChannel {
AV_CHAN_BOTTOM_FRONT_CENTER,
AV_CHAN_BOTTOM_FRONT_LEFT,
AV_CHAN_BOTTOM_FRONT_RIGHT,
AV_CHAN_SIDE_SURROUND_LEFT, ///< +90 degrees, Lss, SiL
AV_CHAN_SIDE_SURROUND_RIGHT, ///< -90 degrees, Rss, SiR
AV_CHAN_TOP_SURROUND_LEFT, ///< +110 degrees, Lvs, TpLS
AV_CHAN_TOP_SURROUND_RIGHT, ///< -110 degrees, Rvs, TpRS
AV_CHAN_BINAURAL_LEFT = 61,
AV_CHAN_BINAURAL_RIGHT,
/** Channel is empty can be safely skipped. */
AV_CHAN_UNUSED = 0x200,
@@ -195,6 +202,12 @@ enum AVChannelOrder {
#define AV_CH_BOTTOM_FRONT_CENTER (1ULL << AV_CHAN_BOTTOM_FRONT_CENTER )
#define AV_CH_BOTTOM_FRONT_LEFT (1ULL << AV_CHAN_BOTTOM_FRONT_LEFT )
#define AV_CH_BOTTOM_FRONT_RIGHT (1ULL << AV_CHAN_BOTTOM_FRONT_RIGHT )
#define AV_CH_SIDE_SURROUND_LEFT (1ULL << AV_CHAN_SIDE_SURROUND_LEFT )
#define AV_CH_SIDE_SURROUND_RIGHT (1ULL << AV_CHAN_SIDE_SURROUND_RIGHT )
#define AV_CH_TOP_SURROUND_LEFT (1ULL << AV_CHAN_TOP_SURROUND_LEFT )
#define AV_CH_TOP_SURROUND_RIGHT (1ULL << AV_CHAN_TOP_SURROUND_RIGHT )
#define AV_CH_BINAURAL_LEFT (1ULL << AV_CHAN_BINAURAL_LEFT )
#define AV_CH_BINAURAL_RIGHT (1ULL << AV_CHAN_BINAURAL_RIGHT )
/**
* @}
@@ -227,17 +240,20 @@ enum AVChannelOrder {
#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
#define AV_CH_LAYOUT_5POINT1POINT2 (AV_CH_LAYOUT_5POINT1|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
#define AV_CH_LAYOUT_5POINT1POINT2_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
#define AV_CH_LAYOUT_CUBE (AV_CH_LAYOUT_QUAD|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT)
#define AV_CH_LAYOUT_5POINT1POINT4_BACK (AV_CH_LAYOUT_5POINT1POINT2_BACK|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT)
#define AV_CH_LAYOUT_5POINT1POINT4_BACK (AV_CH_LAYOUT_5POINT1POINT2|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT)
#define AV_CH_LAYOUT_7POINT1POINT2 (AV_CH_LAYOUT_7POINT1|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
#define AV_CH_LAYOUT_7POINT1POINT4_BACK (AV_CH_LAYOUT_7POINT1POINT2|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT)
#define AV_CH_LAYOUT_7POINT2POINT3 (AV_CH_LAYOUT_7POINT1POINT2|AV_CH_TOP_BACK_CENTER|AV_CH_LOW_FREQUENCY_2)
#define AV_CH_LAYOUT_9POINT1POINT4_BACK (AV_CH_LAYOUT_7POINT1POINT4_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
#define AV_CH_LAYOUT_9POINT1POINT6 (AV_CH_LAYOUT_9POINT1POINT4_BACK|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT)
#define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
#define AV_CH_LAYOUT_BINAURAL (AV_CH_BINAURAL_LEFT|AV_CH_BINAURAL_RIGHT)
#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
#define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_7POINT1POINT4_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT)
#define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_9POINT1POINT6|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT)
#define AV_CH_LAYOUT_7POINT1_TOP_BACK AV_CH_LAYOUT_5POINT1POINT2_BACK
@@ -291,7 +307,7 @@ typedef struct AVChannelCustom {
* - with a constructor function, such as av_channel_layout_default(),
* av_channel_layout_from_mask() or av_channel_layout_from_string().
*
* The channel layout must be unitialized with av_channel_layout_uninit()
* The channel layout must be uninitialized with av_channel_layout_uninit()
*
* Copying an AVChannelLayout via assigning is forbidden,
* av_channel_layout_copy() must be used instead (and its return value should
@@ -349,7 +365,7 @@ typedef struct AVChannelLayout {
*
* map[i].name may be filled with a 0-terminated string, in which case
* it will be used for the purpose of identifying the channel with the
* convenience functions below. Otherise it must be zeroed.
* convenience functions below. Otherwise it must be zeroed.
*/
AVChannelCustom *map;
} u;
@@ -401,6 +417,7 @@ typedef struct AVChannelLayout {
#define AV_CHANNEL_LAYOUT_7POINT1 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1)
#define AV_CHANNEL_LAYOUT_7POINT1_WIDE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE)
#define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK)
#define AV_CHANNEL_LAYOUT_5POINT1POINT2 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_5POINT1POINT2)
#define AV_CHANNEL_LAYOUT_5POINT1POINT2_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_5POINT1POINT2_BACK)
#define AV_CHANNEL_LAYOUT_OCTAGONAL AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL)
#define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE)
@@ -409,7 +426,9 @@ typedef struct AVChannelLayout {
#define AV_CHANNEL_LAYOUT_7POINT1POINT4_BACK AV_CHANNEL_LAYOUT_MASK(12, AV_CH_LAYOUT_7POINT1POINT4_BACK)
#define AV_CHANNEL_LAYOUT_7POINT2POINT3 AV_CHANNEL_LAYOUT_MASK(12, AV_CH_LAYOUT_7POINT2POINT3)
#define AV_CHANNEL_LAYOUT_9POINT1POINT4_BACK AV_CHANNEL_LAYOUT_MASK(14, AV_CH_LAYOUT_9POINT1POINT4_BACK)
#define AV_CHANNEL_LAYOUT_9POINT1POINT6 AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_9POINT1POINT6)
#define AV_CHANNEL_LAYOUT_HEXADECAGONAL AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL)
#define AV_CHANNEL_LAYOUT_BINAURAL AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_BINAURAL)
#define AV_CHANNEL_LAYOUT_STEREO_DOWNMIX AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO_DOWNMIX)
#define AV_CHANNEL_LAYOUT_22POINT2 AV_CHANNEL_LAYOUT_MASK(24, AV_CH_LAYOUT_22POINT2)
@@ -679,6 +698,16 @@ int av_channel_layout_check(const AVChannelLayout *channel_layout);
*/
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1);
/**
* Return the order if the layout is n-th order standard-order ambisonic.
* The presence of optional extra non-diegetic channels at the end is not taken
* into account.
*
* @param channel_layout input channel layout
* @return the order of the layout, a negative error code otherwise.
*/
int av_channel_layout_ambisonic_order(const AVChannelLayout *channel_layout);
/**
* The conversion must be lossless.
*/

View File

@@ -42,12 +42,14 @@
#include "attributes.h"
#include "error.h"
#include "macros.h"
#include "mem.h"
#include "version.h"
#ifdef HAVE_AV_CONFIG_H
# include "config.h"
# include "intmath.h"
# include "internal.h"
#else
# include "mem.h"
#endif /* HAVE_AV_CONFIG_H */
//rounded division & shift
@@ -121,9 +123,6 @@
#ifndef av_clip_uintp2
# define av_clip_uintp2 av_clip_uintp2_c
#endif
#ifndef av_mod_uintp2
# define av_mod_uintp2 av_mod_uintp2_c
#endif
#ifndef av_sat_add32
# define av_sat_add32 av_sat_add32_c
#endif
@@ -148,6 +147,9 @@
#ifndef av_clipd
# define av_clipd av_clipd_c
#endif
#ifndef av_zero_extend
# define av_zero_extend av_zero_extend_c
#endif
#ifndef av_popcount
# define av_popcount av_popcount_c
#endif
@@ -251,8 +253,8 @@ static av_always_inline av_const int16_t av_clip_int16_c(int a)
*/
static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
{
if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF);
else return (int32_t)a;
if ((a+UINT64_C(0x80000000)) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF);
else return (int32_t)a;
}
/**
@@ -263,7 +265,7 @@ static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
*/
static av_always_inline av_const int av_clip_intp2_c(int a, int p)
{
if (((unsigned)a + (1 << p)) & ~((2 << p) - 1))
if (((unsigned)a + (1U << p)) & ~((2U << p) - 1))
return (a >> 31) ^ ((1 << p) - 1);
else
return a;
@@ -277,21 +279,35 @@ static av_always_inline av_const int av_clip_intp2_c(int a, int p)
*/
static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
{
if (a & ~((1<<p) - 1)) return (~a) >> 31 & ((1<<p) - 1);
else return a;
if (a & ~((1U<<p) - 1)) return (~a) >> 31 & ((1U<<p) - 1);
else return a;
}
/**
* Clear high bits from an unsigned integer starting with specific bit position
* @param a value to clip
* @param p bit position to clip at
* @param p bit position to clip at. Must be between 0 and 31.
* @return clipped value
*/
static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
static av_always_inline av_const unsigned av_zero_extend_c(unsigned a, unsigned p)
{
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
if (p > 31) abort();
#endif
return a & ((1U << p) - 1);
}
#if FF_API_MOD_UINTP2
#ifndef av_mod_uintp2
# define av_mod_uintp2 av_mod_uintp2_c
#endif
attribute_deprecated
static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
{
return av_zero_extend_c(a, p);
}
#endif
/**
* Add two signed 32-bit values with saturation.
*

View File

@@ -22,6 +22,7 @@
#define AVUTIL_CPU_H
#include <stddef.h>
#include "version.h"
#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */
@@ -71,6 +72,8 @@
#define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations
#define AV_CPU_FLAG_DOTPROD (1 << 8)
#define AV_CPU_FLAG_I8MM (1 << 9)
#define AV_CPU_FLAG_SVE (1 <<10)
#define AV_CPU_FLAG_SVE2 (1 <<11)
#define AV_CPU_FLAG_SETEND (1 <<16)
#define AV_CPU_FLAG_MMI (1 << 0)
@@ -82,14 +85,24 @@
// RISC-V extensions
#define AV_CPU_FLAG_RVI (1 << 0) ///< I (full GPR bank)
#if FF_API_RISCV_FD_ZBA
#define AV_CPU_FLAG_RVF (1 << 1) ///< F (single precision FP)
#define AV_CPU_FLAG_RVD (1 << 2) ///< D (double precision FP)
#endif
#define AV_CPU_FLAG_RVV_I32 (1 << 3) ///< Vectors of 8/16/32-bit int's */
#define AV_CPU_FLAG_RVV_F32 (1 << 4) ///< Vectors of float's */
#define AV_CPU_FLAG_RVV_I64 (1 << 5) ///< Vectors of 64-bit int's */
#define AV_CPU_FLAG_RVV_F64 (1 << 6) ///< Vectors of double's
#define AV_CPU_FLAG_RVB_BASIC (1 << 7) ///< Basic bit-manipulations
#if FF_API_RISCV_FD_ZBA
#define AV_CPU_FLAG_RVB_ADDR (1 << 8) ///< Address bit-manipulations
#endif
#define AV_CPU_FLAG_RV_ZVBB (1 << 9) ///< Vector basic bit-manipulations
#define AV_CPU_FLAG_RV_MISALIGNED (1 <<10) ///< Fast misaligned accesses
#define AV_CPU_FLAG_RVB (1 <<11) ///< B (bit manipulations)
// WASM extensions
#define AV_CPU_FLAG_SIMD128 (1 << 0)
/**
* Return the flags which specify extensions supported by the CPU.

View File

@@ -81,8 +81,12 @@ typedef struct AVColorPrimariesDesc {
} AVColorPrimariesDesc;
/**
* Function pointer representing a double -> double transfer function that performs
* an EOTF transfer inversion. This function outputs linear light.
* Function pointer representing a double -> double transfer function that
* performs either an OETF transfer function, or alternatively an inverse EOTF
* function (in particular, for SMPTE ST 2084 / PQ). This function inputs
* linear light, and outputs gamma encoded light.
*
* See ITU-T H.273 for more information.
*/
typedef double (*av_csp_trc_function)(double);
@@ -110,7 +114,7 @@ const AVColorPrimariesDesc *av_csp_primaries_desc_from_id(enum AVColorPrimaries
* @see enum AVColorPrimaries
* @param prm A description of the colorspace gamut
* @return The enum constant associated with this gamut, or
* AVCOL_PRI_UNSPECIFIED if no clear match can be idenitified.
* AVCOL_PRI_UNSPECIFIED if no clear match can be identified.
*/
enum AVColorPrimaries av_csp_primaries_id_from_desc(const AVColorPrimariesDesc *prm);
@@ -143,6 +147,44 @@ double av_csp_approximate_trc_gamma(enum AVColorTransferCharacteristic trc);
*/
av_csp_trc_function av_csp_trc_func_from_id(enum AVColorTransferCharacteristic trc);
/**
* Returns the mathematical inverse of the corresponding TRC function.
*/
av_csp_trc_function av_csp_trc_func_inv_from_id(enum AVColorTransferCharacteristic trc);
/**
* Function pointer representing an ITU EOTF transfer for a given reference
* display configuration.
*
* @param Lw The white point luminance of the display, in nits (cd/m^2).
* @param Lb The black point luminance of the display, in nits (cd/m^2).
*/
typedef void (*av_csp_eotf_function)(double Lw, double Lb, double c[3]);
/**
* Returns the ITU EOTF corresponding to a given TRC. This converts from the
* signal level [0,1] to the raw output display luminance in nits (cd/m^2).
* This is done per channel in RGB space, except for AVCOL_TRC_SMPTE428, which
* assumes CIE XYZ in- and output.
*
* @return A pointer to the function implementing the given TRC, or NULL if no
* such function is defined.
*
* @note In general, the resulting function is defined (wherever possible) for
* out-of-range values, even though these values do not have a physical
* meaning on the given display. Users should clamp inputs (or outputs)
* if this behavior is not desired.
*
* This is also the case for functions like PQ, which are defined over an
* absolute signal range independent of the target display capabilities.
*/
av_csp_eotf_function av_csp_itu_eotf(enum AVColorTransferCharacteristic trc);
/**
* Returns the mathematical inverse of the corresponding EOTF.
*/
av_csp_eotf_function av_csp_itu_eotf_inv(enum AVColorTransferCharacteristic trc);
/**
* @}
*/

View File

@@ -82,6 +82,7 @@
#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no
delimiter is added, the strings are simply concatenated. */
#define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */
#define AV_DICT_DEDUP 128 /**< If inserting a value that already exists for a key, do nothing. Only relevant with AV_DICT_MULTIKEY. */
/**
* @}
*/
@@ -224,7 +225,7 @@ void av_dict_free(AVDictionary **m);
* @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same.
*
* @param[in] m The dictionary
* @param[out] buffer Pointer to buffer that will be allocated with string containg entries.
* @param[out] buffer Pointer to buffer that will be allocated with string containing entries.
* Buffer must be freed by the caller when is no longer needed.
* @param[in] key_val_sep Character used to separate key from value
* @param[in] pairs_sep Character used to separate two pairs from each other

View File

@@ -29,7 +29,9 @@
#include <stdint.h>
#include <stddef.h>
#include "rational.h"
#include "csp.h"
/*
* DOVI configuration
@@ -44,6 +46,7 @@
* uint8_t el_present_flag
* uint8_t bl_present_flag
* uint8_t dv_bl_signal_compatibility_id
* uint8_t dv_md_compression, the compression method in use
* @endcode
*
* @note The struct must be allocated with av_dovi_alloc() and
@@ -58,8 +61,16 @@ typedef struct AVDOVIDecoderConfigurationRecord {
uint8_t el_present_flag;
uint8_t bl_present_flag;
uint8_t dv_bl_signal_compatibility_id;
uint8_t dv_md_compression;
} AVDOVIDecoderConfigurationRecord;
enum AVDOVICompression {
AV_DOVI_COMPRESSION_NONE = 0,
AV_DOVI_COMPRESSION_LIMITED = 1,
AV_DOVI_COMPRESSION_RESERVED = 2,
AV_DOVI_COMPRESSION_EXTENDED = 3,
};
/**
* Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its
* fields to default values.
@@ -89,6 +100,8 @@ typedef struct AVDOVIRpuDataHeader {
uint8_t spatial_resampling_filter_flag;
uint8_t el_spatial_resampling_filter_flag;
uint8_t disable_residual_flag;
uint8_t ext_mapping_idc_0_4; /* extended base layer inverse mapping indicator */
uint8_t ext_mapping_idc_5_7; /* reserved */
} AVDOVIRpuDataHeader;
enum AVDOVIMappingMethod {
@@ -147,6 +160,7 @@ typedef struct AVDOVIDataMapping {
uint32_t num_x_partitions;
uint32_t num_y_partitions;
AVDOVINLQParams nlq[3]; /* per component */
uint16_t nlq_pivots[2];
} AVDOVIDataMapping;
/**
@@ -186,6 +200,132 @@ typedef struct AVDOVIColorMetadata {
uint16_t source_diagonal;
} AVDOVIColorMetadata;
typedef struct AVDOVIDmLevel1 {
/* Per-frame brightness metadata */
uint16_t min_pq;
uint16_t max_pq;
uint16_t avg_pq;
} AVDOVIDmLevel1;
typedef struct AVDOVIDmLevel2 {
/* Usually derived from level 8 (at different levels) */
uint16_t target_max_pq;
uint16_t trim_slope;
uint16_t trim_offset;
uint16_t trim_power;
uint16_t trim_chroma_weight;
uint16_t trim_saturation_gain;
int16_t ms_weight;
} AVDOVIDmLevel2;
typedef struct AVDOVIDmLevel3 {
uint16_t min_pq_offset;
uint16_t max_pq_offset;
uint16_t avg_pq_offset;
} AVDOVIDmLevel3;
typedef struct AVDOVIDmLevel4 {
uint16_t anchor_pq;
uint16_t anchor_power;
} AVDOVIDmLevel4;
typedef struct AVDOVIDmLevel5 {
/* Active area definition */
uint16_t left_offset;
uint16_t right_offset;
uint16_t top_offset;
uint16_t bottom_offset;
} AVDOVIDmLevel5;
typedef struct AVDOVIDmLevel6 {
/* Static HDR10 metadata */
uint16_t max_luminance;
uint16_t min_luminance;
uint16_t max_cll;
uint16_t max_fall;
} AVDOVIDmLevel6;
typedef struct AVDOVIDmLevel8 {
/* Extended version of level 2 */
uint8_t target_display_index;
uint16_t trim_slope;
uint16_t trim_offset;
uint16_t trim_power;
uint16_t trim_chroma_weight;
uint16_t trim_saturation_gain;
uint16_t ms_weight;
uint16_t target_mid_contrast;
uint16_t clip_trim;
uint8_t saturation_vector_field[6];
uint8_t hue_vector_field[6];
} AVDOVIDmLevel8;
typedef struct AVDOVIDmLevel9 {
/* Source display characteristics */
uint8_t source_primary_index;
AVColorPrimariesDesc source_display_primaries;
} AVDOVIDmLevel9;
typedef struct AVDOVIDmLevel10 {
/* Target display characteristics */
uint8_t target_display_index;
uint16_t target_max_pq;
uint16_t target_min_pq;
uint8_t target_primary_index;
AVColorPrimariesDesc target_display_primaries;
} AVDOVIDmLevel10;
typedef struct AVDOVIDmLevel11 {
uint8_t content_type;
uint8_t whitepoint;
uint8_t reference_mode_flag;
uint8_t sharpness;
uint8_t noise_reduction;
uint8_t mpeg_noise_reduction;
uint8_t frame_rate_conversion;
uint8_t brightness;
uint8_t color;
} AVDOVIDmLevel11;
typedef struct AVDOVIDmLevel254 {
/* DMv2 info block, always present in samples with DMv2 metadata */
uint8_t dm_mode;
uint8_t dm_version_index;
} AVDOVIDmLevel254;
typedef struct AVDOVIDmLevel255 {
/* Debug block, not really used in samples */
uint8_t dm_run_mode;
uint8_t dm_run_version;
uint8_t dm_debug[4];
} AVDOVIDmLevel255;
/**
* Dolby Vision metadata extension block. Dynamic extension blocks may change
* from frame to frame, while static blocks are constant throughout the entire
* sequence.
*
* @note sizeof(AVDOVIDmData) is not part of the public API.
*/
typedef struct AVDOVIDmData {
uint8_t level; /* [1, 255] */
union {
AVDOVIDmLevel1 l1; /* dynamic */
AVDOVIDmLevel2 l2; /* dynamic, may appear multiple times */
AVDOVIDmLevel3 l3; /* dynamic */
AVDOVIDmLevel4 l4; /* dynamic */
AVDOVIDmLevel5 l5; /* dynamic */
AVDOVIDmLevel6 l6; /* static */
/* level 7 is currently unused */
AVDOVIDmLevel8 l8; /* dynamic, may appear multiple times */
AVDOVIDmLevel9 l9; /* dynamic */
AVDOVIDmLevel10 l10; /* static, may appear multiple times */
AVDOVIDmLevel11 l11; /* dynamic */
AVDOVIDmLevel254 l254; /* static */
AVDOVIDmLevel255 l255; /* static */
};
} AVDOVIDmData;
/**
* Combined struct representing a combination of header, mapping and color
* metadata, for attaching to frames as side data.
@@ -202,6 +342,13 @@ typedef struct AVDOVIMetadata {
size_t header_offset; /* AVDOVIRpuDataHeader */
size_t mapping_offset; /* AVDOVIDataMapping */
size_t color_offset; /* AVDOVIColorMetadata */
size_t ext_block_offset; /* offset to start of ext blocks array */
size_t ext_block_size; /* size per element */
int num_ext_blocks; /* number of extension blocks */
/* static limit on num_ext_blocks, derived from bitstream limitations */
#define AV_DOVI_MAX_EXT_BLOCKS 32
} AVDOVIMetadata;
static av_always_inline AVDOVIRpuDataHeader *
@@ -222,6 +369,19 @@ av_dovi_get_color(const AVDOVIMetadata *data)
return (AVDOVIColorMetadata *)((uint8_t *) data + data->color_offset);
}
static av_always_inline AVDOVIDmData *
av_dovi_get_ext(const AVDOVIMetadata *data, int index)
{
return (AVDOVIDmData *)((uint8_t *) data + data->ext_block_offset +
data->ext_block_size * index);
}
/**
* Find an extension block with a given level, or NULL. In the case of
* multiple extension blocks, only the first is returned.
*/
AVDOVIDmData *av_dovi_find_level(const AVDOVIMetadata *data, uint8_t level);
/**
* Allocate an AVDOVIMetadata structure and initialize its
* fields to default values.

View File

@@ -79,6 +79,7 @@
#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1')
#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3')
#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4')
#define AVERROR_HTTP_TOO_MANY_REQUESTS FFERRTAG(0xF8,'4','2','9')
#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X')
#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X')

View File

@@ -46,7 +46,7 @@ typedef struct AVTaskCallbacks {
/**
* Alloc executor
* @param callbacks callback structure for executor
* @param thread_count worker thread number
* @param thread_count worker thread number, 0 for run on caller's thread directly
* @return return the executor
*/
AVExecutor* av_executor_alloc(const AVTaskCallbacks *callbacks, int thread_count);

View File

@@ -1,5 +1,5 @@
/* Automatically generated by version.sh, do not manually edit! */
#ifndef AVUTIL_FFVERSION_H
#define AVUTIL_FFVERSION_H
#define FFMPEG_VERSION "7.0.2"
#define FFMPEG_VERSION "8.0"
#endif /* AVUTIL_FFVERSION_H */

View File

@@ -26,10 +26,6 @@
#define AVUTIL_FIFO_H
#include <stddef.h>
#include <stdint.h>
#include "attributes.h"
#include "version.h"
/**
* @defgroup lavu_fifo AVFifo

View File

@@ -22,7 +22,6 @@
#include <stddef.h>
#include <stdint.h>
#include "version.h"
#include "attributes.h"
/**

View File

@@ -124,7 +124,7 @@ typedef struct AVFilmGrainAOMParams {
/**
* This structure describes how to handle film grain synthesis for codecs using
* the ITU-T H.274 Versatile suplemental enhancement information message.
* the ITU-T H.274 Versatile supplemental enhancement information message.
*
* @note The struct must be allocated as part of AVFilmGrainParams using
* av_film_grain_params_alloc(). Its size is not a part of the public ABI.
@@ -136,43 +136,6 @@ typedef struct AVFilmGrainH274Params {
*/
int model_id;
#if FF_API_H274_FILM_GRAIN_VCS
/**
* TODO: On this ABI bump, please also re-order the fields in
* AVFilmGrainParams (see below)
*/
/**
* Specifies the bit depth used for the luma component.
*
* @deprecated use AVFilmGrainParams.bit_depth_luma.
*/
attribute_deprecated
int bit_depth_luma;
/**
* Specifies the bit depth used for the chroma components.
*
* @deprecated use AVFilmGrainParams.bit_depth_chroma.
*/
attribute_deprecated
int bit_depth_chroma;
/**
* Specifies the video signal characteristics.
*
* @deprecated use AVFilmGrainParams.color_{range,primaries,trc,space}.
*/
attribute_deprecated
enum AVColorRange color_range;
attribute_deprecated
enum AVColorPrimaries color_primaries;
attribute_deprecated
enum AVColorTransferCharacteristic color_trc;
attribute_deprecated
enum AVColorSpace color_space;
#endif
/**
* Specifies the blending mode used to blend the simulated film grain
* with the decoded images.
@@ -249,18 +212,6 @@ typedef struct AVFilmGrainParams {
*/
uint64_t seed;
/**
* Additional fields may be added both here and in any structure included.
* If a codec's film grain structure differs slightly over another
* codec's, fields within may change meaning depending on the type.
*
* TODO: Move this to the end of the structure, at the next ABI bump.
*/
union {
AVFilmGrainAOMParams aom;
AVFilmGrainH274Params h274;
} codec;
/**
* Intended display resolution. May be 0 if the codec does not specify
* any restrictions.
@@ -287,6 +238,15 @@ typedef struct AVFilmGrainParams {
int bit_depth_luma;
int bit_depth_chroma;
/**
* Additional fields may be added both here and in any structure included.
* If a codec's film grain structure differs slightly over another
* codec's, fields within may change meaning depending on the type.
*/
union {
AVFilmGrainAOMParams aom;
AVFilmGrainH274Params h274;
} codec;
} AVFilmGrainParams;
/**

View File

@@ -96,7 +96,7 @@ enum AVFrameSideDataType {
*/
AV_FRAME_DATA_MOTION_VECTORS,
/**
* Recommmends skipping the specified number of samples. This is exported
* Recommends skipping the specified number of samples. This is exported
* only if the "skip_manual" AVOption is set in libavcodec.
* This has the same format as AV_PKT_DATA_SKIP_SAMPLES.
* @code
@@ -228,6 +228,32 @@ enum AVFrameSideDataType {
* encoding.
*/
AV_FRAME_DATA_VIDEO_HINT,
/**
* Raw LCEVC payload data, as a uint8_t array, with NAL emulation
* bytes intact.
*/
AV_FRAME_DATA_LCEVC,
/**
* This side data must be associated with a video frame.
* The presence of this side data indicates that the video stream is
* composed of multiple views (e.g. stereoscopic 3D content,
* cf. H.264 Annex H or H.265 Annex G).
* The data is an int storing the view ID.
*/
AV_FRAME_DATA_VIEW_ID,
/**
* This side data contains information about the reference display width(s)
* and reference viewing distance(s) as well as information about the
* corresponding reference stereo pair(s), i.e., the pair(s) of views to be
* displayed for the viewer's left and right eyes on the reference display
* at the reference viewing distance.
* The payload is the AV3DReferenceDisplaysInfo struct defined in
* libavutil/tdrdi.h.
*/
AV_FRAME_DATA_3D_REFERENCE_DISPLAYS,
};
enum AVActiveFormatDescription {
@@ -255,6 +281,58 @@ typedef struct AVFrameSideData {
AVBufferRef *buf;
} AVFrameSideData;
enum AVSideDataProps {
/**
* The side data type can be used in stream-global structures.
* Side data types without this property are only meaningful on per-frame
* basis.
*/
AV_SIDE_DATA_PROP_GLOBAL = (1 << 0),
/**
* Multiple instances of this side data type can be meaningfully present in
* a single side data array.
*/
AV_SIDE_DATA_PROP_MULTI = (1 << 1),
/**
* Side data depends on the video dimensions. Side data with this property
* loses its meaning when rescaling or cropping the image, unless
* either recomputed or adjusted to the new resolution.
*/
AV_SIDE_DATA_PROP_SIZE_DEPENDENT = (1 << 2),
/**
* Side data depends on the video color space. Side data with this property
* loses its meaning when changing the video color encoding, e.g. by
* adapting to a different set of primaries or transfer characteristics.
*/
AV_SIDE_DATA_PROP_COLOR_DEPENDENT = (1 << 3),
/**
* Side data depends on the channel layout. Side data with this property
* loses its meaning when downmixing or upmixing, unless either recomputed
* or adjusted to the new layout.
*/
AV_SIDE_DATA_PROP_CHANNEL_DEPENDENT = (1 << 4),
};
/**
* This struct describes the properties of a side data type. Its instance
* corresponding to a given type can be obtained from av_frame_side_data_desc().
*/
typedef struct AVSideDataDescriptor {
/**
* Human-readable side data description.
*/
const char *name;
/**
* Side data property flags, a combination of AVSideDataProps values.
*/
unsigned props;
} AVSideDataDescriptor;
/**
* Structure describing a single Region Of Interest.
*
@@ -338,8 +416,7 @@ typedef struct AVRegionOfInterest {
* to the end with a minor bump.
*
* Fields can be accessed through AVOptions, the name string used, matches the
* C structure field name for fields accessible through AVOptions. The AVClass
* for AVFrame can be obtained from avcodec_get_frame_class()
* C structure field name for fields accessible through AVOptions.
*/
typedef struct AVFrame {
#define AV_NUM_DATA_POINTERS 8
@@ -430,16 +507,6 @@ typedef struct AVFrame {
*/
int format;
#if FF_API_FRAME_KEY
/**
* 1 -> keyframe, 0-> not
*
* @deprecated Use AV_FRAME_FLAG_KEY instead
*/
attribute_deprecated
int key_frame;
#endif
/**
* Picture type of the frame.
*/
@@ -511,32 +578,6 @@ typedef struct AVFrame {
*/
int repeat_pict;
#if FF_API_INTERLACED_FRAME
/**
* The content of the picture is interlaced.
*
* @deprecated Use AV_FRAME_FLAG_INTERLACED instead
*/
attribute_deprecated
int interlaced_frame;
/**
* If the content is interlaced, is top field displayed first.
*
* @deprecated Use AV_FRAME_FLAG_TOP_FIELD_FIRST instead
*/
attribute_deprecated
int top_field_first;
#endif
#if FF_API_PALETTE_HAS_CHANGED
/**
* Tell user application that palette has changed from previous frame.
*/
attribute_deprecated
int palette_has_changed;
#endif
/**
* Sample rate of the audio data.
*/
@@ -606,6 +647,14 @@ typedef struct AVFrame {
* is interlaced.
*/
#define AV_FRAME_FLAG_TOP_FIELD_FIRST (1 << 4)
/**
* A decoder can use this flag to mark frames which were originally encoded losslessly.
*
* For coding bitstream formats which support both lossless and lossy
* encoding, it is sometimes possible for a decoder to determine which method
* was used when the bitsream was encoded.
*/
#define AV_FRAME_FLAG_LOSSLESS (1 << 5)
/**
* @}
*/
@@ -642,18 +691,6 @@ typedef struct AVFrame {
*/
int64_t best_effort_timestamp;
#if FF_API_FRAME_PKT
/**
* reordered pos from the last AVPacket that has been input into the decoder
* - encoding: unused
* - decoding: Read by user.
* @deprecated use AV_CODEC_FLAG_COPY_OPAQUE to pass through arbitrary user
* data from packets to frames
*/
attribute_deprecated
int64_t pkt_pos;
#endif
/**
* metadata.
* - encoding: Set by user.
@@ -674,20 +711,6 @@ typedef struct AVFrame {
#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4
#define FF_DECODE_ERROR_DECODE_SLICES 8
#if FF_API_FRAME_PKT
/**
* size of the corresponding packet containing the compressed
* frame.
* It is set to a negative value if unknown.
* - encoding: unused
* - decoding: set by libavcodec, read by user.
* @deprecated use AV_CODEC_FLAG_COPY_OPAQUE to pass through arbitrary user
* data from packets to frames
*/
attribute_deprecated
int pkt_size;
#endif
/**
* For hwaccel-format frames, this should be a reference to the
* AVHWFramesContext describing the frame.
@@ -727,17 +750,13 @@ typedef struct AVFrame {
*/
/**
* AVBufferRef for internal use by a single libav* library.
* RefStruct reference for internal use by a single libav* library.
* Must not be used to transfer data between libraries.
* Has to be NULL when ownership of the frame leaves the respective library.
*
* Code outside the FFmpeg libs should never check or change the contents of the buffer ref.
*
* FFmpeg calls av_buffer_unref() on it when the frame is unreferenced.
* av_frame_copy_props() calls create a new reference with av_buffer_ref()
* for the target frame's private_ref field.
* Code outside the FFmpeg libs must never check or change private_ref.
*/
AVBufferRef *private_ref;
void *private_ref;
/**
* Channel layout of the audio data.
@@ -842,9 +861,10 @@ void av_frame_move_ref(AVFrame *dst, AVFrame *src);
* cases.
*
* @param frame frame in which to store the new buffers.
* @param align Required buffer size alignment. If equal to 0, alignment will be
* chosen automatically for the current CPU. It is highly
* recommended to pass 0 here unless you know what you are doing.
* @param align Required buffer size and data pointer alignment. If equal to 0,
* alignment will be chosen automatically for the current CPU.
* It is highly recommended to pass 0 here unless you know what
* you are doing.
*
* @return 0 on success, a negative AVERROR on error.
*/
@@ -992,6 +1012,12 @@ int av_frame_apply_cropping(AVFrame *frame, int flags);
*/
const char *av_frame_side_data_name(enum AVFrameSideDataType type);
/**
* @return side data descriptor corresponding to a given side data type, NULL
* when not available.
*/
const AVSideDataDescriptor *av_frame_side_data_desc(enum AVFrameSideDataType type);
/**
* Free all side data entries and their contents, then zeroes out the
* values which the pointers are pointing to.
@@ -1003,7 +1029,20 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type);
*/
void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd);
/**
* Remove existing entries before adding new ones.
*/
#define AV_FRAME_SIDE_DATA_FLAG_UNIQUE (1 << 0)
/**
* Don't add a new entry if another of the same type exists.
* Applies only for side data types without the AV_SIDE_DATA_PROP_MULTI prop.
*/
#define AV_FRAME_SIDE_DATA_FLAG_REPLACE (1 << 1)
/**
* Create a new reference to the passed in buffer instead of taking ownership
* of it.
*/
#define AV_FRAME_SIDE_DATA_FLAG_NEW_REF (1 << 2)
/**
* Add new side data entry to an array.
@@ -1016,15 +1055,43 @@ void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd);
* @param size size of the side data
* @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
*
* @return newly added side data on success, NULL on error. In case of
* AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of matching
* AVFrameSideDataType will be removed before the addition is
* attempted.
* @return newly added side data on success, NULL on error.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of
* matching AVFrameSideDataType will be removed before the addition
* is attempted.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an
* entry of the same type already exists, it will be replaced instead.
*/
AVFrameSideData *av_frame_side_data_new(AVFrameSideData ***sd, int *nb_sd,
enum AVFrameSideDataType type,
size_t size, unsigned int flags);
/**
* Add a new side data entry to an array from an existing AVBufferRef.
*
* @param sd pointer to array of side data to which to add another entry,
* or to NULL in order to start a new array.
* @param nb_sd pointer to an integer containing the number of entries in
* the array.
* @param type type of the added side data
* @param buf Pointer to AVBufferRef to add to the array. On success,
* the function takes ownership of the AVBufferRef and *buf is
* set to NULL, unless AV_FRAME_SIDE_DATA_FLAG_NEW_REF is set
* in which case the ownership will remain with the caller.
* @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
*
* @return newly added side data on success, NULL on error.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of
* matching AVFrameSideDataType will be removed before the addition
* is attempted.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an
* entry of the same type already exists, it will be replaced instead.
*
*/
AVFrameSideData *av_frame_side_data_add(AVFrameSideData ***sd, int *nb_sd,
enum AVFrameSideDataType type,
AVBufferRef **buf, unsigned int flags);
/**
* Add a new side data entry to an array based on existing side data, taking
* a reference towards the contained AVBufferRef.
@@ -1037,10 +1104,12 @@ AVFrameSideData *av_frame_side_data_new(AVFrameSideData ***sd, int *nb_sd,
* for the buffer.
* @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
*
* @return negative error code on failure, >=0 on success. In case of
* AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of matching
* AVFrameSideDataType will be removed before the addition is
* attempted.
* @return negative error code on failure, >=0 on success.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of
* matching AVFrameSideDataType will be removed before the addition
* is attempted.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an
* entry of the same type already exists, it will be replaced instead.
*/
int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd,
const AVFrameSideData *src, unsigned int flags);
@@ -1074,6 +1143,19 @@ const AVFrameSideData *av_frame_side_data_get(AVFrameSideData * const *sd,
nb_sd, type);
}
/**
* Remove and free all side data instances of the given type from an array.
*/
void av_frame_side_data_remove(AVFrameSideData ***sd, int *nb_sd,
enum AVFrameSideDataType type);
/**
* Remove and free all side data instances that match any of the given
* side data properties. (See enum AVSideDataProps)
*/
void av_frame_side_data_remove_by_props(AVFrameSideData ***sd, int *nb_sd,
int props);
/**
* @}
*/

View File

@@ -83,7 +83,7 @@ typedef struct AVHDRVividColorToneMappingParams {
AVRational targeted_system_display_maximum_luminance;
/**
* This flag indicates that transfer the base paramter(for value of 1)
* This flag indicates that transfer the base parameter(for value of 1)
*/
int base_enable_flag;
@@ -145,7 +145,7 @@ typedef struct AVHDRVividColorToneMappingParams {
int base_param_k3;
/**
* This flag indicates that delta mode of base paramter(for value of 1)
* This flag indicates that delta mode of base parameter(for value of 1)
*/
int base_param_Delta_enable_mode;
@@ -158,7 +158,7 @@ typedef struct AVHDRVividColorToneMappingParams {
/**
* indicates 3Spline_enable_flag in the base parameter,
* This flag indicates that transfer three Spline of base paramter(for value of 1)
* This flag indicates that transfer three Spline of base parameter(for value of 1)
*/
int three_Spline_enable_flag;
@@ -168,60 +168,6 @@ typedef struct AVHDRVividColorToneMappingParams {
*/
int three_Spline_num;
#if FF_API_HDR_VIVID_THREE_SPLINE
/**
* The mode of three Spline. the value shall be in the range
* of 0 to 3, inclusive.
* @deprecated Use three_spline instead
*/
attribute_deprecated
int three_Spline_TH_mode;
/**
* three_Spline_TH_enable_MB is in the range of 0.0 to 1.0, inclusive
* and in multiples of 1.0/255.
* @deprecated Use three_spline instead
*/
attribute_deprecated
AVRational three_Spline_TH_enable_MB;
/**
* 3Spline_TH_enable of three Spline.
* The value shall be in the range of 0.0 to 1.0, inclusive.
* and in multiples of 1.0/4095.
* @deprecated Use three_spline instead
*/
attribute_deprecated
AVRational three_Spline_TH_enable;
/**
* 3Spline_TH_Delta1 of three Spline.
* The value shall be in the range of 0.0 to 0.25, inclusive,
* and in multiples of 0.25/1023.
* @deprecated Use three_spline instead
*/
attribute_deprecated
AVRational three_Spline_TH_Delta1;
/**
* 3Spline_TH_Delta2 of three Spline.
* The value shall be in the range of 0.0 to 0.25, inclusive,
* and in multiples of 0.25/1023.
* @deprecated Use three_spline instead
*/
attribute_deprecated
AVRational three_Spline_TH_Delta2;
/**
* 3Spline_enable_Strength of three Spline.
* The value shall be in the range of 0.0 to 1.0, inclusive,
* and in multiples of 1.0/255.
* @deprecated Use three_spline instead
*/
attribute_deprecated
AVRational three_Spline_enable_Strength;
#endif
AVHDRVivid3SplineParams three_spline[2];
} AVHDRVividColorToneMappingParams;

View File

@@ -38,6 +38,9 @@ enum AVHWDeviceType {
AV_HWDEVICE_TYPE_MEDIACODEC,
AV_HWDEVICE_TYPE_VULKAN,
AV_HWDEVICE_TYPE_D3D12VA,
AV_HWDEVICE_TYPE_AMF,
/* OpenHarmony Codec device */
AV_HWDEVICE_TYPE_OHCODEC,
};
/**
@@ -560,7 +563,7 @@ enum {
* values indicate that it failed somehow.
*
* On failure, the destination frame will be left blank, except for the
* hw_frames_ctx/format fields thay may have been set by the caller - those will
* hw_frames_ctx/format fields they may have been set by the caller - those will
* be preserved as they were.
*
* @param dst Destination frame, to contain the mapping.

View File

@@ -129,6 +129,14 @@ typedef struct AVD3D12VAFramesContext {
* If unset, will be automatically set.
*/
DXGI_FORMAT format;
/**
* Options for working with resources.
* If unset, this will be D3D12_RESOURCE_FLAG_NONE.
*
* @see https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ne-d3d12-d3d12_resource_flags
*/
D3D12_RESOURCE_FLAGS flags;
} AVD3D12VAFramesContext;
#endif /* AVUTIL_HWCONTEXT_D3D12VA_H */

View File

@@ -75,7 +75,7 @@ typedef struct AVOpenCLDeviceContext {
/**
* The default command queue for this device, which will be used by all
* frames contexts which do not have their own command queue. If not
* intialised by the user, a default queue will be created on the
* initialised by the user, a default queue will be created on the
* primary device.
*/
cl_command_queue command_queue;

View File

@@ -25,8 +25,8 @@
* @file
* An API-specific header for AV_HWDEVICE_TYPE_QSV.
*
* This API does not support dynamic frame pools. AVHWFramesContext.pool must
* contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct.
* AVHWFramesContext.pool must contain AVBufferRefs whose data pointer points
* to a mfxFrameSurface1 struct.
*/
/**
@@ -51,14 +51,36 @@ typedef struct AVQSVDeviceContext {
* This struct is allocated as AVHWFramesContext.hwctx
*/
typedef struct AVQSVFramesContext {
/**
* A pointer to a mfxFrameSurface1 struct
*
* It is available when nb_surfaces is non-zero.
*/
mfxFrameSurface1 *surfaces;
/**
* Number of frames in the pool
*
* It is 0 for dynamic frame pools or AVHWFramesContext.initial_pool_size
* for fixed frame pools.
*
* Note only oneVPL GPU runtime 2.9+ can support dynamic frame pools
* on d3d11va or vaapi
*/
int nb_surfaces;
/**
* A combination of MFX_MEMTYPE_* describing the frame pool.
*/
int frame_type;
/**
* A pointer to a mfxFrameInfo struct
*
* It is available when nb_surfaces is 0, all buffers allocated from the
* pool have the same mfxFrameInfo.
*/
mfxFrameInfo *info;
} AVQSVFramesContext;
#endif /* AVUTIL_HWCONTEXT_QSV_H */

View File

@@ -90,8 +90,15 @@ CFStringRef av_map_videotoolbox_color_primaries_from_av(enum AVColorPrimaries pr
CFStringRef av_map_videotoolbox_color_trc_from_av(enum AVColorTransferCharacteristic trc);
/**
* Update a CVPixelBufferRef's metadata to based on an AVFrame.
* Returns 0 if no known equivalent was found.
* Set CVPixelBufferRef's metadata based on an AVFrame.
*
* Sets/unsets the CVPixelBuffer attachments to match as closely as possible the
* AVFrame metadata. To prevent inconsistent attachments, the attachments for properties
* that could not be matched or are unspecified in the given AVFrame are unset. So if
* any attachments already covered by AVFrame metadata need to be set to a specific
* value, this should happen after calling this function.
*
* Returns < 0 in case of an error.
*/
int av_vt_pixbuf_set_attachments(void *log_ctx,
CVPixelBufferRef pixbuf, const struct AVFrame *src);

View File

@@ -26,9 +26,24 @@
#include "pixfmt.h"
#include "frame.h"
#include "hwcontext.h"
typedef struct AVVkFrame AVVkFrame;
typedef struct AVVulkanDeviceQueueFamily {
/* Queue family index */
int idx;
/* Number of queues in the queue family in use */
int num;
/* Queue family capabilities. Must be non-zero.
* Flags may be removed to indicate the queue family may not be used
* for a given purpose. */
VkQueueFlagBits flags;
/* Vulkan implementations are allowed to list multiple video queues
* which differ in what they can encode or decode. */
VkVideoCodecOperationFlagBitsKHR video_caps;
} AVVulkanDeviceQueueFamily;
/**
* @file
* API-specific header for AV_HWDEVICE_TYPE_VULKAN.
@@ -48,9 +63,8 @@ typedef struct AVVulkanDeviceContext {
const VkAllocationCallbacks *alloc;
/**
* Pointer to the instance-provided vkGetInstanceProcAddr loading function.
* If NULL, will pick either libvulkan or libvolk, depending on libavutil's
* compilation settings, and set this field.
* Pointer to a vkGetInstanceProcAddr loading function.
* If unset, will dynamically load and use libvulkan.
*/
PFN_vkGetInstanceProcAddr get_proc_addr;
@@ -98,28 +112,35 @@ typedef struct AVVulkanDeviceContext {
const char * const *enabled_dev_extensions;
int nb_enabled_dev_extensions;
#if FF_API_VULKAN_FIXED_QUEUES
/**
* Queue family index for graphics operations, and the number of queues
* enabled for it. If unavaiable, will be set to -1. Not required.
* enabled for it. If unavailable, will be set to -1. Not required.
* av_hwdevice_create() will attempt to find a dedicated queue for each
* queue family, or pick the one with the least unrelated flags set.
* Queue indices here may overlap if a queue has to share capabilities.
*/
attribute_deprecated
int queue_family_index;
attribute_deprecated
int nb_graphics_queues;
/**
* Queue family index for transfer operations and the number of queues
* enabled. Required.
*/
attribute_deprecated
int queue_family_tx_index;
attribute_deprecated
int nb_tx_queues;
/**
* Queue family index for compute operations and the number of queues
* enabled. Required.
*/
attribute_deprecated
int queue_family_comp_index;
attribute_deprecated
int nb_comp_queues;
/**
@@ -127,7 +148,9 @@ typedef struct AVVulkanDeviceContext {
* If the device doesn't support such, queue_family_encode_index will be -1.
* Not required.
*/
attribute_deprecated
int queue_family_encode_index;
attribute_deprecated
int nb_encode_queues;
/**
@@ -135,8 +158,11 @@ typedef struct AVVulkanDeviceContext {
* If the device doesn't support such, queue_family_decode_index will be -1.
* Not required.
*/
attribute_deprecated
int queue_family_decode_index;
attribute_deprecated
int nb_decode_queues;
#endif
/**
* Locks a queue, preventing other threads from submitting any command
@@ -150,6 +176,17 @@ typedef struct AVVulkanDeviceContext {
* Similar to lock_queue(), unlocks a queue. Must only be called after locking.
*/
void (*unlock_queue)(struct AVHWDeviceContext *ctx, uint32_t queue_family, uint32_t index);
/**
* Queue families used. Must be preferentially ordered. List may contain
* duplicates.
*
* For compatibility reasons, all the enabled queue families listed above
* (queue_family_(tx/comp/encode/decode)_index) must also be included in
* this list until they're removed after deprecation.
*/
AVVulkanDeviceQueueFamily qf[64];
int nb_qf;
} AVVulkanDeviceContext;
/**
@@ -160,11 +197,6 @@ typedef enum AVVkFrameFlags {
* device and tiling during av_hwframe_ctx_init(). */
AV_VK_FRAME_FLAG_NONE = (1ULL << 0),
#if FF_API_VULKAN_CONTIGUOUS_MEMORY
/* DEPRECATED: does nothing. Replaced by multiplane images. */
AV_VK_FRAME_FLAG_CONTIGUOUS_MEMORY = (1ULL << 1),
#endif
/* Disables multiplane images.
* This is required to export/import images from CUDA. */
AV_VK_FRAME_FLAG_DISABLE_MULTIPLANE = (1ULL << 2),

View File

@@ -37,20 +37,29 @@
#include "rational.h"
/**
* @defgroup lavu_iamf Immersive Audio Model and Formats
* @ingroup lavu_audio
*
* Immersive Audio Model and Formats related functions and defines
*
* @defgroup lavu_iamf_params Parameter Definition
* @ingroup lavu_iamf
* @{
* Parameters as defined in section 3.6.1 and 3.8 of IAMF.
* @}
*
* @defgroup lavu_iamf_audio Audio Element
* @ingroup lavu_iamf
* @{
* Audio Elements as defined in section 3.6 of IAMF.
* @}
*
* @defgroup lavu_iamf_mix Mix Presentation
* @ingroup lavu_iamf
* @{
* Mix Presentations as defined in section 3.7 of IAMF.
* @}
*
* @}
* @addtogroup lavu_iamf_params
* @{
*/
@@ -204,11 +213,11 @@ typedef struct AVIAMFParamDefinition {
enum AVIAMFParamDefinitionType type;
/**
* Identifier for the paremeter substream.
* Identifier for the parameter substream.
*/
unsigned int parameter_id;
/**
* Sample rate for the paremeter substream. It must not be 0.
* Sample rate for the parameter substream. It must not be 0.
*/
unsigned int parameter_rate;
@@ -484,10 +493,14 @@ typedef struct AVIAMFSubmixElement {
enum AVIAMFSubmixLayoutType {
/**
* The layout follows the loudspeaker sound system convention of ITU-2051-3.
* @ref AVIAMFSubmixLayout.sound_system must be set.
*/
AV_IAMF_SUBMIX_LAYOUT_TYPE_LOUDSPEAKERS = 2,
/**
* The layout is binaural.
*
* @note @ref AVIAMFSubmixLayout.sound_system may be set to
* AV_CHANNEL_LAYOUT_BINAURAL to simplify API usage, but it's not mandatory.
*/
AV_IAMF_SUBMIX_LAYOUT_TYPE_BINAURAL = 3,
};
@@ -505,9 +518,9 @@ typedef struct AVIAMFSubmixLayout {
/**
* Channel layout matching one of Sound Systems A to J of ITU-2051-3, plus
* 7.1.2ch and 3.1.2ch
* If layout_type is not AV_IAMF_SUBMIX_LAYOUT_TYPE_LOUDSPEAKERS, this field
* is undefined.
* 7.1.2ch, 3.1.2ch, and binaural.
* If layout_type is not AV_IAMF_SUBMIX_LAYOUT_TYPE_LOUDSPEAKERS or
* AV_IAMF_SUBMIX_LAYOUT_TYPE_BINAURAL, this field is undefined.
*/
AVChannelLayout sound_system;
/**
@@ -673,6 +686,7 @@ AVIAMFSubmixLayout *av_iamf_submix_add_layout(AVIAMFSubmix *submix);
* upon return, *mix_presentation will be set to NULL.
*/
void av_iamf_mix_presentation_free(AVIAMFMixPresentation **mix_presentation);
/**
* @}
*/

View File

@@ -64,10 +64,8 @@ typedef union {
#include "config.h"
#if ARCH_ARM
# include "arm/intreadwrite.h"
#elif ARCH_AVR32
# include "avr32/intreadwrite.h"
#if ARCH_AARCH64
# include "aarch64/intreadwrite.h"
#elif ARCH_MIPS
# include "mips/intreadwrite.h"
#elif ARCH_PPC
@@ -543,9 +541,41 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias;
#if AV_HAVE_BIGENDIAN
# define AV_RLA(s, p) av_bswap##s(AV_RN##s##A(p))
# define AV_WLA(s, p, v) AV_WN##s##A(p, av_bswap##s(v))
# define AV_RBA(s, p) AV_RN##s##A(p)
# define AV_WBA(s, p, v) AV_WN##s##A(p, v)
#else
# define AV_RLA(s, p) AV_RN##s##A(p)
# define AV_WLA(s, p, v) AV_WN##s##A(p, v)
# define AV_RBA(s, p) av_bswap##s(AV_RN##s##A(p))
# define AV_WBA(s, p, v) AV_WN##s##A(p, av_bswap##s(v))
#endif
#ifndef AV_RL16A
# define AV_RL16A(p) AV_RLA(16, p)
#endif
#ifndef AV_WL16A
# define AV_WL16A(p, v) AV_WLA(16, p, v)
#endif
#ifndef AV_RB16A
# define AV_RB16A(p) AV_RBA(16, p)
#endif
#ifndef AV_WB16A
# define AV_WB16A(p, v) AV_WBA(16, p, v)
#endif
#ifndef AV_RL32A
# define AV_RL32A(p) AV_RLA(32, p)
#endif
#ifndef AV_WL32A
# define AV_WL32A(p, v) AV_WLA(32, p, v)
#endif
#ifndef AV_RB32A
# define AV_RB32A(p) AV_RBA(32, p)
#endif
#ifndef AV_WB32A
# define AV_WB32A(p, v) AV_WBA(32, p, v)
#endif
#ifndef AV_RL64A
@@ -555,6 +585,13 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias;
# define AV_WL64A(p, v) AV_WLA(64, p, v)
#endif
#ifndef AV_RB64A
# define AV_RB64A(p) AV_RBA(64, p)
#endif
#ifndef AV_WB64A
# define AV_WB64A(p, v) AV_WBA(64, p, v)
#endif
/*
* The AV_COPYxxU macros are suitable for copying data to/from unaligned
* memory locations.

Some files were not shown because too many files have changed in this diff Show More