Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
a5ea5e8
migrate to current master code
Paulchen-Panther Jan 29, 2022
b2ff54e
The rest from the previous WIP
Paulchen-Panther Jan 29, 2022
0123372
SAND modifier treatment added from previous WIP
Paulchen-Panther Jan 30, 2022
5d035d0
Cmake recommendation from @AlexanderStein
Paulchen-Panther Jan 30, 2022
69e99e0
Remove duplicate code
Paulchen-Panther Jan 30, 2022
d666a06
Merge branch 'master' into drm
Paulchen-Panther Sep 13, 2022
d6f21c0
Merge remote-tracking branch 'upstream/master' into drm
Lord-Grey Oct 9, 2025
01cb575
Enable DRM for Linux
Lord-Grey Oct 9, 2025
0120248
Remove linkage error when building minimum
Lord-Grey Oct 11, 2025
ed9a814
Add DRM to Presets
Lord-Grey Oct 11, 2025
e5d2ff6
Fix input device number is not set
Lord-Grey Oct 11, 2025
4933d48
Resilience and align to current grabber structure
Lord-Grey Oct 11, 2025
c6e06e9
Address some linter findings
Lord-Grey Oct 11, 2025
341c965
Combine drm, fb in amlogic, improvements
Lord-Grey Oct 14, 2025
90228b8
Update library references from libgbm to libMali
Lord-Grey Oct 14, 2025
127d330
Remove grabFrame
Lord-Grey Oct 16, 2025
24e6243
Merge remote-tracking branch 'origin/master' into drm
Lord-Grey Oct 16, 2025
9755536
enable amlogic on rpi for testing
Lord-Grey Oct 16, 2025
6590a47
Add 'dl' library to target link libraries
Lord-Grey Oct 16, 2025
de5b811
Fix grabber UI and only show active drm devices
Lord-Grey Oct 17, 2025
95f7440
Remove console output
Lord-Grey Oct 17, 2025
7e17df2
Do not test screensize during screensetup
Lord-Grey Oct 17, 2025
e981b11
Clean-up DRM and add tracing
Lord-Grey Oct 24, 2025
e1b4b88
Fix Log enum
Lord-Grey Oct 24, 2025
61e7e80
Handle open failures
Lord-Grey Oct 24, 2025
07aeebf
Change Logger to Smartpointer
Lord-Grey Oct 24, 2025
b0d2d97
Fix nightly tag is not a semver version
Lord-Grey Oct 24, 2025
4aae964
Check file open failure
Lord-Grey Oct 25, 2025
6ea54fe
Imporove tracing
Lord-Grey Oct 25, 2025
ab3d43c
Differentiate memory tracing scenarios
Lord-Grey Oct 25, 2025
12b7ee5
Update object tracing
Lord-Grey Oct 25, 2025
92e98d0
Downward compatibility
Lord-Grey Oct 25, 2025
76db79a
Logging.ini template
Lord-Grey Oct 25, 2025
f6006c1
Merge remote-tracking branch 'upstream/master' into drm
Lord-Grey Oct 25, 2025
c6400db
gcc downward compatibility
Lord-Grey Oct 25, 2025
68c7967
Update fb to MAP_Shared
Lord-Grey Oct 25, 2025
9a799b4
Merge remote-tracking branch 'origin/drm' into drm
Lord-Grey Oct 25, 2025
ab1c933
Missing header
Lord-Grey Oct 25, 2025
3ba84e6
Refactor DRM grabber
Lord-Grey Oct 25, 2025
2214121
Revert "enable amlogic on rpi for testing"
Lord-Grey Oct 26, 2025
b4767d7
Do not show DRM Grabber on amlogic for selection
Lord-Grey Oct 26, 2025
e4dc78b
Disable debug output for release builds
Lord-Grey Oct 26, 2025
4084a08
Update qtlogging.ini
Lord-Grey Oct 26, 2025
6376010
Merge branch 'drm' into drm2
Lord-Grey Oct 26, 2025
8d86820
editorial changes
Lord-Grey Oct 26, 2025
5dc8946
Improvements after review
Lord-Grey Oct 26, 2025
96f61b0
Improvements after review
Lord-Grey Oct 26, 2025
708d463
Merge remote-tracking branch 'origin/drm2' into drm2
Lord-Grey Oct 26, 2025
509c3ff
Update Changelog
Lord-Grey Oct 26, 2025
2d08658
Use same qt version when building with pre-built dependencies
Paulchen-Panther Nov 1, 2025
5a2435c
Remove Dependencies.cmake as functionality was moved to OS related files
Lord-Grey Nov 2, 2025
2feb06c
Merge remote-tracking branch 'origin/drm2' into drm2
Lord-Grey Nov 2, 2025
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
17 changes: 9 additions & 8 deletions .github/actions/download-pre-built-deps/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,18 @@ inputs:
description: Linux architecture
required: false
default: 'amd64'
qt_version:
type: string
description: Qt version
required: false
default: '6'
build_type:
type: string
description: Build type
required: false
default: 'release'
outputs:
cmakeArgs:
description: "CMake arguments"
description: "Resulting CMake arguments"
value: ${{ steps.download-pre-built-deps.outputs.cmake-args }}
qtVersion:
description: "Determined Qt version"
value: ${{ steps.download-pre-built-deps.outputs.qt-version }}
runs:
using: composite
steps:
Expand All @@ -35,8 +33,9 @@ runs:
preBuiltDeps='buildspec.json'
baseURL=$(jq -r '.baseUrl' $preBuiltDeps)
version=$(jq -r '.version' $preBuiltDeps)
downloadHash=$(jq -r '.hashes .${{ inputs.os }} .${{ inputs.architecture }} .qt${{ inputs.qt_version }} .${{ inputs.build_type }}' $preBuiltDeps)
downloadFilename=${{ inputs.os }}-${{ inputs.architecture }}-qt${{ inputs.qt_version }}-${{ inputs.build_type }}-$version.tar.gz
downloadHash=$(jq -r '.hashes .${{ inputs.os }} .${{ inputs.architecture }} .${{ inputs.build_type }}' $preBuiltDeps)
qtVersion=$(jq -r '.hashes .${{ inputs.os }} .${{ inputs.architecture }} .qt_version' $preBuiltDeps)
downloadFilename=${{ inputs.os }}-${{ inputs.architecture }}-qt$qtVersion-${{ inputs.build_type }}-$version.tar.gz
echo 💾 Download "$downloadFilename"...
curl -OL "$baseURL"/"$version"/"$downloadFilename"
if [[ ${{ inputs.os }} == 'windows' ]]; then
Expand All @@ -55,7 +54,9 @@ runs:
fi
echo ✅ Hash check passed.
echo "cmake-args="-DUSE_PRE_BUILT_DEPS=ON -DPRE_BUILT_DEPS_DIR=$destDir"" >> $GITHUB_OUTPUT
echo "qt-version=$qtVersion" >> $GITHUB_OUTPUT
else
echo ❌ Hash check failed.
echo "cmake-args=" >> $GITHUB_OUTPUT
echo "qt-version=" >> $GITHUB_OUTPUT
fi
114 changes: 49 additions & 65 deletions .github/actions/download-pre-built-deps/buildspec.json
Original file line number Diff line number Diff line change
@@ -1,111 +1,95 @@
{
"version": "2025-10-18",
"version": "2025-11-01",
"baseUrl": "https://github.com/hyperion-project/hyperion-deps/releases/download",
"hashes": {
"debian_bookworm": {
"amd64": {
"qt6": {
"debug": "a905db1cb0ec7f2099f9703e2b97f15d850b7aac69657416d6f4c0bda4256a6b",
"release": "a7216c688c5a5ff4b6e1c534c9c939e422a675803a5831aaffbe7fc7ba173894"
}
"qt_version": "6.4.2",
"debug": "06c425db6251dcd6109bc07bcb2aa1cfeb19139676651552b2ebaf28a33c854b",
"release": "22fdfa2338b18883fb047954c895fdaae094ff5ff309da22cf9317912d425d8a"
},
"arm64": {
"qt6": {
"debug": "083ed521e20894138c751dc3406363167af39f846e080c0d8b12329f4468e59f",
"release": "7ba77697a85496ae467249046db65f628aee3c13fbe16f1b17878eb59de42f80"
}
"qt_version": "6.4.2",
"debug": "51b4e1f2bdb426f517e9fb620c1b4fb199a59f999009dd096ca1a5a3c75438fd",
"release": "393bbc164584842ee463256f13a1cd49388d3d2ee29f00f667ac0c51339d0890"
},
"armv6": {
"qt6": {
"debug": "6a89a75d6c6bae815fa9357cf0c342f0ae0fa78be64d8d99d95d95b69e803bf7",
"release": "ad756f9154b8b1a5bae7dc47f9a8a86264f46bf52e3d1457b90038d6640fd5d6"
}
"qt_version": "6.4.2",
"debug": "6666953af031134e64c2a1e3424a34c356c7bfc67deee1f3b71474cb4c0ea71b",
"release": "db3c3163fb478377e3510f9d6b30bbbfab4af5439b35b8e78bdd7997002f4357"
},
"armv7": {
"qt6": {
"debug": "acc3ea2126f84741eb0a803344f4b626d44bc739cb556416f2594616064fcbcb",
"release": "75f343a6f015b58463e15762e8af79309656b648de1e8550b2e41aeea71c3a5e"
}
"qt_version": "6.4.2",
"debug": "21011415966aa71a70ef5f4b6c4f9c8fbe6657bbe1270981e6bafe0bfe176644",
"release": "864d173d7d5777852402eef92263f3dcf6628fc640ded86c415ea38d8b451197"
}
},
"debian_bullseye": {
"amd64": {
"qt6": {
"debug": "434603d57ffee0c4b6640dfcd1b06bb8c745c199d8a81d50c1cc304244bcf7ff",
"release": "bc6540399f8fb198e194fc6080f0056267bce827511ade8f13843eb92f987bca"
}
"qt_version": "6.4.2",
"debug": "f0bc24c51b535152416fe3e0e26380f52398014d14b545d7405165aab57cf4c7",
"release": "7f77f48490b15998c5e0bd521f5171ff2e84da48f8a64a352e326d6251bca326"
},
"arm64": {
"qt6": {
"debug": "01e2b25c191dac140fe9c24f3d3e22bf1020ed8ee44867d25e021b0eded8699e",
"release": "25d25009e563899fd1abfd2ca079b3e396f20774a680a991c086d5f5430dd5a8"
}
"qt_version": "6.4.2",
"debug": "fedf553b11146ffb78b21edf9a4c2baa4a7762c8ff48a1dbd17df8eb68dcac07",
"release": "1da73a58405df370e93a63e1e543edd77e4c17a36b9a418160e681023767663e"
},
"armv6": {
"qt5": {
"debug": "8b253cac7614e5debda8b8749d963b1d944f54198fd12b3f63e31bfd4a4e57e6",
"release": "8c3f23457e5f033f391986fa860b0f7835053fcfdc34ba4c8e4f345349ea5610"
}
"qt_version": "5.15.2",
"debug": "ded600345ddf13a720dea9526851c3c9a0c3c6f2d8a09562522c68359172f087",
"release": "154ef53cceb244a38017ebfb93df8648759d6fa136fcc1f1ed56b3e52e1b2e11"
},
"armv7": {
"qt6": {
"debug": "8099bef7e66a14b83736dea63f3489b1387533bd02107ef41b259323a0379086",
"release": "9231e3dff694d4cb2f513ec087574b01fae8f8d48ca30f97a5d30d194e8c5b71"
}
"qt_version": "6.4.2",
"debug": "d718231973b00d074c180efa9c8e67e889de13e285c9cc4636b2438a6c2cbce5",
"release": "2aa94250e99f348202d87bfb668053b503ed1a0bb96430b27764080506c89367"
}
},
"debian_trixie": {
"amd64": {
"qt6": {
"debug": "38d9ebb0e97120ec815977f855eb5c44681f8a312f70a0fb0e3e0d7fc1760ea4",
"release": "6b8513dd42036428b704d775c5e4e39bd324485bd9d54ff49ad6056259e53425"
}
"qt_version": "6.8.2",
"debug": "6c7a63ff73ab6ec215d18a3aa1a61d75adc70d38f8b8cf31bbb7552d64848ce3",
"release": "a0546be2ce99d482ecce7e9bd72444784717f841ab9678049337fc0ff4f3fc67"
},
"arm64": {
"qt6": {
"debug": "042a822aac4c0567b4074fe7a665f1fc1a61e6f3eb9a035c113f585ed2ee11c7",
"release": "322cd767e3b4e7d18166af091cb83bac8c7b7001552da0a379f397c680da278f"
}
"qt_version": "6.8.2",
"debug": "b82a0e8a12ae5171a9e2d410558d9d2ea41b1347abb9584b401cf0afcf3a816d",
"release": "a05ae0959a59bf2f6027a3e6df57c66e5cd0ff4b528cbc8fea62fda12949719d"
},
"armv6": {
"qt6": {
"debug": "7b72cf3b1f98000d60789ec19c33afa05c368198717bf9e4609c0c1a0a721ede",
"release": "8bffeb651aa7c3c0337567c949a7587720e130c4da64078408d0fd9e8edcac42"
}
"qt_version": "6.8.2",
"debug": "7dacde55ac25973658e94eb873529800812a534113d3bc2e65af14f781b7cceb",
"release": "9aec7657d52171259bc50319c2079a34136b1f96a4cf23892cb14d016121cde3"
},
"armv7": {
"qt6": {
"debug": "6f8df2ce86dd0cd3006ddb9502ac383f764c6bee2f7ec7229b0b4b66fa0abe4a",
"release": "dbb31da97e047bfb77fb872d54f8bf38909cfa369d279942f9de9c4ca807189f"
}
"qt_version": "6.8.2",
"debug": "6f0df0bb7671a38746f0af1897b1c306c51c34d94f453beba912430c7e63234a",
"release": "349e2bcba3b2361840f03110807489b25e5b1de186483a713ae990f825358736"
}
},
"macos": {
"arm64": {
"qt6": {
"debug": "15c33416e706ebb9c32b9785e9b47e05c2eed484a729e2eb672966586bf248da",
"release": "8fcbc9ac2f753d312a62f50ad39632d5befde3397b53d00de6e6803b8a0cf889"
}
"qt_version": "6.9.3",
"debug": "9b4566c573535edeb02fbf76925d8a0c6881b29b32ae85ef1af6dfd7ada1fa39",
"release": "76923c8d06f2aa7519367a85a117bfd58183848a9368d3c244b248f8691b4d81"
},
"x64": {
"qt6": {
"debug": "5873403e647af0d199cd79857058030894d4175ee6d1df237b0212f69fb2cc98",
"release": "bd6c5704423f1f782771ae68695960554b9b56ec43f83dff3ce938f067fb2a36"
}
"qt_version": "6.9.3",
"debug": "6ae7fec1f607577a004f29125cad6c2d0877dc88b1589509625bfa139c8d7e2b",
"release": "d8eaf0cb1694e3b0ee0608fe2d70351e7aa6c43074a373573d6411c93daf4b98"
}
},
"windows": {
"arm64": {
"qt6": {
"release": "0f5a324b1d852dd7d2093e3c275bcd3209e368fda32dc8c760f3e26931c687e8",
"relwithdebinfo": "68e6e468b0cc9ff47a54454b120cbf47ef84a575d2a1da9bd7912132799fda1c"
}
"qt_version": "6.9.3",
"release": "100d981764e5cd761bba0edf25dc46a0975be5f56766d34a5fbdb66053929a91",
"relwithdebinfo": "d7c51b3f8d1903e7babb379e1b30210ffbcd3a7b18bbafbc5d7b8030653dfee6"
},
"x64": {
"qt6": {
"release": "de989913f047aff4d5f8bf5ee65ebf7b14aaa9478daabfb361e52883c100a181",
"relwithdebinfo": "5741b925ec912e1348f4e0b549aa0bb33b24e31d303236bb6f78399646aed3a2"
}
"qt_version": "6.9.3",
"release": "9925c722758f09b7174b3a861a754c100a03e55f9fae132bd4c428d9744ca2f3",
"relwithdebinfo": "7b693d95f221dd678c70660f41f1f9cf27b146b1ab6f5732096c6641b5b8a5bf"
}
}
}
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/debian.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ jobs:
with:
os: debian_${{ inputs.codename }}
architecture: ${{ matrix.os.architecture[0] }}
qt_version: ${{ inputs.codename == 'bullseye' && matrix.os.architecture[0] == 'armv6' && '5' || '6' }}
build_type: ${{ inputs.event_name == 'pull_request' && 'debug' || 'release' }}

- name: 👷 Build ${{ env.HINT }}
Expand All @@ -87,7 +86,7 @@ jobs:
-e LC_ALL="C.UTF-8" \
ghcr.io/hyperion-project/debian:${{ env.DOCKER_TAG }} \
/bin/bash -c "
git config --global --add safe.directory /source &&
git config --global --add safe.directory /source &&
cmake --preset linux-${{ env.BUILD_TYPE }} ${{ steps.dependencies.outputs.cmakeArgs }} -DPLATFORM=${{ matrix.os.platform }} ${{ env.CPACK_SYSTEM_PROCESSOR }} &&
cmake --build --preset linux-${{ env.BUILD_TYPE }} --target package &&
cp /source/build/Hyperion-* /deploy/ 2>/dev/null"
Expand Down
20 changes: 12 additions & 8 deletions .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- name: ⬇ Checkout
uses: actions/checkout@v5
with:
submodules: recursive
submodules: recursive
fetch-depth: 0 # Ensures all tags are fetched

- name: 🔧 Prepare
Expand All @@ -55,12 +55,6 @@ jobs:
echo -n "+nightly$(date '+%Y%m%d')" >> .version
fi

- name: 📥 Install dependencies
uses: tecolicom/actions-use-homebrew-tools@v1
with:
tools: qt@6 coreutils
key: ${{ runner.os }}-${{ matrix.os.architecture }}-homebrew-packages

- name: 💾 Download Pre-Build Dependencies
id: dependencies
uses: ./.github/actions/download-pre-built-deps
Expand All @@ -69,10 +63,20 @@ jobs:
architecture: ${{ matrix.os.architecture }}
build_type: ${{ inputs.event_name == 'pull_request' && 'debug' || 'release' }}

- name: 📥 Install Qt ${{ env.QT_VERSION }}
uses: jurplel/install-qt-action@v4
with:
version: ${{ env.QT_VERSION }}
target: 'desktop'
modules: 'qtserialport qtwebsockets'
cache: 'true'
cache-key-prefix: 'cache-qt-macos'
env:
QT_VERSION: ${{ steps.dependencies.outputs.qtVersion != '' && steps.dependencies.outputs.qtVersion || '' }}

- name: 👷 Build ${{ env.HINT }}
shell: bash
run: |
# Build
cmake --preset macos-${{ env.BUILD_TYPE }} ${{ steps.dependencies.outputs.cmakeArgs }}
cmake --build --preset macos-${{ env.BUILD_TYPE }} --target package
env:
Expand Down
40 changes: 21 additions & 19 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
uses: actions/checkout@v5
with:
submodules: recursive
fetch-depth: 0 # Ensures all tags are fetched
fetch-depth: 0 # Ensures all tags are fetched

- name: 🔧 Prepare
shell: bash
Expand All @@ -55,21 +55,31 @@ jobs:
echo -n "+nightly$(date '+%Y%m%d')" >> .version
fi

- name: 💾 Download Pre-Build Dependencies
id: dependencies
uses: ./.github/actions/download-pre-built-deps
with:
os: 'windows'
architecture: ${{ matrix.os.architecture }}
build_type: ${{ inputs.event_name == 'pull_request' && 'relwithdebinfo' || 'release' }}

- name: 📥 Install Python
uses: actions/setup-python@v6
with:
python-version: '3.13.7'
architecture: ${{ matrix.os.architecture }}

- name: 📥 Install Qt
- name: 📥 Install Qt ${{ env.QT_VERSION }}
uses: jurplel/install-qt-action@v4
with:
version: '6.8.*'
version: ${{ env.QT_VERSION }}
target: 'desktop'
modules: 'qtserialport qtwebsockets'
cache: 'true'
cache-key-prefix: 'cache-qt-windows'
setup-python: 'false'
env:
QT_VERSION: ${{ steps.dependencies.outputs.qtVersion != '' && steps.dependencies.outputs.qtVersion || '' }}

- name: 📥 Install latest CMake and Ninja
uses: lukka/get-cmake@latest
Expand All @@ -85,39 +95,31 @@ jobs:
- name: Download/Install Inno Setup
run: |
echo "Checking pre-installation..."

set "ISCC_PATH=%programfiles(x86)%\Inno Setup 6\ISCC.exe"

if exist "%ISCC_PATH%" (
echo ::warning::Inno Setup is already installed
exit /b 0
)

echo "Downloading Inno Setup..."

set "_url_=https://jrsoftware.org/download.php/is.exe?site=1"
set "_file_=innosetup.exe"

curl -L -o "%tmp%\%_file_%" "%_url_%"

echo "Installing Inno Setup..."
"%tmp%\%_file_%" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-

if not exist "%ISCC_PATH%" (
echo "::error::Inno Setup installation failed"
exit 1
)

echo "Inno Setup installed successfully!"
shell: cmd

- name: 💾 Download Pre-Build Dependencies
id: dependencies
uses: ./.github/actions/download-pre-built-deps
with:
os: 'windows'
architecture: ${{ matrix.os.architecture }}
build_type: ${{ inputs.event_name == 'pull_request' && 'relwithdebinfo' || 'release' }}

- name: 👷 Build ${{ env.HINT }}
shell: cmd
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- HTTPS support for homeassistant LED devices (#1886)
- Hue Bridge - Use https and certificates for all API calls, support Bridge Pro (V3)
- Hue Bridge - Alternate certificate support
- Linux: New DRM/KMS screen grabber with plane-based capture - not feature complete yet
- Logging/Tracing: Introduced qlogging categories to enable dynamic tracing

---

### 🔧 Changed

- Hue Bridge - Wizard updates to support bridge-ids, overall code refactoring
- USB Grabber - Default hardware control properties are now applied when a new USB grabber is selected (avoids black images)
- Amlogic grabber - Support to switch between DRM & FB-DEV for CoreElec New Order version
- Web UI: Update panel title uses "Hyperion - <version>"; skip showing the "nightly" tag in releases list
- Screen grabbers: Commonized base with getDeviceName/getInputDeviceDetails; explicit constructors; improved error handling
- Framebuffer grabber: Internal cleanup, consistent device naming, safer mmap usage
- Logger internals: use smart pointers and clean-ups

- **Fixes:**
- UI - Language is not selectable (#1877)
- UI - Release were not shown on Update page
- UI - Fixes for input/format selection
- CEC-Handler is not stopped properly
- Qt-Grabber (Windows) does not apply pixel ratio (#1882) - _Thanks to @SolberLight_
- LED-devices are not retrying to establish connectivity, if supported by the device
Expand Down
Loading
Loading