@@ -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+
95102static 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