From ba337e756c1c897580ffd293c9c5a41502edad2d Mon Sep 17 00:00:00 2001 From: Michal Gandor Date: Wed, 29 Jun 2022 13:58:17 +0200 Subject: [PATCH 1/3] Update: image type setting/getting --- src/IrisCamera.cpp | 89 ++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 47 deletions(-) diff --git a/src/IrisCamera.cpp b/src/IrisCamera.cpp index 36f0559..e4e006d 100644 --- a/src/IrisCamera.cpp +++ b/src/IrisCamera.cpp @@ -500,48 +500,43 @@ void Camera::getDetectorImageSize(Size& size) const void Camera::getImageType(ImageType& type) const { DEB_MEMBER_FUNCT(); - // enum int16 imageFormat; - // CameraContext* ctx = contexts[cSingleCamIndex]; - // if (IsParamAvailable(ctx->hcam, PARAM_BIT_DEPTH, "PARAM_BIT_DEPTH")) - // if (PV_OK != pl_get_param(ctx->hcam, PARAM_BIT_DEPTH, ATTR_CURRENT, (void*)& imageFormat)) { - // THROW_HW_ERROR(Error) << pl_error_code() << " Could not read CCD X resolution"; - // } - - // switch (imageFormat) - // { - // case - // PL_IMAGE_FORMAT_MONO16: - // PL_IMAGE_FORMAT_BAYER16: - // type = Bpp16; - - // case - // PL_IMAGE_FORMAT_MONO8: - // PL_IMAGE_FORMAT_BAYER8: - // type = Bpp8; - - // case - // PL_IMAGE_FORMAT_MONO24: - // PL_IMAGE_FORMAT_BAYER24: - // PL_IMAGE_FORMAT_RGB24: - // type = Bpp24; - - // // case PL_IMAGE_FORMAT_RGB48: - // // type = Bpp - - // // case PL_IMAGE_FORMAT_RGB72: - // // type = Bpp64; - - // case - // PL_IMAGE_FORMAT_MONO32: - // PL_IMAGE_FORMAT_BAYER32: - // type = Bpp32; - // break; + enum int16 imageFormat; + CameraContext* ctx = contexts[cSingleCamIndex]; + if (IsParamAvailable(ctx->hcam, PARAM_IMAGE_FORMAT, "PARAM_IMAGE_FORMAT")) + if (PV_OK != pl_get_param(ctx->hcam, PARAM_IMAGE_FORMAT, ATTR_CURRENT, (void*)& imageFormat)) { + THROW_HW_ERROR(Error) << pl_error_code() << " Could not read image format"; + } + + // switch between PL_IMAGE_FORMATS enum + switch (imageFormat) + { + case + PL_IMAGE_FORMAT_MONO16: + PL_IMAGE_FORMAT_BAYER16: + type = Bpp16; + + case + PL_IMAGE_FORMAT_MONO8: + PL_IMAGE_FORMAT_BAYER8: + type = Bpp8; + + case + PL_IMAGE_FORMAT_MONO24: + PL_IMAGE_FORMAT_BAYER24: + PL_IMAGE_FORMAT_RGB24: + type = Bpp24; + + case + PL_IMAGE_FORMAT_MONO32: + PL_IMAGE_FORMAT_BAYER32: + type = Bpp32; + break; - // default: - // THROW_HW_ERROR(Error) << "Unsupported Pixel Format: " << imageFormat; - // break; - // } - type = ImageType::Bpp16; + default: + // values of PL_IMAGE_FORMAT_RGB48, PL_IMAGE_FORMAT_RGB72 does not seem to be supported in lima + THROW_HW_ERROR(NotSupported) << "Unsupported Pixel Format: " << imageFormat; + break; + } } // // ----------------------------------------------------- @@ -569,14 +564,14 @@ void Camera::setImageType(ImageType type) CameraContext* ctx = contexts[cSingleCamIndex]; uns16 isAccessable; - if (PV_OK != pl_get_param(ctx->hcam, PARAM_IMAGE_FORMAT, ATTR_ACCESS, (void*)& isAccessable)) { + if (PV_OK != pl_get_param(ctx->hcam, PARAM_IMAGE_FORMAT, ATTR_AVAIL, (void*)& isAccessable)) { THROW_HW_ERROR(Error) << pl_error_code() << " Could not read image format parameter"; - } - if (PL_PARAM_ACCESS::ACC_READ_WRITE == isAccessable || PL_PARAM_ACCESS::ACC_WRITE_ONLY == isAccessable) { - if (PV_OK != pl_get_param(ctx->hcam, PARAM_IMAGE_FORMAT, ATTR_CURRENT, (void*)&imageType)) { - THROW_HW_ERROR(Error) << pl_error_code() << " Could not set image type"; - } } + + if (!isAccessable) { + THROW_HW_ERROR(Error) << "Cannot access image format parameter"; + } + ctx->imageFormat = imageType; } void Camera::getDetectorType(std::string& type) const -- GitLab From c7ff9a02eb455fcdb4b6a6de28e5a1b9dad2195b Mon Sep 17 00:00:00 2001 From: Michal Gandor Date: Wed, 20 Jul 2022 13:08:50 +0200 Subject: [PATCH 2/3] Fix: image type setting --- src/IrisCamera.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/IrisCamera.cpp b/src/IrisCamera.cpp index 394371e..b731db4 100644 --- a/src/IrisCamera.cpp +++ b/src/IrisCamera.cpp @@ -503,7 +503,7 @@ void Camera::getImageType(ImageType& type) const CameraContext* ctx = contexts[cSingleCamIndex]; if (IsParamAvailable(ctx->hcam, PARAM_IMAGE_FORMAT, "PARAM_IMAGE_FORMAT")) if (PV_OK != pl_get_param(ctx->hcam, PARAM_IMAGE_FORMAT, ATTR_CURRENT, (void*)& imageFormat)) { - THROW_HW_ERROR(Error) << pl_error_code() << " Could not read image format"; + _printError("Could not read image format"); } // switch between PL_IMAGE_FORMATS enum @@ -512,30 +512,34 @@ void Camera::getImageType(ImageType& type) const case PL_IMAGE_FORMAT_MONO16: PL_IMAGE_FORMAT_BAYER16: - type = Bpp16; + type = ImageType::Bpp16; + break; case PL_IMAGE_FORMAT_MONO8: PL_IMAGE_FORMAT_BAYER8: - type = Bpp8; + type = ImageType::Bpp8; + break; case PL_IMAGE_FORMAT_MONO24: PL_IMAGE_FORMAT_BAYER24: PL_IMAGE_FORMAT_RGB24: - type = Bpp24; + type = ImageType::Bpp24; + break; case PL_IMAGE_FORMAT_MONO32: PL_IMAGE_FORMAT_BAYER32: - type = Bpp32; - break; + type = ImageType::Bpp32; + break; default: // values of PL_IMAGE_FORMAT_RGB48, PL_IMAGE_FORMAT_RGB72 does not seem to be supported in lima - THROW_HW_ERROR(NotSupported) << "Unsupported Pixel Format: " << imageFormat; + _printError("Unsupported Pixel Format: " + std::to_string(imageFormat)); break; } + type = ImageType::Bpp16; } // // ----------------------------------------------------- -- GitLab From 246c5939c93e60243ab96cfa93a1a37013190919 Mon Sep 17 00:00:00 2001 From: Michal Gandor Date: Wed, 20 Jul 2022 13:10:27 +0200 Subject: [PATCH 3/3] Fix: error handling --- src/IrisCamera.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/IrisCamera.cpp b/src/IrisCamera.cpp index b731db4..cbcd38d 100644 --- a/src/IrisCamera.cpp +++ b/src/IrisCamera.cpp @@ -552,17 +552,17 @@ void Camera::setImageType(ImageType type) int32 imageType; switch (type) { - case Bpp8: - imageType = PL_IMAGE_FORMAT_MONO8; - case Bpp24: - imageType = PL_IMAGE_FORMAT_MONO24; - case Bpp16: - imageType = PL_IMAGE_FORMAT_MONO16; - break; - - default: - _printError("Cannot change the pixel format of the camera!"); - break; + case Bpp8: + imageType = PL_IMAGE_FORMAT_MONO8; + case Bpp24: + imageType = PL_IMAGE_FORMAT_MONO24; + case Bpp16: + imageType = PL_IMAGE_FORMAT_MONO16; + break; + + default: + _printError("Cannot change the pixel format of the camera!"); + break; } CameraContext* ctx = contexts[cSingleCamIndex]; @@ -578,7 +578,7 @@ void Camera::setImageType(ImageType type) } if (!isAccessable) { - THROW_HW_ERROR(Error) << "Cannot access image format parameter"; + _printError("Cannot access image format parameter"); } ctx->imageFormat = imageType; } -- GitLab