Check for available memory on linux too.
This commit is contained in:
parent
256e812401
commit
bd6b417cd8
@ -7,7 +7,22 @@
|
|||||||
#include "ImageProcessing.h"
|
#include "ImageProcessing.h"
|
||||||
#include "StAssert.h"
|
#include "StAssert.h"
|
||||||
|
|
||||||
#ifdef WIN32
|
#if defined(Q_OS_LINUX)
|
||||||
|
# include <fstream>
|
||||||
|
# include <limits>
|
||||||
|
qint64 getFreeMemory () {
|
||||||
|
std::string token;
|
||||||
|
std::ifstream file ("/proc/meminfo");
|
||||||
|
qint64 freeMem = 0;
|
||||||
|
while (file >> token) {
|
||||||
|
if (token == "MemFree:" || token == "Buffers:" || token == "Cached:") {
|
||||||
|
unsigned long mem = 0;
|
||||||
|
freeMem += (file >> mem) ? mem : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return freeMem * 1024;
|
||||||
|
}
|
||||||
|
#elif defined(Q_OS_WIN)
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
qint64 getFreeMemory () {
|
qint64 getFreeMemory () {
|
||||||
MEMORYSTATUSEX statex;
|
MEMORYSTATUSEX statex;
|
||||||
@ -128,16 +143,17 @@ Pix * prepareImage (const QImage &image, int preferredScale) {
|
|||||||
float scaleY = std::min (float (preferredScale), maxScaleY);
|
float scaleY = std::min (float (preferredScale), maxScaleY);
|
||||||
float scale = std::min (scaleX, scaleY);
|
float scale = std::min (scaleX, scaleY);
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
qint64 availableMemory = getFreeMemory () * 0.95;
|
qint64 availableMemory = getFreeMemory () * 0.95;
|
||||||
|
if (availableMemory > 0) {
|
||||||
qint32 actualSize = gray->w * gray->h * gray->d / 8;
|
qint32 actualSize = gray->w * gray->h * gray->d / 8;
|
||||||
float maxScaleMemory = float (availableMemory) / actualSize;
|
float maxScaleMemory = float (availableMemory) / actualSize;
|
||||||
scale = std::min (scale, maxScaleMemory);
|
scale = std::min (scale, maxScaleMemory);
|
||||||
#endif
|
|
||||||
|
|
||||||
scaled = pixScale (gray, scale, scale);
|
|
||||||
}
|
}
|
||||||
ST_ASSERT (scaled != NULL);
|
scaled = pixScale (gray, scale, scale);
|
||||||
|
if (scaled == NULL) {
|
||||||
|
scaled = gray;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (scaled != gray) {
|
if (scaled != gray) {
|
||||||
pixDestroy (&gray);
|
pixDestroy (&gray);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user