minor readframefromrxr using unique ptrs

This commit is contained in:
maliakal_d 2020-09-29 14:37:43 +02:00
parent b421a73c3d
commit 3a3c5b0a6e

View File

@ -465,8 +465,8 @@ void DetectorImpl::readFrameFromReceiver() {
} }
bool data = false; bool data = false;
bool completeImage = false; bool completeImage = false;
char *image = nullptr; std::unique_ptr<char[]> image{nullptr};
char *multiframe = nullptr; std::unique_ptr<char[]> multiframe{nullptr};
char *multigappixels = nullptr; char *multigappixels = nullptr;
int multisize = 0; int multisize = 0;
// only first message header // only first message header
@ -484,9 +484,10 @@ void DetectorImpl::readFrameFromReceiver() {
// reset data // reset data
data = false; data = false;
if (multiframe != nullptr) { if (multiframe != nullptr) {
memset(multiframe, 0xFF, multisize); memset(multiframe.get(), 0xFF, multisize);
} }
completeImage = true;
completeImage = (numRunning == (int)zmqSocket.size());
// get each frame // get each frame
for (unsigned int isocket = 0; isocket < zmqSocket.size(); ++isocket) { for (unsigned int isocket = 0; isocket < zmqSocket.size(); ++isocket) {
@ -503,6 +504,7 @@ void DetectorImpl::readFrameFromReceiver() {
// parse error, version error or end of acquisition for // parse error, version error or end of acquisition for
// socket // socket
runningList[isocket] = false; runningList[isocket] = false;
completeImage = false;
--numRunning; --numRunning;
continue; continue;
} }
@ -512,9 +514,9 @@ void DetectorImpl::readFrameFromReceiver() {
// allocate // allocate
size = zHeader.imageSize; size = zHeader.imageSize;
multisize = size * zmqSocket.size(); multisize = size * zmqSocket.size();
image = new char[size]; image = sls::make_unique<char[]>(size);
multiframe = new char[multisize]; multiframe = sls::make_unique<char[]>(multisize);
memset(multiframe, 0xFF, multisize); memset(multiframe.get(), 0xFF, multisize);
// dynamic range // dynamic range
dynamicRange = zHeader.dynamicRange; dynamicRange = zHeader.dynamicRange;
bytesPerPixel = (float)dynamicRange / 8; bytesPerPixel = (float)dynamicRange / 8;
@ -576,7 +578,7 @@ void DetectorImpl::readFrameFromReceiver() {
// DATA // DATA
data = true; data = true;
zmqSocket[isocket]->ReceiveData(isocket, image, size); zmqSocket[isocket]->ReceiveData(isocket, image.get(), size);
// creating multi image // creating multi image
{ {
@ -596,18 +598,18 @@ void DetectorImpl::readFrameFromReceiver() {
if (eiger && (flippedDataX != 0U)) { if (eiger && (flippedDataX != 0U)) {
for (uint32_t i = 0; i < nPixelsY; ++i) { for (uint32_t i = 0; i < nPixelsY; ++i) {
memcpy((multiframe) + memcpy((multiframe.get()) +
((yoffset + (nPixelsY - 1 - i)) * ((yoffset + (nPixelsY - 1 - i)) *
rowoffset) + rowoffset) +
xoffset, xoffset,
image + (i * singledetrowoffset), image.get() + (i * singledetrowoffset),
singledetrowoffset); singledetrowoffset);
} }
} else { } else {
for (uint32_t i = 0; i < nPixelsY; ++i) { for (uint32_t i = 0; i < nPixelsY; ++i) {
memcpy((multiframe) + ((yoffset + i) * rowoffset) + memcpy((multiframe.get()) +
xoffset, ((yoffset + i) * rowoffset) + xoffset,
image + (i * singledetrowoffset), image.get() + (i * singledetrowoffset),
singledetrowoffset); singledetrowoffset);
} }
} }
@ -623,12 +625,13 @@ void DetectorImpl::readFrameFromReceiver() {
// send data to callback // send data to callback
if (data) { if (data) {
char *callbackImage = multiframe; char *callbackImage = multiframe.get();
int imagesize = multisize; int imagesize = multisize;
if (gapPixels) { if (gapPixels) {
int n = InsertGapPixels(multiframe, multigappixels, quadEnable, int n = InsertGapPixels(multiframe.get(), multigappixels,
dynamicRange, nDetPixelsX, nDetPixelsY); quadEnable, dynamicRange, nDetPixelsX,
nDetPixelsY);
callbackImage = multigappixels; callbackImage = multigappixels;
imagesize = n; imagesize = n;
} }
@ -659,8 +662,6 @@ void DetectorImpl::readFrameFromReceiver() {
} }
// free resources // free resources
delete[] image;
delete[] multiframe;
delete[] multigappixels; delete[] multigappixels;
} }