@ -96,8 +96,10 @@ mat4 get_fit_view_transform(float widget_aspect_ratio, float frame_aspect_ratio)
CameraWidget : : CameraWidget ( std : : string stream_name , VisionStreamType type , bool zoom , QWidget * parent ) :
stream_name ( stream_name ) , requested_stream_type ( type ) , zoomed_view ( zoom ) , QOpenGLWidget ( parent ) {
setAttribute ( Qt : : WA_OpaquePaintEvent ) ;
qRegisterMetaType < std : : set < VisionStreamType > > ( " availableStreams " ) ;
QObject : : connect ( this , & CameraWidget : : vipcThreadConnected , this , & CameraWidget : : vipcConnected , Qt : : BlockingQueuedConnection ) ;
QObject : : connect ( this , & CameraWidget : : vipcThreadFrameReceived , this , & CameraWidget : : vipcFrameReceived , Qt : : QueuedConnection ) ;
QObject : : connect ( this , & CameraWidget : : vipcAvailableStreamsUpdated , this , & CameraWidget : : availableStreamsUpdated , Qt : : QueuedConnection ) ;
}
CameraWidget : : ~ CameraWidget ( ) {
@ -181,6 +183,10 @@ void CameraWidget::stopVipcThread() {
}
}
void CameraWidget : : availableStreamsUpdated ( std : : set < VisionStreamType > streams ) {
available_streams = streams ;
}
void CameraWidget : : updateFrameMat ( ) {
int w = width ( ) , h = height ( ) ;
@ -366,6 +372,14 @@ void CameraWidget::vipcThread() {
if ( ! vipc_client - > connected ) {
clearFrames ( ) ;
auto streams = VisionIpcClient : : getAvailableStreams ( stream_name , false ) ;
if ( streams . empty ( ) ) {
qWarning ( ) < < " VisionIPC connected, but no streams available " ;
QThread : : msleep ( 100 ) ;
continue ;
}
emit vipcAvailableStreamsUpdated ( streams ) ;
if ( ! vipc_client - > connect ( false ) ) {
QThread : : msleep ( 100 ) ;
continue ;
@ -400,4 +414,5 @@ void CameraWidget::vipcThread() {
void CameraWidget : : clearFrames ( ) {
std : : lock_guard lk ( frame_lock ) ;
frames . clear ( ) ;
available_streams . clear ( ) ;
}