Rewrite LibXISF to get rid of Qt
This commit is contained in:
+24
-9
@@ -1,10 +1,25 @@
|
||||
#include <iostream>
|
||||
#include <random>
|
||||
#include <QElapsedTimer>
|
||||
#include <chrono>
|
||||
#include "libxisf.h"
|
||||
|
||||
using namespace LibXISF;
|
||||
|
||||
class Timer
|
||||
{
|
||||
std::chrono::high_resolution_clock clock;
|
||||
std::chrono::high_resolution_clock::time_point startTime;
|
||||
public:
|
||||
void start()
|
||||
{
|
||||
startTime = clock.now();
|
||||
}
|
||||
uint64_t elapsed()
|
||||
{
|
||||
return std::chrono::duration_cast<std::chrono::milliseconds>(clock.now() - startTime).count();
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
void benchmarkType(float avg, float stdDev)
|
||||
{
|
||||
@@ -20,14 +35,14 @@ void benchmarkType(float avg, float stdDev)
|
||||
ptr[i] = normalDist(gen);
|
||||
}
|
||||
|
||||
QElapsedTimer timer;
|
||||
Timer timer;
|
||||
double baseSize;
|
||||
|
||||
{
|
||||
timer.start();
|
||||
XISFWriter writer;
|
||||
writer.writeImage(image);
|
||||
QByteArray xisfImage;
|
||||
ByteArray xisfImage;
|
||||
writer.save(xisfImage);
|
||||
baseSize = xisfImage.size();
|
||||
std::cout << "No compression \tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: "
|
||||
@@ -38,7 +53,7 @@ void benchmarkType(float avg, float stdDev)
|
||||
timer.start();
|
||||
XISFWriter writer;
|
||||
writer.writeImage(image);
|
||||
QByteArray xisfImage;
|
||||
ByteArray xisfImage;
|
||||
writer.save(xisfImage);
|
||||
std::cout << "Zlib compression \tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: "
|
||||
<< size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl;
|
||||
@@ -48,7 +63,7 @@ void benchmarkType(float avg, float stdDev)
|
||||
timer.start();
|
||||
XISFWriter writer;
|
||||
writer.writeImage(image);
|
||||
QByteArray xisfImage;
|
||||
ByteArray xisfImage;
|
||||
writer.save(xisfImage);
|
||||
std::cout << "LZ4 compression \tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: "
|
||||
<< size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl;
|
||||
@@ -58,7 +73,7 @@ void benchmarkType(float avg, float stdDev)
|
||||
timer.start();
|
||||
XISFWriter writer;
|
||||
writer.writeImage(image);
|
||||
QByteArray xisfImage;
|
||||
ByteArray xisfImage;
|
||||
writer.save(xisfImage);
|
||||
std::cout << "LZ4HC compression \tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: "
|
||||
<< size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl;
|
||||
@@ -69,7 +84,7 @@ void benchmarkType(float avg, float stdDev)
|
||||
timer.start();
|
||||
XISFWriter writer;
|
||||
writer.writeImage(image);
|
||||
QByteArray xisfImage;
|
||||
ByteArray xisfImage;
|
||||
writer.save(xisfImage);
|
||||
std::cout << "Zlib compression SH \tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: "
|
||||
<< size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl;
|
||||
@@ -79,7 +94,7 @@ void benchmarkType(float avg, float stdDev)
|
||||
timer.start();
|
||||
XISFWriter writer;
|
||||
writer.writeImage(image);
|
||||
QByteArray xisfImage;
|
||||
ByteArray xisfImage;
|
||||
writer.save(xisfImage);
|
||||
std::cout << "LZ4 compression SH \tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: "
|
||||
<< size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl;
|
||||
@@ -89,7 +104,7 @@ void benchmarkType(float avg, float stdDev)
|
||||
timer.start();
|
||||
XISFWriter writer;
|
||||
writer.writeImage(image);
|
||||
QByteArray xisfImage;
|
||||
ByteArray xisfImage;
|
||||
writer.save(xisfImage);
|
||||
std::cout << "LZ4HC compression SH\tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: "
|
||||
<< size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl;
|
||||
|
||||
+9
-6
@@ -54,15 +54,18 @@ int main(int argc, char **argv)
|
||||
m(0, 2) = 2;
|
||||
m(1, 0) = 10;
|
||||
image.addProperty(Property("UI16Matrix", m));
|
||||
std::tm tm = {12, 22, 23, 1, 2, 2023, 0, 0, 0, 0, 0};
|
||||
image.addProperty(Property("TimeObs", tm));
|
||||
image.addFITSKeyword({"RA", "226.9751163116387", "Right ascension of the center of the image (deg)"});
|
||||
image.addFITSKeyword({"DEC", "62.02302376908295", "Declination of the center of the image (deg)"});
|
||||
image.setCompression(DataBlock::Zlib, 9);
|
||||
writer.writeImage(image);
|
||||
|
||||
image.setImageType(Image::Flat);
|
||||
image.setCompression(DataBlock::LZ4);
|
||||
image.setByteshuffling(true);
|
||||
writer.writeImage(image);
|
||||
QByteArray data;
|
||||
ByteArray data;
|
||||
std::cout << "Saving image" << std::endl;
|
||||
writer.save(data);
|
||||
|
||||
@@ -71,19 +74,19 @@ int main(int argc, char **argv)
|
||||
reader.open(data);
|
||||
const Image &img0 = reader.getImage(0);
|
||||
const Image &img1 = reader.getImage(1);
|
||||
auto &prop0 = img0.imageProperties();
|
||||
|
||||
TEST(image.imageProperties().size() != img0.imageProperties().size(), "Property count doesn't match");
|
||||
//TEST(image.imageDataSize() != img0._dataBlock.data, "Images doesn't match");
|
||||
//TEST(img0._dataBlock.data != img1._dataBlock.data, "Images doesn't match");
|
||||
TEST(std::memcmp(image.imageData(), img0.imageData(), image.imageDataSize()), "Images doesn't match");
|
||||
TEST(std::memcmp(image.imageData(), img1.imageData(), image.imageDataSize()), "Images doesn't match");
|
||||
}
|
||||
else if(argc == 2 && argv[1] == QString("bench"))
|
||||
else if(argc == 2 && std::strcmp(argv[1], "bench") == 0)
|
||||
{
|
||||
benchmark();
|
||||
}
|
||||
else
|
||||
{
|
||||
LibXISF::XISFReader reader;
|
||||
reader.open(QString(argv[1]));
|
||||
reader.open(argv[1]);
|
||||
TEST(reader.imagesCount() != 1, "No image");
|
||||
|
||||
const LibXISF::Image &image = reader.getImage(0);
|
||||
|
||||
Reference in New Issue
Block a user