diff options
-rw-r--r-- | LIMITATIONS | 1 | ||||
-rw-r--r-- | src/blueshift_drm.pyx | 8 | ||||
-rw-r--r-- | src/monitor.py | 15 |
3 files changed, 21 insertions, 3 deletions
diff --git a/LIMITATIONS b/LIMITATIONS index 44a3c63..ab9989d 100644 --- a/LIMITATIONS +++ b/LIMITATIONS @@ -15,6 +15,7 @@ VidMode can only modify the primary monitor. Blueshift only support up to 64 monitors (per screen?). If you have more please send be a photo of your awesome setup and I will make sure to fix this. + (This limitation does not exist under TTY using DRM.) Blueshift requires adjustable gamma ramps. It is very rare that video drivers do not support this. diff --git a/src/blueshift_drm.pyx b/src/blueshift_drm.pyx index 001ec41..3576744 100644 --- a/src/blueshift_drm.pyx +++ b/src/blueshift_drm.pyx @@ -157,12 +157,12 @@ def drm_get_gamma_ramps(int connection, int crtc_index, int gamma_size): return None -def drm_set_gamma_ramps(int connection, int crtc_index, int gamma_size, r_curve, g_curve, b_curve): +def drm_set_gamma_ramps(int connection, crtc_indices, int gamma_size, r_curve, g_curve, b_curve): ''' Set the gamma ramps of the of a monitor @param connection The identifier for the connection to the card - @param crtc_index The index of the CRTC to read from + @param crtc_index:list<int> The index of the CRTC to read from @param gamma_size The size a gamma ramp @param r_curve:list<unsigned short int> The red gamma ramp @param g_curve:list<unsigned short int> The green gamma ramp @@ -181,7 +181,9 @@ def drm_set_gamma_ramps(int connection, int crtc_index, int gamma_size, r_curve, r[i] = r_curve[i] & 0xFFFF g[i] = g_curve[i] & 0xFFFF b[i] = b_curve[i] & 0xFFFF - rc = blueshift_drm_set_gamma_ramps(connection, crtc_index, gamma_size, r, g, b) + rc = 0 + for crtc_index in crtc_indices: + rc |= blueshift_drm_set_gamma_ramps(connection, crtc_index, gamma_size, r, g, b) free(r) free(g) free(b) diff --git a/src/monitor.py b/src/monitor.py index 01c70d0..3947435 100644 --- a/src/monitor.py +++ b/src/monitor.py @@ -197,6 +197,21 @@ def vidmode(*crtcs, screen = 0): pass # Happens on exit by TERM signal +def drm(*crtcs, card = 0): + ''' + Applies colour curves using DRM + + @param crtcs:*int The CRT controllers to use, all are used if none are specified + @param card:int The card that the monitors belong to + ''' + connection = drm_manager.open_card(card) + (R_curve, G_curve, B_curve) = translate_to_integers() + try: + drm_set_gamma_ramps(connection, list(crtcs), i_size, R_curve, G_curve, B_curve) + except OverflowError: + pass # Happens on exit by TERM signal + + def print_curves(*crtcs, screen = 0, compact = False): ''' Prints the curves to stdout |