diff options
author | Mattias Andrée <maandree@operamail.com> | 2014-02-21 14:50:00 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2014-02-21 14:50:00 +0100 |
commit | fc49478a082a300940878e5de72fa2055ca7b3b0 (patch) | |
tree | 2ec9eae42025aebb1415de2a4715f12c11f26c11 /src/blueshift_vidmode.pyx | |
parent | remove old variables (diff) | |
download | blueshift-fc49478a082a300940878e5de72fa2055ca7b3b0.tar.gz blueshift-fc49478a082a300940878e5de72fa2055ca7b3b0.tar.bz2 blueshift-fc49478a082a300940878e5de72fa2055ca7b3b0.tar.xz |
add vidmode support
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src/blueshift_vidmode.pyx')
-rw-r--r-- | src/blueshift_vidmode.pyx | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/blueshift_vidmode.pyx b/src/blueshift_vidmode.pyx new file mode 100644 index 0000000..7d29655 --- /dev/null +++ b/src/blueshift_vidmode.pyx @@ -0,0 +1,74 @@ +# -*- python -*- + +# Copyright © 2014 Mattias Andrée (maandree@member.fsf.org) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +cimport cython +from libc.stdlib cimport malloc, free + + +cdef extern int blueshift_vidmode_open(int use_screen) +cdef extern int blueshift_vidmode_apply(unsigned long long int use_crtcs, + unsigned short int* r_curve, + unsigned short int* g_curve, + unsigned short int* b_curve) +cdef extern void blueshift_vidmode_close() + + +def vidmode_open(int use_screen): + ''' + Start stage of colour curve control + + @param use_screen The screen to use + @return Zero on success + ''' + return blueshift_vidmode_open(use_screen) + + +def vidmode_apply(unsigned long long use_crtcs, r_curve, g_curve, b_curve): + ''' + Apply stage of colour curve control + + @param use_crtcs Mask of CRTC:s to use + @param r_curve:list<unsigned short int> The red colour curve + @param g_curve:list<unsigned short int> The green colour curve + @param b_curve:list<unsigned short int> The blue colour curve + @return Zero on success + ''' + cdef unsigned short int* r + cdef unsigned short int* g + cdef unsigned short int* b + r = <unsigned short int*>malloc(256 * 2) + g = <unsigned short int*>malloc(256 * 2) + b = <unsigned short int*>malloc(256 * 2) + if (r is NULL) or (g is NULL) or (b is NULL): + raise MemoryError() + for i in range(256): + r[i] = r_curve[i] & 0xFFFF + g[i] = g_curve[i] & 0xFFFF + b[i] = b_curve[i] & 0xFFFF + rc = blueshift_vidmode_apply(use_crtcs, r, g, b) + free(r) + free(g) + free(b) + return rc + + +def vidmode_close(): + ''' + Resource freeing stage of colour curve control + ''' + blueshift_vidmode_close() + |