diff --git a/src/commons/configuration.cpp b/src/commons/configuration.cpp index ae34dfc..2eadd7f 100644 --- a/src/commons/configuration.cpp +++ b/src/commons/configuration.cpp @@ -97,7 +97,6 @@ define_setting(max_display_fps, int, 30) define_setting(max_display_fps_recording, int, 15) define_setting(limit_fps, bool, true) define_setting(debayer, bool, true) -define_setting(opengl, bool, true) define_setting(limit_fps_recording, bool, true) define_setting_enum(recording_limit_type, Configuration::RecordingLimit, Configuration::FramesNumber) diff --git a/src/commons/configuration.h b/src/commons/configuration.h index fc4826f..5f70e5e 100644 --- a/src/commons/configuration.h +++ b/src/commons/configuration.h @@ -41,7 +41,6 @@ class Configuration : public QObject declare_setting(limit_fps_recording, bool) declare_setting(debayer, bool) declare_setting(limit_fps, bool) - declare_setting(opengl, bool) declare_setting(buffered_output, bool ) declare_setting(max_memory_usage, long long ) diff --git a/src/drivers/zwo_asi/asiimagingworker.cpp b/src/drivers/zwo_asi/asiimagingworker.cpp index 9577ac0..0e60212 100644 --- a/src/drivers/zwo_asi/asiimagingworker.cpp +++ b/src/drivers/zwo_asi/asiimagingworker.cpp @@ -20,7 +20,9 @@ #include "zwoexception.h" #include #include "commons/frame.h" +#include +#define FRAMES_BUFFER 5 using namespace std; DPTR_IMPL(ASIImagingWorker) { @@ -35,6 +37,12 @@ DPTR_IMPL(ASIImagingWorker) { int getCVImageType(); Frame::ColorFormat color_format; Frame::ColorFormat colorFormat() const; +#ifdef FRAMES_BUFFER + array frames; +#endif + uint8_t current_frame = 0; + FramePtr new_frame() const; + uint8_t next_index(); }; ASIImagingWorker::ASIImagingWorker(const QRect& roi, int bin, const ASI_CAMERA_INFO& info, ASI_IMG_TYPE format) @@ -59,6 +67,22 @@ ASIImagingWorker::ASIImagingWorker(const QRect& roi, int bin, const ASI_CAMERA_I d->color_format = Frame::Mono; } calc_exposure_timeout(); +#ifdef FRAMES_BUFFER + generate(begin(d->frames), end(d->frames), bind(&Private::new_frame, d.get())); +#endif +} + +FramePtr ASIImagingWorker::Private::new_frame() const { + // ASI CAMs are little endian + return make_shared( format == ASI_IMG_RAW16 ? 16 : 8, colorFormat(), QSize{roi.width(), roi.height()}, Frame::LittleEndian); +} + +uint8_t ASIImagingWorker::Private::next_index() { +#ifdef FRAMES_BUFFER + return (current_frame++) % frames.size(); +#else + return 0; +#endif } ASIImagingWorker::~ASIImagingWorker() @@ -83,8 +107,11 @@ void ASIImagingWorker::calc_exposure_timeout() FramePtr ASIImagingWorker::shoot() { - // ASI CAMs are little endian - auto frame = make_shared( d->format == ASI_IMG_RAW16 ? 16 : 8, d->colorFormat(), QSize{d->roi.width(), d->roi.height()}, Frame::LittleEndian); +#ifdef FRAMES_BUFFER + FramePtr frame = d->frames[d->next_index()]; +#else + FramePtr frame = d->new_frame(); +#endif ASI_CHECK << ASIGetVideoData(d->info.CameraID, frame->data(), frame->size(), d->exposure_timeout) << "Capture frame"; return frame; } diff --git a/src/planetaryimager_mainwindow.cpp b/src/planetaryimager_mainwindow.cpp index 15f5935..513924e 100644 --- a/src/planetaryimager_mainwindow.cpp +++ b/src/planetaryimager_mainwindow.cpp @@ -163,15 +163,6 @@ PlanetaryImagerMainWindow::PlanetaryImagerMainWindow( d->ui->image->layout()->setMargin(0); d->ui->image->layout()->setSpacing(0); d->ui->image->layout()->addWidget(d->image_widget = new ZoomableImage(false)); -#ifdef HAVE_QT5_OPENGL // TODO: make configuration item - if(d->planetaryImager->configuration().opengl()) - { - if (!QGLFormat::hasOpenGL()) - qWarning() << "Window system does not support OpenGL."; - else - d->image_widget->setOpenGL(); - } -#endif d->image_widget->scene()->setBackgroundBrush(QBrush{Qt::black, Qt::Dense4Pattern}); connect(d->image_widget, &ZoomableImage::zoomLevelChanged, d->statusbar_info_widget, &StatusBarInfoWidget::zoom); d->statusbar_info_widget->zoom(d->image_widget->zoomLevel()); diff --git a/src/widgets/configurationdialog.cpp b/src/widgets/configurationdialog.cpp index 8699a50..74811d5 100644 --- a/src/widgets/configurationdialog.cpp +++ b/src/widgets/configurationdialog.cpp @@ -43,16 +43,10 @@ ConfigurationDialog::~ConfigurationDialog() ConfigurationDialog::ConfigurationDialog(Configuration &configuration, QWidget* parent) : QDialog(parent), dptr(configuration, this) { - static bool original_opengl_setting = d->configuration.opengl(); d->ui.reset(new Ui::ConfigurationDialog); d->ui->setupUi(this); -#ifndef HAVE_QT5_OPENGL - d->ui->opengl->hide(); -#endif connect(d->ui->debayer, &QCheckBox::toggled, bind(&Configuration::set_debayer, &d->configuration, _1)); - connect(d->ui->opengl, &QCheckBox::toggled, bind(&Configuration::set_opengl, &d->configuration, _1)); d->ui->debayer->setChecked(d->configuration.debayer()); - d->ui->opengl->setChecked(d->configuration.opengl()); d->ui->pauseShouldStopRecordingTimeout->setChecked(d->configuration.recording_pause_stops_timer()); connect(d->ui->pauseShouldStopRecordingTimeout, &QCheckBox::toggled, bind(&Configuration::set_recording_pause_stops_timer, &d->configuration, _1)); @@ -174,11 +168,6 @@ ConfigurationDialog::ConfigurationDialog(Configuration &configuration, QWidget* } d->ui->video_codec->setCurrentIndex(d->ui->video_codec->findData(d->configuration.video_codec())); connect(d->ui->video_codec, F_PTR(QComboBox, activated, int), [=](int index){ d->configuration.set_video_codec(d->ui->video_codec->itemData(index).toString()); }); - connect(this, &QDialog::accepted, [this] { - if(original_opengl_setting != d->configuration.opengl()) { - QMessageBox::information(this, tr("Restart required"), tr("You changed the OpenGL setting. Please restart PlanetaryImage for this change to take effect")); - } - }); d->ui->pixelDataEndianess->addItem("camera default", static_cast(Configuration::CaptureEndianess::CameraDefault)); d->ui->pixelDataEndianess->addItem("little-endian", static_cast(Configuration::CaptureEndianess::Little)); diff --git a/src/widgets/configurationdialog.ui b/src/widgets/configurationdialog.ui index 3f39642..a4d2fcf 100644 --- a/src/widgets/configurationdialog.ui +++ b/src/widgets/configurationdialog.ui @@ -27,7 +27,7 @@ - 2 + 0 @@ -40,16 +40,17 @@ Image Display - - - - - 1 - 0 - + + + + FPS + + + + - Set FPS limit while recording + Debayer images (colour camera only in raw mode) @@ -60,16 +61,16 @@ - - + + 1 0 - - Set FPS limit while not recording + + 1 @@ -86,27 +87,33 @@ - - + + 1 0 - - 1 + + Set FPS limit while not recording - - + + + + + 1 + 0 + + - FPS + Set FPS limit while recording - + Qt::Vertical @@ -119,20 +126,6 @@ - - - - Debayer images (colour camera only in raw mode) - - - - - - - Use OpenGL rendering (requires restart) - - -