Skip to content

Commit

Permalink
Refactoring and new features. Migrate to C++ Smart Pointers (#691)
Browse files Browse the repository at this point in the history
* Refactoring. Migrate to C++ Smart Pointers. DirectX grabber hardware acceleration: pixel & vertex shaders, autodetect HDR mode. New WLED protocol. MQTT & ArtNet fixes. Automatic DB backup feature.

* Fix latest CodeQL issues

* Fix/update Boblight

* Designation: HyperHDR v20beta1
  • Loading branch information
awawa-dev authored Dec 21, 2023
1 parent 14d8157 commit 558c7e0
Show file tree
Hide file tree
Showing 581 changed files with 16,260 additions and 21,370 deletions.
2 changes: 1 addition & 1 deletion .github/actions/codeql/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ runs:
uses: advanced-security/filter-sarif@v1
with:
patterns: |
-dependencies/**
-external/**
input: sarif-results/${{ inputs.language }}.sarif
output: sarif-results/${{ inputs.language }}.sarif

Expand Down
10 changes: 7 additions & 3 deletions .github/workflows/push-master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
env:
USE_CACHE: "1"
RESET_CACHE: "0"
USE_CODEQL: "0"
USE_CODEQL: "1"
BUILD_ARCHIVES: ${{ startsWith(github.event.ref, 'refs/tags') && 1 || 0 }}

jobs:
Expand Down Expand Up @@ -36,6 +36,10 @@ jobs:
linuxVersion: jammy
dockerName: Ubuntu 22.04 LTS (x86_64)
platform: linux
- dockerImage: x86_64
linuxVersion: mantic
dockerName: Ubuntu 23.10 (x86_64)
platform: linux
- dockerImage: arm-32bit-armv6l
linuxVersion: bullseye
dockerName: Debian Bullseye (ARM 32-bit Raspberry Pi OS)
Expand Down Expand Up @@ -198,7 +202,7 @@ jobs:
runs-on: windows-2022
env:
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
QT_VERSION: 6.2.4
QT_VERSION: 6.5.3
steps:
- name: Checkout
uses: actions/checkout@v3
Expand Down Expand Up @@ -254,7 +258,7 @@ jobs:
analyze:
name: Analyze (CodeQL)
runs-on: ubuntu-latest
if: ( false )
if: ( true )
permissions:
actions: read
contents: read
Expand Down
6 changes: 1 addition & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,8 @@ compile_commands.json
sources/flatbufserver/hyperhdr_reply_generated.h
sources/flatbufserver/hyperhdr_request_generated.h

# lib-turbo
dependencies/jpeg-windows
dependencies/windows

# Network discovery library
dependencies/bonjour
external/windows

# Kdevelop project files
*.kdev*
Expand Down
27 changes: 12 additions & 15 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
[submodule "dependencies/external/rpi_ws281x"]
path = dependencies/external/rpi_ws281x
[submodule "external/rpi_ws281x"]
path = external/rpi_ws281x
url = https://github.com/jgarff/rpi_ws281x
branch = master
[submodule "dependencies/external/flatbuffers"]
path = dependencies/external/flatbuffers
[submodule "external/flatbuffers"]
path = external/flatbuffers
url = https://github.com/google/flatbuffers
branch = master
[submodule "dependencies/external/mbedtls"]
path = dependencies/external/mbedtls
[submodule "external/mbedtls"]
path = external/mbedtls
url = https://github.com/ARMmbed/mbedtls
[submodule "dependencies/external/libcec"]
path = dependencies/external/libcec
url = https://github.com/awawa-dev/libcec.git
[submodule "dependencies/external/qmqtt"]
path = dependencies/external/qmqtt
[submodule "external/qmqtt"]
path = external/qmqtt
url = https://github.com/emqx/qmqtt.git
ignore = dirty
[submodule "dependencies/external/xz"]
path = dependencies/external/xz
[submodule "external/xz"]
path = external/xz
url = https://github.com/tukaani-project/xz.git
[submodule "dependencies/external/mdns"]
path = dependencies/external/mdns
[submodule "external/mdns"]
path = external/mdns
url = https://github.com/mjansson/mdns.git
12 changes: 12 additions & 0 deletions 3RD_PARTY_LICENSES
Original file line number Diff line number Diff line change
Expand Up @@ -2584,6 +2584,18 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

=============================================
Simulate iOS toggle button with html and less
=============================================

Copyright (c) 2023 by coldsoul (https://codepen.io/coldsoul/pen/pbdvPa)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

==============================
svg-loader
==============================
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
- Refactoring. Migration to C++ smart pointers (v20 beta 🆕)
- Pixel and vertex shaders hardware acceleration for DX11 Windows grabber (v20 beta 🆕)
- Unified LED driver smoothing and clocking for better linear transition (v20 beta 🆕)
- WLED: migrate to Audio-Reactive-Led-Strip protocol. Overcome 490 LEDs limit (v20 beta 🆕)
- Automatic DB backup before upgrading (v20 beta 🆕)
- support for HyperSPI on Pico rp2040 boards (v20 beta 🆕)
- MQTT: auto-resume broken connection (v20 beta 🆕)
- MQTT: support for multiple JSON API commands in one MQTT request (v20 beta 🆕)
- ArtNet driver: toggle to prevent pixel color data split across multiple universes (v20 beta 🆕)
- Add video buffer memory caching to Pipewire grabber (v20 beta 🆕)
- Fix typo in LED strip name #670 Thanks @fluchfux (v20 beta 🆕)
- Pipewire DMA & EGL hardware support (Wayland/x11 grabber) #556 #556 (v20 beta 🆕)
- Upgrade Fedora 38 to 39, Ubuntu 23.04 to 23.10 #667 (v20 beta 🆕)
- Colorized logs #640 (v20 beta 🆕)
- Fix macOS build #638 #671 #672 (v20 beta 🆕)
- Update language file's. Thanks @AstaRom #617 (v20 beta 🆕)
- Make bonjour use logging utilities. Thanks @nurikk #529 (v20 beta 🆕)
- New interface: removed ancient Font Awesome 4 (so 2017...) Migrate to SVG: Bootstrap Icons and Google Material Icons/Symbols #605 (v20 beta 🆕)
- New device discovery service #605 (v20 beta 🆕)
- Stability improvements & bug fixing #605 (v20 beta 🆕)
Expand Down
132 changes: 77 additions & 55 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ SET ( DEFAULT_MQTT ON )
SET ( DEFAULT_STATIC_QT_PLUGINS OFF )
SET ( DEFAULT_PRECOMPILED_HEADERS ON )
SET ( DEFAULT_XZ ON )
SET ( DEFAULT_POWER_MANAGEMENT ON )

# Configure CCache if available
find_program(CCACHE_FOUND ccache)
Expand Down Expand Up @@ -179,16 +180,23 @@ elseif ( "${PLATFORM}" MATCHES "rpi" )
message(STATUS "Arm model info: ${ARM_MODEL}")

string(FIND "${ARM_MODEL}" "raspberry" IS_RASPBERRY)
message(STATUS "Check if Raspberry Pi (0-yes): ${IS_RASPBERRY}")
if(${IS_RASPBERRY} EQUAL -1)
set (IS_RASPBERRY_PI OFF)
else()
set (IS_RASPBERRY_PI ON)
endif()
message(STATUS "Check if Raspberry Pi: ${IS_RASPBERRY_PI}")
else()
message(WARNING "Model info not exists. Assuming that it is Raspberry Pi")
SET (IS_RASPBERRY 0)
SET (IS_RASPBERRY_PI ON)
endif()

if(${IS_RASPBERRY} EQUAL -1)
message(STATUS "This is not Raspberry Pi. Default compiler settings.")
if (IS_RASPBERRY_PI)
message(STATUS "Platform variant: Raspberry Pi")
SET ( DEFAULT_POWER_MANAGEMENT ON )
SET ( DEFAULT_PIPEWIRE ON )
else()
message(STATUS "Default compiler settings for Raspberry Pi.")
message(STATUS "Platform variant: generic ARM")
endif()

elseif ( "${PLATFORM}" STREQUAL "amlogic" )
Expand Down Expand Up @@ -236,13 +244,19 @@ if (DEFAULT_FRAMEBUFFER)
endif()
endif()

if (DEFAULT_PIPEWIRE)
find_package(Qt${Qt_VERSION} COMPONENTS DBus QUIET )
find_package(Qt${Qt_VERSION} COMPONENTS DBus QUIET )

if (UNIX AND NOT APPLE AND NOT Qt${Qt_VERSION}DBus_FOUND AND DEFAULT_POWER_MANAGEMENT)
message( WARNING "QT dbus library is required for Power Management support" )
SET ( DEFAULT_POWER_MANAGEMENT OFF )
endif()

if (DEFAULT_PIPEWIRE OR ENABLE_PIPEWIRE)
if (NOT Qt${Qt_VERSION}DBus_FOUND)
message( WARNING "QT dbus library is required for PipeWire/Portal support" )
SET ( DEFAULT_PIPEWIRE OFF )
else()

FIND_PACKAGE(PkgConfig REQUIRED)
pkg_check_modules(PIPEWIRE libpipewire-0.3)
if(NOT PIPEWIRE_FOUND OR NOT PIPEWIRE_INCLUDE_DIRS OR NOT PIPEWIRE_LIBRARIES)
message( WARNING "Pipewire >= 3.0 not found (did you install libpipewire-0.3-dev?). Disabling support for PipeWire software grabber.")
Expand Down Expand Up @@ -271,10 +285,11 @@ elseif(DEFAULT_CEC)
endif()

if(DEFAULT_CEC)
IF ((NOT EXISTS "/opt/vc/lib" OR NOT EXISTS "/opt/vc/include") AND
(NOT EXISTS "/usr/lib/arm-linux-gnueabihf/libvchostif.a" OR NOT EXISTS "/usr/include/vcinclude/vcore.h") AND
(NOT EXISTS "/usr/lib/aarch64-linux-gnu/libbcm_host.so.0" OR NOT EXISTS "/usr/include/interface/vchiq_arm/vchiq_if.h"))
message( WARNING "CEC Rpi mode support could be disabled. Could not find Rpi developers libs: arm32 > /opt/vc/lib,/opt/vc/include,/usr/lib/arm-linux-gnueabihf,/usr/include/vcinclude, aarch64 > /usr/lib/aarch64-linux-gnu/libbcm_host.so.0,/usr/include/interface/vchiq_arm/vchiq_if.h" )
FIND_PACKAGE(PkgConfig REQUIRED)
pkg_check_modules (CEC libcec>=6.0.0)
if(NOT CEC_FOUND)
message( WARNING "Could not find: libcec>=6. Disabling CEC support." )
SET ( DEFAULT_CEC OFF )
endif()
endif()

Expand Down Expand Up @@ -383,6 +398,9 @@ colorMe("ENABLE_CEC = " ${ENABLE_CEC})
option(ENABLE_MQTT "Enable MQTT" ${DEFAULT_MQTT})
colorMe("ENABLE_MQTT = " ${ENABLE_MQTT})

option(ENABLE_POWER_MANAGEMENT "Enable Power Management support" ${DEFAULT_POWER_MANAGEMENT})
colorMe("ENABLE_POWER_MANAGEMENT = " ${ENABLE_POWER_MANAGEMENT})

option(ENABLE_PROTOBUF "Enable PROTOBUF" ${DEFAULT_PROTOBUF})
colorMe("ENABLE_PROTOBUF = " ${ENABLE_PROTOBUF})

Expand Down Expand Up @@ -439,7 +457,6 @@ file(MAKE_DIRECTORY ${LIBRARY_OUTPUT_PATH})
file(MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})

# Add the project include directory as additional include path
include_directories(${CMAKE_SOURCE_DIR}/dependencies/include)
include_directories(${CMAKE_SOURCE_DIR}/include)

# enable C++11; MSVC doesn't have c++11 feature switch
Expand All @@ -460,6 +477,13 @@ if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
else()
message(STATUS "No support for C++11 detected. Compilation will most likely fail on your compiler")
endif()
else()
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("/std:c++20" COMPILER_SUPPORTS_CXX20)
if (COMPILER_SUPPORTS_CXX20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++20")
message(STATUS "Enabling MSVC support for c++20")
endif()
endif()

# Use GNU gold linker if available
Expand Down Expand Up @@ -523,51 +547,49 @@ endif()
add_definitions(${QT_DEFINITIONS})

# libjpegturbo
if ( ENABLE_V4L2 OR ENABLE_MF )
if(WIN32)
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows)
endif()
if(WIN32)
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/external/windows)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/external/windows)
endif()

if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows/libs4windows.zip OR
NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows/libjpeg-turbo_x64-windows)
message( STATUS "Downloading libraries for HyperHDR (Windows)")
file(DOWNLOAD https://github.com/awawa-dev/HyperHDR.libs.provider/releases/download/2023.08.07/libs4windows.zip
${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows/libs4windows.zip
STATUS WIN_LIBS_DOWNLOAD_STATUS
EXPECTED_HASH SHA256=2a0fc14eaad35d8cc36b262c8dcb501d1fac3a72d7bedcca51b71b60395c6c3f)
list(GET WIN_LIBS_DOWNLOAD_STATUS 0 WIN_LIBS_DOWNLOAD_STATUS_CODE)
if(WIN_LIBS_DOWNLOAD_STATUS_CODE AND NOT WIN_LIBS_DOWNLOAD_STATUS_CODE EQUAL 0)
file( REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows/libs4windows.zip )
message( FATAL_ERROR "Could not download libraries needed by HyperHDR (Windows)")
endif()
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/external/windows/libs4windows.zip OR
NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/external/windows/libjpeg-turbo_x64-windows)
message( STATUS "Downloading libraries for HyperHDR (Windows)")
file(DOWNLOAD https://github.com/awawa-dev/HyperHDR.libs.provider/releases/download/2023.08.07/libs4windows.zip
${CMAKE_CURRENT_SOURCE_DIR}/external/windows/libs4windows.zip
STATUS WIN_LIBS_DOWNLOAD_STATUS
EXPECTED_HASH SHA256=2a0fc14eaad35d8cc36b262c8dcb501d1fac3a72d7bedcca51b71b60395c6c3f)
list(GET WIN_LIBS_DOWNLOAD_STATUS 0 WIN_LIBS_DOWNLOAD_STATUS_CODE)
if(WIN_LIBS_DOWNLOAD_STATUS_CODE AND NOT WIN_LIBS_DOWNLOAD_STATUS_CODE EQUAL 0)
file( REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/external/windows/libs4windows.zip )
message( FATAL_ERROR "Could not download libraries needed by HyperHDR (Windows)")
endif()
endif()

execute_process(
COMMAND ${SEVENZIP_BIN} x ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows/libs4windows.zip -o${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows/ -aoa -y
RESULT_VARIABLE STATUS_EXTRACT
OUTPUT_VARIABLE OUTPUT1
)

if(STATUS_EXTRACT AND NOT STATUS_EXTRACT EQUAL 0)
message( FATAL_ERROR "Could not extract libraries for HyperHDR (Windows)")
else()
message( STATUS "Package of libraries for HyperHDR extracted (Windows)")
endif()
execute_process(
COMMAND ${SEVENZIP_BIN} x ${CMAKE_CURRENT_SOURCE_DIR}/external/windows/libs4windows.zip -o${CMAKE_CURRENT_SOURCE_DIR}/external/windows/ -aoa -y
RESULT_VARIABLE STATUS_EXTRACT
OUTPUT_VARIABLE OUTPUT1
)

set (TURBOJPEG_FOUND 1)
set (TURBOJPEG_LIBRARY_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows/libjpeg-turbo_x64-windows/bin")
set (TURBOJPEG_LINK_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows/libjpeg-turbo_x64-windows/lib/turbojpeg.lib")
set (TURBOJPEG_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/windows/libjpeg-turbo_x64-windows/include")
if(STATUS_EXTRACT AND NOT STATUS_EXTRACT EQUAL 0)
message( FATAL_ERROR "Could not extract libraries for HyperHDR (Windows)")
else()
FIND_PACKAGE(PkgConfig REQUIRED)
pkg_check_modules(TURBOJPEG REQUIRED libturbojpeg>=2.0)
endif ()
message( STATUS "Package of libraries for HyperHDR extracted (Windows)")
endif()

set (TURBOJPEG_FOUND 1)
set (TURBOJPEG_LIBRARY_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/windows/libjpeg-turbo_x64-windows/bin")
set (TURBOJPEG_LINK_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/external/windows/libjpeg-turbo_x64-windows/lib/turbojpeg.lib")
set (TURBOJPEG_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/external/windows/libjpeg-turbo_x64-windows/include")
else()
FIND_PACKAGE(PkgConfig REQUIRED)
pkg_check_modules(TURBOJPEG REQUIRED libturbojpeg>=2.0)
endif ()

message( STATUS "TURBOJPEG_LIBRARY_DIRS=${TURBOJPEG_LIBRARY_DIRS}")
message( STATUS "TURBOJPEG_LINK_LIBRARIES=${TURBOJPEG_LINK_LIBRARIES}")
message( STATUS "TURBOJPEG_INCLUDE_DIRS=${TURBOJPEG_INCLUDE_DIRS}")
endif()
message( STATUS "TURBOJPEG_LIBRARY_DIRS=${TURBOJPEG_LIBRARY_DIRS}")
message( STATUS "TURBOJPEG_LINK_LIBRARIES=${TURBOJPEG_LINK_LIBRARIES}")
message( STATUS "TURBOJPEG_INCLUDE_DIRS=${TURBOJPEG_INCLUDE_DIRS}")

# Embedded QT plugins
if (USE_STATIC_QT_PLUGINS)
Expand All @@ -589,7 +611,7 @@ if (USE_STATIC_QT_PLUGINS)
endif()

# Add the source/lib directories
add_subdirectory(dependencies)
add_subdirectory(external)
add_subdirectory(sources)

# Add resources directory
Expand All @@ -610,8 +632,8 @@ add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_D
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/packages.cmake)

# external targets
if (WIN32 AND TARGET precompiled_hyperhdr_headers AND TARGET apidoc AND TARGET flatbuffers AND TARGET flatc AND TARGET flathash AND TARGET mbedcrypto AND TARGET qmqtt AND TARGET liblzma)
set_target_properties(precompiled_hyperhdr_headers qmqtt apidoc flatbuffers flatc flathash lib mbedcrypto mbedtls mbedx509 resources uninstall liblzma PROPERTIES FOLDER ExternalLibsTargets)
if (WIN32 AND TARGET apidoc AND TARGET flatbuffers AND TARGET flatc AND TARGET mbedcrypto AND TARGET qmqtt AND TARGET liblzma)
set_target_properties(qmqtt apidoc flatbuffers flatc lib mbedcrypto mbedtls mbedx509 resources uninstall liblzma PROPERTIES FOLDER ExternalLibsTargets)
else()
set_target_properties(resources uninstall PROPERTIES FOLDER ExternalLibsTargets)
endif()
Expand Down
2 changes: 2 additions & 0 deletions HyperhdrConfig.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@
// Define to enable system mbedtls
#cmakedefine USE_SYSTEM_MBEDTLS_LIBS

#cmakedefine ENABLE_POWER_MANAGEMENT

// the hyperhdr build id string
#define HYPERHDR_BUILD_ID "${HYPERHDR_BUILD_ID}"
#define HYPERHDR_GIT_REMOTE "${HYPERHDR_GIT_REMOTE}"
Expand Down
4 changes: 1 addition & 3 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
MIT License

Copyright (c) 2023 awawa-dev

Project homesite: https://github.com/awawa-dev/HyperHDR
Copyright (c) 2020-2023 awawa-dev

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ Open source ambient lighting implementation for television and music sets based
* High portability on various ARM embedded platforms
* Video post-processing filter to eliminate LED flickering
* Modern interface using Bootstrap 5 and SVG icons
* Support for USB grabbers under Linux, Windows 10, macOS (x64/M1)
* Provides vital informations about your OS condition: CPU & RAM usage, CPU temperature, undervoltage detection, internal components performance including USB grabber and LED devices
* Support for USB grabbers under Linux, Windows 10, macOS (x64/M1)
* Pipewire/Portal hardware-accelerated screen capturer for Linux/Wayland
* DirectX screen grabber with pixel and vertex shader processing acceleration for Windows 10/11
* Dynamic video cache buffers. Now Rpi can process even 1080p120 NV12 stream without any size decimation
* Built-in audio visualization effects using **spectrum analysis**
* MQTT support for IoT
Expand Down
Loading

0 comments on commit 558c7e0

Please sign in to comment.