Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions msgq/visionipc/visionipc.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ cdef extern from "msgq/visionipc/visionipc_client.h":
int num_buffers
VisionBuf buffers[1]
VisionIpcClient(string, VisionStreamType, bool, void*, void*)
VisionBuf * recv(VisionIpcBufExtra *, int)
bool connect(bool)
bool is_connected()
VisionBuf * recv(VisionIpcBufExtra *, int) nogil
bool connect(bool) nogil
bool is_connected() nogil
@staticmethod
set[VisionStreamType] getAvailableStreams(string, bool)
set[VisionStreamType] getAvailableStreams(string, bool) nogil
24 changes: 19 additions & 5 deletions msgq/visionipc/visionipc_pyx.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ from cython.view cimport array
from libc.string cimport memcpy
from libc.stdint cimport uint32_t, uint64_t
from libcpp cimport bool
from libcpp.set cimport set as cpp_set
from libcpp.string cimport string

from .visionipc cimport VisionIpcServer as cppVisionIpcServer
from .visionipc cimport VisionIpcClient as cppVisionIpcClient
from .visionipc cimport VisionBuf as cppVisionBuf
from .visionipc cimport VisionStreamType as cppVisionStreamType
from .visionipc cimport VisionIpcBufExtra
from .visionipc cimport get_endpoint_name as cpp_get_endpoint_name

Expand Down Expand Up @@ -109,7 +111,8 @@ cdef class VisionIpcClient:
self.client = new cppVisionIpcClient(name, stream, conflate, NULL, NULL)

def __dealloc__(self):
del self.client
with nogil:
del self.client

@property
def width(self):
Expand Down Expand Up @@ -152,17 +155,28 @@ cdef class VisionIpcClient:
return self.extra.valid

def recv(self, int timeout_ms=100):
buf = self.client.recv(&self.extra, timeout_ms)
cdef cppVisionBuf * buf
with nogil:
buf = self.client.recv(&self.extra, timeout_ms)
if not buf:
return None
return VisionBuf.create(buf)

def connect(self, bool blocking):
return self.client.connect(blocking)
cdef bool result
with nogil:
result = self.client.connect(blocking)
return result

def is_connected(self):
return self.client.is_connected()
cdef bool connected
with nogil:
connected = self.client.is_connected()
return connected

@staticmethod
def available_streams(string name, bool block):
return cppVisionIpcClient.getAvailableStreams(name, block)
cdef cpp_set[cppVisionStreamType] streams
with nogil:
streams = cppVisionIpcClient.getAvailableStreams(name, block)
return streams
Loading