Skip to content

Commit 27cfec6

Browse files
committed
Brightness (Linux): fix compatibility for ddcutil 2.0
1 parent ea85f40 commit 27cfec6

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/detection/brightness/brightness_linux.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,15 @@ static const char* detectWithBacklight(FFlist* result)
9090
#include "common/library.h"
9191
#include "util/mallocHelper.h"
9292

93+
#include <ddcutil_status_codes.h>
94+
#include <ddcutil_macros.h>
9395
#include <ddcutil_c_api.h>
9496

97+
// Try to be compatible with ddcutil 2.0
98+
#if DDCUTIL_VMAJOR >= 2
99+
double ddca_set_default_sleep_multiplier(double multiplier); // ddcutil 1.4
100+
#endif
101+
95102
static const char* detectWithDdcci(FFBrightnessOptions* options, FFlist* result)
96103
{
97104
FF_LIBRARY_LOAD(libddcutil, &instance.config.libDdcutil, "dlopen ddcutil failed", "libddcutil" FF_LIBRARY_EXTENSION, 5);
@@ -100,11 +107,14 @@ static const char* detectWithDdcci(FFBrightnessOptions* options, FFlist* result)
100107
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libddcutil, ddca_get_any_vcp_value_using_explicit_type)
101108
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libddcutil, ddca_free_any_vcp_value)
102109
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libddcutil, ddca_close_display)
103-
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(libddcutil, ddca_set_sleep_multiplier)
104110
libddcutil = NULL; // Don't dlclose libddcutil. See https://github.com/rockowitz/ddcutil/issues/330
105111

112+
__typeof__(&ddca_set_default_sleep_multiplier) ffddca_set_default_sleep_multiplier = dlsym(libddcutil, "ddca_set_default_sleep_multiplier");
113+
if (ffddca_set_default_sleep_multiplier)
114+
ffddca_set_default_sleep_multiplier(options->ddcciSleep / 40.0);
115+
106116
FF_AUTO_FREE DDCA_Display_Info_List* infoList = NULL;
107-
if (__builtin_expect(ffddca_get_display_info_list2(false, &infoList) < 0, 0))
117+
if (ffddca_get_display_info_list2(false, &infoList) < 0)
108118
return "ddca_get_display_info_list2(false, &infoList) failed";
109119

110120
if (infoList->ct == 0)
@@ -117,8 +127,6 @@ static const char* detectWithDdcci(FFBrightnessOptions* options, FFlist* result)
117127
DDCA_Display_Handle handle;
118128
if (ffddca_open_display2(display->dref, false, &handle) >= 0)
119129
{
120-
ffddca_set_sleep_multiplier(options->ddcciSleep / 40.0); // As of ddcutil 1.5, it sets the sleep multiplier for open display on the current thread
121-
122130
DDCA_Any_Vcp_Value* vcpValue = NULL;
123131
if (ffddca_get_any_vcp_value_using_explicit_type(handle, 0x10 /*brightness*/, DDCA_NON_TABLE_VCP_VALUE, &vcpValue) >= 0)
124132
{

0 commit comments

Comments
 (0)