4 # -------------------------------------------------------------------
11 k_vg_msg_kvstring
= 11
14 # variable sized types
16 k_vg_msg_unsigned
= 0x80
17 k_vg_msg_signed
= 0xC0
20 k_vg_msg_array_count_bits
= 0x3C
21 k_vg_msg_type_size_bits
= 0x03
22 k_vg_msg_type_base_bits
= 0xC0
23 k_vg_msg_type_bits
= k_vg_msg_type_base_bits|k_vg_msg_type_size_bits
32 k_vg_msg_u8
= k_vg_msg_unsigned|k_vg_msg_8b
33 k_vg_msg_u16
= k_vg_msg_unsigned|k_vg_msg_16b
34 k_vg_msg_u32
= k_vg_msg_unsigned|k_vg_msg_32b
35 k_vg_msg_u64
= k_vg_msg_unsigned|k_vg_msg_64b
36 k_vg_msg_i8
= k_vg_msg_signed |k_vg_msg_8b
37 k_vg_msg_i16
= k_vg_msg_signed |k_vg_msg_16b
38 k_vg_msg_i32
= k_vg_msg_signed |k_vg_msg_32b
39 k_vg_msg_i64
= k_vg_msg_signed |k_vg_msg_64b
40 k_vg_msg_f32
= k_vg_msg_float |k_vg_msg_32b
41 k_vg_msg_f64
= k_vg_msg_float |k_vg_msg_64b
42 k_vg_msg_v2f
= k_vg_msg_float |k_vg_msg_32b |
(1<<2)
43 k_vg_msg_v3f
= k_vg_msg_float |k_vg_msg_32b |
(2<<2)
44 k_vg_msg_v4f
= k_vg_msg_float |k_vg_msg_32b |
(3<<2)
46 class vg_msg_cursor(Structure
):
48 _fields_
= [("co",c_uint32
),
52 class vg_msg(Structure
):
54 _fields_
= [("max",c_uint32
),
55 ("buf",POINTER(c_uint8
)),
56 ("cur",vg_msg_cursor
),
60 class vg_msg_cmd(Structure
):
62 _fields_
= [("code",c_uint8
),
63 ("key",POINTER(c_char
)),
64 ("key_djb2",c_uint32
),
66 ("value_djb2",c_uint32
),
77 ext
= '.dll' if os
.name
=='nt' else '.so'
78 path
= F
'{os.path.dirname(__file__)}/skaterift{ext}'
79 print( F
'Loading so: {path}' )
80 sr_lib
= cdll
.LoadLibrary( path
)
81 sr_lib
.qoi_encode_rgbaf32
.argtypes
= \
82 [ np
.ctypeslib
.ndpointer(dtype
=np
.float32
,\
84 flags
='C_CONTIGUOUS'), \
85 c_uint32
, c_uint32
, POINTER(c_int32
) ]
86 sr_lib
.qoi_encode_rgbaf32
.restype
= POINTER(c_uint8
)
87 sr_lib
.qoi_free
.argtypes
= [ POINTER(c_uint8
) ]
89 sr_lib
.vg_msg_wbuf
.argtypes
= [ POINTER(vg_msg
), POINTER(c_uint8
), c_uint32
]
90 sr_lib
.vg_msg_rbuf
.argtypes
= [ POINTER(vg_msg
), POINTER(c_uint8
), c_uint32
]
91 sr_lib
.vg_msg_wstr
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
) ]
92 sr_lib
.vg_msg_rstr
.argtypes
= [ POINTER(vg_msg
), POINTER(c_uint32
) ]
93 sr_lib
.vg_msg_rstr
.restype
= POINTER(c_char
)
94 sr_lib
.vg_msg_frame
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
) ]
95 sr_lib
.vg_msg_end_frame
.argtypes
= [ POINTER(vg_msg
) ]
96 sr_lib
.vg_msg_wkvstr
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
), POINTER(c_char
) ]
97 sr_lib
.vg_msg_wkvbin
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
), POINTER(c_uint8
), c_uint32
]
98 sr_lib
.vg_msg_wkvnum
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
), c_uint8
, c_uint8
, c_void_p
]
100 sr_lib
.vg_msg_cmd_array_count
.argtypes
= [ c_uint8
]
101 sr_lib
.vg_msg_cmd_array_count
.restype
= c_uint32
102 sr_lib
.vg_msg_cmd_type_size
.argtypes
= [ c_uint8
]
103 sr_lib
.vg_msg_cmd_type_size
.restype
= c_uint32
104 sr_lib
.vg_msg_cmd_bytecount
.argtypes
= [ c_uint8
]
105 sr_lib
.vg_msg_cmd_bytecount
.restype
= c_uint32
106 sr_lib
.vg_msg_count_bits
.argtypes
= [ c_uint32
]
107 sr_lib
.vg_msg_count_bits
.restype
= c_uint8
109 sr_lib
.vg_msg_init
.argtypes
= [ POINTER(vg_msg
), POINTER(c_uint8
), c_uint32
]
110 sr_lib
.vg_msg_next
.argtypes
= [ POINTER(vg_msg
), POINTER(vg_msg_cmd
) ]
111 sr_lib
.vg_msg_next
.restype
= c_int32
112 sr_lib
.vg_msg_skip_frame
.argtypes
= [ POINTER(vg_msg
) ]
113 sr_lib
.vg_msg_skip_frame
.restype
= c_int32
114 sr_lib
.vg_msg_seekframe
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
) ]
115 sr_lib
.vg_msg_seekframe
.restype
= c_int32
116 sr_lib
.vg_msg_cast_to_u64
.argtypes
= [ POINTER(c_char
), c_uint8
, c_uint8
]
117 sr_lib
.vg_msg_cast_to_u64
.restype
= c_uint64
118 sr_lib
.vg_msg_cast_to_i64
.argtypes
= [ POINTER(c_char
), c_uint8
, c_uint8
]
119 sr_lib
.vg_msg_cast_to_i64
.restype
= c_int64
120 sr_lib
.vg_msg_cast_to_f64
.argtypes
= [ POINTER(c_char
), c_uint8
, c_uint8
]
121 sr_lib
.vg_msg_cast_to_f64
.restype
= c_double
122 sr_lib
.vg_msg_cast
.argtypes
= [ POINTER(c_char
), c_uint8
, c_void_p
, c_uint8
]
123 sr_lib
.vg_msg_getkvcmd
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
), POINTER(vg_msg_cmd
) ]
124 sr_lib
.vg_msg_getkvcmd
.restype
= c_int32
125 sr_lib
.vg_msg_getkvintg
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
), c_uint8
, c_void_p
, c_void_p
]
126 sr_lib
.vg_msg_getkvintg
.restype
= c_int32
127 sr_lib
.vg_msg_getkvstr
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
) ]
128 sr_lib
.vg_msg_getkvstr
.restype
= POINTER(c_char
)
129 sr_lib
.vg_msg_getkvvecf
.argtypes
= [ POINTER(vg_msg
), POINTER(c_char
), c_uint8
, c_void_p
, c_void_p
]
130 sr_lib
.vg_msg_getkvvecf
.restype
= c_int32
131 sr_lib
.vg_msg_print
.argtypes
= [ POINTER(vg_msg
), c_uint32
]
134 def qoi_encode( img
):
136 print(F
"{' ':<30}",end
='\r')
137 print(F
"[QOI] Encoding {img.name}.qoi[{img.size[0]},{img.size[1]}]",end
='\r')
140 crab
= np
.asarray(img
.pixels
, dtype
=np
.float32
)
142 comped
= sr_lib
.qoi_encode_rgbaf32( crab
, img
.size
[0], img
.size
[1], byref(length
) )
144 data
= bytearray(comped
[:length
.value
])
145 bytearray_align_to( data
, 16, b
'\x00' )
146 sr_lib
.qoi_free( comped
)