Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 4 additions & 4 deletions BUILDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
```console
sudo apt-get update

sudo apt-get install build-essential cmake flatbuffers-compiler git libasound2-dev libayatana-appindicator3-dev libegl-dev libflatbuffers-dev libftdi1-dev libgl-dev libglvnd-dev libgtk-3-dev liblzma-dev libpipewire-0.3-dev libssl-dev libsystemd-dev libturbojpeg0-dev libusb-1.0-0-dev libx11-dev libzstd-dev ninja-build patchelf pkg-config python3 qt6-serialport-dev qt6-base-dev unzip wget
sudo apt-get install build-essential cmake flatbuffers-compiler git libasound2-dev libayatana-appindicator3-dev libegl-dev libflatbuffers-dev libftdi1-dev libgl-dev libglvnd-dev libgtk-3-dev liblzma-dev libpipewire-0.3-dev libssl-dev libsystemd-dev libturbojpeg0-dev libusb-1.0-0-dev libx11-dev libzstd-dev ninja-build patchelf pkg-config python3 qt6-serialport-dev qt6-base-dev unzip wget chrpath
```

For Raspberry Pi CEC support (optional)
Expand All @@ -25,7 +25,7 @@ sudo apt-get install libcec-dev libp8-platform-dev libudev-dev
### Fedora

```console
sudo dnf -y install alsa-lib-devel chrpath cmake fedora-packager flatbuffers-compiler flatbuffers-devel gcc gcc-c++ git gtk3-devel libX11-devel libayatana-appindicator-gtk3-devel libftdi-c++-devel libglvnd-devel libusb1-devel libzstd-devel mesa-libEGL-devel mesa-libGL-devel ninja-build openssl-devel pipewire-devel pkg-config qt6-qtbase-devel qt6-qtserialport-devel systemd-devel turbojpeg-devel unzip wget xz-devel
sudo dnf -y install alsa-lib-devel chrpath cmake fedora-packager flatbuffers-compiler flatbuffers-devel gcc gcc-c++ git gtk3-devel libX11-devel libayatana-appindicator-gtk3-devel libftdi-c++-devel libglvnd-devel libusb1-devel libzstd-devel mesa-libEGL-devel mesa-libGL-devel ninja-build openssl-devel pipewire-devel pkg-config qt6-qtbase-devel qt6-qtserialport-devel systemd-devel turbojpeg-devel unzip wget xz-devel chrpath

```

Expand All @@ -34,7 +34,7 @@ sudo dnf -y install alsa-lib-devel chrpath cmake fedora-packager flatbuffers-com
```console
sudo pacman -Syy

sudo pacman -S alsa-lib base-devel bash binutils chrpath cmake dpkg fakeroot flatbuffers freetds git gtk3 libayatana-appindicator libfbclient libftdi libglvnd libjpeg-turbo libx11 mariadb-libs mesa ninja openssl pipewire pkgfile postgresql-libs python qt6-base qt6-serialport sdbus-cpp systemd-libs unzip wayland wget xz
sudo pacman -S alsa-lib base-devel bash binutils chrpath cmake dpkg fakeroot flatbuffers freetds git gtk3 libayatana-appindicator libfbclient libftdi libglvnd libjpeg-turbo libx11 mariadb-libs mesa ninja openssl pipewire pkgfile postgresql-libs python qt6-base qt6-serialport sdbus-cpp systemd-libs unzip wayland wget xz chrpath
```

### Windows
Expand Down Expand Up @@ -223,4 +223,4 @@ Use -D prefix when configuring the build.
* USE_SYSTEM_NANOPB_LIBS = ON | OFF, prefer system nanopb libs
* USE_SYSTEM_STB_LIBS = ON | OFF, prefer system stb libs
* USE_STATIC_QT_PLUGINS = ON | OFF, embed static QT-plugins into the app
* USE_STANDARD_INSTALLER_NAME = ON | OFF, use standard Linux package naming
* USE_STANDARD_INSTALLER_NAME = ON | OFF, use standard Linux package naming
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
- Fix: Initial smoothing surge after period of static video input (#1410) - fix for v22beta1 🆕
- Fix: Minimum brightness preservation in YUV and Hybrid-Inertia smoothing modes (#1410) - fix for v22beta1 🆕
- upgrades old style format logging (with %) to c++20 format in some places (#1410) - fix for v22beta1 🆕
- restores custom user RGB order at the start (#1410) - fix for v22beta1 🆕
- restores compatibility with Qt5.15 (#1410) - fix for v22beta1 🆕
- Improved state management of the software grabber during sleep and monitor‑suspend events (#1410) - fix for v22beta1 🆕
- PipeWire is particularly sensitive to sessions resuming too early after such events and, despite having provided a saved session token, would display a new source select dialog after resume when screen‑lock‑after‑suspend was enabled
- Set disableOnLocked option enabled by default, because software grabbers for ex. Pipewire wont function properly without it (#1410) - fix for v22beta1 🆕
- Fix translation resources
- Infinite Color Engine: new anti-flickering filter in the smoothing configuration (#1410) - fix for v22beta1 🆕
- Implements an anti-flickering filter that minimizes quantization jitter on 8-bit-per-channel drivers (24-bit RGB). Deep color capable drivers (like Philips Hue using entertainment mode) are bypassed as they don't suffer from LSB oscillation.
- Improved handshake stability connecting to Philips Hue bridge using OpenSSL 3.2+ (#1410) - fix for v22beta1 🆕
- Infinite Color Engine - Breaking 24-bit Limits (#1261) - v22beta1 🆕
- Floating-Point Precision: All color computations use high-precision floating-point arithmetic, eliminating cumulative rounding errors for more accurate results
- Linear sRGB Accuracy: Core color transformations are processed in linear sRGB space, ensuring physically correct and consistent light reproduction
Expand Down
6 changes: 2 additions & 4 deletions cmake/installers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,7 @@ macro(DeployUnix TARGET)
install(CODE "set(TARGET_FILE \"${TARGET_FILE}\")" COMPONENT "HyperHDR")
install(CODE "set(PREREQUISITE_LIBS \"${PREREQUISITE_LIBS}\")" COMPONENT "HyperHDR")
install(CODE "set(QT_PLUGINS_DIR \"${QT_PLUGINS_DIR}\")" COMPONENT "HyperHDR")
install(CODE "set(TEMP_RPATH_DIR \"${CMAKE_CURRENT_BINARY_DIR}/temp_rpath_fix\")" COMPONENT "HyperHDR")

install(CODE [[

Expand Down Expand Up @@ -370,8 +371,6 @@ macro(DeployUnix TARGET)
"ld-"
"libasound"
"libblkid"
"libbrotlicommon"
"libbrotlidec"
"libffi"
"libgio-2"
"libgmodule-2"
Expand Down Expand Up @@ -461,8 +460,7 @@ macro(DeployUnix TARGET)
endif()
endforeach()

# Copy dependencies to 'share/hyperhdr/lib/external'
set(TEMP_RPATH_DIR "${CMAKE_CURRENT_BINARY_DIR}/temp_rpath_fix")
# Copy dependencies to 'share/hyperhdr/lib/external'
file(MAKE_DIRECTORY ${TEMP_RPATH_DIR})
foreach(PREREQUISITE_LIB ${PREREQUISITE_LIBS})
set(FILE_TO_INSTALL ${PREREQUISITE_LIB})
Expand Down
2 changes: 1 addition & 1 deletion include/base/HyperHdrInstance.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ public slots:
void SignalAdjustmentUpdated(QJsonArray newConfig);
void SignalFinalOutputColorsReady(SharedOutputColors nonlinearRgbColors);
void SignalSmoothingClockTick();
void SignalSmoothingRestarted(int suggestedInterval);
void SignalSmoothingRestarted(int suggestedInterval, bool antiflickeringfilter);
void SignalRawColorsChanged(QVector<ColorRgb> ledValues);
void SignalInstanceJustStarted();
void SignalColorIsSet(ColorRgb color, int duration);
Expand Down
3 changes: 2 additions & 1 deletion include/infinite-color-engine/CoreInfiniteEngine.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@ class CoreInfiniteEngine : public QObject
Q_OBJECT

public:
CoreInfiniteEngine(HyperHdrInstance* hyperhdr);
CoreInfiniteEngine(HyperHdrInstance* hyperhdr, LedString::ColorOrder colorOrder);
~CoreInfiniteEngine() = default;

int getSuggestedInterval();
bool getAntiFlickeringFilterState();
unsigned addCustomSmoothingConfig(unsigned cfgID, int settlingTime_ms, double ledUpdateFrequency_hz, bool pause);
void setCurrentSmoothingConfigParams(unsigned cfgID);
void incomingColors(std::vector<linalg::aliases::float3>&& _ledBuffer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class InfiniteExponentialInterpolator : public InfiniteInterpolator

void setTargetColors(std::vector<linalg::aliases::float3>&& new_rgb_targets, float startTimeMs, bool debug = false) override;
void updateCurrentColors(float currentTimeMs) override;
SharedOutputColors getCurrentColors() override;
SharedOutputColors getCurrentColors(float minBrightness = 0.f) override;

void setTransitionDuration(float durationMs) override;

Expand Down
2 changes: 1 addition & 1 deletion include/infinite-color-engine/InfiniteHybridInterpolator.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class InfiniteHybridInterpolator : public InfiniteInterpolator

void setTargetColors(std::vector<linalg::aliases::float3>&& new_rgb_to_yuv_targets, float startTimeMs, bool debug = false) override;
void updateCurrentColors(float currentTimeMs) override;
SharedOutputColors getCurrentColors() override;
SharedOutputColors getCurrentColors(float minBrightness = 0.f) override;

void setTransitionDuration(float durationMs) override;
void setSpringiness(float stiffness, float damping) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class InfiniteHybridRgbInterpolator : public InfiniteInterpolator

void setTargetColors(std::vector<linalg::aliases::float3>&& new_rgb_targets, float startTimeMs, bool debug = false) override;
void updateCurrentColors(float currentTimeMs) override;
SharedOutputColors getCurrentColors() override;
SharedOutputColors getCurrentColors(float minBrightness = 0.f) override;

void setTransitionDuration(float durationMs) override;
void setSpringiness(float stiffness, float damping) override;
Expand Down
2 changes: 1 addition & 1 deletion include/infinite-color-engine/InfiniteInterpolator.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class InfiniteInterpolator {

virtual void setTargetColors(std::vector<linalg::aliases::float3>&& new_rgb_targets, float startTimeMs, bool debug) = 0;
virtual void updateCurrentColors(float currentTimeMs) = 0;
virtual SharedOutputColors getCurrentColors() = 0;
virtual SharedOutputColors getCurrentColors(float minBrightness) = 0;

virtual void setTransitionDuration(float /*durationMs*/) {};
virtual void setSpringiness(float /*stiffness*/, float /*damping*/) {};
Expand Down
3 changes: 2 additions & 1 deletion include/infinite-color-engine/InfiniteProcessing.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class InfiniteProcessing : public QObject
};

InfiniteProcessing();
InfiniteProcessing(const QJsonDocument& config, const LoggerName& _log);
InfiniteProcessing(const QJsonDocument& config, LedString::ColorOrder colorOrder, const LoggerName& _log);
~InfiniteProcessing() = default;

void setProcessingEnabled(bool enabled);
Expand Down Expand Up @@ -107,6 +107,7 @@ class InfiniteProcessing : public QObject
void setPowerLimit(float powerLimit);
void applyPowerLimit(std::vector<linalg::vec<float, 3>>& linearRgbColors) const;

std::optional<float> getMinimalBacklight();
void setMinimalBacklight(float minimalLevel, bool coloreBacklight);
void applyMinimalBacklight(linalg::vec<float, 3>& color) const;

Expand Down
2 changes: 1 addition & 1 deletion include/infinite-color-engine/InfiniteRgbInterpolator.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class InfiniteRgbInterpolator : public InfiniteInterpolator

void setTargetColors(std::vector<linalg::aliases::float3>&& new_rgb_targets, float startTimeMs, bool debug = false) override;
void updateCurrentColors(float currentTimeMs) override;
SharedOutputColors getCurrentColors() override;
SharedOutputColors getCurrentColors(float minBrightness = 0.f) override;

void setTransitionDuration(float durationMs) override;
void setSmoothingFactor(float factor) override;
Expand Down
5 changes: 4 additions & 1 deletion include/infinite-color-engine/InfiniteSmoothing.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,12 @@ class InfiniteSmoothing : public QObject
void setEnable(bool enable);
bool isEnabled() const;

void incomingColors(std::vector<linalg::aliases::float3>&& nonlinearRgbColors);
void incomingColors(std::vector<linalg::aliases::float3>&& nonlinearRgbColors, std::optional<float> minimalBacklight);
unsigned addCustomSmoothingConfig(unsigned cfgID, int settlingTime_ms, double ledUpdateFrequency_hz, bool pause);
void setCurrentSmoothingConfigParams(unsigned cfgID);
bool selectConfig(unsigned cfgId);
int getSuggestedInterval();
bool getAntiFlickeringFilterState();

static constexpr auto SMOOTHING_EFFECT_CONFIGS_START = 1;

Expand Down Expand Up @@ -92,4 +93,6 @@ private slots:
bool _infoInput;
int _coolDown;
long long _lastSentFrame;
bool _antiFlickeringFilter;
float _minimalBacklight;
};
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class InfiniteStepperInterpolator : public InfiniteInterpolator

void setTargetColors(std::vector<linalg::aliases::float3>&& new_rgb_targets, float startTimeMs, bool debug = false) override;
void updateCurrentColors(float currentTimeMs) override;
SharedOutputColors getCurrentColors() override;
SharedOutputColors getCurrentColors(float minBrightness = 0.f) override;

void setTransitionDuration(float durationMs) override;

Expand Down
2 changes: 1 addition & 1 deletion include/infinite-color-engine/InfiniteYuvInterpolator.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class InfiniteYuvInterpolator : public InfiniteInterpolator

void setTargetColors(std::vector<linalg::aliases::float3>&& new_rgb_to_yuv_targets, float startTimeMs, bool debug = false) override;
void updateCurrentColors(float currentTimeMs) override;
SharedOutputColors getCurrentColors() override;
SharedOutputColors getCurrentColors(float minBrightness = 0.f) override;

void setTransitionDuration(float durationMs) override;
void setMaxLuminanceChangePerFrame(float maxChangePerStep) override;
Expand Down
4 changes: 3 additions & 1 deletion include/led-drivers/LedDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public slots:
virtual bool switchOn();
virtual bool switchOff();
void blinking(QJsonObject params);
void smoothingRestarted(int newSmoothingInterval);
void smoothingRestarted(int newSmoothingInterval, bool antiflickeringfilter);
int hasLedClock();
void pauseRetryTimer(bool mode);

Expand Down Expand Up @@ -125,6 +125,7 @@ public slots:
bool _isOn;
bool _isDeviceInError;

bool _antiFlickeringFilter;
int _maxRetry;
int _currentRetry;
QString _customInfo;
Expand All @@ -145,6 +146,7 @@ protected slots:
std::atomic_bool _isRefreshEnabled;
std::atomic_bool _newFrame2Send;
SharedOutputColors _lastLedValues;
SharedOutputColors _lastFinityLedValues;

struct LedStats
{
Expand Down
2 changes: 1 addition & 1 deletion include/led-drivers/LedDeviceWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class LedDeviceWrapper : public QObject
explicit LedDeviceWrapper(HyperHdrInstance* ownerInstance);
virtual ~LedDeviceWrapper();

void createLedDevice(QJsonObject config, int smoothingInterval, bool disableOnStartup);
void createLedDevice(QJsonObject config, int smoothingInterval, bool antiFlickeringFilter, bool disableOnStartup);
static QJsonObject getLedDeviceSchemas();
QString getActiveDeviceType() const;
bool enabled() const;
Expand Down
2 changes: 2 additions & 0 deletions include/precompiled_hyperhdr_headers/AllHeaders_pch.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@
#include <iomanip>
#include <optional>
#include <type_traits>
#include <concepts>
#include <tuple>

#if __has_include(<format>)
#include <format>
Expand Down
Loading