Get rid of raw pointers

This commit is contained in:
2023-06-17 21:47:06 +02:00
parent d9b1c253db
commit 9ffbdcee30
6 changed files with 38 additions and 48 deletions
+25 -31
View File
@@ -82,7 +82,7 @@ void printStarModel(int radius, const std::vector<double> &data, const Star &sta
std::cout << m.toStdString() << std::endl << std::endl;
}
bool loadRAW(const QString path, ImageInfoData &info, RawImage **image)
bool loadRAW(const QString path, ImageInfoData &info, std::shared_ptr<RawImage> &image)
{
if(!image)
return false;
@@ -115,8 +115,8 @@ bool loadRAW(const QString path, ImageInfoData &info, RawImage **image)
out[d++] = p;
}
}
*image = new RawImage(rawdata.sizes.width, rawdata.sizes.height, 1, RawImage::UINT16);
memcpy((*image)->data(), &out[0], sizeof(uint16_t)*d);
image = std::make_shared<RawImage>(rawdata.sizes.width, rawdata.sizes.height, 1, RawImage::UINT16);
memcpy(image->data(), &out[0], sizeof(uint16_t)*d);
}
QString shutterSpeed = QString::number(raw->imgdata.other.shutter);
@@ -191,11 +191,8 @@ int loadFITSHeader(fitsfile *file, ImageInfoData &info)
return status;
}
bool loadFITS(const QString path, ImageInfoData &info, RawImage **image)
bool loadFITS(const QString path, ImageInfoData &info, std::shared_ptr<RawImage> &image)
{
if(!image)
return false;
fitsfile *file;
int status = 0;
int type;
@@ -270,12 +267,12 @@ bool loadFITS(const QString path, ImageInfoData &info, RawImage **image)
}
if(img.channels() == 1)
*image = new RawImage(std::move(img));
image = std::make_shared<RawImage>(std::move(img));
else
*image = RawImage::fromPlanar(img);
image = RawImage::fromPlanar(img);
if(*image)
(*image)->convertToGLFormat();
if(image)
image->convertToGLFormat();
}
}
noload:
@@ -294,7 +291,7 @@ bool loadFITS(const QString path, ImageInfoData &info, RawImage **image)
return true;
}
bool loadXISF(const QString &path, ImageInfoData &info, RawImage **image)
bool loadXISF(const QString &path, ImageInfoData &info, std::shared_ptr<RawImage> &image)
{
try
{
@@ -332,18 +329,18 @@ bool loadXISF(const QString &path, ImageInfoData &info, RawImage **image)
if(xisfImage.channelCount() == 1)
{
*image = new RawImage(xisfImage.width(), xisfImage.height(), 1, type);
std::memcpy((*image)->data(), xisfImage.imageData(), xisfImage.imageDataSize());
image = std::make_shared<RawImage>(xisfImage.width(), xisfImage.height(), 1, type);
std::memcpy(image->data(), xisfImage.imageData(), xisfImage.imageDataSize());
}
else if(xisfImage.channelCount() == 3 || xisfImage.channelCount() == 4)
{
LibXISF::Image tmpImage = xisfImage;
tmpImage.convertPixelStorageTo(LibXISF::Image::Planar);
*image = RawImage::fromPlanar(tmpImage.imageData(), tmpImage.width(), tmpImage.height(), tmpImage.channelCount(), type);
image = RawImage::fromPlanar(tmpImage.imageData(), tmpImage.width(), tmpImage.height(), tmpImage.channelCount(), type);
}
if(*image)
if(image)
{
(*image)->convertToGLFormat();
image->convertToGLFormat();
return true;
}
}
@@ -361,7 +358,6 @@ void LoadRunable::run()
{
try
{
if(!m_thumbnail && !m_receiver->isCurrent())
{
return;
@@ -371,23 +367,23 @@ void LoadRunable::run()
QFileInfo finfo(m_file);
info.info.append({QObject::tr("Filename"), finfo.fileName()});
RawImage *rawImage = nullptr;
std::shared_ptr<RawImage> rawImage;
bool raw = false;
timer.start();
if(m_file.endsWith(".CR2", Qt::CaseInsensitive) || m_file.endsWith(".NEF", Qt::CaseInsensitive) || m_file.endsWith(".DNG", Qt::CaseInsensitive))
{
loadRAW(m_file, info, &rawImage);
loadRAW(m_file, info, rawImage);
raw = true;
qDebug() << "LoadRAW" << timer.elapsed();
}
else if(m_file.endsWith(".FIT", Qt::CaseInsensitive) || m_file.endsWith(".FITS", Qt::CaseInsensitive))
{
loadFITS(m_file, info, &rawImage);
loadFITS(m_file, info, rawImage);
qDebug() << "LoadFITS" << timer.elapsed();
}
else if(m_file.endsWith(".XISF", Qt::CaseInsensitive))
{
loadXISF(m_file, info, &rawImage);
loadXISF(m_file, info, rawImage);
qDebug() << "LoadXISF" << timer.elapsed();
}
else
@@ -407,7 +403,7 @@ void LoadRunable::run()
loadExifEntry(info, exif->ifd[EXIF_IFD_EXIF], EXIF_TAG_SHUTTER_SPEED_VALUE);
exif_data_free(exif);
}
rawImage = new RawImage(img);
rawImage = std::make_shared<RawImage>(img);
qDebug() << "LoadQImage" << timer.elapsed();
}
@@ -479,11 +475,11 @@ void LoadRunable::run()
if(rawImage)
{
rawImage->convertToThumbnail();
QMetaObject::invokeMethod(m_receiver, "thumbnailLoadFinish", Qt::QueuedConnection, Q_ARG(void*, rawImage));
QMetaObject::invokeMethod(m_receiver, "thumbnailLoadFinish", Qt::QueuedConnection, Q_ARG(std::shared_ptr<RawImage>, rawImage));
}
}
else
QMetaObject::invokeMethod(m_receiver, "imageLoaded", Qt::QueuedConnection, Q_ARG(void*, rawImage), Q_ARG(ImageInfoData, info));
QMetaObject::invokeMethod(m_receiver, "imageLoaded", Qt::QueuedConnection, Q_ARG(std::shared_ptr<RawImage>, rawImage), Q_ARG(ImageInfoData, info));
}
catch(std::exception e)
{
@@ -542,7 +538,7 @@ ConvertRunable::ConvertRunable(const QString &in, const QString &out, const QStr
{
}
void writeFITSImage(fitsfile *fw, RawImage *rawimage, ImageInfoData &imageinfo)
void writeFITSImage(fitsfile *fw, std::shared_ptr<RawImage> rawimage, ImageInfoData &imageinfo)
{
static QStringList skipKeys = {"SIMPLE", "BITPIX", "NAXIS", "NAXIS1", "NAXIS2", "NAXIS3", "BZERO", "BSCALE", "EXTEND"};
@@ -615,11 +611,11 @@ void writeFITSImage(fitsfile *fw, RawImage *rawimage, ImageInfoData &imageinfo)
void ConvertRunable::run()
{
ImageInfoData imageinfo;
RawImage *rawimage = nullptr;
std::shared_ptr<RawImage> rawimage;
if(m_infile.endsWith(".FITS", Qt::CaseInsensitive) || m_infile.endsWith(".FIT", Qt::CaseInsensitive))
loadFITS(m_infile, imageinfo, &rawimage);
loadFITS(m_infile, imageinfo, rawimage);
if(m_infile.endsWith(".XISF", Qt::CaseInsensitive))
loadXISF(m_infile, imageinfo, &rawimage);
loadXISF(m_infile, imageinfo, rawimage);
if(rawimage)
{
@@ -654,7 +650,6 @@ void ConvertRunable::run()
catch(LibXISF::Error &err)
{
qDebug() << "Failed to save XISF image" << err.what();
delete rawimage;
}
}
@@ -667,6 +662,5 @@ void ConvertRunable::run()
writeFITSImage(fw, rawimage, imageinfo);
fits_close_file(fw, &status);
}
delete rawimage;
}
}