Get rid of raw pointers
This commit is contained in:
+4
-8
@@ -81,24 +81,20 @@ void Image::clearThumbnail()
|
|||||||
m_thumbnail.reset();
|
m_thumbnail.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Image::imageLoaded(void *rawImage, ImageInfoData info)
|
void Image::imageLoaded(std::shared_ptr<RawImage> rawImage, ImageInfoData info)
|
||||||
{
|
{
|
||||||
m_loading = false;
|
m_loading = false;
|
||||||
if(!m_released)
|
if(!m_released)
|
||||||
{
|
{
|
||||||
m_rawImage.reset(static_cast<RawImage*>(rawImage));
|
m_rawImage = rawImage;
|
||||||
m_info = info;
|
m_info = info;
|
||||||
emit pixmapLoaded(this);
|
emit pixmapLoaded(this);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
delete static_cast<RawImage*>(rawImage);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Image::thumbnailLoadFinish(void *rawImage)
|
void Image::thumbnailLoadFinish(std::shared_ptr<RawImage> rawImage)
|
||||||
{
|
{
|
||||||
m_thumbnail.reset(static_cast<RawImage*>(rawImage));
|
m_thumbnail = rawImage;
|
||||||
if(m_thumbnail)
|
if(m_thumbnail)
|
||||||
emit thumbnailLoaded(this);
|
emit thumbnailLoaded(this);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -21,7 +21,7 @@ class Image : public QObject
|
|||||||
bool m_current;
|
bool m_current;
|
||||||
int m_number;
|
int m_number;
|
||||||
std::shared_ptr<RawImage> m_rawImage;
|
std::shared_ptr<RawImage> m_rawImage;
|
||||||
std::unique_ptr<RawImage> m_thumbnail;
|
std::shared_ptr<RawImage> m_thumbnail;
|
||||||
QString m_name;
|
QString m_name;
|
||||||
ImageInfoData m_info;
|
ImageInfoData m_info;
|
||||||
ImageRingList *m_ringList;
|
ImageRingList *m_ringList;
|
||||||
@@ -41,8 +41,8 @@ signals:
|
|||||||
void pixmapLoaded(Image *ptr);
|
void pixmapLoaded(Image *ptr);
|
||||||
void thumbnailLoaded(Image *ptr);
|
void thumbnailLoaded(Image *ptr);
|
||||||
protected slots:
|
protected slots:
|
||||||
void imageLoaded(void *rawImage, ImageInfoData info);
|
void imageLoaded(std::shared_ptr<RawImage> rawImage, ImageInfoData info);
|
||||||
void thumbnailLoadFinish(void *rawImage);
|
void thumbnailLoadFinish(std::shared_ptr<RawImage> rawImage);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::shared_ptr<Image> ImagePtr;
|
typedef std::shared_ptr<Image> ImagePtr;
|
||||||
|
|||||||
+25
-31
@@ -82,7 +82,7 @@ void printStarModel(int radius, const std::vector<double> &data, const Star &sta
|
|||||||
std::cout << m.toStdString() << std::endl << std::endl;
|
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)
|
if(!image)
|
||||||
return false;
|
return false;
|
||||||
@@ -115,8 +115,8 @@ bool loadRAW(const QString path, ImageInfoData &info, RawImage **image)
|
|||||||
out[d++] = p;
|
out[d++] = p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*image = new RawImage(rawdata.sizes.width, rawdata.sizes.height, 1, RawImage::UINT16);
|
image = std::make_shared<RawImage>(rawdata.sizes.width, rawdata.sizes.height, 1, RawImage::UINT16);
|
||||||
memcpy((*image)->data(), &out[0], sizeof(uint16_t)*d);
|
memcpy(image->data(), &out[0], sizeof(uint16_t)*d);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString shutterSpeed = QString::number(raw->imgdata.other.shutter);
|
QString shutterSpeed = QString::number(raw->imgdata.other.shutter);
|
||||||
@@ -191,11 +191,8 @@ int loadFITSHeader(fitsfile *file, ImageInfoData &info)
|
|||||||
return status;
|
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;
|
fitsfile *file;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
int type;
|
int type;
|
||||||
@@ -270,12 +267,12 @@ bool loadFITS(const QString path, ImageInfoData &info, RawImage **image)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(img.channels() == 1)
|
if(img.channels() == 1)
|
||||||
*image = new RawImage(std::move(img));
|
image = std::make_shared<RawImage>(std::move(img));
|
||||||
else
|
else
|
||||||
*image = RawImage::fromPlanar(img);
|
image = RawImage::fromPlanar(img);
|
||||||
|
|
||||||
if(*image)
|
if(image)
|
||||||
(*image)->convertToGLFormat();
|
image->convertToGLFormat();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
noload:
|
noload:
|
||||||
@@ -294,7 +291,7 @@ bool loadFITS(const QString path, ImageInfoData &info, RawImage **image)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool loadXISF(const QString &path, ImageInfoData &info, RawImage **image)
|
bool loadXISF(const QString &path, ImageInfoData &info, std::shared_ptr<RawImage> &image)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -332,18 +329,18 @@ bool loadXISF(const QString &path, ImageInfoData &info, RawImage **image)
|
|||||||
|
|
||||||
if(xisfImage.channelCount() == 1)
|
if(xisfImage.channelCount() == 1)
|
||||||
{
|
{
|
||||||
*image = new RawImage(xisfImage.width(), xisfImage.height(), 1, type);
|
image = std::make_shared<RawImage>(xisfImage.width(), xisfImage.height(), 1, type);
|
||||||
std::memcpy((*image)->data(), xisfImage.imageData(), xisfImage.imageDataSize());
|
std::memcpy(image->data(), xisfImage.imageData(), xisfImage.imageDataSize());
|
||||||
}
|
}
|
||||||
else if(xisfImage.channelCount() == 3 || xisfImage.channelCount() == 4)
|
else if(xisfImage.channelCount() == 3 || xisfImage.channelCount() == 4)
|
||||||
{
|
{
|
||||||
LibXISF::Image tmpImage = xisfImage;
|
LibXISF::Image tmpImage = xisfImage;
|
||||||
tmpImage.convertPixelStorageTo(LibXISF::Image::Planar);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -361,7 +358,6 @@ void LoadRunable::run()
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
if(!m_thumbnail && !m_receiver->isCurrent())
|
if(!m_thumbnail && !m_receiver->isCurrent())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -371,23 +367,23 @@ void LoadRunable::run()
|
|||||||
QFileInfo finfo(m_file);
|
QFileInfo finfo(m_file);
|
||||||
info.info.append({QObject::tr("Filename"), finfo.fileName()});
|
info.info.append({QObject::tr("Filename"), finfo.fileName()});
|
||||||
|
|
||||||
RawImage *rawImage = nullptr;
|
std::shared_ptr<RawImage> rawImage;
|
||||||
bool raw = false;
|
bool raw = false;
|
||||||
timer.start();
|
timer.start();
|
||||||
if(m_file.endsWith(".CR2", Qt::CaseInsensitive) || m_file.endsWith(".NEF", Qt::CaseInsensitive) || m_file.endsWith(".DNG", Qt::CaseInsensitive))
|
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;
|
raw = true;
|
||||||
qDebug() << "LoadRAW" << timer.elapsed();
|
qDebug() << "LoadRAW" << timer.elapsed();
|
||||||
}
|
}
|
||||||
else if(m_file.endsWith(".FIT", Qt::CaseInsensitive) || m_file.endsWith(".FITS", Qt::CaseInsensitive))
|
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();
|
qDebug() << "LoadFITS" << timer.elapsed();
|
||||||
}
|
}
|
||||||
else if(m_file.endsWith(".XISF", Qt::CaseInsensitive))
|
else if(m_file.endsWith(".XISF", Qt::CaseInsensitive))
|
||||||
{
|
{
|
||||||
loadXISF(m_file, info, &rawImage);
|
loadXISF(m_file, info, rawImage);
|
||||||
qDebug() << "LoadXISF" << timer.elapsed();
|
qDebug() << "LoadXISF" << timer.elapsed();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -407,7 +403,7 @@ void LoadRunable::run()
|
|||||||
loadExifEntry(info, exif->ifd[EXIF_IFD_EXIF], EXIF_TAG_SHUTTER_SPEED_VALUE);
|
loadExifEntry(info, exif->ifd[EXIF_IFD_EXIF], EXIF_TAG_SHUTTER_SPEED_VALUE);
|
||||||
exif_data_free(exif);
|
exif_data_free(exif);
|
||||||
}
|
}
|
||||||
rawImage = new RawImage(img);
|
rawImage = std::make_shared<RawImage>(img);
|
||||||
qDebug() << "LoadQImage" << timer.elapsed();
|
qDebug() << "LoadQImage" << timer.elapsed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -479,11 +475,11 @@ void LoadRunable::run()
|
|||||||
if(rawImage)
|
if(rawImage)
|
||||||
{
|
{
|
||||||
rawImage->convertToThumbnail();
|
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
|
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)
|
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"};
|
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()
|
void ConvertRunable::run()
|
||||||
{
|
{
|
||||||
ImageInfoData imageinfo;
|
ImageInfoData imageinfo;
|
||||||
RawImage *rawimage = nullptr;
|
std::shared_ptr<RawImage> rawimage;
|
||||||
if(m_infile.endsWith(".FITS", Qt::CaseInsensitive) || m_infile.endsWith(".FIT", Qt::CaseInsensitive))
|
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))
|
if(m_infile.endsWith(".XISF", Qt::CaseInsensitive))
|
||||||
loadXISF(m_infile, imageinfo, &rawimage);
|
loadXISF(m_infile, imageinfo, rawimage);
|
||||||
|
|
||||||
if(rawimage)
|
if(rawimage)
|
||||||
{
|
{
|
||||||
@@ -654,7 +650,6 @@ void ConvertRunable::run()
|
|||||||
catch(LibXISF::Error &err)
|
catch(LibXISF::Error &err)
|
||||||
{
|
{
|
||||||
qDebug() << "Failed to save XISF image" << err.what();
|
qDebug() << "Failed to save XISF image" << err.what();
|
||||||
delete rawimage;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -667,6 +662,5 @@ void ConvertRunable::run()
|
|||||||
writeFITSImage(fw, rawimage, imageinfo);
|
writeFITSImage(fw, rawimage, imageinfo);
|
||||||
fits_close_file(fw, &status);
|
fits_close_file(fw, &status);
|
||||||
}
|
}
|
||||||
delete rawimage;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -37,7 +37,7 @@ int MainWindow::socketPair[2] = {0, 0};
|
|||||||
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||||
{
|
{
|
||||||
qRegisterMetaType<ImageInfoData>("ImageInfoData");
|
qRegisterMetaType<ImageInfoData>("ImageInfoData");
|
||||||
qRegisterMetaType<RawImage*>("RawImage");
|
qRegisterMetaType<std::shared_ptr<RawImage>>("std::shared_ptr<RawImage>");
|
||||||
|
|
||||||
SettingsDialog::loadSettings();
|
SettingsDialog::loadSettings();
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -496,14 +496,14 @@ void RawImage::downscaleTo(uint32_t size)
|
|||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
RawImage *RawImage::fromPlanar(const RawImage &img)
|
std::shared_ptr<RawImage> RawImage::fromPlanar(const RawImage &img)
|
||||||
{
|
{
|
||||||
return RawImage::fromPlanar(img.data(), img.width(), img.height(), img.channels(), img.type());
|
return RawImage::fromPlanar(img.data(), img.width(), img.height(), img.channels(), img.type());
|
||||||
}
|
}
|
||||||
|
|
||||||
RawImage *RawImage::fromPlanar(const void *pixels, uint32_t w, uint32_t h, uint32_t ch, RawImage::DataType type)
|
std::shared_ptr<RawImage> RawImage::fromPlanar(const void *pixels, uint32_t w, uint32_t h, uint32_t ch, RawImage::DataType type)
|
||||||
{
|
{
|
||||||
RawImage *image = new RawImage(w, h, ch, type);
|
std::shared_ptr<RawImage> image = std::make_shared<RawImage>(w, h, ch, type);
|
||||||
size_t size = w * h;
|
size_t size = w * h;
|
||||||
size_t ch2 = ch == 1 ? 1 : 4;
|
size_t ch2 = ch == 1 ? 1 : 4;
|
||||||
auto convert = [&](auto *in, auto *out, auto alpha)
|
auto convert = [&](auto *in, auto *out, auto alpha)
|
||||||
|
|||||||
+2
-2
@@ -98,8 +98,8 @@ public:
|
|||||||
void scaleToUnit();
|
void scaleToUnit();
|
||||||
void downscaleTo(uint32_t size);
|
void downscaleTo(uint32_t size);
|
||||||
|
|
||||||
static RawImage* fromPlanar(const RawImage &img);
|
static std::shared_ptr<RawImage> fromPlanar(const RawImage &img);
|
||||||
static RawImage* fromPlanar(const void *pixels, uint32_t w, uint32_t h, uint32_t ch, DataType type);
|
static std::shared_ptr<RawImage> fromPlanar(const void *pixels, uint32_t w, uint32_t h, uint32_t ch, DataType type);
|
||||||
static size_t typeSize(DataType type);
|
static size_t typeSize(DataType type);
|
||||||
std::vector<RawImage> split() const;
|
std::vector<RawImage> split() const;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user