From 2aa41c9c3feecf0ba7bc3a6774c997a42965205d Mon Sep 17 00:00:00 2001 From: Xiaoqiang Wang Date: Sat, 21 Oct 2023 22:08:53 +0200 Subject: [PATCH 1/3] destroy stream object before camera object --- aravisApp/src/ADAravis.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/aravisApp/src/ADAravis.cpp b/aravisApp/src/ADAravis.cpp index 6910fd3..15a6971 100644 --- a/aravisApp/src/ADAravis.cpp +++ b/aravisApp/src/ADAravis.cpp @@ -166,6 +166,7 @@ class ADAravis : public ADGenICam, epicsThreadRunable { /** Used by epicsAtExit */ ArvCamera *camera; + ArvStream *stream; /** Used by connection lost callback */ int connectionValid; @@ -196,7 +197,6 @@ class ADAravis : public ADGenICam, epicsThreadRunable { asynStatus makeCameraObject(); asynStatus makeStreamObject(); - ArvStream *stream; ArvDevice *device; ArvGc *genicam; char *cameraName; @@ -221,13 +221,13 @@ GenICamFeature *ADAravis::createFeature(GenICamFeatureSet *set, static void aravisShutdown(void* arg) { ADAravis *pPvt = (ADAravis *) arg; GErrorHelper err; - ArvCamera *cam = pPvt->camera; + printf("ADAravis: Stopping %s... ", pPvt->portName); - arv_camera_stop_acquisition(cam, err.get()); + arv_camera_stop_acquisition(pPvt->camera, err.get()); pPvt->connectionValid = 0; epicsThreadSleep(0.1); - pPvt->camera = NULL; - g_object_unref(cam); + g_clear_object(&pPvt->stream); + g_clear_object(&pPvt->camera); printf("ADAravis: OK\n"); } @@ -313,8 +313,8 @@ ADAravis::ADAravis(const char *portName, const char *cameraName, int enableCachi : ADGenICam(portName, maxMemory, priority, stackSize), camera(NULL), - connectionValid(0), stream(NULL), + connectionValid(0), device(NULL), genicam(NULL), payload(0), From c3b3808bdb90699a5c76735ff593bc40763752ef Mon Sep 17 00:00:00 2001 From: Xiaoqiang Wang Date: Sat, 21 Oct 2023 22:12:10 +0200 Subject: [PATCH 2/3] update device list before making connections --- aravisApp/src/ADAravis.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aravisApp/src/ADAravis.cpp b/aravisApp/src/ADAravis.cpp index 15a6971..5405c73 100644 --- a/aravisApp/src/ADAravis.cpp +++ b/aravisApp/src/ADAravis.cpp @@ -526,6 +526,9 @@ asynStatus ADAravis::connectToCamera() { /* Tell areaDetector it is no longer acquiring */ setIntegerParam(ADAcquire, 0); + /* update device list */ + arv_update_device_list(); + /* make the camera object */ status = this->makeCameraObject(); if (status) return status; From 7b2deb792ae6975b77dff5bf29637c73080344a3 Mon Sep 17 00:00:00 2001 From: Xiaoqiang Wang Date: Mon, 23 Oct 2023 18:53:41 +0200 Subject: [PATCH 3/3] disable stream signal before destroy --- aravisApp/src/ADAravis.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/aravisApp/src/ADAravis.cpp b/aravisApp/src/ADAravis.cpp index 5405c73..65023ff 100644 --- a/aravisApp/src/ADAravis.cpp +++ b/aravisApp/src/ADAravis.cpp @@ -226,6 +226,7 @@ static void aravisShutdown(void* arg) { arv_camera_stop_acquisition(pPvt->camera, err.get()); pPvt->connectionValid = 0; epicsThreadSleep(0.1); + arv_stream_set_emit_signals (pPvt->stream, FALSE); g_clear_object(&pPvt->stream); g_clear_object(&pPvt->camera); printf("ADAravis: OK\n");