APT demod: save image in image worker

This commit is contained in:
f4exb 2021-04-22 23:37:10 +02:00
parent aac8f6fe2c
commit 6b106f21ad
3 changed files with 61 additions and 2 deletions

View File

@ -651,19 +651,25 @@ int APTDemod::webapiActionsPost(
{ {
SWGSDRangel::SWGAPTDemodActions_los* los = swgAPTDemodActions->getLos(); SWGSDRangel::SWGAPTDemodActions_los* los = swgAPTDemodActions->getLos();
QString *satelliteName = los->getSatelliteName(); QString *satelliteName = los->getSatelliteName();
if (satelliteName != nullptr) if (satelliteName != nullptr)
{ {
if (matchSatellite(*satelliteName)) if (matchSatellite(*satelliteName))
{ {
// Save image // Save image
if (m_settings.m_autoSave) if (m_settings.m_autoSave)
saveImageToDisk(); {
APTDemodImageWorker::MsgSaveImageToDisk *msg = APTDemodImageWorker::MsgSaveImageToDisk::create();
m_imageWorker->getInputMessageQueue()->push(msg);
}
// Disable decoder // Disable decoder
APTDemodSettings settings = m_settings; APTDemodSettings settings = m_settings;
settings.m_decodeEnabled = false; settings.m_decodeEnabled = false;
m_inputMessageQueue.push(MsgConfigureAPTDemod::create(settings, false)); m_inputMessageQueue.push(MsgConfigureAPTDemod::create(settings, false));
if (m_guiMessageQueue)
if (m_guiMessageQueue) {
m_guiMessageQueue->push(MsgConfigureAPTDemod::create(settings, false)); m_guiMessageQueue->push(MsgConfigureAPTDemod::create(settings, false));
}
} }
return 202; return 202;

View File

@ -18,10 +18,14 @@
#include <algorithm> #include <algorithm>
#include <QTime>
#include <QDebug>
#include "aptdemod.h" #include "aptdemod.h"
#include "aptdemodimageworker.h" #include "aptdemodimageworker.h"
MESSAGE_CLASS_DEFINITION(APTDemodImageWorker::MsgConfigureAPTDemodImageWorker, Message) MESSAGE_CLASS_DEFINITION(APTDemodImageWorker::MsgConfigureAPTDemodImageWorker, Message)
MESSAGE_CLASS_DEFINITION(APTDemodImageWorker::MsgSaveImageToDisk, Message)
APTDemodImageWorker::APTDemodImageWorker() : APTDemodImageWorker::APTDemodImageWorker() :
m_messageQueueToGUI(nullptr), m_messageQueueToGUI(nullptr),
@ -90,6 +94,11 @@ bool APTDemodImageWorker::handleMessage(const Message& cmd)
applySettings(cfg.getSettings(), cfg.getForce()); applySettings(cfg.getSettings(), cfg.getForce());
return true; return true;
} }
else if (MsgSaveImageToDisk::match(cmd))
{
saveImageToDisk();
return true;
}
else if (APTDemod::MsgPixels::match(cmd)) else if (APTDemod::MsgPixels::match(cmd))
{ {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
@ -259,6 +268,32 @@ QImage APTDemodImageWorker::extractImage(QImage image)
} }
} }
void APTDemodImageWorker::saveImageToDisk()
{
QStringList imageTypes;
QImage image = processImage(imageTypes);
if (image.height() >= m_settings.m_autoSaveMinScanLines)
{
QString filename;
QDateTime datetime = QDateTime::currentDateTime();
filename = QString("apt_%1_%2.png").arg(m_satelliteName).arg(datetime.toString("yyyyMMdd_hhmm"));
if (!m_settings.m_autoSavePath.isEmpty())
{
if (m_settings.m_autoSavePath.endsWith('/')) {
filename = m_settings.m_autoSavePath + filename;
} else {
filename = m_settings.m_autoSavePath + '/' + filename;
}
}
if (!image.save(filename)) {
qCritical() << "Failed to save APT image to: " << filename;
}
}
}
void APTDemodImageWorker::copyImage(apt_image_t *dst, apt_image_t *src) void APTDemodImageWorker::copyImage(apt_image_t *dst, apt_image_t *src)
{ {
dst->nrow = src->nrow; dst->nrow = src->nrow;

View File

@ -57,6 +57,23 @@ public:
{ } { }
}; };
class MsgSaveImageToDisk : public Message {
MESSAGE_CLASS_DECLARATION
public:
static MsgSaveImageToDisk* create()
{
return new MsgSaveImageToDisk();
}
private:
MsgSaveImageToDisk() :
Message()
{
}
};
APTDemodImageWorker(); APTDemodImageWorker();
~APTDemodImageWorker(); ~APTDemodImageWorker();
void reset(); void reset();
@ -87,6 +104,7 @@ private:
void resetDecoder(); void resetDecoder();
void processPixels(const float *pixels); void processPixels(const float *pixels);
void sendImageToGUI(); void sendImageToGUI();
void saveImageToDisk();
QImage processImage(QStringList& imageTypes); QImage processImage(QStringList& imageTypes);
QImage extractImage(QImage image); QImage extractImage(QImage image);