@@ -92,88 +92,45 @@ static const char* detectWithBacklight(FFlist* result)
9292
9393#include <ddcutil_c_api.h>
9494
95- typedef struct DdcutilData
96- {
97- FF_LIBRARY_SYMBOL (ddca_open_display2 )
98- FF_LIBRARY_SYMBOL (ddca_get_any_vcp_value_using_explicit_type )
99- FF_LIBRARY_SYMBOL (ddca_free_any_vcp_value )
100- FF_LIBRARY_SYMBOL (ddca_close_display )
101- } DdcutilData ;
102-
103- static void detectWithDdcciImpl (DdcutilData * data , FFlist * result , DDCA_Display_Info * dinfo )
104- {
105- DDCA_Display_Handle handle ;
106- if (data -> ffddca_open_display2 (dinfo -> dref , false, & handle ) >= 0 )
107- {
108- DDCA_Any_Vcp_Value * vcpValue = NULL ;
109- if (data -> ffddca_get_any_vcp_value_using_explicit_type (handle , 0x10 /*brightness*/ , DDCA_NON_TABLE_VCP_VALUE , & vcpValue ) >= 0 )
110- {
111- assert (vcpValue -> value_type == DDCA_NON_TABLE_VCP_VALUE );
112- int current = VALREC_CUR_VAL (vcpValue ), max = VALREC_MAX_VAL (vcpValue );
113- data -> ffddca_free_any_vcp_value (vcpValue );
114-
115- FFBrightnessResult * brightness = (FFBrightnessResult * ) ffListAdd (result );
116- brightness -> max = max ;
117- brightness -> min = 0 ;
118- brightness -> current = current ;
119- ffStrbufInitS (& brightness -> name , dinfo -> model_name );
120- }
121- data -> ffddca_close_display (handle );
122- }
123- }
124-
12595static const char * detectWithDdcci (FFlist * result )
12696{
127- FF_LIBRARY_LOAD (libddcutil , & instance .config .libDdcutil , "dlopen ddcutil failed" , "libddcutil" FF_LIBRARY_EXTENSION , 5 )
97+ FF_LIBRARY_LOAD (libddcutil , & instance .config .libDdcutil , "dlopen ddcutil failed" , "libddcutil" FF_LIBRARY_EXTENSION , 5 );
12898 FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_get_display_info_list2 )
129- FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_get_display_info )
130- FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_create_busno_display_identifier )
131- FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_create_display_ref )
132- FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_free_display_identifier )
133- FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_free_display_ref )
134-
135- DdcutilData ddcutilData ;
136- FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (libddcutil , ddcutilData , ddca_open_display2 )
137- FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (libddcutil , ddcutilData , ddca_get_any_vcp_value_using_explicit_type )
138- FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (libddcutil , ddcutilData , ddca_free_any_vcp_value )
139- FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE (libddcutil , ddcutilData , ddca_close_display )
99+ FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_open_display2 )
100+ FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_get_any_vcp_value_using_explicit_type )
101+ FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_free_any_vcp_value )
102+ FF_LIBRARY_LOAD_SYMBOL_MESSAGE (libddcutil , ddca_close_display )
140103 libddcutil = NULL ; // Don't dlclose libddcutil. See https://github.com/rockowitz/ddcutil/issues/330
141104
142- if (instance .config .brightness .busNos .length )
143- {
144- FF_SUPPRESS_IO ();
145-
146- FF_LIST_FOR_EACH (int , busno , instance .config .brightness .busNos )
147- {
148- DDCA_Display_Identifier did ;
149- if (ffddca_create_busno_display_identifier (* busno , & did ) >= 0 )
150- {
151- DDCA_Display_Ref dref ;
152- if (ffddca_create_display_ref (did , & dref ) >= 0 )
153- {
154- FF_AUTO_FREE DDCA_Display_Info * dinfo = NULL ;
155- if (ffddca_get_display_info (dref , & dinfo ) >= 0 )
156- detectWithDdcciImpl (& ddcutilData , result , dinfo );
157- ffddca_free_display_ref (dref );
158- }
159-
160- ffddca_free_display_identifier (did );
161- }
162- }
163-
164- return NULL ;
165- }
166-
167105 FF_AUTO_FREE DDCA_Display_Info_List * infoList = NULL ;
168- if (ffddca_get_display_info_list2 (false, & infoList ) < 0 )
106+ if (__builtin_expect ( ffddca_get_display_info_list2 (false, & infoList ) < 0 , 0 ) )
169107 return "ddca_get_display_info_list2(false, &infoList) failed" ;
170108
171109 if (infoList -> ct == 0 )
172110 return "No DDC/CI compatible displays found" ;
173111
174112 for (int index = 0 ; index < infoList -> ct ; ++ index )
175113 {
176- detectWithDdcciImpl (& ddcutilData , result , & infoList -> info [index ]);
114+ const DDCA_Display_Info * display = & infoList -> info [index ];
115+
116+ DDCA_Display_Handle handle ;
117+ if (ffddca_open_display2 (display -> dref , false, & handle ) >= 0 )
118+ {
119+ DDCA_Any_Vcp_Value * vcpValue = NULL ;
120+ if (ffddca_get_any_vcp_value_using_explicit_type (handle , 0x10 /*brightness*/ , DDCA_NON_TABLE_VCP_VALUE , & vcpValue ) >= 0 )
121+ {
122+ assert (vcpValue -> value_type == DDCA_NON_TABLE_VCP_VALUE );
123+ int current = VALREC_CUR_VAL (vcpValue ), max = VALREC_MAX_VAL (vcpValue );
124+ ffddca_free_any_vcp_value (vcpValue );
125+
126+ FFBrightnessResult * brightness = (FFBrightnessResult * ) ffListAdd (result );
127+ brightness -> max = max ;
128+ brightness -> min = 0 ;
129+ brightness -> current = current ;
130+ ffStrbufInitS (& brightness -> name , display -> model_name );
131+ }
132+ ffddca_close_display (handle );
133+ }
177134 }
178135
179136 return NULL ;
0 commit comments